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);
+ }
}