From aec68526727f57032b5fa110d10b3ac02d4713f5 Mon Sep 17 00:00:00 2001 From: AleksanderSklorz <115619721+AleksanderSklorz@users.noreply.github.com> Date: Sun, 27 Aug 2023 10:00:35 +0200 Subject: [PATCH] =?UTF-8?q?[ACS-5281]=20Changed=20editable=20state=20of=20?= =?UTF-8?q?metadata=20content=20based=20on=20change=20o=E2=80=A6=20(#3400)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ACS-5281 Changed editable state of metadata content based on change of file lock state * ACS-5281 Updated versions * ACS-5281 Reverted change * ACS-5281 Upgrade version * ACS-5281 Small correction * ACS-5281 Fixed e2e --- .../suites/info-drawer/comments.test.ts | 3 +- package-lock.json | 203 ++++++------------ package.json | 14 +- .../ms-office/src/actions/aos.actions.ts | 4 +- .../ms-office/src/aos-extension.service.ts | 12 +- .../ms-office/src/effects/aos.effects.spec.ts | 4 +- projects/aca-content/package.json | 8 +- .../lib/components/preview.component.spec.ts | 11 +- .../location-link/location-link.component.ts | 6 +- .../favorites/favorites.component.ts | 10 +- .../components/files/files.component.spec.ts | 6 +- .../lib/components/files/files.component.ts | 18 +- .../comments-tab/comments-tab.component.ts | 4 +- .../metadata-tab.component.spec.ts | 127 ++++++++++- .../metadata-tab/metadata-tab.component.ts | 42 +++- .../versions-tab/versions-tab.component.ts | 4 +- .../recent-files/recent-files.component.ts | 4 +- .../search-results-row.component.ts | 4 +- .../search-results.component.ts | 4 +- .../shared-files/shared-files.component.ts | 4 +- .../toggle-edit-offline.component.ts | 4 +- .../lib/directives/document-list.directive.ts | 6 +- .../content-management.service.spec.ts | 6 +- .../services/content-management.service.ts | 53 ++--- .../lib/services/node-actions.service.spec.ts | 12 +- .../src/lib/services/node-actions.service.ts | 47 ++-- .../src/lib/services/node-template.service.ts | 6 +- .../src/lib/store/effects/download.effects.ts | 4 +- .../src/lib/store/effects/upload.effects.ts | 4 +- .../src/lib/testing/app-testing.module.ts | 11 +- .../lib/components/viewer/viewer.component.ts | 4 +- projects/aca-shared/package.json | 8 +- .../document-base-page.component.ts | 8 +- .../document-base-page.service.ts | 6 +- .../document-base-page.spec.ts | 26 ++- .../info-drawer/info-drawer.component.ts | 6 +- .../src/lib/services/app.service.spec.ts | 11 +- .../src/lib/services/content-api.service.ts | 21 +- .../store/src/actions/library.actions.ts | 4 +- .../store/src/actions/node.actions.ts | 40 ++-- .../store/src/actions/router.actions.ts | 6 +- .../store/src/actions/viewer.actions.ts | 10 +- .../store/src/effects/router.effects.ts | 8 +- .../repo-client/apis/sites/sites-api.ts | 12 +- .../repo-client/apis/upload/upload-api.ts | 4 +- 45 files changed, 455 insertions(+), 364 deletions(-) diff --git a/e2e/protractor/suites/info-drawer/comments.test.ts b/e2e/protractor/suites/info-drawer/comments.test.ts index 320c682c0..aede26c4b 100755 --- a/e2e/protractor/suites/info-drawer/comments.test.ts +++ b/e2e/protractor/suites/info-drawer/comments.test.ts @@ -23,7 +23,6 @@ */ import { AdminActions, UserActions, LoginPage, BrowsingPage, RepoClient, InfoDrawer, Utils } from '@alfresco/aca-testing-shared'; -const moment = require('moment'); import { BrowserActions } from '@alfresco/adf-testing'; describe('Comments', () => { @@ -215,7 +214,7 @@ describe('Comments', () => { expect(await commentsTab.isCommentDisplayed()).toBe(true, `Comment is not displayed`); expect(await commentsTab.getCommentText()).toBe(commentFile1Entry.content, 'Incorrect comment text'); expect(await commentsTab.getCommentUserName()).toBe(`${username} ${username}`, 'Incorrect comment user'); - expect(await commentsTab.getCommentTime()).toBe(moment(commentFile1Entry.createdAt).fromNow(), 'Incorrect comment created time'); + expect(await commentsTab.getCommentTime()).toBe('less than a minute ago', 'Incorrect comment created time'); expect(await commentsTab.isCommentUserAvatarDisplayed()).toBe(true, 'User avatar not displayed'); }); }); diff --git a/package-lock.json b/package-lock.json index f35c2d144..fac1d72ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "hasInstallScript": true, "license": "LGPL-3.0", "dependencies": { - "@alfresco/adf-content-services": "6.3.0-5833590093", - "@alfresco/adf-core": "6.3.0-5833590093", - "@alfresco/adf-extensions": "6.3.0-5833590093", - "@alfresco/eslint-plugin-eslint-angular": "6.3.0-5833590093", - "@alfresco/js-api": "6.3.0-1104", + "@alfresco/adf-content-services": "6.3.0-5977252204", + "@alfresco/adf-core": "6.3.0-5977252204", + "@alfresco/adf-extensions": "6.3.0-5977252204", + "@alfresco/eslint-plugin-eslint-angular": "6.3.0-5977252204", + "@alfresco/js-api": "6.3.0-1172", "@angular/animations": "14.1.3", "@angular/cdk": "14.1.3", "@angular/common": "14.1.3", @@ -46,8 +46,8 @@ "zone.js": "0.11.8" }, "devDependencies": { - "@alfresco/adf-cli": "6.3.0-5833590093", - "@alfresco/adf-testing": "6.3.0-5833590093", + "@alfresco/adf-cli": "6.3.0-5977252204", + "@alfresco/adf-testing": "6.3.0-5977252204", "@angular-devkit/build-angular": "14.2.11", "@angular-devkit/core": "14.1.2", "@angular-devkit/schematics": "14.1.2", @@ -120,12 +120,12 @@ "dev": true }, "node_modules/@alfresco/adf-cli": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-6.3.0-5833590093.tgz", - "integrity": "sha512-X0h8jCF1SZGkr3qgbGbY27Tu2wVJgahyCn/4gyGKYW+10bxt6pC3ESkXdKHd9f7SWfmu/lmMdDpw/9ZUAbIrWg==", + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/adf-cli/-/adf-cli-6.3.0-5977252204.tgz", + "integrity": "sha512-Qx+Qc6tcmdQlubsz0VCpPvsYPOD/w6OLQHMrORFDdjc+Xol5zREsOgEuL0X6rxX5z3cZmxDoAflK1VV2188myA==", "dev": true, "dependencies": { - "@alfresco/js-api": ">=6.3.0-1070", + "@alfresco/js-api": ">=6.3.0-1108", "commander": "^6.2.1", "ejs": "^3.1.9", "license-checker": "^25.0.1", @@ -140,15 +140,15 @@ } }, "node_modules/@alfresco/adf-content-services": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-6.3.0-5833590093.tgz", - "integrity": "sha512-Lz0vyi1nzlnbxIXlBJwrfDZj81JM806HbVuHgikq/mHMCRT1Q4lA2martf74pMIOCJ820PxN+iTKDdoGgoqPDA==", + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-6.3.0-5977252204.tgz", + "integrity": "sha512-fE6wYdeda+m+gYCTy+sE3UVPL2+ZJ+OF1H60SkLj9urKUPjZ7w+kf+PPi0BGmXUGT5eiECBQ8MtN/yxR66HsCg==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/adf-core": ">=6.3.0-5833590093", - "@alfresco/js-api": ">=6.3.0-1070", + "@alfresco/adf-core": ">=6.3.0-5977252204", + "@alfresco/js-api": ">=6.3.0-1108", "@angular/animations": ">=14.1.3", "@angular/cdk": ">=14.1.2", "@angular/common": ">=14.1.3", @@ -164,9 +164,9 @@ } }, "node_modules/@alfresco/adf-core": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-6.3.0-5833590093.tgz", - "integrity": "sha512-KPNNAtttdX+q0g/tUg3zi8nfieY6aRTR9Zp8o4ELjk5tIiS4SusPjcTe9wwZBUFXi85FzNu+/UJyLLgmcls8HQ==", + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-6.3.0-5977252204.tgz", + "integrity": "sha512-3Di1lbtzAP2oKdOsR6Eit3DUNhpuAfp+LNegqXVNAofZxwB6aMdmbp1BhoNTQkxnUTk92yuACXBDWQ1xpXmOqA==", "dependencies": { "angular-oauth2-oidc": "^13.0.1", "angular-oauth2-oidc-jwks": "^13.0.1", @@ -174,8 +174,8 @@ "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/adf-extensions": ">=6.3.0-5833590093", - "@alfresco/js-api": ">=6.3.0-1070", + "@alfresco/adf-extensions": ">=6.3.0-5977252204", + "@alfresco/js-api": ">=6.3.0-1108", "@angular/animations": ">=14.1.3", "@angular/cdk": ">=14.1.2", "@angular/common": ">=14.1.3", @@ -193,25 +193,25 @@ } }, "node_modules/@alfresco/adf-extensions": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-6.3.0-5833590093.tgz", - "integrity": "sha512-KzvU9XEaM1C5tImEFoJP4bzQ8OqGqdqqCRuQJzbj3aQMoze1EtQOR3wtRpmEeaDsr9L63pBlJR09W9Hl6fjShg==", + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/adf-extensions/-/adf-extensions-6.3.0-5977252204.tgz", + "integrity": "sha512-YjF87ZYiBwxlbw1NDzenZAQC9IiBjGs0Z2+7K6wgnDlXDzBAGx8uMyGVZLk0zxXVlhU4iQxs7vGD2nSoqlEgKw==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@alfresco/js-api": ">=6.3.0-1070", + "@alfresco/js-api": ">=6.3.0-1108", "@angular/common": ">=14.1.3", "@angular/core": ">=14.1.3" } }, "node_modules/@alfresco/adf-testing": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-6.3.0-5833590093.tgz", - "integrity": "sha512-6OwB6QPHfuRqoH4lx/37uRGLyobtbTrKtj+FavaMc+6KSZFSZicC3RME+cbBmwbJ2JQ0OSkJv7+WYKVhTNdElw==", + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/adf-testing/-/adf-testing-6.3.0-5977252204.tgz", + "integrity": "sha512-itA2H/FzkNdmFJrwzkPFujWv7KaOCUL+xz86X5Vc7noPdKGbxt01f6h9WrnABXVLPqXZwBed/5xf7asLYtjCkQ==", "dev": true, "dependencies": { - "@alfresco/js-api": "6.3.0-1070", + "@alfresco/js-api": "6.3.0-1108", "@angular/compiler": "14.1.3", "@angular/core": "14.1.3", "rxjs": "6.6.6", @@ -219,80 +219,33 @@ "zone.js": "~0.11.4" }, "peerDependencies": { - "@alfresco/js-api": ">=6.3.0-1070" + "@alfresco/js-api": ">=6.3.0-1108" } }, "node_modules/@alfresco/adf-testing/node_modules/@alfresco/js-api": { - "version": "6.3.0-1070", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-6.3.0-1070.tgz", - "integrity": "sha512-5E2TOA3Vsyw+HnAlSLSdXBL23wuOn9wh0+lX6lMqGDEFvbXGXedgxz8artrGFR6WOWy2ql364u6IX474R22e2A==", + "version": "6.3.0-1108", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-6.3.0-1108.tgz", + "integrity": "sha512-U7YlT6HVsO14OdTi4g0l4MckgugioSfHCUnoAk0KVDQWk/j5CKl+GGIq71mf2ram2L3o9XB/oNhbFSo2cfilTA==", "dev": true, - "dependencies": { - "event-emitter": "^0.3.5", - "superagent": "^6.0.0", - "tslib": "^2.0.0" - } - }, - "node_modules/@alfresco/eslint-plugin-eslint-angular": { - "version": "6.3.0-5833590093", - "resolved": "https://registry.npmjs.org/@alfresco/eslint-plugin-eslint-angular/-/eslint-plugin-eslint-angular-6.3.0-5833590093.tgz", - "integrity": "sha512-Pm32JJrLGW1fsJeLWjc4Un+u8mMWb3+UmrgCQEhH269Yxx3ZbB75QyPdc78JsFJRenCgaAUQexISsmn4E+OgcA==" - }, - "node_modules/@alfresco/js-api": { - "version": "6.3.0-1104", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-6.3.0-1104.tgz", - "integrity": "sha512-vzotSd8FB9xOCNyeVI6wn6wVlBumA9ku+uJf8CDTaLHEx57OCOWbhGMvf/D7Gkvz2bezyWwSwheND/28I4E7kQ==", "dependencies": { "event-emitter": "^0.3.5", "superagent": "^8.0.9", "tslib": "^2.6.1" } }, - "node_modules/@alfresco/js-api/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "node_modules/@alfresco/eslint-plugin-eslint-angular": { + "version": "6.3.0-5977252204", + "resolved": "https://registry.npmjs.org/@alfresco/eslint-plugin-eslint-angular/-/eslint-plugin-eslint-angular-6.3.0-5977252204.tgz", + "integrity": "sha512-On5w7ZSYnyOf2NOA9rc3756S0Ms0GNAaIhBUFQkBQ7n5nHm5Y17yI9YpPh3n4Pag8IRH4lQSzZvfhiqocmtv0g==" }, - "node_modules/@alfresco/js-api/node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "node_modules/@alfresco/js-api": { + "version": "6.3.0-1172", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-6.3.0-1172.tgz", + "integrity": "sha512-JIf5qTijNp+RfC6R1iav88k2W8Sn0KRdONhN712+cwFRIBBT8Jx8oYHssyWQQdojHdI7dhi8bkaegpUIM1UWxw==", "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/@alfresco/js-api/node_modules/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" + "event-emitter": "^0.3.5", + "superagent": "^8.0.9", + "tslib": "^2.6.1" } }, "node_modules/@ampproject/remapping": { @@ -9766,20 +9719,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/axobject-query": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", @@ -11495,9 +11434,9 @@ } }, "node_modules/cropperjs": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.13.tgz", - "integrity": "sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.0.tgz", + "integrity": "sha512-BzLU/ecrfsbflwxgu+o7sQTrTlo52pVRZkTVrugEK5uyj6n8qKwAHP4s6+DWHqlXLqQ5B9+cM2MKeXiNfAsF6Q==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -15424,10 +15363,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -15438,11 +15376,15 @@ } }, "node_modules/formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } @@ -28756,26 +28698,23 @@ } }, "node_modules/superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dev": true, + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", "dependencies": { "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" }, "engines": { - "node": ">= 7.0.0" + "node": ">=6.4.0 <13 || >=14" } }, "node_modules/supports-color": { diff --git a/package.json b/package.json index 22f3dd62e..68278a6a5 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,11 @@ }, "private": true, "dependencies": { - "@alfresco/adf-content-services": "6.3.0-5833590093", - "@alfresco/adf-core": "6.3.0-5833590093", - "@alfresco/adf-extensions": "6.3.0-5833590093", - "@alfresco/eslint-plugin-eslint-angular": "6.3.0-5833590093", - "@alfresco/js-api": "6.3.0-1104", + "@alfresco/adf-content-services": "6.3.0-5977252204", + "@alfresco/adf-core": "6.3.0-5977252204", + "@alfresco/adf-extensions": "6.3.0-5977252204", + "@alfresco/eslint-plugin-eslint-angular": "6.3.0-5977252204", + "@alfresco/js-api": "6.3.0-1172", "@angular/animations": "14.1.3", "@angular/cdk": "14.1.3", "@angular/common": "14.1.3", @@ -69,8 +69,8 @@ "zone.js": "0.11.8" }, "devDependencies": { - "@alfresco/adf-cli": "6.3.0-5833590093", - "@alfresco/adf-testing": "6.3.0-5833590093", + "@alfresco/adf-cli": "6.3.0-5977252204", + "@alfresco/adf-testing": "6.3.0-5977252204", "@angular-devkit/build-angular": "14.2.11", "@angular-devkit/core": "14.1.2", "@angular-devkit/schematics": "14.1.2", diff --git a/projects/aca-content/ms-office/src/actions/aos.actions.ts b/projects/aca-content/ms-office/src/actions/aos.actions.ts index 77b5c7d6e..d5042330d 100755 --- a/projects/aca-content/ms-office/src/actions/aos.actions.ts +++ b/projects/aca-content/ms-office/src/actions/aos.actions.ts @@ -23,11 +23,11 @@ */ import { Action } from '@ngrx/store'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; export const AOS_ACTION = 'AOS_ACTION'; export class AosAction implements Action { readonly type = AOS_ACTION; - constructor(public payload: MinimalNodeEntryEntity) {} + constructor(public payload: Node) {} } diff --git a/projects/aca-content/ms-office/src/aos-extension.service.ts b/projects/aca-content/ms-office/src/aos-extension.service.ts index 40de9c911..cab09e55f 100644 --- a/projects/aca-content/ms-office/src/aos-extension.service.ts +++ b/projects/aca-content/ms-office/src/aos-extension.service.ts @@ -25,11 +25,11 @@ /* cspell:disable */ import { AppConfigService, AuthenticationService, LogService, NotificationService } from '@alfresco/adf-core'; import { Injectable } from '@angular/core'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { getFileExtension, supportedExtensions } from '@alfresco/aca-shared/rules'; export interface IAosEditOnlineService { - onActionEditOnlineAos(node: MinimalNodeEntryEntity): void; + onActionEditOnlineAos(node: Node): void; } @Injectable({ @@ -43,7 +43,7 @@ export class AosEditOnlineService implements IAosEditOnlineService { private logService: LogService ) {} - onActionEditOnlineAos(node: MinimalNodeEntryEntity): void { + onActionEditOnlineAos(node: Node): void { if (node && this.isFile(node) && node.properties) { if (node.isLocked) { // const checkedOut = node.aspectNames.find( @@ -88,7 +88,7 @@ export class AosEditOnlineService implements IAosEditOnlineService { return fileExtension && supportedExtensions[fileExtension]; } - private triggerEditOnlineAos(node: MinimalNodeEntryEntity): void { + private triggerEditOnlineAos(node: Node): void { const aosHost = this.appConfigService.get('aosHost'); let url: string; const pathElements = (node.path?.elements || []).map((segment) => segment.name); @@ -139,13 +139,13 @@ export class AosEditOnlineService implements IAosEditOnlineService { }, 500); } - private isFile(node: MinimalNodeEntryEntity): boolean { + private isFile(node: Node): boolean { const implicitFile = (node as any).nodeId || (node as any).guid; return !!implicitFile || node.isFile; } - private getNodeId(node: MinimalNodeEntryEntity): string { + private getNodeId(node: Node): string { return (node as any).nodeId || (node as any).guid || node.id; } } diff --git a/projects/aca-content/ms-office/src/effects/aos.effects.spec.ts b/projects/aca-content/ms-office/src/effects/aos.effects.spec.ts index 1e0c59dec..58bed703f 100755 --- a/projects/aca-content/ms-office/src/effects/aos.effects.spec.ts +++ b/projects/aca-content/ms-office/src/effects/aos.effects.spec.ts @@ -22,7 +22,7 @@ * from Hyland Software. If not, see . */ -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { TestBed } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { Observable, of } from 'rxjs'; @@ -60,7 +60,7 @@ describe('AosEffects', () => { it('should call onActionEditOnlineAos on AOS_ACTION', () => { const onActionEditOnlineAosSpy = spyOn(aosEditOnlineService, 'onActionEditOnlineAos'); - const payload = new MinimalNodeEntryEntity(); + const payload = new Node(); const action = new AosAction(payload); aosActions$ = of(action); diff --git a/projects/aca-content/package.json b/projects/aca-content/package.json index 766abed60..b33e1deb4 100644 --- a/projects/aca-content/package.json +++ b/projects/aca-content/package.json @@ -5,10 +5,10 @@ "peerDependencies": { "@angular/common": "^14.1.0", "@angular/core": "^14.1.0", - "@alfresco/adf-core": "^6.3.0-5833590093", - "@alfresco/adf-content-services": "^6.3.0-5833590093", - "@alfresco/adf-extensions": "^6.3.0-5833590093", - "@alfresco/js-api": ">=6.3.0-1104", + "@alfresco/adf-core": "^6.3.0-5977252204", + "@alfresco/adf-content-services": "^6.3.0-5977252204", + "@alfresco/adf-extensions": "^6.3.0-5977252204", + "@alfresco/js-api": ">=6.3.0-1172", "@angular/animations": "^14.1.3", "@angular/cdk": "^14.1.3", "@angular/forms": "^14.1.3", diff --git a/projects/aca-content/preview/src/lib/components/preview.component.spec.ts b/projects/aca-content/preview/src/lib/components/preview.component.spec.ts index f1d254c56..7ac2af91e 100644 --- a/projects/aca-content/preview/src/lib/components/preview.component.spec.ts +++ b/projects/aca-content/preview/src/lib/components/preview.component.spec.ts @@ -39,7 +39,7 @@ import { PreviewComponent } from './preview.component'; import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; import { ContentApiService, AppHookService, DocumentBasePageService } from '@alfresco/aca-shared'; import { Store, StoreModule } from '@ngrx/store'; -import { Node, NodePaging, FavoritePaging, SharedLinkPaging, PersonEntry, ResultSetPaging, RepositoryInfo } from '@alfresco/js-api'; +import { Node, NodePaging, FavoritePaging, SharedLinkPaging, PersonEntry, ResultSetPaging, RepositoryInfo, VersionInfo } from '@alfresco/js-api'; import { PreviewModule } from '../preview.module'; import { TranslateModule } from '@ngx-translate/core'; import { RouterTestingModule } from '@angular/router/testing'; @@ -134,7 +134,14 @@ describe('PreviewComponent', () => { provide: DiscoveryApiService, useValue: { ecmProductInfo$: new BehaviorSubject(null), - getEcmProductInfo: (): Observable => of(new RepositoryInfo({ version: '10.0.0' })) + getEcmProductInfo: (): Observable => + of( + new RepositoryInfo({ + version: { + major: '10.0.0' + } as VersionInfo + }) + ) } }, { diff --git a/projects/aca-content/src/lib/components/common/location-link/location-link.component.ts b/projects/aca-content/src/lib/components/common/location-link/location-link.component.ts index 1b501b968..74edff4f2 100644 --- a/projects/aca-content/src/lib/components/common/location-link/location-link.component.ts +++ b/projects/aca-content/src/lib/components/common/location-link/location-link.component.ts @@ -23,7 +23,7 @@ */ import { Component, Input, ChangeDetectionStrategy, OnInit, ViewEncapsulation, HostListener, inject } from '@angular/core'; -import { PathInfo, MinimalNodeEntity } from '@alfresco/js-api'; +import { PathInfo, NodeEntry } from '@alfresco/js-api'; import { Observable, BehaviorSubject, of } from 'rxjs'; import { Store } from '@ngrx/store'; import { NavigateToParentFolder } from '@alfresco/aca-shared/store'; @@ -75,14 +75,14 @@ export class LocationLinkComponent implements OnInit { goToLocation() { if (this.context) { - const node: MinimalNodeEntity = this.context.row.node; + const node: NodeEntry = this.context.row.node; this.store.dispatch(new NavigateToParentFolder(node)); } } ngOnInit() { if (this.context) { - const node: MinimalNodeEntity = this.context.row.node; + const node: NodeEntry = this.context.row.node; if (node && node.entry && node.entry.path) { const path = node.entry.path; diff --git a/projects/aca-content/src/lib/components/favorites/favorites.component.ts b/projects/aca-content/src/lib/components/favorites/favorites.component.ts index 366ae8f27..5389d3053 100644 --- a/projects/aca-content/src/lib/components/favorites/favorites.component.ts +++ b/projects/aca-content/src/lib/components/favorites/favorites.component.ts @@ -31,7 +31,7 @@ import { PaginationDirective, ToolbarComponent } from '@alfresco/aca-shared'; -import { MinimalNodeEntity, MinimalNodeEntryEntity, PathElementEntity, PathInfo } from '@alfresco/js-api'; +import { NodeEntry, Node, PathElement, PathInfo } from '@alfresco/js-api'; import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; import { DocumentListPresetRef, ExtensionsModule } from '@alfresco/adf-extensions'; @@ -79,24 +79,24 @@ export class FavoritesComponent extends PageComponent implements OnInit { this.columns = this.extensions.documentListPresets.favorites; } - navigate(favorite: MinimalNodeEntryEntity) { + navigate(favorite: Node) { const { isFolder, id } = favorite; // TODO: rework as it will fail on non-English setups - const isSitePath = (path: PathInfo): boolean => path && path.elements && path.elements.some(({ name }: PathElementEntity) => name === 'Sites'); + const isSitePath = (path: PathInfo): boolean => path && path.elements && path.elements.some(({ name }: PathElement) => name === 'Sites'); if (isFolder) { this.contentApi .getNode(id) .pipe(map((node) => node.entry)) - .subscribe(({ path }: MinimalNodeEntryEntity) => { + .subscribe(({ path }: Node) => { const routeUrl = isSitePath(path) ? '/libraries' : '/personal-files'; this.router.navigate([routeUrl, id]); }); } } - onNodeDoubleClick(node: MinimalNodeEntity) { + onNodeDoubleClick(node: NodeEntry) { if (node && node.entry) { if (node.entry.isFolder) { this.navigate(node.entry); diff --git a/projects/aca-content/src/lib/components/files/files.component.spec.ts b/projects/aca-content/src/lib/components/files/files.component.spec.ts index 167048c1a..dd7e6bfb3 100644 --- a/projects/aca-content/src/lib/components/files/files.component.spec.ts +++ b/projects/aca-content/src/lib/components/files/files.component.spec.ts @@ -32,7 +32,7 @@ import { AppTestingModule } from '../../testing/app-testing.module'; import { ContentApiService } from '@alfresco/aca-shared'; import { of, Subject, throwError } from 'rxjs'; import { By } from '@angular/platform-browser'; -import { NodeEntry, NodePaging } from '@alfresco/js-api'; +import { NodeEntry, NodePaging, Node } from '@alfresco/js-api'; describe('FilesComponent', () => { let node; @@ -424,7 +424,7 @@ describe('FilesComponent', () => { it('should reset the pagination when navigating to a folder', () => { const resetNewFolderPaginationSpy = spyOn(component.documentList, 'resetNewFolderPagination'); - const fakeFolderNode = new NodeEntry({ entry: { id: 'fakeFolderNode', isFolder: true, isFile: false } }); + const fakeFolderNode = new NodeEntry({ entry: { id: 'fakeFolderNode', isFolder: true, isFile: false } as Node }); component.navigateTo(fakeFolderNode); expect(resetNewFolderPaginationSpy).toHaveBeenCalled(); @@ -432,7 +432,7 @@ describe('FilesComponent', () => { it('should not reset the pagination when the node to navigate is not a folder', () => { const resetNewFolderPaginationSpy = spyOn(component.documentList, 'resetNewFolderPagination'); - const fakeFileNode = new NodeEntry({ entry: { id: 'fakeFileNode', isFolder: false, isFile: true } }); + const fakeFileNode = new NodeEntry({ entry: { id: 'fakeFileNode', isFolder: false, isFile: true } as Node }); component.navigateTo(fakeFileNode); expect(resetNewFolderPaginationSpy).not.toHaveBeenCalled(); diff --git a/projects/aca-content/src/lib/components/files/files.component.ts b/projects/aca-content/src/lib/components/files/files.component.ts index e4245ce93..112dc64b1 100644 --- a/projects/aca-content/src/lib/components/files/files.component.ts +++ b/projects/aca-content/src/lib/components/files/files.component.ts @@ -25,7 +25,7 @@ import { DataTableModule, PaginationModule, ShowHeaderMode } from '@alfresco/adf-core'; import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; import { ActivatedRoute, Params } from '@angular/router'; -import { MinimalNodeEntity, MinimalNodeEntryEntity, PathElement, PathElementEntity } from '@alfresco/js-api'; +import { NodeEntry, Node, PathElement } from '@alfresco/js-api'; import { NodeActionsService } from '../../services/node-actions.service'; import { ContentApiService, @@ -72,7 +72,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; export class FilesComponent extends PageComponent implements OnInit, OnDestroy { isValidPath = true; isAdmin = false; - selectedNode: MinimalNodeEntity; + selectedNode: NodeEntry; queryParams = null; showLoader$ = this.store.select(showLoaderSelector); @@ -186,7 +186,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { this.store.dispatch(new UploadFileVersionAction(ev)); } - navigateTo(node: MinimalNodeEntity) { + navigateTo(node: NodeEntry) { if (node && node.entry) { this.selectedNode = node; const { isFolder } = node.entry; @@ -213,7 +213,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { this.navigateTo((event as CustomEvent).detail?.node); } - onBreadcrumbNavigate(route: PathElementEntity) { + onBreadcrumbNavigate(route: PathElement) { this.documentList.resetNewFolderPagination(); // todo: review this approach once 5.2.3 is out @@ -226,7 +226,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { } onFileUploadedEvent(event: FileUploadEvent) { - const node: MinimalNodeEntity = event.file.data; + const node: NodeEntry = event.file.data; // check root and child nodes if (node && node.entry && node.entry.parentId === this.getParentNodeId()) { @@ -265,7 +265,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { this.reload(this.selectedNode); } - onContentCopied(nodes: MinimalNodeEntity[]) { + onContentCopied(nodes: NodeEntry[]) { const newNode = nodes.find((node) => node && node.entry && node.entry.parentId === this.getParentNodeId()); if (newNode) { this.reload(this.selectedNode); @@ -273,7 +273,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { } // todo: review this approach once 5.2.3 is out - private async updateCurrentNode(node: MinimalNodeEntryEntity) { + private async updateCurrentNode(node: Node) { this.nodePath = null; if (node && node.path && node.path.elements) { @@ -297,7 +297,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { } // todo: review this approach once 5.2.3 is out - private async normalizeSitePath(node: MinimalNodeEntryEntity) { + private async normalizeSitePath(node: Node) { const elements = node.path.elements; // remove 'Sites' @@ -325,7 +325,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy { } } - isSiteContainer(node: MinimalNodeEntryEntity): boolean { + isSiteContainer(node: Node): boolean { if (node && node.aspectNames && node.aspectNames.length > 0) { return node.aspectNames.indexOf('st:siteContainer') >= 0; } diff --git a/projects/aca-content/src/lib/components/info-drawer/comments-tab/comments-tab.component.ts b/projects/aca-content/src/lib/components/info-drawer/comments-tab/comments-tab.component.ts index 7d85c7097..efa271da6 100644 --- a/projects/aca-content/src/lib/components/info-drawer/comments-tab/comments-tab.component.ts +++ b/projects/aca-content/src/lib/components/info-drawer/comments-tab/comments-tab.component.ts @@ -23,7 +23,7 @@ */ import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { NodePermissionService, isLocked } from '@alfresco/aca-shared'; import { MatCardModule } from '@angular/material/card'; import { NodeCommentsModule } from '@alfresco/adf-content-services'; @@ -37,7 +37,7 @@ import { NodeCommentsModule } from '@alfresco/adf-content-services'; }) export class CommentsTabComponent implements OnInit { @Input() - node: MinimalNodeEntryEntity; + node: Node; canUpdateNode = false; diff --git a/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.spec.ts b/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.spec.ts index e0d0fa73e..f990d7b3d 100644 --- a/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.spec.ts +++ b/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.spec.ts @@ -23,14 +23,16 @@ */ import { MetadataTabComponent } from './metadata-tab.component'; -import { MinimalNodeEntryEntity, Node } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AppTestingModule } from '../../../testing/app-testing.module'; import { AppConfigService } from '@alfresco/adf-core'; import { Store } from '@ngrx/store'; -import { AppState, SetInfoDrawerMetadataAspectAction } from '@alfresco/aca-shared/store'; +import { AppState, EditOfflineAction, SetInfoDrawerMetadataAspectAction } from '@alfresco/aca-shared/store'; import { By } from '@angular/platform-browser'; import { AppExtensionService, NodePermissionService } from '@alfresco/aca-shared'; +import { Actions } from '@ngrx/effects'; +import { Subject } from 'rxjs'; describe('MetadataTabComponent', () => { let fixture: ComponentFixture; @@ -39,6 +41,7 @@ describe('MetadataTabComponent', () => { let appConfig: AppConfigService; let extensions: AppExtensionService; let nodePermissionService: NodePermissionService; + let actions$: Subject; const presets = { default: { @@ -47,11 +50,18 @@ describe('MetadataTabComponent', () => { custom: [] }; beforeEach(() => { + actions$ = new Subject(); TestBed.configureTestingModule({ - imports: [AppTestingModule, MetadataTabComponent] + imports: [AppTestingModule, MetadataTabComponent], + providers: [ + { + provide: Actions, + useValue: actions$ + } + ] }); nodePermissionService = TestBed.inject(NodePermissionService); - spyOn(nodePermissionService, 'check').and.callFake((source: MinimalNodeEntryEntity, permissions: string[]) => { + spyOn(nodePermissionService, 'check').and.callFake((source: Node, permissions: string[]) => { return permissions.some((permission) => source.allowableOperations.includes(permission)); }); }); @@ -85,7 +95,7 @@ describe('MetadataTabComponent', () => { }); }); - describe('canUpdateNode()', () => { + describe('canUpdateNode', () => { beforeEach(() => { fixture = TestBed.createComponent(MetadataTabComponent); component = fixture.componentInstance; @@ -129,6 +139,113 @@ describe('MetadataTabComponent', () => { component.ngOnInit(); expect(component.canUpdateNode).toBe(false); }); + + describe('set by triggering EditOfflineAction', () => { + let editOfflineAction: EditOfflineAction; + + beforeEach(() => { + component.node = { + id: 'some id', + allowableOperations: [] + } as Node; + component.ngOnInit(); + editOfflineAction = new EditOfflineAction({ + entry: { + isLocked: false, + allowableOperations: ['update'], + id: component.node.id + } as Node + }); + component.canUpdateNode = true; + }); + + it('should have set true if node is not locked and has update permission', () => { + component.canUpdateNode = false; + actions$.next(editOfflineAction); + expect(component.canUpdateNode).toBeTrue(); + }); + + it('should not have set false if changed node has different id than original', () => { + editOfflineAction.payload.entry.id = 'some other id'; + editOfflineAction.payload.entry.isLocked = true; + actions$.next(editOfflineAction); + expect(component.canUpdateNode).toBeTrue(); + }); + + it('should have set false if node is locked', () => { + editOfflineAction.payload.entry.isLocked = true; + actions$.next(editOfflineAction); + expect(component.canUpdateNode).toBeFalse(); + }); + + it('should have set false if node has no update permission', () => { + editOfflineAction.payload.entry.allowableOperations = ['other']; + actions$.next(editOfflineAction); + expect(component.canUpdateNode).toBeFalse(); + }); + + it('should have set false if node has read only property', () => { + editOfflineAction.payload.entry.properties = { + 'cm:lockType': 'WRITE_LOCK' + }; + actions$.next(editOfflineAction); + expect(component.canUpdateNode).toBeFalse(); + }); + }); + }); + + describe('editable', () => { + let editOfflineAction: EditOfflineAction; + + beforeEach(() => { + fixture = TestBed.createComponent(MetadataTabComponent); + component = fixture.componentInstance; + component.node = { + id: 'some id', + allowableOperations: [] + } as Node; + component.ngOnInit(); + editOfflineAction = new EditOfflineAction({ + entry: { + isLocked: false, + allowableOperations: ['update'], + id: component.node.id + } as Node + }); + component.editable = true; + }); + + it('should not have set false if node is not locked and has update permission', () => { + actions$.next(editOfflineAction); + expect(component.editable).toBeTrue(); + }); + + it('should not have set false if changed node has different id than original', () => { + editOfflineAction.payload.entry.id = 'some other id'; + editOfflineAction.payload.entry.isLocked = true; + actions$.next(editOfflineAction); + expect(component.editable).toBeTrue(); + }); + + it('should have set false if node is locked', () => { + editOfflineAction.payload.entry.isLocked = true; + actions$.next(editOfflineAction); + expect(component.editable).toBeFalse(); + }); + + it('should have set false if node has no update permission', () => { + editOfflineAction.payload.entry.allowableOperations = ['other']; + actions$.next(editOfflineAction); + expect(component.editable).toBeFalse(); + }); + + it('should have set false if node has read only property', () => { + editOfflineAction.payload.entry.properties = { + 'cm:lockType': 'WRITE_LOCK' + }; + actions$.next(editOfflineAction); + expect(component.editable).toBeFalse(); + }); }); describe('displayAspect', () => { diff --git a/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.ts b/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.ts index 6370607c5..dfcaad995 100644 --- a/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.ts +++ b/projects/aca-content/src/lib/components/info-drawer/metadata-tab/metadata-tab.component.ts @@ -23,22 +23,29 @@ */ import { Component, Input, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { NodePermissionService, isLocked, AppExtensionService } from '@alfresco/aca-shared'; -import { AppStore, infoDrawerMetadataAspect } from '@alfresco/aca-shared/store'; +import { AppStore, EditOfflineAction, infoDrawerMetadataAspect, NodeActionTypes } from '@alfresco/aca-shared/store'; import { AppConfigService, NotificationService } from '@alfresco/adf-core'; import { Observable, Subject } from 'rxjs'; import { Store } from '@ngrx/store'; import { ContentMetadataModule, ContentMetadataService } from '@alfresco/adf-content-services'; -import { takeUntil } from 'rxjs/operators'; +import { filter, takeUntil } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; +import { Actions, ofType } from '@ngrx/effects'; @Component({ standalone: true, imports: [CommonModule, ContentMetadataModule], selector: 'app-metadata-tab', template: ` - + `, encapsulation: ViewEncapsulation.None, @@ -48,11 +55,11 @@ export class MetadataTabComponent implements OnInit, OnDestroy { protected onDestroy$ = new Subject(); @Input() - node: MinimalNodeEntryEntity; + node: Node; displayAspect$: Observable; - canUpdateNode = false; + editable = false; constructor( private permission: NodePermissionService, @@ -60,7 +67,8 @@ export class MetadataTabComponent implements OnInit, OnDestroy { private appConfig: AppConfigService, private store: Store, private notificationService: NotificationService, - private contentMetadataService: ContentMetadataService + private contentMetadataService: ContentMetadataService, + private actions$: Actions ) { if (this.extensions.contentMetadata) { this.appConfig.config['content-metadata'].presets = this.extensions.contentMetadata.presets; @@ -72,13 +80,27 @@ export class MetadataTabComponent implements OnInit, OnDestroy { this.contentMetadataService.error.pipe(takeUntil(this.onDestroy$)).subscribe((err: { message: string }) => { this.notificationService.showError(err.message); }); - if (this.node && !isLocked({ entry: this.node })) { - this.canUpdateNode = this.permission.check(this.node, ['update']); - } + this.checkIfNodeIsUpdatable(this.node); + this.actions$ + .pipe( + ofType(NodeActionTypes.EditOffline), + filter((updatedNode) => this.node.id === updatedNode.payload.entry.id), + takeUntil(this.onDestroy$) + ) + .subscribe((updatedNode) => { + this.checkIfNodeIsUpdatable(updatedNode?.payload.entry); + if (!this.canUpdateNode) { + this.editable = false; + } + }); } ngOnDestroy() { this.onDestroy$.next(true); this.onDestroy$.complete(); } + + private checkIfNodeIsUpdatable(node: Node) { + this.canUpdateNode = node && !isLocked({ entry: node }) ? this.permission.check(node, ['update']) : false; + } } diff --git a/projects/aca-content/src/lib/components/info-drawer/versions-tab/versions-tab.component.ts b/projects/aca-content/src/lib/components/info-drawer/versions-tab/versions-tab.component.ts index 921d4b751..52f4182c4 100644 --- a/projects/aca-content/src/lib/components/info-drawer/versions-tab/versions-tab.component.ts +++ b/projects/aca-content/src/lib/components/info-drawer/versions-tab/versions-tab.component.ts @@ -23,7 +23,7 @@ */ import { Component, Input, OnChanges, OnInit, ViewEncapsulation } from '@angular/core'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { CommonModule } from '@angular/common'; import { VersionManagerModule } from '@alfresco/adf-content-services'; import { AppConfigModule } from '@alfresco/adf-core'; @@ -55,7 +55,7 @@ import { TranslateModule } from '@ngx-translate/core'; }) export class VersionsTabComponent implements OnInit, OnChanges { @Input() - node: MinimalNodeEntryEntity; + node: Node; isFileSelected = false; diff --git a/projects/aca-content/src/lib/components/recent-files/recent-files.component.ts b/projects/aca-content/src/lib/components/recent-files/recent-files.component.ts index 71418aea1..d4a4d8fdc 100644 --- a/projects/aca-content/src/lib/components/recent-files/recent-files.component.ts +++ b/projects/aca-content/src/lib/components/recent-files/recent-files.component.ts @@ -23,7 +23,7 @@ */ import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; import { debounceTime } from 'rxjs/operators'; import { ContextActionsDirective, @@ -78,7 +78,7 @@ export class RecentFilesComponent extends PageComponent implements OnInit { this.columns = this.extensions.documentListPresets.recent || []; } - onNodeDoubleClick(node: MinimalNodeEntity) { + onNodeDoubleClick(node: NodeEntry) { if (node && node.entry) { this.showPreview(node, { location: this.router.url }); } diff --git a/projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.ts b/projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.ts index 46cba8b55..3c99761fa 100644 --- a/projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.ts +++ b/projects/aca-content/src/lib/components/search/search-results-row/search-results-row.component.ts @@ -23,7 +23,7 @@ */ import { Component, Input, OnInit, ViewEncapsulation, ChangeDetectionStrategy, OnDestroy } from '@angular/core'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; import { ViewNodeAction, NavigateToFolder } from '@alfresco/aca-shared/store'; import { Store } from '@ngrx/store'; import { BehaviorSubject, Subject } from 'rxjs'; @@ -46,7 +46,7 @@ import { MatDialogModule } from '@angular/material/dialog'; host: { class: 'aca-search-results-row' } }) export class SearchResultsRowComponent implements OnInit, OnDestroy { - private node: MinimalNodeEntity; + private node: NodeEntry; private onDestroy$ = new Subject(); @Input() diff --git a/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts b/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts index 758b4366f..14585c19a 100644 --- a/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts +++ b/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts @@ -23,7 +23,7 @@ */ import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { MinimalNodeEntity, Pagination, ResultSetPaging } from '@alfresco/js-api'; +import { NodeEntry, Pagination, ResultSetPaging } from '@alfresco/js-api'; import { ActivatedRoute, Params } from '@angular/router'; import { AlfrescoViewerModule, DocumentListModule, SearchModule, SearchQueryBuilderService } from '@alfresco/adf-content-services'; import { @@ -265,7 +265,7 @@ export class SearchResultsComponent extends PageComponent implements OnInit { return ['name', 'asc']; } - onNodeDoubleClick(node: MinimalNodeEntity) { + onNodeDoubleClick(node: NodeEntry) { if (node && node.entry) { if (node.entry.isFolder) { this.store.dispatch(new NavigateToFolder(node)); diff --git a/projects/aca-content/src/lib/components/shared-files/shared-files.component.ts b/projects/aca-content/src/lib/components/shared-files/shared-files.component.ts index d0ad97f89..41c263ac2 100644 --- a/projects/aca-content/src/lib/components/shared-files/shared-files.component.ts +++ b/projects/aca-content/src/lib/components/shared-files/shared-files.component.ts @@ -24,7 +24,7 @@ import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { debounceTime } from 'rxjs/operators'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; import { AppHookService, ContextActionsDirective, @@ -80,7 +80,7 @@ export class SharedFilesComponent extends PageComponent implements OnInit { this.columns = this.extensions.documentListPresets.shared || []; } - preview(node: MinimalNodeEntity) { + preview(node: NodeEntry) { this.showPreview(node, { location: this.router.url }); } diff --git a/projects/aca-content/src/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.ts b/projects/aca-content/src/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.ts index 59f3ea696..a3a59af23 100644 --- a/projects/aca-content/src/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.ts +++ b/projects/aca-content/src/lib/components/toolbar/toggle-edit-offline/toggle-edit-offline.component.ts @@ -23,7 +23,7 @@ */ import { AppStore, DownloadNodesAction, EditOfflineAction, SnackbarErrorAction, getAppSelection } from '@alfresco/aca-shared/store'; -import { MinimalNodeEntity, NodeEntry, SharedLinkEntry, Node, NodesApi } from '@alfresco/js-api'; +import { NodeEntry, SharedLinkEntry, Node, NodesApi } from '@alfresco/js-api'; import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { Store } from '@ngrx/store'; import { isLocked } from '@alfresco/aca-shared'; @@ -55,7 +55,7 @@ import { MatIconModule } from '@angular/material/icon'; }) export class ToggleEditOfflineComponent implements OnInit { private nodesApi: NodesApi; - selection: MinimalNodeEntity; + selection: NodeEntry; nodeTitle = ''; isNodeLocked = false; diff --git a/projects/aca-content/src/lib/directives/document-list.directive.ts b/projects/aca-content/src/lib/directives/document-list.directive.ts index 038a0d0f7..5db07c332 100644 --- a/projects/aca-content/src/lib/directives/document-list.directive.ts +++ b/projects/aca-content/src/lib/directives/document-list.directive.ts @@ -31,7 +31,7 @@ import { Store } from '@ngrx/store'; import { AppHookService } from '@alfresco/aca-shared'; import { SetSelectedNodesAction } from '@alfresco/aca-shared/store'; import { takeUntil, filter } from 'rxjs/operators'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; @Directive({ standalone: true, @@ -39,7 +39,7 @@ import { MinimalNodeEntity } from '@alfresco/js-api'; }) export class DocumentListDirective implements OnInit, OnDestroy { private isLibrary = false; - selectedNode: MinimalNodeEntity; + selectedNode: NodeEntry; onDestroy$ = new Subject(); @@ -132,7 +132,7 @@ export class DocumentListDirective implements OnInit, OnDestroy { this.store.dispatch(new SetSelectedNodesAction(selection)); } - private reload(selectedNode?: MinimalNodeEntity) { + private reload(selectedNode?: NodeEntry) { this.documentList.resetSelection(); if (selectedNode) { this.store.dispatch(new SetSelectedNodesAction([selectedNode])); diff --git a/projects/aca-content/src/lib/services/content-management.service.spec.ts b/projects/aca-content/src/lib/services/content-management.service.spec.ts index 49e29d7d5..da8853e77 100644 --- a/projects/aca-content/src/lib/services/content-management.service.spec.ts +++ b/projects/aca-content/src/lib/services/content-management.service.spec.ts @@ -55,7 +55,7 @@ import { NodeActionsService } from './node-actions.service'; import { TranslationService, NotificationService } from '@alfresco/adf-core'; import { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatSnackBarModule, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; -import { NodeEntry, Node, VersionPaging, MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry, Node, VersionPaging } from '@alfresco/js-api'; import { NewVersionUploaderDataAction, NewVersionUploaderService, @@ -1685,7 +1685,7 @@ describe('ContentManagementService', () => { const elementToFocus = document.createElement(elementToFocusSelector); spyOn(elementToFocus, 'focus'); spyOn(document, 'querySelector').withArgs(elementToFocusSelector).and.returnValue(elementToFocus); - contentManagementService.editFolder({} as MinimalNodeEntity, elementToFocusSelector); + contentManagementService.editFolder({} as NodeEntry, elementToFocusSelector); afterClosed$.next(); expect(elementToFocus.focus).toHaveBeenCalled(); }); @@ -1699,7 +1699,7 @@ describe('ContentManagementService', () => { } } as MatDialogRef); spyOn(document, 'querySelector'); - contentManagementService.editFolder({} as MinimalNodeEntity, ''); + contentManagementService.editFolder({} as NodeEntry, ''); afterClosed$.next(); expect(document.querySelector).not.toHaveBeenCalled(); }); diff --git a/projects/aca-content/src/lib/services/content-management.service.ts b/projects/aca-content/src/lib/services/content-management.service.ts index d000efba0..48367d5bc 100644 --- a/projects/aca-content/src/lib/services/content-management.service.ts +++ b/projects/aca-content/src/lib/services/content-management.service.ts @@ -57,16 +57,7 @@ import { NodesApiService } from '@alfresco/adf-content-services'; import { TranslationService, NotificationService } from '@alfresco/adf-core'; -import { - DeletedNodesPaging, - MinimalNodeEntity, - MinimalNodeEntryEntity, - Node, - NodeEntry, - PathInfoEntity, - SiteBody, - SiteEntry -} from '@alfresco/js-api'; +import { DeletedNodesPaging, Node, NodeEntry, PathInfo, SiteBodyCreate, SiteEntry } from '@alfresco/js-api'; import { Injectable } from '@angular/core'; import { MatDialog, MatDialogConfig } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; @@ -77,7 +68,7 @@ import { Router } from '@angular/router'; interface RestoredNode { status: number; - entry: MinimalNodeEntryEntity; + entry: Node; statusCode?: number; } @@ -102,7 +93,7 @@ export class ContentManagementService { private router: Router ) {} - addFavorite(nodes: Array) { + addFavorite(nodes: Array) { if (nodes && nodes.length > 0) { this.contentApi.addFavorite(nodes).subscribe(() => { const favoriteNodes = nodes.map((node) => { @@ -116,7 +107,7 @@ export class ContentManagementService { } } - removeFavorite(nodes: Array) { + removeFavorite(nodes: Array) { if (nodes && nodes.length > 0) { this.contentApi.removeFavorite(nodes).subscribe(() => { const favoriteNodes = nodes.map((node) => { @@ -244,7 +235,7 @@ export class ContentManagementService { }); } - editFolder(folder: MinimalNodeEntity, focusedElementOnCloseSelector?: string) { + editFolder(folder: NodeEntry, focusedElementOnCloseSelector?: string) { if (!folder) { return; } @@ -332,7 +323,7 @@ export class ContentManagementService { }); } - updateLibrary(siteId: string, siteBody: SiteBody) { + updateLibrary(siteId: string, siteBody: SiteBodyCreate) { this.contentApi.updateLibrary(siteId, siteBody).subscribe( (siteEntry: SiteEntry) => { this.appHookService.libraryUpdated.next(siteEntry); @@ -344,21 +335,21 @@ export class ContentManagementService { ); } - async unshareNodes(links: Array) { + async unshareNodes(links: Array) { const promises = links.map((link) => this.contentApi.deleteSharedLink(link.entry.id).toPromise()); await Promise.all(promises); this.appHookService.linksUnshared.next(); } - canUpdateNode(node: MinimalNodeEntity | Node): boolean { + canUpdateNode(node: NodeEntry | Node): boolean { return this.permission.check(node, ['update']); } - canUploadContent(folderNode: MinimalNodeEntity | Node): boolean { + canUploadContent(folderNode: NodeEntry | Node): boolean { return this.permission.check(folderNode, ['create']); } - purgeDeletedNodes(nodes: MinimalNodeEntity[]) { + purgeDeletedNodes(nodes: NodeEntry[]) { if (!nodes || nodes.length === 0) { return; } @@ -389,7 +380,7 @@ export class ContentManagementService { }); } - restoreDeletedNodes(selection: MinimalNodeEntity[] = []) { + restoreDeletedNodes(selection: NodeEntry[] = []) { if (!selection.length) { return; } @@ -426,7 +417,7 @@ export class ContentManagementService { }); } - copyNodes(nodes: Array, focusedElementOnCloseSelector?: string) { + copyNodes(nodes: Array, focusedElementOnCloseSelector?: string) { zip(this.nodeActionsService.copyNodes(nodes, undefined, focusedElementOnCloseSelector), this.nodeActionsService.contentCopied).subscribe( (result) => { const [operationResult, newItems] = result; @@ -438,7 +429,7 @@ export class ContentManagementService { ); } - moveNodes(nodes: Array, focusedElementOnCloseSelector?: string) { + moveNodes(nodes: Array, focusedElementOnCloseSelector?: string) { const permissionForMove = '!'; zip(this.nodeActionsService.moveNodes(nodes, permissionForMove, focusedElementOnCloseSelector), this.nodeActionsService.contentMoved).subscribe( @@ -474,7 +465,7 @@ export class ContentManagementService { return i18nMessageString; } - getNodeInfo(): Observable { + getNodeInfo(): Observable { return this.store.select(getAppSelection).pipe( take(1), mergeMap(({ file }) => { @@ -498,7 +489,7 @@ export class ContentManagementService { }); } - private showCopyMessage(info: any, nodes: Array, newItems?: Array) { + private showCopyMessage(info: any, nodes: Array, newItems?: Array) { const numberOfCopiedItems = newItems ? newItems.length : 0; const failedItems = nodes.length - numberOfCopiedItems; @@ -547,7 +538,7 @@ export class ContentManagementService { .subscribe(() => this.undoCopyNodes(newItems)); } - private undoCopyNodes(nodes: MinimalNodeEntity[]) { + private undoCopyNodes(nodes: NodeEntry[]) { const batch = this.nodeActionsService .flatten(nodes) .filter((item) => item.entry) @@ -665,7 +656,7 @@ export class ContentManagementService { ); } - deleteNodes(items: MinimalNodeEntity[]): void { + deleteNodes(items: NodeEntry[]): void { const batch: Observable[] = []; items.forEach((node) => { @@ -744,7 +735,7 @@ export class ContentManagementService { return null; } - private restoreNode(node: MinimalNodeEntity): Observable { + private restoreNode(node: NodeEntry): Observable { const { entry } = node; return this.contentApi.restoreNode(entry.id).pipe( @@ -882,7 +873,7 @@ export class ContentManagementService { if (message) { if (status.oneSucceeded && !status.someFailed) { const isSite = this.isSite(status.success[0].entry); - const path: PathInfoEntity = status.success[0].entry.path; + const path: PathInfo = status.success[0].entry.path; const parent = path.elements[path.elements.length - 1]; const route = isSite ? ['/libraries', parent.id] : ['/personal-files', parent.id]; @@ -901,11 +892,11 @@ export class ContentManagementService { } } - private isSite(entry: MinimalNodeEntryEntity): boolean { + private isSite(entry: Node): boolean { return entry.nodeType === 'st:site'; } - private isLibraryContent(path: PathInfoEntity): boolean { + private isLibraryContent(path: PathInfo): boolean { return path && path.elements.length >= 2 && path.elements[1].name === 'Sites'; } @@ -1017,7 +1008,7 @@ export class ContentManagementService { return null; } - private showMoveMessage(nodes: Array, info: any, moveResponse?: any) { + private showMoveMessage(nodes: Array, info: any, moveResponse?: any) { const succeeded = moveResponse && moveResponse['succeeded'] ? moveResponse['succeeded'].length : 0; const partiallySucceeded = moveResponse && moveResponse['partiallySucceeded'] ? moveResponse['partiallySucceeded'].length : 0; const failures = moveResponse && moveResponse['failed'] ? moveResponse['failed'].length : 0; diff --git a/projects/aca-content/src/lib/services/node-actions.service.spec.ts b/projects/aca-content/src/lib/services/node-actions.service.spec.ts index f2c7d7026..f825c894c 100644 --- a/projects/aca-content/src/lib/services/node-actions.service.spec.ts +++ b/projects/aca-content/src/lib/services/node-actions.service.spec.ts @@ -28,12 +28,12 @@ import { of, throwError, Subject, Observable } from 'rxjs'; import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core'; import { DocumentListService, NodeAction } from '@alfresco/adf-content-services'; import { NodeActionsService } from './node-actions.service'; -import { MinimalNodeEntryEntity, NodeChildAssociationEntry, NodeEntry } from '@alfresco/js-api'; +import { Node, NodeChildAssociationEntry, NodeEntry } from '@alfresco/js-api'; import { AppTestingModule } from '../testing/app-testing.module'; import { ContentApiService } from '@alfresco/aca-shared'; class TestNode { - entry: MinimalNodeEntryEntity; + entry: Node; constructor(id?: string, isFile?: boolean, name?: string, permission?: string[], nodeType?: string, properties?: any) { this.entry = {} as any; @@ -242,7 +242,7 @@ describe('NodeActionsService', () => { it('should not throw error if entry in "contentEntities" does not have id, but has nodeId property', () => { const contentEntities = [new TestNode(), { entry: { nodeId: '1234' } }]; - const subject = new Subject(); + const subject = new Subject(); spyOn(service, 'getContentNodeSelection').and.returnValue(subject); spyOn(service, 'copyNodeAction').and.returnValue(of({})); @@ -333,7 +333,7 @@ describe('NodeActionsService', () => { }); it('should be called', () => { - const subject = new Subject(); + const subject = new Subject(); const spyOnBatchOperation = spyOn(service, 'doBatchOperation').and.callThrough(); spyOn(service, 'getContentNodeSelection').and.returnValue(subject); spyOn(service, 'copyNodeAction').and.returnValue(of({})); @@ -720,10 +720,10 @@ describe('NodeActionsService', () => { let destinationFolder: TestNode; let spyOnBatchOperation: jasmine.Spy; let documentListService: DocumentListService; - let subject: Subject; + let subject: Subject; beforeEach(() => { - subject = new Subject(); + subject = new Subject(); fileToMove = new TestNode('file-to-be-moved', isFile, 'file-name'); folderToMove = new TestNode('fid', !isFile, 'folder-name'); destinationFolder = new TestNode(folderDestinationId); diff --git a/projects/aca-content/src/lib/services/node-actions.service.ts b/projects/aca-content/src/lib/services/node-actions.service.ts index d928442e4..7b2c1493d 100644 --- a/projects/aca-content/src/lib/services/node-actions.service.ts +++ b/projects/aca-content/src/lib/services/node-actions.service.ts @@ -35,14 +35,7 @@ import { NodeAction, ContentService } from '@alfresco/adf-content-services'; -import { - MinimalNodeEntity, - MinimalNodeEntryEntity, - SitePaging, - NodeChildAssociationPaging, - NodeChildAssociationEntry, - NodesApi -} from '@alfresco/js-api'; +import { NodeEntry, Node, SitePaging, NodeChildAssociationPaging, NodeChildAssociationEntry, NodesApi, Site, SitePagingList } from '@alfresco/js-api'; import { ContentApiService } from '@alfresco/aca-shared'; import { catchError, map, mergeMap } from 'rxjs/operators'; @@ -52,7 +45,7 @@ type BatchOperationType = Extract providedIn: 'root' }) export class NodeActionsService { - contentCopied: Subject = new Subject(); + contentCopied: Subject = new Subject(); contentMoved: Subject = new Subject(); moveDeletedEntries: any[] = []; isSitesDestinationAvailable = false; @@ -110,7 +103,7 @@ export class NodeActionsService { observable.error(new Error(JSON.stringify({ error: { statusCode: 400 } }))); } else if (this.checkPermission(action, contentEntities, permission)) { const destinationSelection = this.getContentNodeSelection(action, contentEntities, focusedElementOnCloseSelector); - destinationSelection.subscribe((selections: MinimalNodeEntryEntity[]) => { + destinationSelection.subscribe((selections: Node[]) => { const contentEntry = contentEntities[0].entry; // Check if there's nodeId for Shared Files const contentEntryId = contentEntry.nodeId || contentEntry.id; @@ -162,7 +155,7 @@ export class NodeActionsService { return !notAllowedNode; } - getEntryParentId(nodeEntry: MinimalNodeEntryEntity) { + getEntryParentId(nodeEntry: Node) { let entryParentId = ''; if (nodeEntry.parentId) { @@ -174,11 +167,7 @@ export class NodeActionsService { return entryParentId; } - getContentNodeSelection( - action: NodeAction, - contentEntities: MinimalNodeEntity[], - focusedElementOnCloseSelector?: string - ): Subject { + getContentNodeSelection(action: NodeAction, contentEntities: NodeEntry[], focusedElementOnCloseSelector?: string): Subject { const currentParentFolderId = this.getEntryParentId(contentEntities[0].entry); const customDropdown = new SitePaging({ @@ -188,16 +177,16 @@ export class NodeActionsService { entry: { guid: '-my-', title: this.translation.instant('APP.BROWSE.PERSONAL.SIDENAV_LINK.LABEL') - } + } as Site }, { entry: { guid: '-mysites-', title: this.translation.instant('APP.BROWSE.LIBRARIES.MENU.MY_LIBRARIES.SIDENAV_LINK.LABEL') - } + } as Site } ] - } + } as SitePagingList }); const title = this.getTitleTranslation(action, contentEntities); @@ -214,7 +203,7 @@ export class NodeActionsService { imageResolver: this.imageResolver.bind(this), isSelectionValid: this.canCopyMoveInsideIt.bind(this), breadcrumbTransform: this.customizeBreadcrumb.bind(this), - select: new Subject(), + select: new Subject(), excludeSiteContent: ContentNodeDialogService.nonDocumentSiteContent }; @@ -235,7 +224,7 @@ export class NodeActionsService { return data.select; } - getTitleTranslation(action: string, nodes: MinimalNodeEntity[] = []): string { + getTitleTranslation(action: string, nodes: NodeEntry[] = []): string { let keyPrefix = 'ITEMS'; let name = ''; @@ -248,11 +237,11 @@ export class NodeActionsService { return this.translation.instant(`NODE_SELECTOR.${action.toUpperCase()}_${keyPrefix}`, { name, number }); } - private canCopyMoveInsideIt(entry: MinimalNodeEntryEntity): boolean { + private canCopyMoveInsideIt(entry: Node): boolean { return this.hasEntityCreatePermission(entry) && !this.isSite(entry); } - private hasEntityCreatePermission(entry: MinimalNodeEntryEntity): boolean { + private hasEntityCreatePermission(entry: Node): boolean { return this.contentService.hasAllowableOperations(entry, 'create'); } @@ -265,7 +254,7 @@ export class NodeActionsService { } // todo: review this approach once 5.2.3 is out - private customizeBreadcrumb(node: MinimalNodeEntryEntity) { + private customizeBreadcrumb(node: Node) { if (node && node.path && node.path.elements) { const elements = node.path.elements; @@ -300,7 +289,7 @@ export class NodeActionsService { } // todo: review this approach once 5.2.3 is out - private normalizeSitePath(node: MinimalNodeEntryEntity) { + private normalizeSitePath(node: Node) { const elements = node.path.elements; // remove 'Company Home' @@ -326,7 +315,7 @@ export class NodeActionsService { } } - isSiteContainer(node: MinimalNodeEntryEntity): boolean { + isSiteContainer(node: Node): boolean { if (node && node.aspectNames && node.aspectNames.length > 0) { return node.aspectNames.indexOf('st:siteContainer') >= 0; } @@ -551,7 +540,7 @@ export class NodeActionsService { return matchedNodes; } - private isActionAllowed(action: BatchOperationType, node: MinimalNodeEntryEntity, permission?: string): boolean { + private isActionAllowed(action: BatchOperationType, node: Node, permission?: string): boolean { if (action === NodeAction.COPY) { return true; } @@ -559,14 +548,14 @@ export class NodeActionsService { } private rowFilter(row: ShareDataRow): boolean { - const node: MinimalNodeEntryEntity = row.node.entry; + const node: Node = row.node.entry; this.isSitesDestinationAvailable = !!node['guid']; return !node.isFile && node.nodeType !== 'app:folderlink'; } private imageResolver(row: ShareDataRow): string | null { - const entry: MinimalNodeEntryEntity = row.node.entry; + const entry: Node = row.node.entry; if (!this.contentService.hasAllowableOperations(entry, 'update')) { return this.thumbnailService.getMimeTypeIcon('disable/folder'); } diff --git a/projects/aca-content/src/lib/services/node-template.service.ts b/projects/aca-content/src/lib/services/node-template.service.ts index 7f5342b08..d6e264b0a 100644 --- a/projects/aca-content/src/lib/services/node-template.service.ts +++ b/projects/aca-content/src/lib/services/node-template.service.ts @@ -26,7 +26,7 @@ import { Injectable } from '@angular/core'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { CreateFromTemplateDialogComponent } from '../dialogs/node-template/create-from-template.dialog'; import { Subject, from, of } from 'rxjs'; -import { Node, MinimalNode, MinimalNodeEntryEntity, ResultNode, PathElement, SearchApi } from '@alfresco/js-api'; +import { Node, ResultNode, PathElement, SearchApi } from '@alfresco/js-api'; import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core'; import { switchMap, catchError } from 'rxjs/operators'; import { Store } from '@ngrx/store'; @@ -124,7 +124,7 @@ export class NodeTemplateService { return dialog; } - private transformNode(node: MinimalNode): MinimalNode { + private transformNode(node: Node): Node { if (node && node.path && node.path && node.path.elements instanceof Array) { node.path.elements = this.getPathElements(node); } @@ -157,7 +157,7 @@ export class NodeTemplateService { } private rowFilter(row: ShareDataRow): boolean { - const node: MinimalNodeEntryEntity = row.node.entry; + const node: Node = row.node.entry; return node.nodeType !== 'app:filelink' && node.nodeType !== 'app:folderlink'; } diff --git a/projects/aca-content/src/lib/store/effects/download.effects.ts b/projects/aca-content/src/lib/store/effects/download.effects.ts index b50011011..96e4f8518 100644 --- a/projects/aca-content/src/lib/store/effects/download.effects.ts +++ b/projects/aca-content/src/lib/store/effects/download.effects.ts @@ -24,7 +24,7 @@ import { AppStore, DownloadNodesAction, NodeActionTypes, NodeInfo, getAppSelection, getCurrentVersion } from '@alfresco/aca-shared/store'; import { DownloadZipDialogComponent } from '@alfresco/adf-content-services'; -import { MinimalNodeEntity, Version } from '@alfresco/js-api'; +import { NodeEntry, Version } from '@alfresco/js-api'; import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { Actions, ofType, createEffect } from '@ngrx/effects'; @@ -74,7 +74,7 @@ export class DownloadEffects { { dispatch: false } ); - private downloadNodes(toDownload: Array, focusedElementSelector?: string) { + private downloadNodes(toDownload: Array, focusedElementSelector?: string) { const nodes = toDownload.map((node) => { const { id, nodeId, name, isFile, isFolder } = node.entry as any; diff --git a/projects/aca-content/src/lib/store/effects/upload.effects.ts b/projects/aca-content/src/lib/store/effects/upload.effects.ts index cb6715e50..4c4f8f302 100644 --- a/projects/aca-content/src/lib/store/effects/upload.effects.ts +++ b/projects/aca-content/src/lib/store/effects/upload.effects.ts @@ -39,7 +39,7 @@ import { Store } from '@ngrx/store'; import { of } from 'rxjs'; import { catchError, map, take } from 'rxjs/operators'; import { ContentManagementService } from '../../services/content-management.service'; -import { MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { Node } from '@alfresco/js-api'; import { UploadService, FileModel } from '@alfresco/adf-content-services'; @Injectable() @@ -137,7 +137,7 @@ export class UploadEffects { return of(null); }) ) - .subscribe((node: MinimalNodeEntryEntity) => { + .subscribe((node: Node) => { if (node) { this.contentService.versionUpdateDialog(node, this.fileVersionInput.files[0]); this.fileVersionInput.value = ''; diff --git a/projects/aca-content/src/lib/testing/app-testing.module.ts b/projects/aca-content/src/lib/testing/app-testing.module.ts index 3f3c6e8b3..b1274d2db 100644 --- a/projects/aca-content/src/lib/testing/app-testing.module.ts +++ b/projects/aca-content/src/lib/testing/app-testing.module.ts @@ -35,7 +35,7 @@ import { PageTitleService } from '@alfresco/adf-core'; import { DiscoveryApiService, SearchQueryBuilderService } from '@alfresco/adf-content-services'; -import { RepositoryInfo } from '@alfresco/js-api'; +import { RepositoryInfo, VersionInfo } from '@alfresco/js-api'; import { HttpClientModule } from '@angular/common/http'; import { StoreModule } from '@ngrx/store'; import { appReducer } from '../store/reducers/app.reducer'; @@ -76,7 +76,14 @@ import { STORE_INITIAL_APP_DATA } from '@alfresco/aca-shared/store'; provide: DiscoveryApiService, useValue: { ecmProductInfo$: new BehaviorSubject(null), - getEcmProductInfo: (): Observable => of(new RepositoryInfo({ version: '10.0.0' })) + getEcmProductInfo: (): Observable => + of( + new RepositoryInfo({ + version: { + major: '10.0.0' + } as VersionInfo + }) + ) } }, { diff --git a/projects/aca-content/viewer/src/lib/components/viewer/viewer.component.ts b/projects/aca-content/viewer/src/lib/components/viewer/viewer.component.ts index 6d1c8282c..f336a9199 100644 --- a/projects/aca-content/viewer/src/lib/components/viewer/viewer.component.ts +++ b/projects/aca-content/viewer/src/lib/components/viewer/viewer.component.ts @@ -43,7 +43,7 @@ import { ViewNodeAction } from '@alfresco/aca-shared/store'; import { ContentActionRef, SelectionState } from '@alfresco/adf-extensions'; -import { MinimalNodeEntryEntity, SearchRequest, VersionEntry, VersionsApi } from '@alfresco/js-api'; +import { Node, SearchRequest, VersionEntry, VersionsApi } from '@alfresco/js-api'; import { Component, HostListener, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; import { ActivatedRoute, PRIMARY_OUTLET, Router } from '@angular/router'; import { AlfrescoApiService, AppConfigModule, ObjectUtils, UserPreferencesService, ViewerModule } from '@alfresco/adf-core'; @@ -76,7 +76,7 @@ export class AcaViewerComponent implements OnInit, OnDestroy { folderId: string = null; nodeId: string = null; versionId: string = null; - node: MinimalNodeEntryEntity; + node: Node; selection: SelectionState; infoDrawerOpened$: Observable; diff --git a/projects/aca-shared/package.json b/projects/aca-shared/package.json index 8c0fed53f..701ffd91d 100644 --- a/projects/aca-shared/package.json +++ b/projects/aca-shared/package.json @@ -5,10 +5,10 @@ "license": "LGPL-3.0", "scripts": {}, "peerDependencies": { - "@alfresco/adf-content-services": "^6.3.0-5833590093", - "@alfresco/adf-core": "6.3.0-5833590093", - "@alfresco/adf-extensions": "6.3.0-5833590093", - "@alfresco/js-api": ">=6.3.0-1104", + "@alfresco/adf-content-services": "^6.3.0-5977252204", + "@alfresco/adf-core": "6.3.0-5977252204", + "@alfresco/adf-extensions": "6.3.0-5977252204", + "@alfresco/js-api": ">=6.3.0-1172", "@angular/animations": "^14.1.3", "@angular/common": "^14.1.3", "@angular/compiler": "^14.1.3", diff --git a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.component.ts b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.component.ts index 363ba486c..b20ca2698 100644 --- a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.component.ts +++ b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.component.ts @@ -27,7 +27,7 @@ import { ShowHeaderMode } from '@alfresco/adf-core'; import { ContentActionRef, DocumentListPresetRef, SelectionState } from '@alfresco/adf-extensions'; import { OnDestroy, OnInit, OnChanges, ViewChild, SimpleChanges, Directive, inject } from '@angular/core'; import { Store } from '@ngrx/store'; -import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging } from '@alfresco/js-api'; +import { NodeEntry, Node, NodePaging } from '@alfresco/js-api'; import { Observable, Subject, Subscription } from 'rxjs'; import { takeUntil, map } from 'rxjs/operators'; import { DocumentBasePageService } from './document-base-page.service'; @@ -58,7 +58,7 @@ export abstract class PageComponent implements OnInit, OnDestroy, OnChanges { title = 'Page'; infoDrawerOpened$: Observable; - node: MinimalNodeEntryEntity; + node: Node; selection: SelectionState; sharedPreviewUrl$: Observable; actions: Array = []; @@ -144,7 +144,7 @@ export abstract class PageComponent implements OnInit, OnDestroy, OnChanges { this.store.dispatch(new SetSelectedNodesAction([])); } - showPreview(node: MinimalNodeEntity, extras?: ViewNodeExtras) { + showPreview(node: NodeEntry, extras?: ViewNodeExtras) { if (node && node.entry) { if (this.fileAutoDownloadService?.shouldFileAutoDownload(node.entry?.content?.sizeInBytes)) { this.fileAutoDownloadService.autoDownloadFile(node); @@ -180,7 +180,7 @@ export abstract class PageComponent implements OnInit, OnDestroy, OnChanges { return null; } - reload(selectedNode?: MinimalNodeEntity): void { + reload(selectedNode?: NodeEntry): void { if (this.isOutletPreviewUrl()) { return; } diff --git a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.service.ts b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.service.ts index 7126ef8dd..9e40395ff 100644 --- a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.service.ts +++ b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.service.ts @@ -22,9 +22,9 @@ * from Hyland Software. If not, see . */ -import { MinimalNodeEntity, MinimalNodeEntryEntity } from '@alfresco/js-api'; +import { NodeEntry, Node } from '@alfresco/js-api'; export abstract class DocumentBasePageService { - abstract canUpdateNode(node: MinimalNodeEntity): boolean; - abstract canUploadContent(node: MinimalNodeEntryEntity): boolean; + abstract canUpdateNode(node: NodeEntry): boolean; + abstract canUploadContent(node: Node): boolean; } diff --git a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.spec.ts b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.spec.ts index a6a2f84ea..47817c536 100644 --- a/projects/aca-shared/src/lib/components/document-base-page/document-base-page.spec.ts +++ b/projects/aca-shared/src/lib/components/document-base-page/document-base-page.spec.ts @@ -26,7 +26,7 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; import { PageComponent } from './document-base-page.component'; import { ReloadDocumentListAction, SetSelectedNodesAction, AppState, ViewNodeAction } from '@alfresco/aca-shared/store'; import { AppExtensionService } from '@alfresco/aca-shared'; -import { MinimalNodeEntity, NodePaging, RepositoryInfo } from '@alfresco/js-api'; +import { NodeEntry, NodePaging, RepositoryInfo, VersionInfo } from '@alfresco/js-api'; import { DocumentBasePageService } from './document-base-page.service'; import { Store, StoreModule } from '@ngrx/store'; import { Component, Injectable } from '@angular/core'; @@ -141,7 +141,14 @@ describe('PageComponent', () => { provide: DiscoveryApiService, useValue: { ecmProductInfo$: new BehaviorSubject(null), - getEcmProductInfo: (): Observable => of(new RepositoryInfo({ version: '10.0.0' })) + getEcmProductInfo: (): Observable => + of( + new RepositoryInfo({ + version: { + major: '10.0.0' + } as VersionInfo + }) + ) } }, AppExtensionService @@ -198,7 +205,7 @@ describe('PageComponent', () => { entry: { id: 'node-id' } - } as MinimalNodeEntity; + } as NodeEntry; spyOn(store, 'dispatch'); component.reload(node); @@ -244,7 +251,7 @@ describe('PageComponent', () => { entry: { id: 'node-id' } - } as MinimalNodeEntity; + } as NodeEntry; component.showPreview(node); expect(store.dispatch).toHaveBeenCalledWith(new ViewNodeAction(node.entry.id)); @@ -260,7 +267,7 @@ describe('PageComponent', () => { 'cm:destination': 'original-node-id' } } - } as MinimalNodeEntity; + } as NodeEntry; component.showPreview(linkNode); const id = linkNode.entry.properties['cm:destination']; @@ -298,7 +305,14 @@ describe('Info Drawer state', () => { provide: DiscoveryApiService, useValue: { ecmProductInfo$: new BehaviorSubject(null), - getEcmProductInfo: (): Observable => of(new RepositoryInfo({ version: '10.0.0' })) + getEcmProductInfo: (): Observable => + of( + new RepositoryInfo({ + version: { + major: '10.0.0' + } as VersionInfo + }) + ) } }, provideMockStore({ diff --git a/projects/aca-shared/src/lib/components/info-drawer/info-drawer.component.ts b/projects/aca-shared/src/lib/components/info-drawer/info-drawer.component.ts index 51f01a878..70c59e0cb 100644 --- a/projects/aca-shared/src/lib/components/info-drawer/info-drawer.component.ts +++ b/projects/aca-shared/src/lib/components/info-drawer/info-drawer.component.ts @@ -23,7 +23,7 @@ */ import { Component, HostListener, Input, OnChanges, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { MinimalNodeEntity, MinimalNodeEntryEntity, SiteEntry } from '@alfresco/js-api'; +import { NodeEntry, Node, SiteEntry } from '@alfresco/js-api'; import { ContentActionRef, ExtensionsModule, SidebarTabRef } from '@alfresco/adf-extensions'; import { Store } from '@ngrx/store'; import { SetInfoDrawerStateAction, ToggleInfoDrawerAction, infoDrawerPreview } from '@alfresco/aca-shared/store'; @@ -50,10 +50,10 @@ export class InfoDrawerComponent implements OnChanges, OnInit, OnDestroy { nodeId: string; @Input() - node: MinimalNodeEntity; + node: NodeEntry; isLoading = false; - displayNode: MinimalNodeEntryEntity | SiteEntry; + displayNode: Node | SiteEntry; tabs: Array = []; actions: Array = []; onDestroy$ = new Subject(); diff --git a/projects/aca-shared/src/lib/services/app.service.spec.ts b/projects/aca-shared/src/lib/services/app.service.spec.ts index 457983bd4..830e1fb8f 100644 --- a/projects/aca-shared/src/lib/services/app.service.spec.ts +++ b/projects/aca-shared/src/lib/services/app.service.spec.ts @@ -48,7 +48,7 @@ import { STORE_INITIAL_APP_DATA } from '../../../store/src/states/app.state'; import { provideMockStore } from '@ngrx/store/testing'; import { CommonModule } from '@angular/common'; import { RouterTestingModule } from '@angular/router/testing'; -import { RepositoryInfo } from '@alfresco/js-api'; +import { RepositoryInfo, VersionInfo } from '@alfresco/js-api'; import { MatDialogModule } from '@angular/material/dialog'; import { TranslateModule } from '@ngx-translate/core'; import { Store } from '@ngrx/store'; @@ -81,7 +81,14 @@ describe('AppService', () => { provide: DiscoveryApiService, useValue: { ecmProductInfo$: new BehaviorSubject(null), - getEcmProductInfo: (): Observable => of(new RepositoryInfo({ version: '10.0.0' })) + getEcmProductInfo: (): Observable => + of( + new RepositoryInfo({ + version: { + major: '10.0.0' + } as VersionInfo + }) + ) } }, { diff --git a/projects/aca-shared/src/lib/services/content-api.service.ts b/projects/aca-shared/src/lib/services/content-api.service.ts index cefd917d5..781f0c566 100644 --- a/projects/aca-shared/src/lib/services/content-api.service.ts +++ b/projects/aca-shared/src/lib/services/content-api.service.ts @@ -26,7 +26,6 @@ import { Injectable } from '@angular/core'; import { AlfrescoApiService, UserPreferencesService } from '@alfresco/adf-core'; import { Observable, from } from 'rxjs'; import { - MinimalNodeEntity, NodePaging, Node, DeletedNodesPaging, @@ -37,9 +36,9 @@ import { SharedLinkPaging, SearchRequest, ResultSetPaging, - SiteBody, + SiteBodyCreate, SiteEntry, - FavoriteBody, + FavoriteBodyCreate, FavoriteEntry, NodesApi, TrashcanApi, @@ -139,7 +138,7 @@ export class ContentApiService { * @param options Optional parameters supported by JS-API * @returns Node information */ - getNode(nodeId: string, options: any = {}): Observable { + getNode(nodeId: string, options: any = {}): Observable { const defaults = { include: ['path', 'properties', 'allowableOperations', 'permissions', 'definition'] }; @@ -199,7 +198,7 @@ export class ContentApiService { return from(this.trashcanApi.listDeletedNodes(queryOptions)); } - restoreNode(nodeId: string): Observable { + restoreNode(nodeId: string): Observable { return from(this.trashcanApi.restoreDeletedNode(nodeId)); } @@ -299,7 +298,7 @@ export class ContentApiService { } createSite( - siteBody: SiteBody, + siteBody: SiteBodyCreate, opts?: { fields?: Array; skipConfiguration?: boolean; @@ -313,12 +312,12 @@ export class ContentApiService { return from(this.sitesApi.getSite(siteId, opts)); } - updateLibrary(siteId: string, siteBody: SiteBody): Observable { + updateLibrary(siteId: string, siteBody: SiteBodyCreate): Observable { return from(this.sitesApi.updateSite(siteId, siteBody)); } - addFavorite(nodes: Array): Observable { - const payload: FavoriteBody[] = nodes.map((node) => { + addFavorite(nodes: Array): Observable { + const payload: FavoriteBodyCreate[] = nodes.map((node) => { const { isFolder, nodeId, id } = node.entry as any; const siteId = node.entry['guid']; const type = siteId ? 'site' : isFolder ? 'folder' : 'file'; @@ -336,7 +335,7 @@ export class ContentApiService { return from(this.favoritesApi.createFavorite('-me-', payload as any)); } - removeFavorite(nodes: Array): Observable { + removeFavorite(nodes: Array): Observable { return from( Promise.all( nodes.map((node: any) => { @@ -347,7 +346,7 @@ export class ContentApiService { ); } - unlockNode(nodeId: string, opts?: any): Promise { + unlockNode(nodeId: string, opts?: any): Promise { return this.nodesApi.unlockNode(nodeId, opts); } diff --git a/projects/aca-shared/store/src/actions/library.actions.ts b/projects/aca-shared/store/src/actions/library.actions.ts index a074b62f6..e4ec4f4ce 100644 --- a/projects/aca-shared/store/src/actions/library.actions.ts +++ b/projects/aca-shared/store/src/actions/library.actions.ts @@ -23,7 +23,7 @@ */ import { Action } from '@ngrx/store'; -import { SiteBody } from '@alfresco/js-api'; +import { SiteBodyCreate } from '@alfresco/js-api'; import { ModalConfiguration } from '../models/modal-configuration'; export enum LibraryActionTypes { @@ -53,7 +53,7 @@ export class NavigateLibraryAction implements Action { export class UpdateLibraryAction implements Action { readonly type = LibraryActionTypes.Update; - constructor(public payload?: SiteBody) {} + constructor(public payload?: SiteBodyCreate) {} } export class LeaveLibraryAction implements Action { diff --git a/projects/aca-shared/store/src/actions/node.actions.ts b/projects/aca-shared/store/src/actions/node.actions.ts index 027961236..d4218ac11 100644 --- a/projects/aca-shared/store/src/actions/node.actions.ts +++ b/projects/aca-shared/store/src/actions/node.actions.ts @@ -23,7 +23,7 @@ */ import { Action } from '@ngrx/store'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; import { ModalConfiguration } from '../models/modal-configuration'; export enum NodeActionTypes { @@ -54,13 +54,13 @@ export enum NodeActionTypes { export class SetSelectedNodesAction implements Action { readonly type = NodeActionTypes.SetSelection; - constructor(public payload: MinimalNodeEntity[] = []) {} + constructor(public payload: NodeEntry[] = []) {} } export class DeleteNodesAction implements Action { readonly type = NodeActionTypes.Delete; - constructor(public payload: MinimalNodeEntity[] = []) {} + constructor(public payload: NodeEntry[] = []) {} } export class UndoDeleteNodesAction implements Action { @@ -72,19 +72,19 @@ export class UndoDeleteNodesAction implements Action { export class RestoreDeletedNodesAction implements Action { readonly type = NodeActionTypes.RestoreDeleted; - constructor(public payload: Array) {} + constructor(public payload: Array) {} } export class PurgeDeletedNodesAction implements Action { readonly type = NodeActionTypes.PurgeDeleted; - constructor(public payload: Array) {} + constructor(public payload: Array) {} } export class DownloadNodesAction implements Action { readonly type = NodeActionTypes.Download; - constructor(public payload: MinimalNodeEntity[] = [], public configuration?: ModalConfiguration) {} + constructor(public payload: NodeEntry[] = [], public configuration?: ModalConfiguration) {} } export class CreateFolderAction implements Action { @@ -96,60 +96,60 @@ export class CreateFolderAction implements Action { export class EditFolderAction implements Action { readonly type = NodeActionTypes.EditFolder; - constructor(public payload: MinimalNodeEntity, public configuration?: ModalConfiguration) {} + constructor(public payload: NodeEntry, public configuration?: ModalConfiguration) {} } export class ShareNodeAction implements Action { readonly type = NodeActionTypes.Share; - constructor(public payload: MinimalNodeEntity, public configuration?: ModalConfiguration) {} + constructor(public payload: NodeEntry, public configuration?: ModalConfiguration) {} } export class UnshareNodesAction implements Action { readonly type = NodeActionTypes.Unshare; - constructor(public payload: Array) {} + constructor(public payload: Array) {} } export class CopyNodesAction implements Action { readonly type = NodeActionTypes.Copy; - constructor(public payload: Array, public configuration?: ModalConfiguration) {} + constructor(public payload: Array, public configuration?: ModalConfiguration) {} } export class MoveNodesAction implements Action { readonly type = NodeActionTypes.Move; - constructor(public payload: Array, public configuration?: ModalConfiguration) {} + constructor(public payload: Array, public configuration?: ModalConfiguration) {} } export class ManagePermissionsAction implements Action { readonly type = NodeActionTypes.ManagePermissions; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class ExpandInfoDrawerAction implements Action { readonly type = NodeActionTypes.ExpandInfoDrawer; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class PrintFileAction implements Action { readonly type = NodeActionTypes.PrintFile; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class ManageVersionsAction implements Action { readonly type = NodeActionTypes.ManageVersions; - constructor(public payload: MinimalNodeEntity, public configuration?: ModalConfiguration) {} + constructor(public payload: NodeEntry, public configuration?: ModalConfiguration) {} } export class EditOfflineAction implements Action { readonly type = NodeActionTypes.EditOffline; - constructor(public payload: any) {} + constructor(public payload: NodeEntry) {} } export class UnlockWriteAction implements Action { @@ -161,22 +161,22 @@ export class UnlockWriteAction implements Action { export class AddFavoriteAction implements Action { readonly type = NodeActionTypes.AddFavorite; - constructor(public payload: Array) {} + constructor(public payload: Array) {} } export class RemoveFavoriteAction implements Action { readonly type = NodeActionTypes.RemoveFavorite; - constructor(public payload: Array) {} + constructor(public payload: Array) {} } export class ManageAspectsAction implements Action { readonly type = NodeActionTypes.ChangeAspects; - constructor(public payload: MinimalNodeEntity, public configuration?: ModalConfiguration) {} + constructor(public payload: NodeEntry, public configuration?: ModalConfiguration) {} } export class ManageRulesAction implements Action { readonly type = NodeActionTypes.ManageRules; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } diff --git a/projects/aca-shared/store/src/actions/router.actions.ts b/projects/aca-shared/store/src/actions/router.actions.ts index 13c836134..b56bf6b2a 100644 --- a/projects/aca-shared/store/src/actions/router.actions.ts +++ b/projects/aca-shared/store/src/actions/router.actions.ts @@ -23,7 +23,7 @@ */ import { Action } from '@ngrx/store'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; import { RouterActionTypes } from './router-action-types'; export class NavigateUrlAction implements Action { @@ -41,13 +41,13 @@ export class NavigateRouteAction implements Action { export class NavigateToFolder implements Action { readonly type = RouterActionTypes.NavigateFolder; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class NavigateToParentFolder implements Action { readonly type = RouterActionTypes.NavigateParentFolder; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class NavigateToPreviousPage implements Action { diff --git a/projects/aca-shared/store/src/actions/viewer.actions.ts b/projects/aca-shared/store/src/actions/viewer.actions.ts index e43cd9e64..60f7a70d5 100644 --- a/projects/aca-shared/store/src/actions/viewer.actions.ts +++ b/projects/aca-shared/store/src/actions/viewer.actions.ts @@ -23,7 +23,7 @@ */ import { Action } from '@ngrx/store'; -import { MinimalNodeEntity } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; export enum ViewerActionTypes { ViewFile = 'VIEW_FILE', @@ -43,7 +43,7 @@ export interface ViewNodeExtras { export class ViewFileAction implements Action { readonly type = ViewerActionTypes.ViewFile; - constructor(public payload?: MinimalNodeEntity, public parentId?: string) {} + constructor(public payload?: NodeEntry, public parentId?: string) {} } export class ViewNodeAction implements Action { @@ -61,17 +61,17 @@ export class ViewNodeVersionAction implements Action { export class FullscreenViewerAction implements Action { readonly type = ViewerActionTypes.FullScreen; - constructor(public payload: MinimalNodeEntity) {} + constructor(public payload: NodeEntry) {} } export class ClosePreviewAction implements Action { readonly type = ViewerActionTypes.ClosePreview; - constructor(public payload?: MinimalNodeEntity) {} + constructor(public payload?: NodeEntry) {} } export class RefreshPreviewAction implements Action { readonly type = ViewerActionTypes.RefreshPreview; - constructor(public payload?: MinimalNodeEntity) {} + constructor(public payload?: NodeEntry) {} } export class PluginPreviewAction implements Action { diff --git a/projects/aca-shared/store/src/effects/router.effects.ts b/projects/aca-shared/store/src/effects/router.effects.ts index ba5d90643..c000c87dc 100644 --- a/projects/aca-shared/store/src/effects/router.effects.ts +++ b/projects/aca-shared/store/src/effects/router.effects.ts @@ -25,7 +25,7 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { Actions, ofType, createEffect } from '@ngrx/effects'; -import { MinimalNodeEntryEntity, PathInfoEntity } from '@alfresco/js-api'; +import { Node, PathInfo } from '@alfresco/js-api'; import { map } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { AppStore } from '../states/app.state'; @@ -97,7 +97,7 @@ export class RouterEffects { { dispatch: false } ); - private navigateToFolder(node: MinimalNodeEntryEntity) { + private navigateToFolder(node: Node) { let link: any[] = null; const { path, id } = node; @@ -122,7 +122,7 @@ export class RouterEffects { } } - private navigateToParentFolder(node: MinimalNodeEntryEntity) { + private navigateToParentFolder(node: Node) { let link: any[] = null; const { path } = node; @@ -147,7 +147,7 @@ export class RouterEffects { } } - private isLibraryContent(path: PathInfoEntity): boolean { + private isLibraryContent(path: PathInfo): boolean { return path && path.elements.length >= 2 && path.elements[1].name === 'Sites'; } } diff --git a/projects/aca-testing-shared/src/utilities/repo-client/apis/sites/sites-api.ts b/projects/aca-testing-shared/src/utilities/repo-client/apis/sites/sites-api.ts index f8b2d4571..f076748a1 100755 --- a/projects/aca-testing-shared/src/utilities/repo-client/apis/sites/sites-api.ts +++ b/projects/aca-testing-shared/src/utilities/repo-client/apis/sites/sites-api.ts @@ -25,9 +25,9 @@ import { RepoApi } from '../repo-api'; import { Logger } from '@alfresco/adf-testing'; import { - SiteBody, - SiteMemberRoleBody, - SiteMemberBody, + SiteBodyCreate, + SiteMembershipBodyUpdate, + SiteMembershipBodyCreate, SiteEntry, SiteMembershipRequestEntry, SitesApi as AdfSiteApi, @@ -69,7 +69,7 @@ export class SitesApi extends RepoApi { visibility: visibility || SITE_VISIBILITY.PUBLIC, description: description, id: siteId || title - } as SiteBody; + } as SiteBodyCreate; try { await this.apiAuth(); @@ -136,7 +136,7 @@ export class SitesApi extends RepoApi { async updateSiteMember(siteId: string, userId: string, role: string) { const siteRole = { role: role - } as SiteMemberRoleBody; + } as SiteMembershipBodyUpdate; try { await this.apiAuth(); @@ -151,7 +151,7 @@ export class SitesApi extends RepoApi { const memberBody = { id: userId, role: role - } as SiteMemberBody; + } as SiteMembershipBodyCreate; try { await this.apiAuth(); diff --git a/projects/aca-testing-shared/src/utilities/repo-client/apis/upload/upload-api.ts b/projects/aca-testing-shared/src/utilities/repo-client/apis/upload/upload-api.ts index 64c098375..3815e2276 100644 --- a/projects/aca-testing-shared/src/utilities/repo-client/apis/upload/upload-api.ts +++ b/projects/aca-testing-shared/src/utilities/repo-client/apis/upload/upload-api.ts @@ -23,7 +23,7 @@ */ import { RepoApi } from '../repo-api'; -import { UploadApi as AdfUploadApi } from '@alfresco/js-api'; +import { NodeBodyCreate, UploadApi as AdfUploadApi } from '@alfresco/js-api'; import { browser } from 'protractor'; import * as fs from 'fs'; @@ -66,7 +66,7 @@ export class UploadApi extends RepoApi { try { await this.apiAuth(); - return await this.upload.uploadFile(file, '', parentId, nodeProps, opts); + return await this.upload.uploadFile(file, '', parentId, nodeProps as NodeBodyCreate, opts); } catch (error) { this.handleError(`${this.constructor.name} ${this.uploadFileWithRename.name}`, error); }