From a900dd2551ffbb92321814332bc92f6d5ff98fdd Mon Sep 17 00:00:00 2001 From: Anukriti Singh <106949107+AnukritiGL@users.noreply.github.com> Date: Thu, 21 Dec 2023 16:37:13 +0530 Subject: [PATCH] [ACS-5645] Property Panel Feature (#8995) * [ACS-5645]Added edit functionality for each panel and updated test cases * metadata e2e fix * [ACS-5725]fixed failing e2es * added unit test cases for new functionality * minor fixes * minor fixes * minor fixes * [ACS-5645]code modification * [ACS-5645]removed unwanted code * [ACS-5645]modified the changes * [ACS-5645]removed unwanted space * [ACS-5645]removed unwanted code * [ACS-5645]Implemented changes as per the review comments * linting fixes * [ACS-5645]minor fixes * [ACS-5645] removed unwanted code * [ACS-5645]modified the change * [ACS-5645]aligned input * [ACS-5645]modified changes * [ACS-5645]Implemented the changes as per the review comments * [ACS-5645]linting fixes * [ACS-5645]fixed sonarcloud issue * [ACS-5645]fixed errors * [ACS-5645]rename the function * [ACS-5645]fixes linting * [ACS-5540]lint fixes * [ACS-5645]Implemented the changes as per review comments * [ACS-5645] Removed unused code * [ACS-5645]linting fixes * [ACS-5645]fixes for lint * [ACS-5645] e2e fixes * [ACS-5645]Added translation * [ACS-5645]fixes for e2e * [ACS-5645]fixes for e2e * [ACS-5645]e2e fixes * [ACS-5645] Renamed the theme * [ACS-5645]modified changes * [ACS-5645] fixed lock-file bug * [ACS-5645] added tooltips for save and cancel icons * [ACS-5645] Modified the changes * [ACS-5645]Modified the changes * [ACS-5645] Implemented the changes as per the review comments * [ACS-5645] Implemented the changes as per the review comments * [ACS-5645]Modified the changes * [ACS-5645] added group panel lock changes * [ACS-5645] Resolved sonarcloud issue * [ACS-5645] added test cases for tags component * [ACS-5645] updated the documentation * [ACS-5645] updated the documentation * [ACS-5645] updated the documentation * [ACS-5645] Implemented changes as per review comments * [ACS-5645] lint fixes * [ACS-5645] Implemented the review comments * [ACS-5645] added focus * [ACS-5645] modified the changes * [ACS-5645] Lint fixes * [ACS-5645] Lint fixes * [ACS-5645] Lint fixes * [ACS-5645] Removed unwanted code * [ACS-5645] fixed sonarcloud issue * [ACS-5645] Added missing translation key * [ACS-5645] renamed the methods * [ACS-5645]Added edit functionality for each panel and updated test cases * [ACS-5645]code modification * [ACS-5645]removed unwanted code * [ACS-5645]Implemented changes as per the review comments * [ACS-5645]Implemented the changes as per review comments * [ACS-5645]linting fixes * [ACS-5645] fixed lock-file bug * [ACS-5645] Modified the changes * [ACS-5645] added group panel lock changes * [ACS-5645]Added edit functionality for each panel and updated test cases * minor fixes * [ACS-5645] Modified the changes * [ACS-5645] added group panel lock changes * [ACS-5645]Added edit functionality for each panel and updated test cases * metadata e2e fix * [ACS-5725]fixed failing e2es * minor fixes * [ACS-5645]removed unwanted code * [ACS-5645]Implemented changes as per the review comments * [ACS-5551] property panel design * [ACS-5551] minor changes * [ACS-5551]minor change * [ACS-5551] updated checks for non -editable field * [ACS-5551] modified the changes * [ACS-5551] modified changes * [ACS-5551] content-metadata updated * [ACS-5551] code updated * [ACS-5551] remove extra space * fixed scrollbar issue * [ACS-5551] margin adjusted * Fixed ACS-6110 * [ACS-5551] design updated * [ACCS-5551] unit test added * [ACS-5551] margin issue fixed * scroll issue fixed * [ACS-5551] color updated * [ACS-5551] design modify * [ACS-5551] add missing methods * [ACS-5654] translation added * [ACS-5645] style updated * [ACS-5654] hide toggle button for aspects * [ACS-5645] theme updated * [ACS-5645] tags and category tyle update * [ACS-5645] unit test update * [ACS-5645] code updated as per comments * [ACS-5645] linting issue fix * [ACS-5645] fixed the failed unit test cases * [ACS-5645] e2e fixes * [ACS-5645] e2e modify * [ACS-5645] aspect issue resolved * [ACS-5645] Address the comments * [ACS-5645] Address the comments * [ACS-5645] tags list design modify * [ACS-5645] design modify for chips * [ACS-5645] Removed unused property * [ACS-5645] Stop reload on panel cancel changes * [ACS-5645] Linting issue fixed * revert file change * [ACS-5645] update aspect issue fix * Revert "[ACS-5645] update aspect issue fix" This reverts commit 5212112f2293ad4c29afdd7c7faaf897cd3d00f6. * reduce layout duplicates, header panel component * code improvements * remove useless logging * cleanup css, remove mat-divider, fix tests * remove useless styles * cleanup e2e * cleanup useless events * rename nodeIcon to just icon * disable transition animation for tabs * remove "editable" hacks * improved naming for state properties * bug fixes for process cloud * css stylelint fixes * rework component, cleanup useless code * fix allowable operations and readonly state * wait for button * cleanup css, disable e2e * remove demo-shell only content, fix metadata * restore reset date functionality * fix incorrect styling * fix clear date button styles * cleanup text item styles * remove useless classes * text item rework, code cleanup * style bug fixes * cleanup useless tests * fix styles and tests * bug fixes for select item styles, revert PR changes * rework categories styles * rework tags creator styles * rollback divider module * fix css variable naming * fix issue with hidden properties * fix key value pairs layout and styles * fix tag creator validation * remove incorrect styles, raise proper errors * fix unit tests * fix theme vars naming * remove css hacks for date items * fix error borders * fix css bugs * reduce code * cleanup e2e and en.json * fix css linting * cleanup unused template refs * remove useless div for metadata container * cleanup expanders api * cleanup and remove useless tests * cleanup i18n * cleanup tests * cleanup css * cleanup css * [ACS-5654] added the missing theme variables * review comments resolved * fixed css issue * [ACS-5654] removesd extra div * [ACS-5654] save and cancel button bug fix * [ACS-5654] unit test fix for expand the panel * [ACS-5645] design issues fix * [ACS-5654] cards design fixed * [ACS-5654] node icon added to thumbnail service * [ACS-5645] linting issue fixed * [ACS-5645] thumbnail unit test updated * [ACS-5645] linting updated * [ACS-5645] removed extra div * [ACS-5645] important removed * [ACS-5645] tags text issue fix * [ACS-5645] add missed class * [ACS-5645] removed unused classes * [ACS-5645] removed unused code * revert flags to original state * fix missing semicolon * fix linting issues * reduce code duplication * code cleanup * [ACS-5645] unit test fix * [ACS-5645] e2e fix for edit button * fix linting issue for e2e * Replaced getNodeIcon from thumbnail to content service * fix indentation * refactor css variable * use rgba color value --------- Co-authored-by: Yasa-Nataliya Co-authored-by: pkundu Co-authored-by: rbahirsheth Co-authored-by: Denys Vuika --- .../file-view/file-view.component.html | 25 +- .../app/components/files/files.component.html | 8 +- .../content-metadata-card.component.md | 7 +- .../components/tags-creator.component.md | 3 +- docs/docassets/images/UI_property_panel.png | Bin 0 -> 147063 bytes docs/tutorials/content-metadata-component.md | 10 +- .../viewer-content-services-component.e2e.ts | 4 +- .../metadata/metadata-content-type.e2e.ts | 24 +- .../metadata/metadata-permissions.e2e.ts | 31 +- .../metadata/metadata-properties.e2e.ts | 25 +- .../metadata/metadata-smoke-tests.e2e.ts | 70 +-- e2e/core/pages/metadata-view.page.ts | 44 +- .../categories-management.component.html | 49 +- .../categories-management.component.scss | 27 +- .../categories-management.component.spec.ts | 44 +- .../categories-management.component.ts | 18 +- .../common/services/content.service.spec.ts | 48 ++ .../lib/common/services/content.service.ts | 48 +- .../content-metadata-card.component.html | 20 +- .../content-metadata-card.component.spec.ts | 65 --- .../content-metadata-card.component.ts | 15 +- .../content-metadata-header.component.ts | 55 ++ .../content-metadata.component.html | 341 +++++++---- .../content-metadata.component.scss | 91 +-- .../content-metadata.component.spec.ts | 552 +++++++++++------- .../content-metadata.component.ts | 352 ++++++++--- .../components/content-metadata/mock-data.ts | 8 +- .../content-metadata.module.ts | 7 +- .../interfaces/card-view-group.interface.ts | 2 + ...content-metadata-custom-panel.interface.ts | 1 + .../src/lib/content-metadata/public-api.ts | 3 +- ...property-groups-translator.service.spec.ts | 10 +- .../property-groups-translator.service.ts | 12 +- lib/content-services/src/lib/i18n/en.json | 15 +- .../tags-creator/tags-creator.component.html | 53 +- .../tags-creator/tags-creator.component.scss | 57 +- .../tags-creator.component.spec.ts | 74 +-- .../tags-creator/tags-creator.component.ts | 26 +- .../card-view/components/base-card-view.ts | 15 + .../card-view-arrayitem.component.ts | 6 +- .../card-view-boolitem.component.html | 4 +- .../card-view-boolitem.component.ts | 9 +- .../card-view-dateitem.component.html | 115 ++-- .../card-view-dateitem.component.scss | 60 +- .../card-view-dateitem.component.spec.ts | 2 +- .../card-view-dateitem.component.ts | 22 +- ...card-view-keyvaluepairsitem.component.html | 71 +-- ...card-view-keyvaluepairsitem.component.scss | 71 +-- ...d-view-keyvaluepairsitem.component.spec.ts | 4 +- .../card-view-keyvaluepairsitem.component.ts | 14 +- .../card-view-mapitem.component.ts | 3 - .../card-view-selectitem.component.html | 22 +- .../card-view-selectitem.component.scss | 50 +- .../card-view-selectitem.component.spec.ts | 6 +- .../card-view-selectitem.component.ts | 30 +- .../card-view-textitem.component.html | 122 ++-- .../card-view-textitem.component.scss | 215 ++----- .../card-view-textitem.component.spec.ts | 58 +- .../card-view-textitem.component.ts | 30 +- .../card-view/card-view.component.scss | 96 ++- .../lib/common/services/thumbnail.service.ts | 2 +- lib/core/src/lib/i18n/en.json | 9 +- .../info-drawer-layout.component.html | 1 + .../info-drawer-layout.component.scss | 22 +- .../info-drawer/info-drawer.component.html | 8 +- .../info-drawer/info-drawer.component.scss | 17 +- .../info-drawer/info-drawer.component.spec.ts | 53 +- .../lib/info-drawer/info-drawer.component.ts | 3 + .../src/lib/styles/_components-variables.scss | 11 +- lib/core/src/lib/styles/_index.scss | 1 - .../src/lib/styles/_reference-variables.scss | 6 + .../properties-viewer-wrapper.component.html | 19 +- .../task-header-cloud.component.spec.ts | 43 -- .../card-view/card-view-text-item.page.ts | 2 +- 74 files changed, 1814 insertions(+), 1652 deletions(-) create mode 100644 docs/docassets/images/UI_property_panel.png create mode 100644 lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata-header.component.ts diff --git a/demo-shell/src/app/components/file-view/file-view.component.html b/demo-shell/src/app/components/file-view/file-view.component.html index 1fab5fc9ae..936ed69521 100644 --- a/demo-shell/src/app/components/file-view/file-view.component.html +++ b/demo-shell/src/app/components/file-view/file-view.component.html @@ -29,20 +29,17 @@ - - - + +

- - + [displayEmpty]="displayEmptyMetadata" + [displayTags]="true" + [displayCategories]="true"> + diff --git a/docs/content-services/components/content-metadata-card.component.md b/docs/content-services/components/content-metadata-card.component.md index e9257a9d1e..bf54548536 100644 --- a/docs/content-services/components/content-metadata-card.component.md +++ b/docs/content-services/components/content-metadata-card.component.md @@ -56,12 +56,6 @@ Displays and edits metadata related to a node. | editable | `boolean` | | (optional) This flag toggles editable of content. | | customPanels | [`ContentMetadataCustomPanel`](../interfaces/content-metadata-custom-panel.interface.md)`[]` | | (optional) List of custom metadata panels to be displayed as [`Dynamic components`](../../extensions/components/dynamic.component.md). | -### Events - -| Name | Type | Description | -|----------------|-----------------------------------------------------------------------|---------------------------------------------------| -| editableChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when content's editable state is changed. | - ## Details The component shows metadata related to a given node. It uses the @@ -444,3 +438,4 @@ When the list of values is too long, the options selection panel will be enhance ## Custom metadata panels If there is a need to display some custom node properties that require additional UI or data to be fetched you can define custom metadata panels for the metadata component. After creating custom component to be displayed it has to be registered in [Extension Service](../../extensions/services/extension.service.md). Both `panelTitle` and `component` properties have to be defined. +![Chips for multi value properties](../../docassets/images/adf-search-select.png) diff --git a/docs/content-services/components/tags-creator.component.md b/docs/content-services/components/tags-creator.component.md index 30d5919833..d4303b954a 100644 --- a/docs/content-services/components/tags-creator.component.md +++ b/docs/content-services/components/tags-creator.component.md @@ -13,7 +13,7 @@ Allows to create multiple tags. That component contains input and two lists. Top ```html @@ -35,5 +35,4 @@ Allows to create multiple tags. That component contains input and two lists. Top | Name | Type | Description | | ---- | ---- | ----------- | | existingTagsPanelVisibilityChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when bottom list is showing or hiding. | -| tagNameControlVisibleChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when input is showing or hiding. | | tagsChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when tags in top list are changed. | diff --git a/docs/docassets/images/UI_property_panel.png b/docs/docassets/images/UI_property_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..7c236b27c88896f7e2991825680197f5de7466b6 GIT binary patch literal 147063 zcmeFZbyV9+*EZZzD6~KgD_+B)6faIof#Mz@xVyVUIfWLdIKhL5;O;HO37!O(;=u|b zxV$;%d2c!PoWH;Iy{tt@!p!XXZMnwwHJ??KWQgxl-Mw++2C?k>cWO6o;8WeWaVvx1 zHujq;cFPLvA6(bBvKj=~A3p-KPd9Enxgq=RjfR)O_S_x4M9r(7eMcPqE?hn*N-4!x z6s57`U2@Jqr>Ytj@Yo}0zlmTjhXi5q$AS;b zI4^@fXnnt0Z~TB`kPxx$H?-x>lesFg-jWsO%Q?Jvn&J9&6fAT70PiO51BvYKIAQl_ z)t0-XVH$9#Esx^vL_?jl~**h|4@#V z1uIxClbAIc??Vg)lOQ%6bvoq7MqsM#iX1iXM!aT%F^ zC@1%;;4g(y($D{;tiQIRN+s4C*brIZe=5iDtKhzIY4AU}*Z&9Hu%p%F{;zS8&5k>^ zlj1#OHEzvQO;lD#lOs5cK4NA3B<%M zMuLH?f}4`*+Ou*1T79&SK4PdIH5c^w6G#N7J$XRuE8!}>kYDSJU*p@}%IG$=D#qVB zS+JWyWitYWky6c$tX>lC8A&gVFLj2QUxMP})xG${DV{E_trbky+HU1WymYyce}jFd ze#xL5^#RFL(5SVCq_fj;vEF~~O<&B5s-Q9!b+-`Z(gfao3!#IEK@9%t;pl!f zY66ExKq|D=rVTQY;QSIJj)-F{toiU9~w{B!y^CfjUW}L82I+>OPHNPS{$(*33fn@N{GPAUmx9 zCnWuKfF1x&penk*9-K>>I+pB#6t#e@ z9|4FVe;t>1^dg)|f#*snzs@Ms!$nQF?}k<2k-(nSM0!@nVVAsUw*sKOP6<#+5PX-M z8FO-6VS-Bu6{8nU2#`h|@ARo`q`)lMEpOrwJPzKzJi818#O|9-WwprbFezQNC&Sd^ zuS6=oDVl1}LF}lI z-&%nEWk4;tqBn4ur*3gddzLQ43YSZo9sph>fwBHGx&PYGFne++C$dN*P6 z8d{0O-OS0)e<)G8g>J{Ð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

  • 1D|P(H?y3-IrPWC6+xv)zCD-djkoIG=?bdc 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 YUSDmm+5q6fzHXh3wcUxItS%({8~ ``` +### Properties + +| Name | Type | Default value | Description | +| ---- | ---- | ------------- | ----------- | +| readOnly | `boolean` | false | (optional) This flag sets the metadata in read only mode preventing changes. | + ### Viewing the result -After saving the html file, open the ADF app in a browser and dive into the `Personal Files > Sites > swsdp` folder of the Alfresco's repository. Once there, select the `documentLibrary` folder (one click only) and click on the view details icon (the `i` on the top right). Scrolling down the metadata tab on the right, click on the `More information` item at the bottom. Once clicked, you will see two different groups: `Properties` (already there by default) and `This is my preset`. Click on `This is my preset` to show the properties related. +After saving the html file, open the ADF app in a browser and dive into the `Personal Files > Sites > swsdp` folder of the Alfresco's repository. Once there, select the `documentLibrary` folder (one click only) and click on the view details icon (the `menu_open icon` on the top right). Scrolling down the metadata tab on the right. You will see different panels: `Properties` (already there by default), `Tags`, `Categories` and `grouped properties`. In the following screenshot you can see how the result should look: -![content_metadata_preset](../docassets/images/content_metadata_preset.png) +![UI_Property_Panel](../docassets/images/UI_property_panel.png) To check it out, double click on the `documentLibrary` folder and select (with one click) the `Presentations` folder. You should see the `This is my preset` group disappear from the metadata panel, because the node doesn't have the `st:siteContainer` aspect. diff --git a/e2e/content-services/components/viewer-content-services-component.e2e.ts b/e2e/content-services/components/viewer-content-services-component.e2e.ts index f38cdb292c..13c314891e 100644 --- a/e2e/content-services/components/viewer-content-services-component.e2e.ts +++ b/e2e/content-services/components/viewer-content-services-component.e2e.ts @@ -426,9 +426,9 @@ describe('Content Services Viewer', () => { await viewerPage.checkInfoSideBarIsDisplayed(); await viewerPage.clickOnTab('Properties'); await viewerPage.checkTabIsActive('Properties'); - await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditIconGeneral(); await metadataViewPage.enterPropertyText('properties.cm:name', newName); - await metadataViewPage.clickSaveMetadata(); + await metadataViewPage.clickSaveGeneralMetadata(); await viewerPage.clickCloseButton(); } }); diff --git a/e2e/content-services/metadata/metadata-content-type.e2e.ts b/e2e/content-services/metadata/metadata-content-type.e2e.ts index c3647fc851..29c84300e4 100644 --- a/e2e/content-services/metadata/metadata-content-type.e2e.ts +++ b/e2e/content-services/metadata/metadata-content-type.e2e.ts @@ -114,16 +114,16 @@ describe('content type', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual('PROPERTIES'); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); const defaultType = (await metadataViewPage.hasContentType('Content')) || (await metadataViewPage.hasContentType('cm:content')); await expect(defaultType).toBe(true, 'Content type not found'); - await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditIconGeneral(); await expect(await metadataViewPage.changeContentType(type.title)).toBe(true, 'Failed to update node type.'); - await metadataViewPage.clickSaveMetadata(); + await metadataViewPage.clickSaveGeneralMetadata(); await metadataViewPage.checkConfirmDialogDisplayed(); await metadataViewPage.applyNodeProperties(); @@ -139,9 +139,9 @@ describe('content type', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual('PROPERTIES'); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); const customType = (await metadataViewPage.hasContentType(type.title)) || (await metadataViewPage.hasContentType(`${model.namespacePrefix}:${type.name}`)); await expect(customType).toBe(true, 'Custom type not found'); await expect(await metadataViewPage.getPropertyText(`properties.${model.namespacePrefix}:${property.name}`)).toContain(property.defaultValue); @@ -155,16 +155,16 @@ describe('content type', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual('PROPERTIES'); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); let defaultType = (await metadataViewPage.hasContentType('Content')) || (await metadataViewPage.hasContentType('cm:content')); await expect(defaultType).toBe(true, 'Content type not found'); - await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditIconGeneral(); await expect(await metadataViewPage.changeContentType(type.title)).toBe(true, 'Failed to update node type.'); - await metadataViewPage.clickSaveMetadata(); + await metadataViewPage.clickSaveGeneralMetadata(); await metadataViewPage.checkConfirmDialogDisplayed(); await metadataViewPage.cancelNodeProperties(); @@ -178,9 +178,9 @@ describe('content type', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual('PROPERTIES'); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); defaultType = (await metadataViewPage.hasContentType('Content')) || (await metadataViewPage.hasContentType('cm:content')); await expect(defaultType).toBe(true, 'Content type not found'); await viewerPage.clickCloseButton(); diff --git a/e2e/content-services/metadata/metadata-permissions.e2e.ts b/e2e/content-services/metadata/metadata-permissions.e2e.ts index 6884b1b8b0..fcbcb506b8 100644 --- a/e2e/content-services/metadata/metadata-permissions.e2e.ts +++ b/e2e/content-services/metadata/metadata-permissions.e2e.ts @@ -15,14 +15,7 @@ * limitations under the License. */ -import { createApiService, - LoginPage, - StringUtil, - UploadActions, - UserModel, - UsersActions, - ViewerPage -} from '@alfresco/adf-testing'; +import { createApiService, LoginPage, StringUtil, UploadActions, UserModel, UsersActions, ViewerPage } from '@alfresco/adf-testing'; import { MetadataViewPage } from '../../core/pages/metadata-view.page'; import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; import { FileModel } from '../../models/ACS/file.model'; @@ -31,20 +24,6 @@ import CONSTANTS = require('../../util/constants'); import { SitesApi } from '@alfresco/js-api'; describe('permissions', () => { - - const METADATA = { - DATA_FORMAT: 'mmm dd yyyy', - TITLE: 'Details', - COMMENTS_TAB: 'COMMENTS', - PROPERTY_TAB: 'PROPERTIES', - DEFAULT_ASPECT: 'Properties', - MORE_INFO_BUTTON: 'More information', - LESS_INFO_BUTTON: 'Less information', - ARROW_DOWN: 'keyboard_arrow_down', - ARROW_UP: 'keyboard_arrow_up', - EDIT_BUTTON_TOOLTIP: 'Edit' - }; - const loginPage = new LoginPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); @@ -130,9 +109,7 @@ describe('permissions', () => { await metadataViewPage.clickOnPropertiesTab(); await metadataViewPage.editIconIsDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - - await metadataViewPage.clickOnInformationButton(); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); await metadataViewPage.clickMetadataGroup('EXIF'); @@ -150,9 +127,7 @@ describe('permissions', () => { await metadataViewPage.clickOnPropertiesTab(); await metadataViewPage.editIconIsDisplayed(); - await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - - await metadataViewPage.clickOnInformationButton(); + await expect(await viewerPage.getActiveTab()).toEqual('Properties'); await metadataViewPage.clickMetadataGroup('EXIF'); diff --git a/e2e/content-services/metadata/metadata-properties.e2e.ts b/e2e/content-services/metadata/metadata-properties.e2e.ts index 502e7721a8..629cd93720 100644 --- a/e2e/content-services/metadata/metadata-properties.e2e.ts +++ b/e2e/content-services/metadata/metadata-properties.e2e.ts @@ -34,13 +34,9 @@ describe('CardView Component - properties', () => { const METADATA = { DATA_FORMAT: 'mmm dd yyyy', TITLE: 'Details', - COMMENTS_TAB: 'COMMENTS', - PROPERTY_TAB: 'PROPERTIES', + COMMENTS_TAB: 'Comments', + PROPERTY_TAB: 'Properties', DEFAULT_ASPECT: 'Properties', - MORE_INFO_BUTTON: 'More information', - LESS_INFO_BUTTON: 'Less information', - ARROW_DOWN: 'keyboard_arrow_down', - ARROW_UP: 'keyboard_arrow_up', EDIT_BUTTON_TOOLTIP: 'Edit' }; @@ -90,7 +86,6 @@ describe('CardView Component - properties', () => { await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - await metadataViewPage.clickOnInformationButton(); await metadataViewPage.clickMetadataGroup('EXIF'); @@ -108,11 +103,9 @@ describe('CardView Component - properties', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); await CheckboxPage.check(metadataViewPage.readonlySwitch); - - await metadataViewPage.editIconIsNotDisplayed(); }); it('[C268965] Should multi property allow expand multi accordion at the same time when set', async () => { @@ -121,15 +114,9 @@ describe('CardView Component - properties', () => { await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.clickOnInformationButton(); - await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); - await metadataViewPage.checkMetadataGroupIsNotExpand('properties'); - - await metadataViewPage.clickMetadataGroup('properties'); - - await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); await metadataViewPage.checkMetadataGroupIsExpand('properties'); + await metadataViewPage.checkMetadataGroupIsNotExpand('EXIF'); await metadataViewPage.clickMetadataGroup('EXIF'); @@ -168,11 +155,7 @@ describe('CardView Component - properties', () => { await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.informationButtonIsDisplayed(); - await CheckboxPage.uncheck(metadataViewPage.defaultPropertiesSwitch); - - await metadataViewPage.informationButtonIsNotDisplayed(); }); it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', async () => { diff --git a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts index a8586adaf6..ff66f84ecd 100644 --- a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts +++ b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts @@ -36,14 +36,9 @@ describe('Metadata component', () => { const METADATA = { DATA_FORMAT: 'PP', TITLE: 'Details', - COMMENTS_TAB: 'COMMENTS', - PROPERTY_TAB: 'PROPERTIES', - DEFAULT_ASPECT: 'Properties', - MORE_INFO_BUTTON: 'More information', - LESS_INFO_BUTTON: 'Less information', - ARROW_DOWN: 'keyboard_arrow_down', - ARROW_UP: 'keyboard_arrow_up', - EDIT_BUTTON_TOOLTIP: 'Edit' + COMMENTS_TAB: 'Comments', + PROPERTY_TAB: 'Properties', + DEFAULT_ASPECT: 'General info' }; const loginPage = new LoginPage(); @@ -103,7 +98,7 @@ describe('Metadata component', () => { await contentServicesPage.waitForTableBody(); }); - it("[C245652] Should be possible to display a file's properties", async () => { + it('[C245652] Should be possible to display a file properties', async () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); @@ -129,36 +124,12 @@ describe('Metadata component', () => { expect(modifiedDate).toEqual(format(new Date(pngFileModel.createdAt), METADATA.DATA_FORMAT), pngFileModel.createdAt); expect(mimeTypeName).toEqual(pngFileModel.getContent().mimeTypeName); expect(size).toEqual(pngFileModel.getContent().getSizeInBytes()); - - await metadataViewPage.editIconIsDisplayed(); - await metadataViewPage.informationButtonIsDisplayed(); - - const informationButtonText = await metadataViewPage.getInformationButtonText(); - const informationIconText = await metadataViewPage.getInformationIconText(); - - expect(informationButtonText).toEqual(METADATA.MORE_INFO_BUTTON); - expect(informationIconText).toEqual(METADATA.ARROW_DOWN); - }); - - it('[C272769] Should be possible to display more details when clicking on More Information button', async () => { - await viewerPage.clickInfoButton(); - await viewerPage.checkInfoSideBarIsDisplayed(); - await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.informationButtonIsDisplayed(); - await metadataViewPage.clickOnInformationButton(); - - const informationButtonText = await metadataViewPage.getInformationButtonText(); - const informationIconText = await metadataViewPage.getInformationIconText(); - - expect(informationButtonText).toEqual(METADATA.LESS_INFO_BUTTON); - expect(informationIconText).toEqual(METADATA.ARROW_UP); }); it('[C270952] Should be possible to open/close properties using info icon', async () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.informationButtonIsDisplayed(); await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsNotDisplayed(); await viewerPage.clickInfoButton(); @@ -166,25 +137,17 @@ describe('Metadata component', () => { await expect(await viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB); await metadataViewPage.clickOnPropertiesTab(); await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - await expect(await metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP); }); it('[C245654] Should be possible edit the basic Metadata Info of a Document', async () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - await metadataViewPage.editIconClick(); - await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:name'); - await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title'); - await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description'); - - await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:name')).toEqual('Edit'); - await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit'); - await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit'); + await metadataViewPage.clickEditIconGeneral(); await metadataViewPage.enterPropertyText('properties.cm:name', 'exampleText'); await metadataViewPage.clickResetMetadata(); @@ -192,14 +155,15 @@ describe('Metadata component', () => { browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name ); + await metadataViewPage.clickEditIconGeneral(); await metadataViewPage.enterPropertyText('properties.cm:name', 'exampleText.png'); await metadataViewPage.enterPropertyText('properties.cm:title', 'example title'); await metadataViewPage.enterDescriptionText('example description'); + await metadataViewPage.clickSaveGeneralMetadata(); await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual('exampleText.png'); await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - await metadataViewPage.clickSaveMetadata(); await viewerPage.clickCloseButton(); await contentServicesPage.waitForTableBody(); @@ -208,32 +172,26 @@ describe('Metadata component', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual('exampleText.png'); await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title'); - await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description'); - await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditIconGeneral(); await metadataViewPage.enterPropertyText('properties.cm:name', browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name); await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual( browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name ); - await metadataViewPage.clickSaveMetadata(); + await metadataViewPage.clickSaveGeneralMetadata(); }); it('[C260181] Should be possible edit all the metadata aspect', async () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - - await metadataViewPage.clickOnInformationButton(); - await metadataViewPage.clickMetadataGroup('EXIF'); - await metadataViewPage.editIconClick(); await metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software'); @@ -255,14 +213,14 @@ describe('Metadata component', () => { await viewerPage.clickInfoButton(); await viewerPage.checkInfoSideBarIsDisplayed(); await metadataViewPage.clickOnPropertiesTab(); - await metadataViewPage.editIconIsDisplayed(); + await metadataViewPage.isEditGeneralIconDisplayed(); await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB); - await metadataViewPage.editIconClick(); + await metadataViewPage.clickEditIconGeneral(); await metadataViewPage.enterDescriptionText('check author example description'); - await metadataViewPage.clickSaveMetadata(); + await metadataViewPage.clickSaveGeneralMetadata(); await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description'); await navigationBarPage.clickLogoutButton(); diff --git a/e2e/core/pages/metadata-view.page.ts b/e2e/core/pages/metadata-view.page.ts index 03c67b4724..8815076cbe 100644 --- a/e2e/core/pages/metadata-view.page.ts +++ b/e2e/core/pages/metadata-view.page.ts @@ -32,9 +32,7 @@ export class MetadataViewPage { description = $(`span[data-automation-id='card-textitem-value-properties.cm:description']`); author = $(`[data-automation-id='card-textitem-value-properties.cm:author']`); editIcon = $(`button[data-automation-id='meta-data-card-toggle-edit']`); - informationButton = $(`button[data-automation-id='meta-data-card-toggle-expand']`); - informationSpan = $(`span[data-automation-id='meta-data-card-toggle-expand-label']`); - informationIcon = $(`span[data-automation-id='meta-data-card-toggle-expand-label'] ~ mat-icon`); + editIconGeneral = $(`button[data-automation-id='meta-data-general-info-edit']`); displayEmptySwitch = $(`#adf-metadata-empty`); readonlySwitch = $(`#adf-metadata-readonly`); multiSwitch = $(`#adf-metadata-multi`); @@ -43,6 +41,7 @@ export class MetadataViewPage { displayAspect = $(`input[data-placeholder='Display Aspect']`); applyAspect = element(by.cssContainingText(`button span.mat-button-wrapper`, 'Apply Aspect')); saveMetadataButton = $(`[data-automation-id='save-metadata']`); + saveGeneralMetadataButton = $(`[data-automation-id='save-general-info-metadata']`); resetMetadataButton = $(`[data-automation-id='reset-metadata']`); private getMetadataGroupLocator = async (groupName: string): Promise => @@ -102,28 +101,17 @@ export class MetadataViewPage { await BrowserVisibility.waitUntilElementIsNotVisible(this.editIcon); } + async isEditGeneralIconDisplayed(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editIconGeneral); + } + async editIconClick(): Promise { await BrowserActions.clickExecuteScript('button[data-automation-id="meta-data-card-toggle-edit"]'); } - async informationButtonIsDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsClickable(this.informationButton); - } - - async informationButtonIsNotDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton); - } - - async clickOnInformationButton(): Promise { - await BrowserActions.click(this.informationButton); - } - - async getInformationButtonText(): Promise { - return BrowserActions.getText(this.informationSpan); - } - - async getInformationIconText(): Promise { - return BrowserActions.getText(this.informationIcon); + async clickEditIconGeneral(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.editIconGeneral); + await BrowserActions.click(this.editIconGeneral); } async clickOnPropertiesTab(): Promise { @@ -137,11 +125,6 @@ export class MetadataViewPage { return BrowserActions.getAttribute(this.editIcon, 'title'); } - async editPropertyIconIsDisplayed(propertyName: string) { - const editPropertyIcon = $('[data-automation-id="header-' + propertyName + '"] .adf-textitem-edit-icon'); - await BrowserVisibility.waitUntilElementIsPresent(editPropertyIcon); - } - async enterPropertyText(propertyName: string, text: string | number): Promise { const textField = $('input[data-automation-id="card-textitem-value-' + propertyName + '"]'); await BrowserActions.clearSendKeys(textField, text.toString()); @@ -161,11 +144,6 @@ export class MetadataViewPage { return BrowserActions.getInputValue(textField); } - async getPropertyIconTooltip(propertyName: string): Promise { - const editPropertyIcon = $('[data-automation-id="header-' + propertyName + '"] .adf-textitem-edit-icon'); - return BrowserActions.getAttribute(editPropertyIcon, 'title'); - } - async clickMetadataGroup(groupName: string): Promise { const group = await this.getMetadataGroupLocator(groupName); await BrowserActions.click(group); @@ -286,4 +264,8 @@ export class MetadataViewPage { async clickResetMetadata(): Promise { await BrowserActions.click(this.resetMetadataButton); } + + async clickSaveGeneralMetadata(): Promise { + await BrowserActions.click(this.saveGeneralMetadataButton); + } } diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.html b/lib/content-services/src/lib/category/categories-management/categories-management.component.html index f0ca8efe99..1f106b31a2 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.html +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.html @@ -1,10 +1,16 @@
    -

    - {{ noCategoriesMsg | translate }} -

    -
    +
    + + {{ categoryNameErrorMessageKey | translate }} +
    +
    @@ -21,33 +26,9 @@
    -
    - - search - - {{ 'CATEGORIES_MANAGEMENT.NAME' | translate }} - - - {{ categoryNameErrorMessageKey | translate }} - - -
    +

    + {{ noCategoriesMsg | translate }} +

    diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.scss b/lib/content-services/src/lib/category/categories-management/categories-management.component.scss index 31911029be..ffa69523b5 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.scss +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.scss @@ -1,15 +1,17 @@ .adf-categories-management { + padding-top: 12px; + .adf-category-name-field { - display: flex; justify-content: space-between; width: 100%; + color: var(--adf-metadata-property-panel-text-color); + background: var(--adf-metadata-buttons-background-color); + height: 32px; + border-radius: 12px; + align-items: center; - mat-form-field { - width: 100%; - } - - .adf-btn-padded { - margin-right: -14px; + input { + padding: 7px 8px; } } @@ -18,10 +20,6 @@ justify-content: space-between; align-items: center; word-break: break-word; - - .adf-btn-padded { - margin-right: -14px; - } } .adf-categories-padded { @@ -31,11 +29,14 @@ [hidden] { visibility: hidden; } + + .adf-no-categories-message { + margin-bottom: 0; + height: 30px; + } } .adf-categories-list { - padding-bottom: 10px; - .mat-list-base .mat-list-item, .mat-list-base .mat-list-option { display: flex; diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.spec.ts b/lib/content-services/src/lib/category/categories-management/categories-management.component.spec.ts index e7e88da813..25e41c8959 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.spec.ts +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.spec.ts @@ -223,44 +223,19 @@ describe('CategoriesManagementComponent', () => { component.categoryNameControlVisible = true; fixture.detectChanges(); }); - it('should be hidden initially', () => { - component.categoryNameControlVisible = false; - fixture.detectChanges(); - const categoryControl: HTMLDivElement = fixture.debugElement.query(By.css('.adf-category-name-field')).nativeElement; - expect(categoryControl.hidden).toBeTrue(); - }); it('should be visible when categoryNameControlVisible is true', () => { const categoryControl = fixture.debugElement.query(By.css('.adf-category-name-field')); expect(categoryControl).toBeTruthy(); }); + }); - it('should have correct label and hide button', () => { - const categoryControlLabel = fixture.debugElement.query(By.css('#adf-category-name-input-label')).nativeElement; - const categoryControlHideBtn: HTMLButtonElement = fixture.debugElement.query(By.css('.adf-category-name-field button')).nativeElement; - expect(categoryControlHideBtn).toBeTruthy(); - expect(categoryControlHideBtn.attributes.getNamedItem('title').textContent.trim()).toBe('CATEGORIES_MANAGEMENT.HIDE_INPUT'); - expect(categoryControlLabel.textContent.trim()).toBe('CATEGORIES_MANAGEMENT.NAME'); + describe('showEmptyCategoryMessage', () => { + it('should return true when categories empty and category in non editable state', () => { + component.categories = []; + component.categoryNameControlVisible = false; + expect(component.showEmptyCategoryMessage).toBeTrue(); }); - - it('should hide and clear category control and existing categories panel on clicking hide button', fakeAsync(() => { - typeCategory('test'); - const categoryControlHideBtn: HTMLButtonElement = fixture.debugElement.query(By.css('.adf-category-name-field button')).nativeElement; - const controlVisibilityChangeSpy = spyOn(component.categoryNameControlVisibleChange, 'emit').and.callThrough(); - categoryControlHideBtn.click(); - fixture.detectChanges(); - - const categoryControl: HTMLDivElement = fixture.debugElement.query(By.css('.adf-category-name-field')).nativeElement; - expect(categoryControl.hidden).toBeTrue(); - expect(component.categoryNameControlVisible).toBeFalse(); - expect(component.existingCategoriesPanelVisible).toBeFalse(); - expect(controlVisibilityChangeSpy).toHaveBeenCalledOnceWith(false); - - component.categoryNameControlVisible = true; - fixture.detectChanges(); - tick(100); - expect(getCategoryControlInput().value).toBe(''); - })); }); describe('Spinner', () => { @@ -472,13 +447,8 @@ describe('CategoriesManagementComponent', () => { expect(categoriesChangeSpy).toHaveBeenCalledOnceWith(component.categories); })); - it('should clear and hide input after category is created', fakeAsync(() => { - const controlVisibilityChangeSpy = spyOn(component.categoryNameControlVisibleChange, 'emit'); + it('should clear input after category is created', fakeAsync(() => { createCategory('test'); - const categoryControl: HTMLDivElement = fixture.debugElement.query(By.css('.adf-category-name-field')).nativeElement; - - expect(categoryControl.hidden).toBeTrue(); - expect(controlVisibilityChangeSpy).toHaveBeenCalledOnceWith(false); expect(getExistingCategoriesList()).toEqual([]); expect(component.categoryNameControl.value).toBe(''); expect(component.categoryNameControl.untouched).toBeTrue(); diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.ts b/lib/content-services/src/lib/category/categories-management/categories-management.component.ts index 51d4683fe1..e5fd1d24b5 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.ts +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.ts @@ -181,6 +181,13 @@ export class CategoriesManagementComponent implements OnInit, OnDestroy { return this._categoryNameControl; } + /* + * Returns `true` if categories empty and category panel non editable state, otherwise `false` + */ + get showEmptyCategoryMessage(): boolean { + return this.categories.length === 0 && !this.categoryNameControlVisible; + } + get existingCategories(): Category[] { return this._existingCategories; } @@ -205,16 +212,6 @@ export class CategoriesManagementComponent implements OnInit, OnDestroy { return this.managementMode === CategoriesManagementMode.CRUD; } - /** - * Hides and emits categoryNameControl and hides existing categories panel. - */ - hideNameInput() { - this.categoryNameControlVisible = false; - this.categoryNameControlVisibleChange.emit(false); - this._existingCategoriesPanelVisible = false; - this.clearCategoryNameInput(); - } - /** * Adds category that has been typed to a categoryNameControl and hides it afterwards. */ @@ -223,7 +220,6 @@ export class CategoriesManagementComponent implements OnInit, OnDestroy { const newCatName = this.categoryNameControl.value.trim(); const newCat = new Category({ id: newCatName, name: newCatName }); this.categories.push(newCat); - this.hideNameInput(); this.clearCategoryNameInput(); this._existingCategories = null; this.categoriesChange.emit(this.categories); diff --git a/lib/content-services/src/lib/common/services/content.service.spec.ts b/lib/content-services/src/lib/common/services/content.service.spec.ts index 74e3825412..7df05204cc 100644 --- a/lib/content-services/src/lib/common/services/content.service.spec.ts +++ b/lib/content-services/src/lib/common/services/content.service.spec.ts @@ -129,4 +129,52 @@ describe('ContentService', () => { expect(contentService.hasPermissions(permissionNode, 'manager')).toBeTruthy(); }); }); + + describe('Node Icons', () => { + let node: Node; + + node = { + isFolder: true, + isFile: false, + createdByUser: { id: 'admin', displayName: 'Administrator' }, + modifiedAt: new Date('2017-05-24T15:08:55.640Z'), + nodeType: 'cm:content', + content: { + mimeType: 'application/rtf', + mimeTypeName: 'Rich Text Format', + sizeInBytes: 14530 + }, + createdAt: new Date('2017-05-24T15:08:55.640Z'), + modifiedByUser: { id: 'admin', displayName: 'Administrator' }, + name: 'b_txt_file.rtf', + id: 'test node 1', + aspectNames: [''] + } as Node; + + it('should resolve folder icon', () => { + expect(contentService.getNodeIcon(node)).toContain('assets/images/ft_ic_folder.svg'); + }); + + it('should resolve link folder icon', () => { + node.nodeType = 'app:folderlink'; + expect(contentService.getNodeIcon(node)).toContain('assets/images/ft_ic_folder_shortcut_link.svg'); + }); + + it('should resolve smart folder icon', () => { + node.aspectNames = ['smf:customConfigSmartFolder']; + expect(contentService.getNodeIcon(node)).toContain('assets/images/ft_ic_smart_folder.svg'); + }); + + it('should resolve file icon for content type', () => { + node.isFolder = false; + node.isFile = true; + expect(contentService.getNodeIcon(node)).toContain('assets/images/ft_ic_ms_word.svg'); + }); + + it('should resolve fallback file icon for unknown node', () => { + node.isFolder = false; + node.isFile = false; + expect(contentService.getNodeIcon(node)).toContain('assets/images/ft_ic_miscellaneous'); + }); + }); }); diff --git a/lib/content-services/src/lib/common/services/content.service.ts b/lib/content-services/src/lib/common/services/content.service.ts index 379e360bc1..d55109a38d 100644 --- a/lib/content-services/src/lib/common/services/content.service.ts +++ b/lib/content-services/src/lib/common/services/content.service.ts @@ -18,7 +18,7 @@ import { Injectable } from '@angular/core'; import { ContentApi, Node, NodeEntry } from '@alfresco/js-api'; import { Subject } from 'rxjs'; -import { AlfrescoApiService, AuthenticationService } from '@alfresco/adf-core'; +import { AlfrescoApiService, AuthenticationService, ThumbnailService } from '@alfresco/adf-core'; import { PermissionsEnum } from '../models/permissions.enum'; import { AllowableOperationsEnum } from '../models/allowable-operations.enum'; @@ -43,7 +43,7 @@ export class ContentService { return this._contentApi; } - constructor(public authService: AuthenticationService, public apiService: AlfrescoApiService) {} + constructor(public authService: AuthenticationService, public apiService: AlfrescoApiService, private thumbnailService?: ThumbnailService) {} /** * Gets a content URL for the given node. @@ -145,4 +145,48 @@ export class ContentService { return hasAllowableOperations; } + + getNodeIcon(node: Node): string { + if (node?.isFolder) { + return this.getFolderIcon(node); + } + if (node?.isFile) { + return this.thumbnailService.getMimeTypeIcon(node?.content?.mimeType); + } + return this.thumbnailService.getDefaultMimeTypeIcon(); + } + + private getFolderIcon(node: Node): string { + if (this.isSmartFolder(node)) { + return this.thumbnailService.getMimeTypeIcon('smartFolder'); + } else if (this.isRuleFolder(node)) { + return this.thumbnailService.getMimeTypeIcon('ruleFolder'); + } else if (this.isLinkFolder(node)) { + return this.thumbnailService.getMimeTypeIcon('linkFolder'); + } else { + return this.thumbnailService.getMimeTypeIcon('folder'); + } + } + + isSmartFolder(node: Node): boolean { + if (node) { + return this.hasAspect(node, 'smf:customConfigSmartFolder') || this.hasAspect(node, 'smf:systemConfigSmartFolder'); + } + return false; + } + + isRuleFolder(node: Node): boolean { + if (node) { + return this.hasAspect(node, 'rule:rules'); + } + return false; + } + + isLinkFolder(node: Node): boolean { + return node?.nodeType === 'app:folderlink'; + } + + private hasAspect(node: Node, aspectName: string): boolean { + return node?.aspectNames?.includes(aspectName); + } } diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.html b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.html index 3b9930e3b9..d49b5d688b 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.html +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.html @@ -5,7 +5,7 @@ [expanded]="expanded" [node]="node" [displayEmpty]="displayEmpty" - [editable]="editable" + [readOnly]="!editable" [multi]="multi" [displayAspect]="displayAspect" [preset]="preset" @@ -24,24 +24,6 @@ data-automation-id="meta-data-card-edit-aspect"> menu -
    - diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.spec.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.spec.ts index 8d8416f17a..8cd19d3bd8 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.spec.ts +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.spec.ts @@ -114,14 +114,6 @@ describe('ContentMetadataCardComponent', () => { expect(contentMetadataComponent.displayEmpty).toBe(true); }); - it('should pass through the editable to the underlying component', () => { - component.editable = true; - fixture.detectChanges(); - const contentMetadataComponent = fixture.debugElement.query(By.directive(ContentMetadataComponent)).componentInstance; - - expect(contentMetadataComponent.editable).toBe(true); - }); - it('should pass through the multi to the underlying component', () => { component.multi = true; fixture.detectChanges(); @@ -147,55 +139,6 @@ describe('ContentMetadataCardComponent', () => { expect(contentMetadataComponent).toBeNull(); }); - it('should toggle editable by clicking on the button', () => { - component.editable = true; - component.node.allowableOperations = [AllowableOperationsEnum.UPDATE]; - fixture.detectChanges(); - - getToggleEditButton().triggerEventHandler('click', {}); - fixture.detectChanges(); - - expect(component.editable).toBe(false); - }); - - it('should emit editableChange by clicking on toggle edit button', () => { - component.node.allowableOperations = [AllowableOperationsEnum.UPDATE]; - fixture.detectChanges(); - spyOn(component.editableChange, 'emit'); - - getToggleEditButton().nativeElement.click(); - expect(component.editableChange.emit).toHaveBeenCalledWith(true); - }); - - it('should toggle expanded by clicking on the button', () => { - component.expanded = true; - fixture.detectChanges(); - - const button = fixture.debugElement.query(By.css('[data-automation-id="meta-data-card-toggle-expand"]')); - button.triggerEventHandler('click', {}); - fixture.detectChanges(); - - expect(component.expanded).toBe(false); - }); - - it('should have the proper text on button while collapsed', () => { - component.expanded = false; - fixture.detectChanges(); - - const buttonLabel = fixture.debugElement.query(By.css('[data-automation-id="meta-data-card-toggle-expand-label"]')); - - expect(buttonLabel.nativeElement.innerText.trim()).toBe('ADF_VIEWER.SIDEBAR.METADATA.MORE_INFORMATION'); - }); - - it('should have the proper text on button while collapsed', () => { - component.expanded = true; - fixture.detectChanges(); - - const buttonLabel = fixture.debugElement.query(By.css('[data-automation-id="meta-data-card-toggle-expand-label"]')); - - expect(buttonLabel.nativeElement.innerText.trim()).toBe('ADF_VIEWER.SIDEBAR.METADATA.LESS_INFORMATION'); - }); - it('should hide the edit button in readOnly is true', () => { component.readOnly = true; fixture.detectChanges(); @@ -211,14 +154,6 @@ describe('ContentMetadataCardComponent', () => { expect(getToggleEditButton()).toBeNull(); }); - it('should show the edit button if node does has `update` permissions', () => { - component.readOnly = false; - component.node.allowableOperations = [AllowableOperationsEnum.UPDATE]; - fixture.detectChanges(); - - expect(getToggleEditButton()).not.toBeNull(); - }); - it('should expand the card when custom display aspect is valid', () => { expect(component.expanded).toBeFalsy(); diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.ts index 4522d57b67..6210dbb838 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.ts +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; import { Node } from '@alfresco/js-api'; import { NodeAspectService } from '../../../aspect-list/services/node-aspect.service'; import { ContentMetadataCustomPanel, PresetConfig } from '../../interfaces/content-metadata.interfaces'; @@ -84,10 +84,6 @@ export class ContentMetadataCardComponent implements OnChanges { @Input() customPanels: ContentMetadataCustomPanel[]; - /** Emitted when content's editable state is changed. */ - @Output() - editableChange = new EventEmitter(); - private _displayDefaultProperties: boolean = true; /** @@ -125,15 +121,6 @@ export class ContentMetadataCardComponent implements OnChanges { this.expanded = !this._displayDefaultProperties; } - toggleEdit(): void { - this.editable = !this.editable; - this.editableChange.emit(this.editable); - } - - toggleExpanded(): void { - this.expanded = !this.expanded; - } - hasAllowableOperations() { return this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.UPDATE); } diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata-header.component.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata-header.component.ts new file mode 100644 index 0000000000..8c857e2a11 --- /dev/null +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata-header.component.ts @@ -0,0 +1,55 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CommonModule } from '@angular/common'; +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatIconModule } from '@angular/material/icon'; +import { TranslateModule } from '@ngx-translate/core'; + +@Component({ + standalone: true, + imports: [CommonModule, MatIconModule, MatExpansionModule, TranslateModule], + selector: 'adf-content-metadata-header', + encapsulation: ViewEncapsulation.None, + styles: [ + ` + adf-content-metadata-header { + display: flex; + align-items: center; + flex: 1; + } + + .adf-metadata-properties-title { + font-weight: 700; + font-size: 15px; + padding-left: 12px; + } + ` + ], + template: ` + + {{ expanded ? 'expand_more' : 'chevron_right' }} + + + + ` +}) +export class ContentMetadataHeaderComponent { + @Input() title: string = null; + @Input() expanded = true; +} diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.html b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.html index d5d41f07c3..419c68bf01 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.html +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.html @@ -1,138 +1,225 @@ -