diff --git a/package-lock.json b/package-lock.json index df7be44db..8dcd5cc65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -427,6 +427,14 @@ "resolved": "https://registry.npmjs.org/@mat-datetimepicker/moment/-/moment-1.0.1.tgz", "integrity": "sha1-YYUwbd/QeTBlq9XbBjKpQZgjdPQ=" }, + "@ngstack/electron": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@ngstack/electron/-/electron-0.1.0.tgz", + "integrity": "sha512-uqBNDkeATuZQm1eVXjB3rok9zFLMaJzfNl1tVnlqMwfaGA9FIe90nquvIZnL/scHbno89weGGxg4JeHLgsRMLA==", + "requires": { + "tslib": "^1.7.1" + } + }, "@ngtools/json-schema": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz", diff --git a/package.json b/package.json index 7660f963a..a94d76c2d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build:prod": "npm run server-versions && ng build --prod", "build:dev": "npm run server-versions && ng build", "build:tomcat": "npm run server-versions && ng build --base-href ./", + "build:electron": "npm run server-versions && ng build --base-href ./", "test": "ng test --code-coverage", "test:ci": "ng test --code-coverage --single-run --no-progress && cat ./coverage/lcov.info | ./node_modules/.bin/codacy-coverage && rm -rf ./coverage", "lint": "ng lint", @@ -40,6 +41,7 @@ "@angular/router": "5.1.1", "@mat-datetimepicker/core": "1.0.1", "@mat-datetimepicker/moment": "1.0.1", + "@ngstack/electron": "0.1.0", "@ngx-translate/core": "9.1.1", "alfresco-js-api": "2.4.0-31a7fc6e5d58dc8bf202ef9a80bc993c9f48fe18", "core-js": "2.5.3", diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c08f4cb1e..61548951c 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -23,9 +23,13 @@ * along with Alfresco. If not, see . */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, EventEmitter } from '@angular/core'; import { Router, ActivatedRoute, NavigationEnd } from '@angular/router'; -import { TranslationService, PageTitleService, UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; +import { + TranslationService, PageTitleService, UserPreferencesService, AppConfigService, + FileModel, UploadService +} from '@alfresco/adf-core'; +import { ElectronService } from '@ngstack/electron'; @Component({ selector: 'app-root', @@ -39,7 +43,9 @@ export class AppComponent implements OnInit { private pageTitle: PageTitleService, private translateService: TranslationService, preferences: UserPreferencesService, - config: AppConfigService) { + config: AppConfigService, + private electronService: ElectronService, + private uploadService: UploadService) { // TODO: remove once ADF 2.3.0 is out (needs bug fixes) preferences.defaults.supportedPageSizes = config.get('pagination.supportedPageSizes'); preferences.defaults.paginationSize = config.get('pagination.size'); @@ -69,5 +75,25 @@ export class AppComponent implements OnInit { pageTitle.setTitle(data.title || ''); } }); + + this.electronService.on('app:navigateRoute', (event: any, ...args: string[]) => { + this.router.navigate([...args]); + }); + + this.electronService.on('app:upload', (event: any, files: any[] = []) => { + const models = files.map(fileInfo => { + const file = new File([fileInfo.data], fileInfo.name); + + return new FileModel(file, { + path: fileInfo.path, + parentId: fileInfo.parentId + }); + }); + + if (models.length > 0) { + this.uploadService.addToQueue(...models); + this.uploadService.uploadFilesInTheQueue(new EventEmitter()); + } + }); } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6738d4bff..519b51d76 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -30,6 +30,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { TRANSLATION_PROVIDER, CoreModule } from '@alfresco/adf-core'; import { ContentModule } from '@alfresco/adf-content-services'; +import { ElectronModule } from '@ngstack/electron'; import { AppComponent } from './app.component'; import { APP_ROUTES } from './app.routes'; @@ -82,7 +83,8 @@ import { SearchComponent } from './components/search/search.component'; MatDialogModule, MatInputModule, CoreModule, - ContentModule + ContentModule, + ElectronModule ], declarations: [ AppComponent, diff --git a/src/app/components/sidenav/sidenav.component.html b/src/app/components/sidenav/sidenav.component.html index 2dc6c0af3..174af8aa7 100644 --- a/src/app/components/sidenav/sidenav.component.html +++ b/src/app/components/sidenav/sidenav.component.html @@ -35,6 +35,7 @@ + + @@ -79,4 +94,4 @@ - \ No newline at end of file + diff --git a/src/app/components/sidenav/sidenav.component.spec.ts b/src/app/components/sidenav/sidenav.component.spec.ts index 07e53b2fc..4d48dbca5 100644 --- a/src/app/components/sidenav/sidenav.component.spec.ts +++ b/src/app/components/sidenav/sidenav.component.spec.ts @@ -38,6 +38,7 @@ import { BrowsingFilesService } from '../../common/services/browsing-files.servi import { NodePermissionService } from '../../common/services/node-permission.service'; import { SidenavComponent } from './sidenav.component'; +import { ElectronModule } from '@ngstack/electron'; describe('SidenavComponent', () => { let fixture; @@ -61,7 +62,8 @@ describe('SidenavComponent', () => { MatMenuModule, MatSnackBarModule, TranslateModule.forRoot(), - RouterTestingModule + RouterTestingModule, + ElectronModule ], declarations: [ SidenavComponent diff --git a/src/app/components/sidenav/sidenav.component.ts b/src/app/components/sidenav/sidenav.component.ts index 84fe64749..385c96df6 100644 --- a/src/app/components/sidenav/sidenav.component.ts +++ b/src/app/components/sidenav/sidenav.component.ts @@ -31,6 +31,7 @@ import { AppConfigService, NotificationService } from '@alfresco/adf-core'; import { BrowsingFilesService } from '../../common/services/browsing-files.service'; import { NodePermissionService } from '../../common/services/node-permission.service'; +import { ElectronService } from '@ngstack/electron'; @Component({ selector: 'app-sidenav', @@ -40,6 +41,7 @@ import { NodePermissionService } from '../../common/services/node-permission.ser export class SidenavComponent implements OnInit, OnDestroy { @Input() showLabel: boolean; + isDesktopApp = false; node: MinimalNodeEntryEntity = null; navigation = []; @@ -49,7 +51,8 @@ export class SidenavComponent implements OnInit, OnDestroy { private notificationService: NotificationService, private browsingFilesService: BrowsingFilesService, private appConfig: AppConfigService, - public permission: NodePermissionService + public permission: NodePermissionService, + private electronService: ElectronService ) {} ngOnInit() { @@ -59,6 +62,8 @@ export class SidenavComponent implements OnInit, OnDestroy { this.browsingFilesService.onChangeParent .subscribe((node: MinimalNodeEntryEntity) => this.node = node) ]); + + this.isDesktopApp = this.electronService.isDesktopApp; } openSnackMessage(event: any) { @@ -78,4 +83,8 @@ export class SidenavComponent implements OnInit, OnDestroy { return Object.keys(data).map((key) => data[key]); } + + uploadFolderDesktop() { + this.electronService.send('core:uploadFolder', this.node.id); + } }