Compare commits

...
212 Commits
Author SHA1 Message Date
Amedeo Lepore cf62196fc4 Release 6.5.2 (#9094) 2023-11-16 13:25:14 +01:00
Amedeo Lepore 22d3179a55 Revert "[AAE-18105] Fix release workflow: release-npm step doesn't publish al…" (#9092)
* Revert "[AAE-18105] Fix release workflow: release-npm step doesn't publish all the  packages (#9091)"

This reverts commit 17323b0abb.

* Fix release workflow: publish always all the libs until we don't handle partial release
2023-11-15 16:46:25 +00:00
Amedeo Lepore 17323b0abb [AAE-18105] Fix release workflow: release-npm step doesn't publish all the packages (#9091) 2023-11-15 16:56:14 +01:00
MichalKinas 81787d5202 [MNT-23166] Add resize flag to document list with option to disable blur (#9090)
* [MNT-23166] Add resize flag to document list with option to disable blur

* [MNT-23166] Missing docs and CR fixes

* [MNT-23166] Lint fixes

* [MNT-23166] Lint fixes

* [MNT-23166] Lint fixes
2023-11-15 14:51:38 +01:00
Amedeo Lepore e5ca7d2069 [AAE-18057] Fix token is not refreshed after silent-refresh is called. Get another token from the auth server. (#9089) 2023-11-15 11:28:05 +00:00
AleksanderSklorz 6787ef4582 [ACS-6225] Removed extra gray area around share link dialog (#9086) 2023-11-14 12:45:13 +01:00
AleksanderSklorz 6988c1f458 [ACS-6067] viewer thumbnails not refresh on file change (#9075)
* ACS-6067 Update thumbnails when file is changed

* ACS-6067 Added unit tests

* ACS-6067 Removed redundant line
2023-11-14 12:44:48 +01:00
MichalKinas 15fdbc7e29 [ACS-4794] ES query migration changes (#8773)
* [ACS-4794] ES query migration changes

* [ACS-4974] Remove * from path as it causes exception

* [ACS-4974] Apply PATH workarounds for PNAME and ANAME

* [ACS-4974] Add custom query to autocomplete options filter

* [ACS-4974] Correct username
2023-11-14 08:23:55 +01:00
Amedeo Lepore e2c116c25a Release 6.5.1 (#9082) 2023-11-13 10:19:15 +01:00
Amedeo Lepore f2df3c4143 [AAE-17909][AAE-17964] fix silent-refresh url is not set with the value - fix background image set to undefined (#9080)
* [AAE-17909] fix silent-refresh url is not set with the value from the app.config.json

* [AAE-17964] fix backgroundImage is undefined, set a default value
2023-11-10 14:19:59 +00:00
Wiktor Danielewski 168bb0b6ca [AAE-17258] Update storybook for datatable and datacolumn (#9052)
* [AAE-17258] Datatable storybook - add boolean type

* [AAE-17258] Datatable storybook - Repair location column

* [AAE-17258] Update location column - storybook

* [AAE-17258] Add boolean column and update data mapping - storybook

* [AAE-17258] Add some comments

* [AAE-17258] Storybook - add image column

* [AAE-17258] Add missing props for DataColumn

* [AAE-17258] Update storybook over the amount column type

* [AAE-17258] Add number column to the Storybook

* [AAE-17258] Storybook simplify json column

* [AAE-17258] Stroybook DataColum refactor

* [AAE-17258] Storybook DataColumn refactor

* [AAE-17258] Update DataColumn with date type

* [AAE-17258] Update Datatable over timeAgo column - Storybook

* [AAE-17258] Small changes

* [AAE-17258] Storybook - simplify DataColumn stories and allow for row updates
2023-11-09 14:17:08 +01:00
Tomasz Gnyp c0194029c7 [AAE-17865] Remove few already covered e2es from ADF (#9078) 2023-11-09 04:44:43 -05:00
Maurizio Vitale 625cf2b85a [ADF-5561] Remove unused dep (#9064) 2023-11-09 04:32:41 -05:00
dependabot[bot] 622cf8bdee build(deps): bump apollo-angular from 4.2.1 to 5.0.2 (#9041)
Bumps [apollo-angular](https://github.com/kamilkisiela/apollo-angular/tree/HEAD/packages/apollo-angular) from 4.2.1 to 5.0.2.
- [Release notes](https://github.com/kamilkisiela/apollo-angular/releases)
- [Changelog](https://github.com/kamilkisiela/apollo-angular/blob/master/packages/apollo-angular/CHANGELOG.md)
- [Commits](https://github.com/kamilkisiela/apollo-angular/commits/apollo-angular@5.0.2/packages/apollo-angular)

---
updated-dependencies:
- dependency-name: apollo-angular
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-09 04:25:30 -05:00
Denys Vuika f0a11fdab0 [ACS-6140] migrate tests to harness (#9071)
* migrate aspect list tests to harness

* [ci:force] categories management

* [ci:force] fix keyboard handling

* [ci:force] fix memory leak

* migrate document list

* migrate new version uploader dialog

* migrate folder dialog

* bug fixes for keyboard, remove fake unit tests

* [ci:force] migrate and cleanup notification tests

* migrate app details cloud

* migrate app list cloud

* migrate group cloud component

* [ci:force] cleanup code based on reviews

* [ci:force] migrate people cloud

* [ci:force] migrate process list cloud

* [ci:force] migrate start process cloud

* [ci:force] task form cloud

* [ci:force] service task list cloud

* [ci:force] task list cloud

* [ci:force] process attachment list and apps list

* [ci:force] code review changes

* [ci:force] app list bug fixes and code cleanup

* [ci:force] fix incorrect/missing typings, fix tests

* [ci:force] code cleanup
2023-11-09 04:24:56 -05:00
Robert Duda 479cc8b545 Release 6.5.0 (#9076) 2023-11-08 15:54:57 +01:00
Davide Cerbo 54fa5d8864 Update init-aae-env.ts (#9073) 2023-11-08 10:01:09 +00:00
Alfresco Buildandtomgny 0891a60f4d [ci:force][auto-commit] Update dependencies JS:7.2.0 (#9069)
Co-authored-by: tomgny <tomgny@users.noreply.github.com>
2023-11-07 15:54:34 +01:00
Amedeo Lepore a01a1b9e9a [AAE-17804] Fix login redirection, add redirectUri from the app.config (#9066)
* [AAE-17804] Fix login redirection, add redirectUri from the app.config

* [AAE-17804] Updated unit tests
2023-11-07 14:34:18 +00:00
Wojciech Duda 34c82f4a49 [AAE-17807] fix for header background color (#9067)
* [AAE-17807] fix for header background color

* [AAE-17807] added unit tests
2023-11-07 13:14:54 +00:00
Michał Fidor 41a788d974 [AAE-17475] Fix process for call activities (#9068) 2023-11-07 13:45:09 +01:00
Alfresco Buildandmauriziovitale 00c05315a2 [ci:force][auto-commit] Update dependencies JS:7.2.0-1490 (#9057)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-11-07 13:16:37 +01:00
Denys Vuika 10361b9065 fix broken expression code in people cloud (#9065) 2023-11-06 16:43:23 +00:00
08da9ae2c3 [AAE-12501] move auth in ADF (#8689)
* remove unneeded JS-API dep
move auth in the right place

* [AAE-12501] Replace alfresco api client with AdfHttpClient

* [AAE-12501] Restore get username methods

* [AAE-12501] Get username with authentication service

* [AAE-12501] Create a request options interface with the needed props, remove the import from js-api, return the body from request

* add emitters

* [AAE-12501] Replace Math.random() to fix hospot security issue, fix lint issues

* [AAE-12501] Comment temporary setCsrfToken because is not possible to import app config service from core due to circular dependencies

* [AAE-12501] Get disableCsrf from app config serviice when app configuration is loaded

* [AAE-12501] Remove wrong character

* Pass down the requestUrl for request interception
bring back check from js-api
fixing isLogin issues part1
some fix around emit
Narrow access for methods
fix sso username issue
Switch to dynamic service injection
add emitters
move auth inside ADF

* clean

* fix unit test

* fix lint

* Fix exports

* Fix process-services unit tests

* Fix core unit tests

Fix core unit tests

Fix core unit tests

Fix core unit tests

Fix core unit tests

Fix core unit tests

Fix core unit tests

* Fix content-services unit tests: getEcmUsername from authentication service

Fix content-services unit tests: alfresco api service has been replaced by authentication service

* Fix circular dependecies issue importing AppConfigService outside the api entrypoint dir

* Import AuthModule even in not only canary mode to let the e2es run

* Fix authentication unit tests

* Fix unit test '[ECM] should return a ticket undefined after logout'

* Remove AlfrescoApiService is not used anymore

* Fix unit test '[BPM] should return an BPM ticket after the login done': add Basic suffix to basicAuth

* Fix unit tests core

* Fix login errors with the BASIC authentication

* Fix missing onLogin event

* Temporary skip unit tests to check e2es

* Fix login component doesn't add the authorization header

* Fix prefix is undefined

* Fix image is not showed by the alfresco file viewer because alf_ticket is not added to the content url query params, pass ticketEcm to the alfrescoApi configuration used by alfrescoApiClient.ts getAlfTicket()

* Fix C280012: set app prefix before calling content api

* Revert "Fix image is not showed by the alfresco file viewer because alf_ticket is not added to the content url query params, pass ticketEcm to the alfrescoApi configuration used by alfrescoApiClient.ts getAlfTicket()"

This reverts commit afbf086b98d72835aab8b15d4af433efeaac2d3b.

* try to change adf core autoamtion service init

* go back

* grant type password login

* fix

* remove automatic login in reset try

* fix not silent login

* lint happy

* fix

* Update alfresco-api-v2-loader.service.ts

* fixint

* Revert "Temporary skip unit tests to check e2es"

This reverts commit a0adc7e58a001a54442c82952761bff891caa5cd.

* fix modules

* fix app config stream in storing service
fix app config stream for sub property

* fix identity test to use the real service

* fix unit

* fix unit

* fix unit

* remove test that are probably have never been green

* fix

* fix PC

* fix localstorage

* fix

* fix

* fix

* fix

* fix storybook
move e2e in content for versioning
fix lint

* fix

* fix size

* enable log

* some fix for usernames

* remove log

* fix rebase

* [AAE-12502] Restore isKerberosEnabled into authentication service

* subject onLogin

* fix unit

* Fix lint issue

* fix

* Update error message

* Revert change did by https://github.com/Alfresco/alfresco-ng2-components/pull/8689/commits/b79c5d37d69b2d76b33e5561eab2bf5b80c81b9e\#diff-ad85723e21276e05e577bab652c6ab0d243bd0ad54d4cc70ef6e60dc5e635c33L38

* Refresh the browser to wait for the user to click process cloud page

* Remove e2e, the application list is already tested by the app-list-cloud.component.spec.ts https://github.com/Alfresco/alfresco-ng2-components/blob/dev-eromano-AAE-12501-2/lib/process-services-cloud/src/lib/app/components/app-list-cloud.component.spec.ts\#L147

* [12502] Add getUsername method to the AuthenticationService

* [12501] restore mutlipart/form-data header needed by angular http-client to to fix 415 unsupported media type

* Revert "[12501] restore mutlipart/form-data header needed by angular http-client to to fix 415 unsupported media type"

This reverts commit d8c584b94f649b57859d74157ec0861f2ebddebb.

* [12501] fix unsupported upload file on admin-apa, append json content type only calling alfresco api

* [12501] fix unsupported upload file on admin-apa

[12501] fix unsupported upload file on admin-apa

* Revert "[12501] fix unsupported upload file on admin-apa"

This reverts commit 53cda21d795588d87244c78c5a5347afd04ea2b1.

* Improve getHeaders

* Revert change

* Set application/json content type if request body is not a FormData

* Logout by the authenticationService

* Update returned error message

* Fix lint issues after rebasing

* [12502] Add basic template with data-automation-ad selector to check when is attached to the Dom

* Fix issues after rebase

---------

Co-authored-by: Amedeo Lepore <amedeo.lepore@hyland.com>
Co-authored-by: Andras Popovics <popovics@ndras.hu>
2023-11-06 14:25:27 +01:00
Bartosz Sekula 057e0bcd7c [AAE-17746] Remove secret from required prop from app.config.schema.json (#9063) 2023-11-06 13:17:14 +00:00
DominikIwanek bac7cc98e1 [ACS-6210] - ACA column alinement shifted when we have very long file/folder name (#9060) 2023-11-06 06:32:59 -05:00
Bartosz Sekula 7c127eb957 [AAE-17669] Custom theme should use default font (#9062) 2023-11-06 12:31:14 +01:00
Denys Vuika fe8f4a5e74 [ACS-6251] remove dead code and imports from insights (#9059)
* remove dead code and imports from insights

* [ci:force] base class to reduce code duplications

* [ci:force] reduce code by introducing base class

* [ci:force] fix import paths

* [ci:force] fix types

* [ci:force] remove pdf from insights unit tests

* [ci:force] improve test performance

* remove obsolete mock file

* remove deleted export
2023-11-06 06:30:49 -05:00
Michał Fidor adf5a5e008 [AAE-17476] update default app by missing process (#9061) 2023-11-06 10:38:38 +01:00
Wojciech Duda a29f63cd9b [AAE-17551] added backgroundImage property for header (#9058)
* [AAE-17551] added backgroundImage property for header

* [AAE-17551] added test for background image

* [AAE-17551] removed some material selectors

* [AAE-17551] rebasing

* [AAE-17551] fixed unit test
2023-11-04 15:06:11 +01:00
SheenaMalhotra182 94fb61541c [ACS-5311] Notification History Bug Fix (#9011)
* [ACS-5311] implemented read state for notifications and showing only unread notifications in history menu

* [ACS-5311] linting fixes

* [ACS-5311] linting fixes

* [ACS-5311] fixed code smell

* [ACS-5311] addressed review comments

* [ACS-5311] addressed review comments

* [ACS-5311] updated unit tests

* [ACS-5311] addressed review comments and optimized unit tests

* [ACS-5311] linting fix

* [ACS-5311] addressed review comments

* [ACS-5311] fixed typos

* [ACS-5311] moved NOTIFICATION_STORAGE to notification.model.ts to reuse across repos

* [ACS-5311] addressed review comments
2023-11-03 14:41:40 +00:00
dependabot[bot] 3687cc58e0 build(deps): bump trim-newlines and meow (#9055)
Bumps [trim-newlines](https://github.com/sindresorhus/trim-newlines) and [meow](https://github.com/sindresorhus/meow). These dependencies needed to be updated together.

Updates `trim-newlines` from 1.0.0 to 3.0.1
- [Release notes](https://github.com/sindresorhus/trim-newlines/releases)
- [Commits](https://github.com/sindresorhus/trim-newlines/commits)

Updates `meow` from 3.7.0 to 9.0.0
- [Release notes](https://github.com/sindresorhus/meow/releases)
- [Commits](https://github.com/sindresorhus/meow/compare/v3.7.0...v9.0.0)

---
updated-dependencies:
- dependency-name: trim-newlines
  dependency-type: indirect
- dependency-name: meow
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-03 06:06:28 -04:00
Denys Vuika 93fd0bec6c [ACS-6140] reduce access to internal material classes (#9053)
* cleanup login (demo shell)

* cleanup e2e from useless calls

* [ci:force] cleanup e2e from useless calls

* [ci:force] cleanup e2e from useless calls

* [ci:force] improved uploader selectors

* [ci:force] remove useless selectors when automation id provided

* [ci:force] improved tests and selectors

* [ci:force] improved tests and selectors

* [ci:force] improved tests and selectors

* [ci:force] improved tests and selectors

* [ci:force] improved tests and selectors

* [ci:force] improved tests and selectors

* [ci:force] switch edit task filter to angular harness

* [ci:force] switch edit process filter to angular harness

* [ci:force] switch search chip list to angular harness

* [ci:force] switch search panel to angular harness

* [ci:force] switch search radio to angular harness

* [ci:force] switch search text to angular harness

* [ci:force] search logical filter

* [ci:force] search form component

* [ci:force] search filter container

* [ci:force] fix viewer test

* [ci:force] search facet chip harness

* [ci:force] search facet chip harness

* [ci:force] dropdown breadcrumb

* [ci:force] search check list

* [ci:force] folder dialog

* [ci:force] search filter component

* [ci:force] json cell

* [ci:force] amount widget

* [ci:force] checkbox widget

* [ci:force] multiline-text widget

* [ci:force] number widget

* [ci:force] text widget

* [ci:force] card view array item

* add permission dialog

* permission container component

* permission list component

* card view components

* search widget chip

* search facet chip

* edit service task filter

* card view components

* sites dropdown

* share dialog

* header component

* datetime widget

* remove comments
2023-11-03 06:05:34 -04:00
Tomasz Gnyp 9278d9296f [AAE-16965] Improve data table date column (#9038)
* [AAE-16965] Improve Date data table column type

* [AAE-16965] Date unit tests

* update docs

* cleanup cells after implement inject

* bring back removed constructors

* remove empty constructors

* replace constructor token injection by inject function

* [AAE-16965] Use other variable for template

* implement suggestions

* update demo shell module

* fix unit test

* fix timeAgo problem

* add some more unit tests

* fake change in extensions

* [AAE-16965] fix for backward compatibility
2023-11-03 10:31:13 +01:00
Bartosz Sekula 85ddcdf22c Fix missing primary scss variable (#9056)
* Fix missing primary scss variable

* remove test var
2023-11-02 15:47:52 +00:00
Alfresco Buildandmauriziovitale 0b677e7189 [ci:force][auto-commit] Update dependencies JS:7.2.0-1481 (#9028)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-11-02 14:29:45 +00:00
Eugenio Romano 0b56a4858f [AAE-16579] upgrade nrwl dep solve critical webpack loader-utils issue in develop (#9030)
* upgrade nrwl dep

* fix

* downgrade eslint plugin
2023-11-02 14:11:06 +01:00
tomasz hanaj 15f82c812c [AAE-15296] added design tokens to InfoDrawerComponent (#9051)
* [AAE-15296] added design tokens to InfoDrawerComponent

* [AAE-15296] added access to theme to component variables
2023-11-02 13:10:05 +01:00
Bartosz Sekula 54e95bc5f7 [AAE-16970] Custom colors are not calculating correctly in default UI (#9054) 2023-11-02 11:15:30 +01:00
Wiktor Danielewski 81f0df3da1 [AAE-16995] Code refactor of LocationCellComponent (#9033)
* [AAE-16995] Migrate to standalone

* [AAE-16995] Update Datatable module

* [AAE-16995] Enable hyperlink click

* [AAE-16995] Fix test mistake

* [AAE-16995] Refactor DatatableCell

* [AAE-16995] Refactor LocationCellComponent

* [AAE-16995] Update doc about location cell

* [AAE-16995] Clarify the purpose of location cell

* [AAE-16995] Remove unnecessary check

* [AAE-16995] Align to remarks
2023-10-31 16:51:07 +01:00
Denys Vuika 5d72597d7d [ACS-6245] remove mat-card and internal styling from demo shell (#9050)
* remove mat-card from properties demo

* remove mat-card from demo shell viewer (versions)

* cleanup host settings component in demo shell

* cleanup cloud settings
2023-10-31 10:38:59 -04:00
MichalKinas e8ea75d9f3 Release 6.4.0 (#9044)
* Release 6.4.0

* Lock file update

* Exclude failing E2Es

* Exclude failing E2Es

* Exclude failing E2Es

* Exclude failing E2Es
2023-10-31 13:00:37 +01:00
Michał Fidor a59ab203b4 [AAE-17471] Fix typo in one of the process (#9049) 2023-10-31 12:06:14 +01:00
Michał Fidor d300003f69 [AAE-17471] [Phase 1] Add to the be-default-app needed form/processes/scripts/etc (#9045) 2023-10-30 13:43:21 +01:00
Denys VuikaandMykyta Maliarchuk 620911cf70 Protractor cleanup for demo shell (#9019)
* [ci:force] cleanup protractor tests

* [ci:force] cleanup insights test

* [ci:force] cleanup dead demo shell e2e

* [ci:force] cleanup e2e

* [ci:force] cleanup e2e

* cleanup files component

* [ci:force] cleanup e2e

* [ci:force] remove user info SSO protractor e2e

* [ci:force] remove viewer e2e already covered by other tests

* [ci:force] remove custom font from demo shell

* [ci:force] demo shell viewer cleanup

* [ci:force] cleanup viewer in demo shell

* [ci:force] rollback model changes

* [ci:force] remove site picker from content demo

* [ci:force] cleanup files demo shell component

* [ci:force] cleanup e2e and dead code

* [ci:force] cleanup dead code

* [ci:force] fix linting

* [ci:force] standalone home component

* [ci:force] cleanup demo shell app layout

* [ci:force] cleanup css

* [ci:force] cleanup demo shell logout

* Update demo-shell/src/app/components/app-layout/app-layout.component.html

Co-authored-by: Mykyta Maliarchuk <84377976+nikita-web-ua@users.noreply.github.com>

---------

Co-authored-by: Mykyta Maliarchuk <84377976+nikita-web-ua@users.noreply.github.com>
2023-10-27 11:56:53 -04:00
dependabot[bot] 1f94c592da Bump rimraf from 5.0.1 to 5.0.5 (#8977)
Bumps [rimraf](https://github.com/isaacs/rimraf) from 5.0.1 to 5.0.5.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v5.0.1...v5.0.5)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-27 11:03:56 -04:00
dependabot[bot] 32f6c746f0 build(deps): bump browserify-sign from 4.2.1 to 4.2.2 (#9037)
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-27 10:10:00 -04:00
Denys Vuika fa7eb8722d fix linting for ADF (#9036)
* fix linting

* fix linting
2023-10-27 10:09:47 -04:00
Mykyta Maliarchuk b847383249 [ACS-6222] Fixed missing display name for groups (#9034)
* [ACS-6222] fixed missing display name for groups

* [ACS-6222] cr fix
2023-10-27 15:43:43 +02:00
Denys Vuika 2d3175ef4a [ACS-6227] cleanup error handling and fix typing issues (#9035)
* cleanup audit service, remove useless ajax tests

* cleanup sites service and remove useless ajax tests

* cleanup services

* cleanup services

* fix typings

* code cleanup
2023-10-27 13:51:28 +01:00
Davide Cerbo 53ad9f729b AAE-15874 enable local development option for simpleapp (#9031) 2023-10-27 10:53:54 +02:00
Denys Vuika ba96ed14b2 [ACS-6196] await-thenable rule for ESLint, fix issues (#9027)
* fix issues for core lib

* fix content services lib

* fix and cleanup process services

* [ci:force] process services cloud

* [ci:force] align coverage with all libs

* [ci:force] fix the insights
2023-10-26 09:33:48 -04:00
Denys Vuika 7ebdce7875 [APPS-2108] break direct dependency on moment.js (#9032)
* break direct dependency on moment.js

* [ci:force] preserve moment for cli tools

* remove MatMomentDatetimeModule from content

* share dialog fixes

* revert testing module changes

* remove incorrect date modules

* fix html
2023-10-26 09:33:26 -04:00
AleksanderSklorz abf369bc37 [ACS-6189] Moved date adapter from module to component (#9029) 2023-10-26 10:40:55 +02:00
AleksanderSklorz 67f1a4c506 [ACS-6189] broken decision table dates after deprecation of moment date adapter 3 (#9026)
* ACS-6189 Fixed date format

* ACS-6189 Fixed unit test

* ACS-6189 Reverted unwanted changes

* ACS-6189 Fixed date format
2023-10-25 15:28:58 +02:00
Aayush Rohila e6bc457d26 [ACS-5831] Adding generic error to Library Modal. (#9025)
* [ACS-5831] Adding generic error to Library Modal.

* change

* change

* lint issue fix
2023-10-25 17:50:14 +05:30
Denys Vuika 8bd24dbb7c [ACS-6190] prefer-promise-reject-errors rule and fixes (#9021)
* fix promise rejections

* fix promise errors

* promise error fixes

* fix promise rejections

* [ci:force] fix formatting

* test fixes

* [ci:force] fix tests

* [ci:force] fix tests

* fix incorrect return types

* meaningful errors

* remove useless pipe

* fix accessing private members in the test
2023-10-25 07:01:45 -04:00
dependabot[bot] 352e0e4933 Bump mini-css-extract-plugin from 1.6.2 to 2.7.6 (#8979)
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.6.2 to 2.7.6.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.6.2...v2.7.6)

---
updated-dependencies:
- dependency-name: mini-css-extract-plugin
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-25 06:39:55 -04:00
dependabot[bot] 72e646bdf8 build(deps-dev): bump css-loader from 6.7.4 to 6.8.1 (#9015)
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 6.7.4 to 6.8.1.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v6.7.4...v6.8.1)

---
updated-dependencies:
- dependency-name: css-loader
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-25 05:46:11 -04:00
Alfresco Buildandmauriziovitale 36d90b314d [ci:force][auto-commit] Update dependencies JS:7.1.0-1437 (#9022)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-25 04:39:59 -04:00
Alfresco Buildandmauriziovitale 46104e9246 [ci:force][auto-commit] Update dependencies JS:7.1.0-1429 (#8969)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-24 13:14:51 -04:00
AleksanderSklorz a73e72facb [ACS-6189] Corrected date format (#9016)
* ACS-6189 Corrected date format

* [ci:force]ACS-6189 Trigger build
2023-10-24 13:13:20 -04:00
Denys Vuika f366cf7c0a [ACS-5645] metadata fixes for encapsulation and host classes (#9018)
* remove useless typing

* fix missing host classes and encapsulation
2023-10-24 12:11:28 -04:00
Denys Vuika 879c5a6d2c [ACS-5645] card view dateitem parse fix (#9017)
* card view dateitem parse fix

* remove unused prop

* remove dead link from demo shell
2023-10-24 10:48:36 -04:00
DominikIwanek 36c6e6d8ea [ACS-5566] - Add configurable columns to document list (#8968)
* [ACS-5566] - add configurable columns to document list

* [ACS-5566] - add max visible columns

* [ACS-5566] - add unit tests

* [ACS-5566] - add docs

* [ACS-5566] - style changes after CR

* [ACS-5566] - changes for pipeline

* [ACS-5566] - changes for pipeline

* [ACS-5566] - changes for pipeline
2023-10-24 09:52:11 -04:00
Wojciech Duda 3912a652d5 [AAE-16369] use layout-bp mixin where applicable (#8945)
* [AAE-15828] layout-bp mixin for core

* [AAE-15828] fixed import

* [AAE-15828] layout-bp for process-services-cloud

* [AAE-15828] layout-bp for process-services

* [AAE-15828] layout-bp for content-services

* [AAE-15828] fixed incorrect values

* [AAE-15828] lint fix

* configure stylePreprocessorOptions for cross project scss importing

* scss import cardio

* set correct style paths for packages

* [AAE-16369] addded missing test config

* [ci:force] fix for the pretheme build

* unified configs for libs
2023-10-23 15:36:26 +01:00
evelina-di f6f74f4660 [AAE-16982] Add default ui with custom theme to simpleapp (#9014) 2023-10-23 13:58:57 +02:00
Tomasz Gnyp 33f1147671 [AAE-16962] Handle number data table column type (#9013)
* [AAE-16962] Handle number column type

* solve conflicts

* remove TODO

* [AAE-16952] Revert incorrect conflict solve

* remove duplicated import
2023-10-23 11:53:32 +02:00
MichalKinas 7c4304a1e7 Fix AAE-16968 BC (#9010)
* Fix AAE-16968 BC

* Fix incorrect import

* Move DataColumnType to extensions lib

* Lint fixes
2023-10-19 09:17:28 -04:00
Tomasz Gnyp 6644f539fa [AAE-16964] Handle amount data table cloumn type (#8984)
* [AAE-16964] Handle amount data table cloumn type

* remove not needed reset testing module

* improve spacing

* update documentation

* remove code duplications in unit tests

* add type for default currency config

* update doc
2023-10-19 11:50:35 +02:00
Kritagya Jaiswal 962a2be698 [ACS-6126] Fixed accessibility issues (#9007)
* [ACS-6126] Fixed accessibility issues

* Added localise aria-label for Tags
2023-10-19 09:16:37 +01:00
Denys Vuika d13db25609 [ACS-6136] cleanup e2e files (protractor) (#9009)
* cleanup e2e

* clean e2e
2023-10-19 09:14:14 +01:00
Wiktor Danielewski b49c86fda5 [AAE-16968] Add boolean type (#8972)
* [AAE-16968] Update variable mapper service

* Update DetaColumnComponent

* [AAE-16968] Update DataColumnTypes interface

* [AAE-16968] Handle boolean column on UI

* [AAE-16968] Create BooleanCellComponent

* [AAE-16968] Delete comment

* [AAE-16968] Update BooleanCellComponent

* [AAE-16968] Delete unnecessary css classes

* [AAE-16968] Allow for string values

* [AAE-16968] Update test for datatable

* [AAE-16968] Update tests for boolean cell

* [AAE-16968] Update tests for VariableMapperService

* [AAE-16968] Add boolean pipe

* [AAE-16968] Update pipe

* [AAE-16968] Update code formatting

* [AAE-16968] Add doc for the boolean pipe

* [AAE-16968] Update DataColumnComponent doc

* [AAE-16968] Delete unnecessary class

* [AAE-16968] Fix title bug

* [AAE-16968] Update BooleanCell tests

* [AAE-16968] Update Boolean pipe

* [AAE-16968] Update tests for variable mapper service

* [AAE-16968] Update PipesModule

* [AAE-16968] Small fix

* [AAE-16968] Fix lint error
2023-10-19 09:00:27 +02:00
Denys Vuika cda12730f6 [APPS-2255] documentation on date adapters (#9008)
* release note placeholder

* datetime docs

* fix docs

* fix docs
2023-10-18 16:16:17 +01:00
Aayush Rohila d500bc67d7 [ACS-5831] Added Generic Error to Library Dialog. (#9005)
* [ACS-5831] Added Generic Error to Library Dialogue.

* format fix

* format fix

* [ci:force]
2023-10-18 14:20:31 +01:00
Denys Vuika 678df4298d [APPS-2108] migrate cardview and task filters to date-fns (#9006)
* move based edit task filter to date-fns

* migrate cardview component to date-fns

* bug fixes for card view types, utc and multivalue

* fix copy to clipboard typing issue

* mark moment adapter for deprecation

* exclude e2e

* try migrate metadata smoke
2023-10-18 14:17:30 +01:00
Denys Vuika 7d5fbecf3f [APPS-2136] migrate search-datetime-range to date-fns (#9004)
* strongly typed forms

* migrate to date-fns

* [ci:force] mark moment pipes for deprecation

* [ci:force] try migrate the metadata smoke e2e

* [ci:force] remove dead code

* cleanup dead code and switch e2e to date-fns

* [ci:force] migrate tests

* revert metadata

* [ci:force] migrate e2e

* [ci:force] delete date util
2023-10-18 07:56:10 +01:00
dependabot[bot] af24aceb65 build(deps): bump @babel/traverse from 7.21.5 to 7.23.2 (#9002)
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.5 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 17:25:21 +01:00
Denys Vuika e6d625253c [APPS-2132] migrate components to date-fns (#9001)
* migrate edit process filter to date-fns

* refresh unit tests

* fix a11y for date-fns

* Revert "fix a11y for date-fns"

This reverts commit 2e706d4aed1b8a50d1de62fe11d9d528530d628c.

* update e2e

* start task fixes

* cleanup code

* remove fdescribe

* remove moment, improve unit testing

* remove dependency on date util

* cleanup search date range component

* cleanup code

* migrate search date range component

* revert e2e changes for now

* extra fixes and tests

* add missing functionality, extra tests

* increase time constraints

* improved code, disabled e2e

* move e2e to unit tests, extra rework for insights

* extra unit test for date range validation

* migrate date-range to date-fns
2023-10-17 17:24:46 +01:00
swapnil-verma-gl f7b0544172 [ACS-6019] Added node-fetch to adf-cli package.json (#9003)
* [ACS-6019] Added node-fetch to adf-cli package.json

* [ACS-6019] Removed node-fetch from root package.json

* [ACS-6019] Removed node-fetch from root package-lock.json
2023-10-17 08:11:16 -04:00
swapnil-verma-gl ef285a1f10 [ACS-6019] [ACS-6021] [ACS-6023] Replaced request with node-fetch (#8999)
* [ACS-6019] Replaced request with node-fetch

* [ACS-6019] [Non-Functional Change] Added documentation to peopleSelected event emitter - Change to trigger affected E2Es

* [ACS-6019] Added return type to getFileFromRemote function. Removed request dependencies from package.json

* [ACS-6019] Commit package-lock.json

* [ACS-6019] Testing node-fetch v2

* [ACS-6019] Commiting package-lock.json
2023-10-17 16:47:53 +05:30
Denys Vuika 82fafff114 Remove demo shell protractor TreeView e2e (#9000)
* remove protractor TreeView e2e

* [ci:force] fix types

* [ci:force] remove unused method
2023-10-16 11:31:33 +01:00
Denys Vuika 462166293a Remove useless protractor tests (#8998)
* [ci:force] remove useless viewer tests

* [ci:force] fix types

* [ci:force] remove demo-shell specific tests

* fix typo
2023-10-16 05:44:52 -04:00
Denys Vuika 2f36da5765 [APPS-2108] date-fns adapter for datetime pickers, many datetime parsing and validation fixes (#8992)
* migrate cloud date widget to date-fns, fix test bugs

* [ci:force] update docs

* [ci:force] remove commented out code

* [APPS-2232] date cell validator, unit tests

* improved moment adapter, code cleanup

* datetime adapter, many code fixes

* code review fixes

* code cleanup

* cleanup

* fix max datetime validation, update tests

* remove e2e already covered by unit tests

* fix search date range

* remove fake demo shell e2e for search

* remove fake demo shell e2e for search page

* cleanup e2e

* migrate dynamic table to date-fns

* fix e2e formatting

* migrate protractor to unit tests

* cleanup e2e
2023-10-15 15:58:22 +01:00
MichalKinas c637f3eb2a [ACS-5611] Add the option to initially expand custom panel (#8986) 2023-10-12 11:08:35 -04:00
Denys Vuika 96d0a617a4 [APPS-2108] migrate unit tests to date-fns (#8991)
* migrate unit tests

* [ci:force] cleanup
2023-10-11 14:52:37 +01:00
Denys Vuika 03a52dc10f [APPS-2108] migrate form field validators to date-fns (#8988)
* migrate test

* migrate datetime validator

* date validator

* min/max date validators

* migrate form-field validators to date-fns

* [ci:force] update docs

* form-field-model date

* field model: datetime

* migrate form field model, extra tests and fixes
2023-10-11 12:01:58 +01:00
Aayush RohilaandDenys Vuika 2f28ec9b6f [ACS-5877] Migrate widget-visibility service do date-fns (#8870)
* [ACS-5877] Migrate from moment to date-fns for widget-visibility service

* [ACS-5877] Migration from moment to date-fns in widget-visiblity.service

* migrate widget visibility service to date-fns

* restore clean method

---------

Co-authored-by: Denys Vuika <denys.vuika@gmail.com>
2023-10-10 17:12:44 +01:00
Denys Vuika a86b9e625c [APPS-2108] migrate analytics report to date-fns (#8985)
* migrate analytics report to date-fns

* migrate bar chart model
2023-10-10 16:14:31 +01:00
Mykyta Maliarchuk f6d48cb85c [ACS-5348] Fixed accessibility issues for the Date facet (#8982)
* [ACS-5348] fixed accessibility issues

* [ACS-5348] removed .mat customizations
2023-10-10 08:46:09 -04:00
Denys Vuika ce549249e5 [APPS-2108] ADF date-fns adapter implementation (#8983)
* adf date-fns adapter, migrate date widget

* [ci:force] fix tests

* [ci:force] update docs

* fix types and tests

* fix how the real date is stored, extra tests

* remove useless e2e as covered by tests already
2023-10-10 11:58:04 +01:00
MichalKinas 4cc4498b0e [ACS-5611] Add custom metadata side panels to metadata card component (#8974)
* [ACS-5611] Add custom panels to metadata card component

* [ACS-5611] Add custom metadata panels unit tests

* [ACS-5611] CR fixes

* [ACS-5611] CR fixes
2023-10-09 13:47:45 +02:00
Denys Vuika 3a374ad2a4 [APPS-2108] migrate date widget to Angular date picker (#8975)
* migrate date widget to Angular date picker

* [ci:force] fix tests

* [ci:force] fix tests

* [ci:force] test fixes

* [ci:force] missing label attributes

* added type for value
2023-10-09 10:28:13 +01:00
Denys Vuika e42e0869ba [APPS-2108] Switch search date range to the material date adapter (#8973)
* cleanup and setup testing

* switch to material adapter instead of adf one
2023-10-06 14:54:28 +01:00
Denys Vuika 93f45062fe migrate node lock dialog to date-fns (#8970)
* migrate node lock dialog to date-fns

* cleanup
2023-10-06 13:25:33 +01:00
Kritagya JaiswalandDenys Vuika ea65756660 [APPS-2157][APPS-2158][APPS-2161][APPS-2162][APPS-2165] Migration from moment to date-fns (#8965)
* [APPS-2157][APPS-2158][APPS-2161][APPS-2162][2165] Migration from  moment to date-fns

* Modified endDate to CompletedDate

* Addressed review comments

* Revert import for dataFnsUtil

* Replace fit to it

* fix types and avoid double date conversion

* fix lint issue

* support iso strings for date formatting

---------

Co-authored-by: Denys Vuika <denys.vuika@gmail.com>
2023-10-05 16:00:46 -04:00
Jatin Chughandkritagya09 ecbee581a7 [APPS-2133] migration of dependency from moment to date-fns in start-task.component (#8844)
* migration of dependency from moment to date-fns in task-list.component

* used parse() instead of format()

* [APPS-2133] Migration from moment to date-fns with converter approach

* [APPS-2133] Changed varible name to avoid lint issue

---------

Co-authored-by: kritagya09 <kritagya.jaiswal@globallogic.com>
2023-10-05 15:05:41 +05:30
Mykyta Maliarchuk 93fe29503a [ACS-6002] Add permissions displaying Site Permissions outside of Sites (#8952)
* [ACS-6002] added additional check for site

* [ACS-6002] changed type

* [ACS-6002] rebase
2023-10-05 04:40:47 -04:00
Alfresco Buildandmauriziovitale 441d8003af [ci:force][auto-commit] Update dependencies JS:7.1.0-1372 (#8966)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-05 03:40:55 -04:00
Tomasz Gnyp 11b4f5186b [AAE-16969] Remove force casting of all types to text (#8963) 2023-10-04 15:36:11 +02:00
Alfresco Buildandmauriziovitale c548fc7763 [ci:force][auto-commit] Update dependencies JS:7.1.0-1371 (#8964)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-04 09:38:59 +01:00
Denys Vuika 43242b1185 pre angular 15 cleanup (#8961)
* pre angular 15 cleanup

* [ci:force] update test

* [ci:force] various updates as per migration

* [ci:force] port more changes

* [ci:force] migrate tests

* [ci:force] migrate formatting

* migrate changes

* rollback storybook
2023-10-03 07:35:53 -04:00
swapnil-verma-gl e638b54fcd [MNT-23648] Clicking on Load More button no longer causes scroll position to reset to top (#8951)
* [MNT-23648] Resolved issue where clicking on load more button would reset the scroll position to top when copying/moving a folder

* [MNT-23648] Revert fix

* [MNT-23648] Resolved issue where clicking on load more button would reset the scroll position to top when copying/moving a folder

* [MNT-23648] Added test case to cover new functionality

* [MNT-23648] Fixed unit tests
2023-10-03 03:51:36 -04:00
Alfresco Buildandmauriziovitale 0b1fc4faa4 [ci:force][auto-commit] Update dependencies JS:7.1.0-1368 (#8960)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-03 03:51:22 -04:00
dependabot[bot] fc8a443d32 Bump material-icons from 1.13.9 to 1.13.12 (#8955)
Bumps [material-icons](https://github.com/marella/material-icons) from 1.13.9 to 1.13.12.
- [Release notes](https://github.com/marella/material-icons/releases)
- [Commits](https://github.com/marella/material-icons/compare/v1.13.9...v1.13.12)

---
updated-dependencies:
- dependency-name: material-icons
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 15:35:08 -04:00
dependabot[bot] 8a6fe3071d Bump @apollo/client from 3.7.14 to 3.8.4 (#8930)
Bumps [@apollo/client](https://github.com/apollographql/apollo-client) from 3.7.14 to 3.8.4.
- [Release notes](https://github.com/apollographql/apollo-client/releases)
- [Changelog](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apollographql/apollo-client/compare/v3.7.14...v3.8.4)

---
updated-dependencies:
- dependency-name: "@apollo/client"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 15:34:11 -04:00
dependabot[bot] 0811525c95 Bump graphql from 16.6.0 to 16.8.1 (#8956)
Bumps [graphql](https://github.com/graphql/graphql-js) from 16.6.0 to 16.8.1.
- [Release notes](https://github.com/graphql/graphql-js/releases)
- [Commits](https://github.com/graphql/graphql-js/compare/v16.6.0...v16.8.1)

---
updated-dependencies:
- dependency-name: graphql
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 15:33:58 -04:00
dependabot[bot] a69c089f87 Bump @angular-eslint/template-parser from 16.0.1 to 16.2.0 (#8954)
Bumps [@angular-eslint/template-parser](https://github.com/angular-eslint/angular-eslint/tree/HEAD/packages/template-parser) from 16.0.1 to 16.2.0.
- [Release notes](https://github.com/angular-eslint/angular-eslint/releases)
- [Changelog](https://github.com/angular-eslint/angular-eslint/blob/main/packages/template-parser/CHANGELOG.md)
- [Commits](https://github.com/angular-eslint/angular-eslint/commits/v16.2.0/packages/template-parser)

---
updated-dependencies:
- dependency-name: "@angular-eslint/template-parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 15:33:48 -04:00
dependabot[bot] e76d2fb169 Bump postcss from 8.4.29 to 8.4.31 (#8958)
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.29 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.29...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 14:23:00 -04:00
Denys Vuika 034e9574d0 [AAE-16884] revert request removal (#8959)
* [ci:force] revert request removal

* [ci:force] dummy change to trigger e2e
2023-10-02 12:33:43 -04:00
Denys Vuika 94baaf7d33 [AAE-16884] init aae script fixes (#8957)
* [ci:force] init aae script fixes

* [ci:force] improved typings

* [ci:force] switch to http and remove useless test

* [ci:force] simple change to trigger tests

* [ci:force] remove debug logs
2023-10-02 16:04:12 +01:00
Ehsan Rezaei e21ad3ca02 [AAE-15316] - Refactored UserInfoComponent to get typography from theme (#8937)
* [AAE-15316] - Refactored UserInfoComponent to get typography from theme

* AAE-15316: Code improvements
2023-10-02 16:29:32 +02:00
Alfresco Buildandmauriziovitale c2d45e10f8 [ci:force][auto-commit] Update dependencies JS:7.1.0-1367 (#8949)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-10-02 07:20:09 -04:00
SheenaMalhotra182 21a029163a [ACS-5878] implemented migration using the convertor approach (#8953) 2023-10-02 03:50:38 -04:00
Denys Vuika d72eb5ebd3 [ACS-6071] fix jsdoc warnings and errors (#8948)
* fix content docs

* fix extensions docs

* fix insights docs

* [ci:force] fix jsdoc errors and warnings

* enable jsdoc linter

* [ci:force] fix demo shell jsdoc

* [ci:force] fix e2e typings

* fix typo

* fix typo
2023-09-29 08:11:58 +01:00
DominikIwanek 501516c8f5 [ACS-6003] - waitRendition in rendition.service.ts not working (#8936)
* [ACS-6003] - waitRendition in rendition.service.ts not working
2023-09-29 07:18:44 +02:00
Denys Vuika d78dcd2156 [ACS-6071] fix docs for process cloud (#8947)
* fix docs for process cloud

* fix typo
2023-09-28 16:44:57 +01:00
AleksanderSklorz a48438e1c1 [ACS-5613] Renamed name to task name (#8946) 2023-09-28 15:52:16 +02:00
Denys Vuika b03011c3d2 [ACS-6071] documentation fixes for process lib (#8943)
* doc and api fixes

* doc fixes

* fix docs

* code fixes

* typo fixes
2023-09-28 14:35:59 +01:00
Wojciech Duda 016e5ec089 Revert "[AAE-16369] use layout-bp mixin where applicable" (#8944) 2023-09-28 15:22:27 +02:00
Denys Vuika 65d70bffb2 [ACS-6071] fix JSDoc issues for Core lib (#8942)
* fix jsdoc issues

* docs fixes

* doc fixes

* doc fixes

* fix docs

* fix bugs
2023-09-28 14:00:30 +01:00
Wojciech Duda d7e0bb6cd3 [AAE-16369] use layout-bp mixin where applicable (#8896) 2023-09-28 14:18:15 +02:00
MichalKinas a0c79e6c64 [ACS-5601] Add getProcessesAndTasksOnContent to process content service (#8940)
* [ACS-5601] Add getProcessesAndTasksOnContent to process content service

* [ACS-5601] Add docs for new method

* [ACS-5601] Fix import
2023-09-28 05:05:19 -04:00
AleksanderSklorz 094acf77ce [ACS-5613] process preview on popup displaying the details of selected running process on the popup (#8933)
* ACS-5613 Renamed name column header for process details

* ACS-5613 Change order of columns based on order property

* ACS-5613 Added some unit test

* ACS-5613 Added unit tests

* ACS-5613 Added documentation

* ACS-5613 Fixed e2e

* ACS-5613 Fixed e2e

* ACS-5613 Fixed e2e

* ACS-5613 Fixed e2e

* ACS-5613 Fixed e2e
2023-09-28 10:44:07 +02:00
Alfresco BuildandMichalKinas ed0dd094b4 [ci:force][auto-commit] Update dependencies JS:7.1.0-1349 (#8941)
Co-authored-by: MichalKinas <MichalKinas@users.noreply.github.com>
2023-09-28 10:23:44 +02:00
Alfresco BuildandMichalKinas a488a729eb [ci:force][auto-commit] Update dependencies JS:7.1.0-1346 (#8939)
Co-authored-by: MichalKinas <MichalKinas@users.noreply.github.com>
2023-09-28 00:36:57 +02:00
Mykyta Maliarchuk 44694c0ee1 [ACS-5748] The file gets unshared when setting the past expiration date (#8876)
* [ACS-5748] set validation for share link input

* [ACS-5748] code smells

* [ACS-5748] lint

* [ACS-5748] rebase

* [ACS-5748] CR fixes

* [ACS-5748] rebase
2023-09-27 16:30:47 +02:00
Alfresco Buildandmauriziovitale 06bfded238 [ci:force][auto-commit] Update dependencies JS:7.1.0-1331 (#8925)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-09-27 15:10:01 +02:00
Denys Vuika 4786a26320 Revert "[APPS-2157] [APPS-2158] [APPS-2161] [APPS-2162] [APPS-2165] migration of e2e test cases from moment to date-fns (#8864)" (#8938)
This reverts commit 3638ed06ef.
2023-09-27 08:14:24 -04:00
Denys Vuika 8f684a9f6a [ACS-5987] improved security for shell scripts (#8889)
* improved security for node process functions

* improved security for node process functions

* remove unused file from demo shell

* restore regex

* fix regex

* update escaping

* lint fixes

* fix typo

* fix export

* fix exports

* fix lint

* fix lint
2023-09-27 05:52:33 -04:00
dependabot[bot] 6d8c513180 Bump webdriver-manager from 12.1.8 to 12.1.9 (#8929)
Bumps [webdriver-manager](https://github.com/angular/webdriver-manager) from 12.1.8 to 12.1.9.
- [Changelog](https://github.com/angular/webdriver-manager/blob/legacy/CHANGELOG.md)
- [Commits](https://github.com/angular/webdriver-manager/compare/12.1.8...12.1.9)

---
updated-dependencies:
- dependency-name: webdriver-manager
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-26 10:05:18 -04:00
SheenaMalhotra182 83b2d9f8bc [APPS-2202] Added custom utils for syncing moment and date-fns formats (#8934)
* [APPS-2202] added custom methods for moment to date-fns migration

* [APPS-2202] addressed review comments
2023-09-26 10:04:32 -04:00
vijayanssettuandpkundu 0933e2dada [APPS-2159] [APPS-2163] Replaced from moment.js to date-fns (#8878)
* moment to date fns migration

* fake commit

---------

Co-authored-by: pkundu <priyanka.kundu@hyland.com>
2023-09-26 08:53:56 -04:00
SheenaMalhotra182 926347b8fc [ACS-5878] Migrated moment occurrences to date-fns equivalent in ProcessService (#8879)
* [ACS-5878] migrated moment to date-fns for ProcessService

* [ACS-5878] reverted variable renaming

* [ACS-5878] linting fixes
2023-09-26 08:53:06 -04:00
Jatin Chugh 3638ed06ef [APPS-2157] [APPS-2158] [APPS-2161] [APPS-2162] [APPS-2165] migration of e2e test cases from moment to date-fns (#8864)
* migration of dependency from moment to date-fns in task-list.component

* migration of dependency  from moment to date-fns

* migration of e2e from moment to date-fns

* sync with develop

* migrated info-drawer.e2e.ts from moment to date-fns

* migrated process-header-cloud.e2e.ts file from moment to date-fns

* migrated task-header-cloud.e2e.ts from moment to date-fns

* migration of document-list-component.e2e.ts from moment to date-fns

* changed format to 'PP' instead of 'PPpp'

* removed new Date() as process.started is already in Date format
2023-09-26 08:50:47 -04:00
pkunduGL f488520752 [APPS-2164] migration of dependency from moment to date-fns in task-list-properties.e2e.ts (#8873) 2023-09-26 08:49:48 -04:00
Denys Vuika ef551a9c71 Improved ESLint configuration, integrated spellcheck and error fixes (#8931)
* integrate cspell with eslint, improved configuration

* core: fix linting errors

* core: fix lint warnings

* content: lint fixes

* process service lint fixes

* lint: process services cloud

* lint: insights

* lint: extensions

* [ci:force] lint: cli fixes

* [ci:force] comment out dead code

* [ci:force] exclude dead code

* fix code and tests

* rollback some changes

* fix testing lib

* fix demo shell

* minor lint warning fixes

* minor lint fixes

* fix process services
2023-09-26 13:46:53 +01:00
Mykyta Maliarchuk 8370a3de66 [MNT-23560] TIFF PDF Renderer Error (#8921)
* [MNT-23560] added horizontal scroll

* [MNT-23560] fixed user interaction tests

* [MNT-23560] unit tests

* [MNT-23560] fixed pdf-viewer unit tests

* [MNT-23560] linter

* [MNT-23560] added to do comment
2023-09-26 13:44:29 +01:00
Ehsan Rezaei 5345838744 [AAE-16353] - Refactoring error component to get typography from theme (#8932)
* [AAE-16353] - Refactoring error component to get typography from theme

* AAE-16353: updated class list
2023-09-26 14:23:15 +02:00
Alfresco Buildandmauriziovitale 919a8ba80c [ci:force][auto-commit] Update dependencies JS:7.1.0-1313 (#8918)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-09-22 04:58:09 -04:00
DominikIwanek 16ab6e3306 [ACS-5271] - replace deprecated 'request' library (#8916)
* [ACS-5271] - replace deprecated 'request' library
2023-09-19 15:56:34 +02:00
Denys Vuika 9ca7dbdce9 Release 6.3.0 (#8917)
* bump versions and deps

* release reports

* release notes

* update lock file
2023-09-18 14:55:34 +01:00
dependabot[bot] 15219c3cc6 Bump @typescript-eslint/typescript-estree from 5.59.2 to 6.7.0 (#8911)
Bumps [@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree) from 5.59.2 to 6.7.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-estree/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.7.0/packages/typescript-estree)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/typescript-estree"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-18 10:31:30 +01:00
dependabot[bot] 3d867d728b Bump tslib from 2.6.1 to 2.6.2 (#8914)
Bumps [tslib](https://github.com/Microsoft/tslib) from 2.6.1 to 2.6.2.
- [Release notes](https://github.com/Microsoft/tslib/releases)
- [Commits](https://github.com/Microsoft/tslib/compare/v2.6.1...v2.6.2)

---
updated-dependencies:
- dependency-name: tslib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-18 09:48:58 +01:00
dependabot[bot] 87a00e0672 Bump postcss from 8.4.23 to 8.4.29 (#8912)
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.29.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.29)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-18 09:43:06 +01:00
dependabot[bot] d2d6a31bdb Bump webpack from 5.82.0 to 5.88.2 (#8910)
Bumps [webpack](https://github.com/webpack/webpack) from 5.82.0 to 5.88.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.82.0...v5.88.2)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-18 09:42:41 +01:00
Denys Vuika a1dd270c5d [ACS-5991] ESLint fixes and code quality improvements (#8893)
* prefer-optional-chain: core

* prefer-optional-chain: content, fix typings

* prefer-optional-chain: process, fix typings

* prefer-optional-chain: process-cloud, fix typings, fix ts configs and eslint

* [ci: force] sonar errors fixes, insights lib

* [ci:force] fix security issues

* [ci:force] fix metadata e2e bug, js assignment bugs

* [ci:force] fix lint issue

* [ci:force] fix tests
2023-09-18 09:42:16 +01:00
dependabot[bot] 99f591ed67 Bump @typescript-eslint/parser from 5.38.1 to 5.62.0 (#8913)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.38.1 to 5.62.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.62.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-18 09:41:22 +01:00
Bartosz Sekula f20df680aa [AAE-16491] Fix session invalidation for Http 401 response (#8909) 2023-09-15 18:03:45 +02:00
Alfresco Buildandmauriziovitale 6df6fd16fc [ci:force][auto-commit] Update dependencies JS:6.3.0-1289 (#8907)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-09-13 03:33:10 -04:00
Denys Vuika d7cf12d89b use an icon for "mark all" notifications (#8903) 2023-09-13 03:32:41 -04:00
DominikIwanek e14e489d2d [ACA-4313] - Sort order doesn't work correctly (#8892)
[ACA-4313] - Sort order doesn't work correctly
2023-09-12 16:07:16 +02:00
Diogo Bastos 13b6bf37ff [AAE-16202] Fix long label overlap on radio button (#8906)
* [AAE-16202] Fix long label overlap on radio button

* [AAE-16202] Add margin top

* Align styles with expected behaviour

* [AAE-16202] fix lint error
2023-09-12 16:05:05 +02:00
Mykyta Maliarchuk 8080a0699f [ACS-6004] Exclude paths from CodeQL analysis (#8905)
* [ACS-6004] added ignored paths to codeql

* [ACS-6004] custom codeql config
2023-09-12 08:57:51 -04:00
Mykyta Maliarchuk 0d5e70ebf7 [ACS-5742] Fix Search e2e's (#8902)
* [ACS-5742] added People filter to demo-shell

* [ACS-5742] fixed search e2e's

* [ACS-5742] linter

* [ACS-5742] build fix

* [ACS-5742] fixed build

* [ACS-5742] removed duplicated unit test
2023-09-12 05:34:44 -04:00
Alfresco Buildandmauriziovitale 3aa55996bf [ci:force][auto-commit] Update dependencies JS:6.3.0-1288 (#8904)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-09-12 04:43:40 -04:00
Alfresco Buildandmauriziovitale d2ef772e0a [ci:force][auto-commit] Update dependencies JS:6.3.0-1280 (#8819)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-09-11 14:35:30 +01:00
Bartosz Sekula a1b39fb6dc [AAE-16219] Theming for HxP is not working (#8894) 2023-09-08 17:20:05 +02:00
Tomasz Gnyp ce881b7dcf [AAE-16303] Handle nested property data source in data table (#8895) 2023-09-08 17:19:53 +02:00
Robert Duda a8db044092 [AAE-14704] Fix viewers showing removed file (#8890) 2023-09-08 10:11:47 +02:00
MichalKinas 76e2870c66 Adjust ADF to latest JS-API version (#8882)
* Bump js-api version

* Fix imports

* Fix content-services unit tests

* Fix process-services unit tests

* [ci:force] Trigger CI

* Fix code smells

* Fix orderBy param

* Fix code smells

* Fix failing unit tests

* Bump js-api version and align with new changes

* Remove dangling coma

* Fix delete return type

* Add correct date format in task filters e2es

* Fix typing in task filter sorting

* Fix activiti content api import

* Add null check for has avatar

* Make User class instead of type

* Fix user type in comment model

* Fix sonar cloud issue

* Type fixes

* Update js-api version
2023-09-07 07:29:42 -04:00
Tomasz Gnyp 876ca7a0a7 [AAE-15813] Fix - deployed application named 'idp' doesn't work (#8887) 2023-09-06 15:21:04 +01:00
Diogo Bastos 8a9f828894 [AAE-16202] Fix long label overlap on radio button (#8886)
* [AAE-16202] Fix long label overlap on radio button

* [AAE-16202] Add margin top
2023-09-06 11:16:28 +01:00
pkunduGL 70a7e5f4e1 [APPS-2160] migration of dependency from moment to date-fns in custom-tasks-filters.e2e.ts (#8871)
* Migrated moment js dependency to datefns in e2e

* Review comments resolved

* Review comments resolved

* fake commit
2023-09-06 10:15:21 +05:30
MichalKinas bd518b6c59 [ACS-5929] Open datatable actions menu on enter (#8868) 2023-09-05 16:00:43 +02:00
Eugenio Romano 60099a2d7d [AAE-15828] add mobile query to visualize form under one column for small viewport (#8883) 2023-09-05 12:48:34 +01:00
Aayush Rohila b4ffc866d7 [ACS-5654] Retain filter header in document list. (#8811)
* [ACS-5654] Retain filter header in document list.

* [ACS-5654] Unit tests

* [ACS-5654] Unit tests

* [ACS-5654] Unit test fix.
2023-09-01 10:30:24 -04:00
Eugenio Romano 9ce8b01914 Update release.yml (#8874) 2023-09-01 14:58:57 +02:00
Tomasz Gnyp 95537c4c50 [AAE-16236] Fix missing service export (#8872)
* Fix missing service export

* fake change
2023-09-01 10:26:46 +01:00
Aayush Rohila c6fdbd601a [ACS-5876] Change from moment to date-fns for lock.service. (#8862)
* [ACS-5876] Change from moment to date-fns for lock.service.

* [ACS-5876] Unit test update.
2023-08-31 16:51:50 +01:00
Denys Vuika c83d92c539 [ACS-5839] migrate from QueryBody to SearchResult type (#8861)
* [ci:force] migrate from QueryBody to SearchQuery

* [ci:force] migrate from QueryBody to SearchQuery

* [ci:force] migrate from QueryBody to SearchQuery

* [ci:force] update docs and variables as per code review
2023-08-31 15:36:21 +02:00
Eugenio Romano c73e95c9bf change script to fix the alpha version overlap (#8869) 2023-08-31 12:35:09 +02:00
Eugenio Romano 1c30eb2814 remove unused action in release (#8867) 2023-08-31 11:20:59 +02:00
SheenaMalhotra182 780800453a [ACS-5858] Migrated adfMomentDateTime Pipe to date-fns equivalent (#8856)
* [ACS-5858] created adfDateTimePipe and added unit tests

* [ACS-5858] added revised unit tests

* [ACS-5858] linting fixes

* [ACS-5858] addressed review comments

* [ACS-5858] addressed review comments
2023-08-31 14:48:37 +05:30
Eugenio Romano bb3000346f release branch workflow (#8865) 2023-08-31 10:25:12 +02:00
Denys Vuika 3b4ce3b857 [ACS-5839] migrate to latest JS-API types (#8859)
* [ci:force] migrate Minimal Node to Node

* [ci:force] remove js-api wrappers and use real types

* [ci:force] remove js-api wrappers and use real types

* [ci:force] fix linting errors

* [ci:force] fix linting errors

* [ci:force] security fixes

* [ci:force] sonarcloud bug fixes

* [ci:force] dead code elimination, sonar suggested fixes
2023-08-29 20:56:40 +01:00
Tomasz Gnyp a5b05b3e5f [AAE-15814] Handle direct input mapping with JSON response for data table widget (#8860) 2023-08-29 18:01:57 +02:00
Jatin Chugh 657711e808 [APPS-2128] remove moment dependency from task-list.component.ts (#8838) 2023-08-29 14:27:38 +01:00
eromano a66b3d0846 Revert "add branch release"
This reverts commit 79df220434.
2023-08-28 15:08:00 +02:00
eromano 79df220434 add branch release 2023-08-28 15:06:45 +02:00
DominikIwanek af3c7eb783 [ACS-5505] - Custom aspect properties are not updated when removing last existing property (#8828)
* [ACS-5505] - Custom aspect properties are not updated when removing last existing property
2023-08-28 11:28:10 +02:00
Grzegorz Jaśkowski 885c5a52fe ACS-5520 add eslint-angular README, rephrase rule documentation (#8850) 2023-08-25 10:44:31 -04:00
Raviraj Bahirsheth d839531d08 [APPS-2134] Remove moment.js dependency from start-task-cloud.compone… (#8845)
* [APPS-2134] Remove moment.js dependency from start-task-cloud.component.ts

* Removed the console log

* Update variable name
2023-08-25 09:13:14 -04:00
Ketevani Kvirikashvili 377dd5d3a2 [AAE-15764] Add rollback property to the model (#8848)
* [AAE-15764] Add rollback property to the model

* trigger
2023-08-25 11:53:11 +01:00
AleksanderSklorz efa691b249 [ACS-5281] Allow to change editable of content metadata from parent (#8841)
* ACS-5281 Allow to change editable of content metadata from parent

* ACS-5281 Added empty spaces to import
2023-08-25 10:49:28 +02:00
Raviraj Bahirsheth b77691bb08 [ACS-5861] Replace moment to date-fns in process-name.pipe.ts (#8831) 2023-08-25 14:03:00 +05:30
Aayush Rohila 837b3b1b92 [ACS-5640] Changing from moment to date-fns. (#8796) 2023-08-25 13:52:51 +05:30
Grzegorz Jaśkowski 87e57272fa [ACS-5898] prevent custom task filters from always sending due after date (#8847)
* ACS-5898 prevent custom task filters from always sending due after date, build custom filters form without initial values

* ACS-5898 revert setDueAfterFilter method removal, make its use conditional
2023-08-24 10:51:38 -04:00
Rafal Szmit de16072171 [AAE-1653] Script to update webdriver locally ADF (#8846)
* [AAE-1653] Script to update webdriver locally ADF

* update readme

* trigger ci
2023-08-24 15:37:48 +02:00
Eugenio Romano 729a65ca5c Update codeql-analysis.yml (#8843)
Fix warning in codeql
2023-08-23 11:21:36 +02:00
Jatin Chugh ce855ec36e remove dependency from search-filters.e2e.ts file (#8840) 2023-08-23 10:48:59 +05:30
Jatin Chugh c9fdf24553 [APPS-2127] migrated dependency in date-range-filter component from moment to date-fns (#8833)
* migrated dependency in date-range-filter component from moment to date-fns

* test cases migrated to date-fns impacted due to migration of dependency in date-range-filter.component.ts

* migrate date-range-filter.service.ts from moment to date-fns dependency
2023-08-22 14:45:52 -04:00
Giovanni Toraldo a8be9d64e1 OPSEXP-2250 Fix s3 download command in init aps (#8842) 2023-08-22 17:03:09 +02:00
tiagosalvado10 b58e6f628a [MNT-23821] Filter custom aspects (#8790)
* [MNT-23821] Filter custom aspects

* [MNT-23821] getCustomAspects initialization

* [MNT-23821] Added aspect list service tests

* [MNT-23821] getCustomAspects - whiteList argument as optional. Added tests.

* [MNT-23821] Changed from double to single quotes

* [MNT-23821] Lint
2023-08-22 10:27:31 -04:00
MichalKinas 9a349f27d9 Add error logging while updateing aps license (#8839) 2023-08-22 14:19:21 +02:00
Denys Vuika 29ec2fcc96 [ACS-5845] remove Alfresco Compatibility usage (#8822)
* upgrade to latest js-api

* upgrade to latest js-api

* upgrade to latest js-api

* upgrade to latest js-api

* upgrade to latest js-api

* upgrade to latest js-api

* fix security concerns for execSync

* security fix

* fixes as per code reviews

* code fixes for attach file widget dialog

* code fixes

* code fixes

* disable ACS storage check

* add the jira to the commented out block

* remove useless logger call

* code fixes

* code fixes

* code fixes

* code and typing fixes

* fix lint

* disable the code

* try other fixes, add missing headers

* dump error to console

* replace test file with in-memory stream

* code fixes

* simplify checks

* disable upload

* remove useless test and ng-mocks dependency
2023-08-22 00:02:39 +01:00
Jatin Chugh d0c35c28ee [ACS-5860] Migration of process name cloud pipe from moment to date-fns (#8797) 2023-08-17 19:22:38 -04:00
AleksanderSklorz 40adcfec2d [ACS-5797] Disable restore action for the latest version of file (#8827)
* ACS-5797 Hide restore action for the latest version of file

* ACS-5797 Removed duplications

* ACS-5797 Fix for e2e

* ACS-5797 Disable restore button for latest version
2023-08-17 18:44:18 -04:00
Jatin Chugh 03b93721ab [APPS-2110] migrated dependency from moment to date-fns (#8829) 2023-08-17 18:43:29 -04:00
Mykyta Maliarchuk 3e56b9a4cc [ACS-5226] Make Categories & Tags View Details Edit consistent (#8826)
* [ACS-5226] hide & clear tags input

* [ACS-5226] added unit test for reseting properties
2023-08-17 11:54:24 -04:00
DominikIwanek f8d587bc2e [ACS-5373] - Every getPerson() call changes current user (#8830) 2023-08-17 17:08:46 +02:00
DominikIwanek 673010d271 [ACS-5738] unable to unselect libraries (#8825)
* [ACS-5738] - Make libraries in datatable to be possible to unselect
2023-08-17 12:26:18 +02:00
Denys Vuika d0b1f77b7b fix document list memory leak (#8823) 2023-08-16 14:46:30 +01:00
MichalKinas 005115ee19 [ACS-5836] Display label for chips (#8820) 2023-08-14 10:59:14 -04:00
dependabot[bot] dcd1c4e21c Bump eslint from 8.39.0 to 8.47.0 (#8817)
Bumps [eslint](https://github.com/eslint/eslint) from 8.39.0 to 8.47.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.39.0...v8.47.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-13 14:32:09 +01:00
Alfresco Buildandmauriziovitale 1b06742eb6 [ci:force][auto-commit] Update dependencies JS:6.3.0-1108 (#8815)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-08-13 14:31:35 +01:00
Alfresco Buildandmauriziovitale f1d9e0a92f [ci:force][auto-commit] Update dependencies JS:6.3.0-1104 (#8800)
Co-authored-by: mauriziovitale <mauriziovitale@users.noreply.github.com>
2023-08-12 09:33:16 -04:00
Grzegorz Jaśkowski 6cb881e8cf [ADF-5557] add missing i18n resources for library membership directive (#8806)
* ADF-5557 add missing i18n resources for library membership directive

* ADF-5557 change i18n key naming in moved resources
2023-08-11 15:13:25 +01:00
Wiktor Danielewski 57ff885483 [AAE-15988] Update About component (#8814)
* [AAE-15988] Update About component

* [AAE-15988] Add automationId to AboutPanel directive
2023-08-11 15:11:58 +01:00
Tomasz Gnyp e7dbedd497 [AAE-15815] Export variable config interface (#8813) 2023-08-11 11:32:30 +02:00
Denys Vuika f201efd56a [ACS-5761] Demo Shell Cleanup (part 2) (#8807)
cleanup demo shell
2023-08-10 22:18:21 +01:00
DominikIwanek ca60b392d4 [ACS-5693] - Fix flickering edit icon (pencil) on hover in chip-list input (#8808) 2023-08-10 16:18:44 +02:00
1400 changed files with 41151 additions and 47285 deletions
+185 -190
View File
@@ -1,193 +1,188 @@
path = require('path');
module.exports = {
root: true,
ignorePatterns: [
'projects/**/*',
'**/node_modules/**/*',
'lib/cli/node_modules/**/*',
'**/node_modules',
'**/docker',
'**/assets',
'**/scripts',
'**/docs'
],
overrides: [
{
files: [
'*.ts'
],
parserOptions: {
project: [
path.join(__dirname, 'tsconfig.json'),
path.join(__dirname, 'e2e/tsconfig.e2e.json')
],
createDefaultProgram: true
},
extends: [
'plugin:@angular-eslint/ng-cli-compat',
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
'plugin:@angular-eslint/template/process-inline-templates'
],
plugins: [
'eslint-plugin-unicorn',
'eslint-plugin-rxjs',
'ban',
'license-header'
],
rules: {
'ban/ban': [
'error',
{ name: 'eval', message: 'Calls to eval is not allowed.' },
{ name: 'fdescribe', message: 'Calls to fdescribe is not allowed' },
{ name: 'fit', message: 'Calls to fit is not allowed' },
{ name: 'xit', message: 'Calls to xit is not allowed' },
{ name: 'xdescribe', message: 'Calls to xdescribe is not allowed' },
{ name: ['test', 'only'], message: 'Calls to test.only is not allowed' },
{ name: ['describe', 'only'], message: 'Calls to describe.only is not allowed' }
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: [
'adf',
'app'
root: true,
ignorePatterns: [
'projects/**/*',
'**/node_modules/**/*',
'lib/cli/node_modules/**/*',
'**/node_modules',
'**/docker',
'**/assets',
'**/scripts',
'**/docs'
],
plugins: ['@nrwl/nx'],
overrides: [
{
files: ['*.ts'],
parserOptions: {
project: ['tsconfig.json', 'e2e/tsconfig.e2e.json'],
createDefaultProgram: true
},
extends: [
'plugin:@nrwl/nx/typescript',
'plugin:@nrwl/nx/angular',
'plugin:@cspell/recommended',
'plugin:@angular-eslint/ng-cli-compat',
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
'plugin:@angular-eslint/template/process-inline-templates',
'plugin:jsdoc/recommended-typescript-error'
],
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: [
'element',
'attribute'
plugins: [
'eslint-plugin-unicorn',
'eslint-plugin-rxjs',
'prettier',
'ban',
'license-header',
'@cspell',
'eslint-plugin-import',
'@angular-eslint/eslint-plugin',
'@typescript-eslint',
'jsdoc'
],
prefix: [
'adf',
'app'
],
style: 'kebab-case'
}
],
'@angular-eslint/no-host-metadata-property': 'off',
'@angular-eslint/no-input-prefix': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'off',
{
accessibility: 'explicit'
}
],
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'error',
'@typescript-eslint/naming-convention': [
'error',
{
selector: [
'classProperty',
'objectLiteralProperty',
'typeProperty',
'classMethod',
'objectLiteralMethod',
'typeMethod',
'accessor',
'enumMember'
],
format: null,
modifiers: ['requiresQuotes']
}
],
'@typescript-eslint/member-ordering': 'off',
'prefer-arrow/prefer-arrow-functions': 'off',
'brace-style': [
'error',
'1tbs'
],
'comma-dangle': 'error',
'default-case': 'error',
'import/order': 'off',
'max-len': [
'error',
{
code: 240
}
],
'no-bitwise': 'off',
'no-console': [
'error',
{
allow: [
'warn',
'dir',
'timeLog',
'assert',
'clear',
'count',
'countReset',
'group',
'groupEnd',
'table',
'dirxml',
'error',
'groupCollapsed',
'Console',
'profile',
'profileEnd',
'timeStamp',
'context'
]
}
],
'no-duplicate-imports': 'error',
'no-multiple-empty-lines': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'rxjs/no-create': 'error',
'rxjs/no-subject-unsubscribe': 'error',
'rxjs/no-subject-value': 'error',
'rxjs/no-unsafe-takeuntil': 'error',
'unicorn/filename-case': 'error',
'@typescript-eslint/no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true
}
],
'license-header/header': ['error',
[
'/*!',
' * @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.',
' */'
]
]
}
},
{
files: [
'*.html'
],
extends: [
'plugin:@angular-eslint/template/recommended'
],
rules: {}
}
]
}
rules: {
// Uncomment this to enable prettier checks as part of the ESLint
// 'prettier/prettier': 'error',
'ban/ban': [
'error',
{ name: 'eval', message: 'Calls to eval is not allowed.' },
{ name: 'fdescribe', message: 'Calls to fdescribe is not allowed' },
{ name: 'fit', message: 'Calls to fit is not allowed' },
{ name: 'xit', message: 'Calls to xit is not allowed' },
{ name: 'xdescribe', message: 'Calls to xdescribe is not allowed' },
{ name: ['test', 'only'], message: 'Calls to test.only is not allowed' },
{ name: ['describe', 'only'], message: 'Calls to describe.only is not allowed' }
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: ['element', 'attribute'],
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/no-host-metadata-property': 'off',
'@angular-eslint/no-input-prefix': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'off',
{
accessibility: 'explicit'
}
],
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/prefer-optional-chain': 'warn',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'error',
'@typescript-eslint/naming-convention': [
'error',
{
selector: [
'classProperty',
'objectLiteralProperty',
'typeProperty',
'classMethod',
'objectLiteralMethod',
'typeMethod',
'accessor',
'enumMember'
],
format: null,
modifiers: ['requiresQuotes']
}
],
'@typescript-eslint/member-ordering': 'off',
'prefer-arrow/prefer-arrow-functions': 'off',
'prefer-promise-reject-errors': 'error',
'brace-style': 'off',
'@typescript-eslint/brace-style': 'error',
'comma-dangle': 'error',
'default-case': 'error',
'import/order': 'off',
'max-len': [
'error',
{
code: 240
}
],
'no-bitwise': 'off',
'no-console': [
'error',
{
allow: [
'warn',
'dir',
'timeLog',
'assert',
'clear',
'count',
'countReset',
'group',
'groupEnd',
'table',
'dirxml',
'error',
'groupCollapsed',
'Console',
'profile',
'profileEnd',
'timeStamp',
'context'
]
}
],
'no-duplicate-imports': 'error',
'no-multiple-empty-lines': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'rxjs/no-create': 'error',
'rxjs/no-subject-unsubscribe': 'error',
'rxjs/no-subject-value': 'error',
'rxjs/no-unsafe-takeuntil': 'error',
'unicorn/filename-case': 'error',
'@typescript-eslint/no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true
}
],
'license-header/header': [
'error',
[
'/*!',
' * @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.',
' */'
]
]
}
},
{
files: ['*.html'],
extends: ['plugin:@angular-eslint/template/recommended'],
rules: {}
}
]
};
+188
View File
@@ -0,0 +1,188 @@
module.exports = {
root: true,
ignorePatterns: [
'projects/**/*',
'**/node_modules/**/*',
'lib/cli/node_modules/**/*',
'**/node_modules',
'**/docker',
'**/assets',
'**/scripts',
'**/docs'
],
plugins: ['@nrwl/nx'],
overrides: [
{
files: ['*.ts'],
parserOptions: {
project: ['tsconfig.json', 'e2e/tsconfig.e2e.json'],
createDefaultProgram: true
},
extends: [
'plugin:@nrwl/nx/typescript',
'plugin:@nrwl/nx/angular',
'plugin:@cspell/recommended',
'plugin:@angular-eslint/ng-cli-compat',
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
'plugin:@angular-eslint/template/process-inline-templates',
'plugin:jsdoc/recommended-typescript-error'
],
plugins: [
'eslint-plugin-unicorn',
'eslint-plugin-rxjs',
'prettier',
'ban',
'license-header',
'@cspell',
'eslint-plugin-import',
'@angular-eslint/eslint-plugin',
'@typescript-eslint',
'jsdoc'
],
rules: {
// Uncomment this to enable prettier checks as part of the ESLint
// 'prettier/prettier': 'error',
'ban/ban': [
'error',
{ name: 'eval', message: 'Calls to eval is not allowed.' },
{ name: 'fdescribe', message: 'Calls to fdescribe is not allowed' },
{ name: 'fit', message: 'Calls to fit is not allowed' },
{ name: 'xit', message: 'Calls to xit is not allowed' },
{ name: 'xdescribe', message: 'Calls to xdescribe is not allowed' },
{ name: ['test', 'only'], message: 'Calls to test.only is not allowed' },
{ name: ['describe', 'only'], message: 'Calls to describe.only is not allowed' }
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: ['element', 'attribute'],
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/no-host-metadata-property': 'off',
'@angular-eslint/no-input-prefix': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'off',
{
accessibility: 'explicit'
}
],
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/prefer-optional-chain': 'warn',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'error',
'@typescript-eslint/naming-convention': [
'error',
{
selector: [
'classProperty',
'objectLiteralProperty',
'typeProperty',
'classMethod',
'objectLiteralMethod',
'typeMethod',
'accessor',
'enumMember'
],
format: null,
modifiers: ['requiresQuotes']
}
],
'@typescript-eslint/member-ordering': 'off',
'prefer-arrow/prefer-arrow-functions': 'off',
'prefer-promise-reject-errors': 'error',
'brace-style': 'off',
'@typescript-eslint/brace-style': 'error',
'comma-dangle': 'error',
'default-case': 'error',
'import/order': 'off',
'max-len': [
'error',
{
code: 240
}
],
'no-bitwise': 'off',
'no-console': [
'error',
{
allow: [
'warn',
'dir',
'timeLog',
'assert',
'clear',
'count',
'countReset',
'group',
'groupEnd',
'table',
'dirxml',
'error',
'groupCollapsed',
'Console',
'profile',
'profileEnd',
'timeStamp',
'context'
]
}
],
'no-duplicate-imports': 'error',
'no-multiple-empty-lines': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'rxjs/no-create': 'error',
'rxjs/no-subject-unsubscribe': 'error',
'rxjs/no-subject-value': 'error',
'rxjs/no-unsafe-takeuntil': 'error',
'unicorn/filename-case': 'error',
'@typescript-eslint/no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true
}
],
'license-header/header': [
'error',
[
'/*!',
' * @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.',
' */'
]
]
}
},
{
files: ['*.html'],
extends: ['plugin:@angular-eslint/template/recommended'],
rules: {}
}
]
};
+3 -2
View File
@@ -60,8 +60,9 @@ runs:
echo "Setting up CI flags for Push develop patch"
else
echo "Setting up CI flags for Push on develop branch"
base=$(git describe --tags $(git rev-list --tags --max-count=1))
echo "NX_CALCULATION_FLAGS=--base=$base --head=$HEAD_HASH" >> $GITHUB_ENV
# base=$(git describe --tags $(git rev-list --tags --max-count=1))
# we publish always all the libs until we don't handle partial release
echo "NX_CALCULATION_FLAGS=--all" >> $GITHUB_ENV
fi
echo "BREAK_ACTION=true" >> $GITHUB_ENV
+1 -1
View File
@@ -153,7 +153,7 @@ runs:
echo $PROXY_HOST_BPM
echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV
- name: run test
- name: run test
id: e2e_run
if: ${{ steps.determine-affected.outputs.isAffected == 'true' }}
env:
+6
View File
@@ -0,0 +1,6 @@
name: "CodeQL config"
paths-ignore:
- 'e2e/resources/**/*.*'
- 'docs/**/*.*'
+7
View File
@@ -3,9 +3,15 @@ name: "CodeQL"
on:
push:
branches: [develop, master]
paths-ignore:
- 'e2e/resources/**/*.*'
- 'docs/**/*.*'
pull_request:
# The branches below must be a subset of the branches above
branches: [develop]
paths-ignore:
- 'e2e/resources/**/*.*'
- 'docs/**/*.*'
schedule:
- cron: '0 5 * * 0'
@@ -28,6 +34,7 @@ jobs:
# Override language selection by uncommenting this and choosing your languages
with:
languages: javascript
config-file: ./.github/codeql/codeql-config.yml
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
-9
View File
@@ -392,15 +392,6 @@ jobs:
check-cs-env: "true"
check-ps-cloud-env: "true"
deps: "testing"
- description: "Process Cloud: People"
test-id: "process-services-cloud"
folder: "process-services-cloud/people"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
deps: "testing"
- description: "Process Cloud: Process"
test-id: "process-services-cloud"
folder: "process-services-cloud/process"
+157
View File
@@ -0,0 +1,157 @@
name: Release lib on branch
run-name: Release lib on branch ${{ github.ref_name }}
on:
workflow_dispatch:
inputs:
dry-run-flag:
description: 'enable dry-run on artifact push'
required: false
type: boolean
default: true
env:
BASE_REF: ${{ github.base_ref }}
HEAD_REF: ${{ github.head_ref }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_IDENTITY_HOST_APA: ${{ secrets.E2E_IDENTITY_HOST_APA }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
#USERNAME_ADF: ${{ secrets.E2E_USERNAME }}
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: "http://localhost:4200"
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
SMART_RUNNER_PATH: ".protractor-smartrunner"
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
NODE_OPTIONS: "--max-old-space-size=5120"
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
REPO_OWNER: "Alfresco"
REPO_NAME: "alfresco-ng2-components"
DEMO_SHELL_DIR: "./dist/demo-shell"
STORYBOOK_DIR: "./dist/storybook/stories"
BUILT_LIBS_DIR: "./dist/libs"
NODE_MODULES_DIR: "./node_modules"
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
SAVE_SCREENSHOT: true
REDIRECT_URI: /
BROWSER_RUN: false
MAXINSTANCES: 2
PLAYWRIGHT_WORKERS: 2
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
jobs:
setup:
timeout-minutes: 20
name: "Setup"
runs-on: ubuntu-22.04
steps:
- name: set TAG_NPM BRANCH
shell: bash
run: |
TAG_NPM="branch"
echo "Set TAG with name: ${TAG_NPM}"
echo "TAG_NPM=${TAG_NPM}" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
- name: install
run: |
npm ci
npx nx run cli:bundle
npx nx run testing:bundle
- uses: ./.github/actions/upload-node-modules-and-artifacts
release-npm:
needs: [setup]
timeout-minutes: 30
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
- id: set-dryrun
uses: ./.github/actions/enable-dryrun
with:
dry-run-flag: ${{ inputs.dry-run-flag }}
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: build libraries
run: |
set -u;
./scripts/update-version.sh -gnu -nextalpha|| exit 1;
npx nx affected:build $NX_CALCULATION_FLAGS --prod --exclude="demoshell" --skip-nx-cache
npx nx affected $NX_CALCULATION_FLAGS --target=pretheme
- uses: actions/setup-node@v3
name: release libraries GH registry
with:
node-version-file: '.nvmrc'
registry-url: 'https://npm.pkg.github.com'
scope: '@alfresco'
- run: npx nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=branch|| exit 1
env:
NODE_AUTH_TOKEN: ${{ secrets.PAT_WRITE_PKG }}
- uses: actions/setup-node@v3
name: release libraries Npm registry
with:
node-version-file: '.nvmrc'
registry-url: 'https://${{ vars.NPM_REGISTRY_ADDRESS }}'
scope: '@alfresco'
- run: npx nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=branch || exit 1
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
npm-check-bundle:
needs: [release-npm]
timeout-minutes: 15
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- uses: ./.github/actions/npm-check-bundle
-11
View File
@@ -177,17 +177,6 @@ jobs:
with:
dry-run-flag: ${{ inputs.dry-run-flag }}
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: check PR number
id: action
uses: kamatama41/get-pr-number-action@5c77b38a1b4974ebf8a9521a689f38a5898eadd6
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: save PR number
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
echo "PR_NUMBER=${{ steps.action.outputs.number }}" >> $GITHUB_ENV
- name: build libraries
run: |
set -u;
+1 -1
View File
@@ -10,7 +10,7 @@
"name": "e2e",
"program": "${workspaceFolder}/node_modules/protractor/bin/protractor",
"args": [
"`${workspaceFolder}/.vscode/closest-config-finder.sh ${file} e2e/protractor.conf.js`",
"./e2e/protractor.conf.js",
"--specs=${file}"
],
"envFile": "${workspaceFolder}/.env",
+110 -112
View File
@@ -29,7 +29,7 @@
"polyfills": "demo-shell/src/polyfills.ts",
"stylePreprocessorOptions": {
"includePaths": [
"lib"
"lib", "lib/core/src/lib"
]
},
"assets": [
@@ -108,7 +108,6 @@
}
],
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
@@ -117,8 +116,7 @@
"scripts": [
"node_modules/pdfjs-dist/build/pdf.js",
"node_modules/pdfjs-dist/web/pdf_viewer.js",
"node_modules/raphael/raphael.min.js",
"node_modules/moment/min/moment.min.js"
"node_modules/raphael/raphael.min.js"
],
"vendorChunk": true,
"extractLicenses": false,
@@ -210,16 +208,6 @@
"demo-shell/**/*.html"
]
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'demo-shell/**/*.ts'"
}
]
}
}
}
},
@@ -282,6 +270,11 @@
"karmaConfig": "lib/core/karma.conf.js",
"sourceMap": true,
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
},
"styles": [
"demo-shell/src/styles.scss"
]
@@ -312,12 +305,16 @@
"configDir": "lib/core/.storybook",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -333,12 +330,16 @@
"outputDir": "dist/storybook/core",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -346,16 +347,6 @@
}
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/core/**/*.ts'"
}
]
}
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
@@ -398,7 +389,12 @@
"command": "npm publish --tag {args.tag}",
"forwardAllArgs": true
}
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
}
}
@@ -430,7 +426,12 @@
"tsConfig": "lib/content-services/tsconfig.spec.json",
"karmaConfig": "lib/content-services/karma.conf.js",
"sourceMap": true,
"codeCoverage": true
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
},
"lint": {
@@ -450,12 +451,16 @@
"configDir": "lib/content-services/.storybook",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -471,12 +476,16 @@
"outputDir": "dist/storybook/content-services",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -484,16 +493,6 @@
}
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/content-services/**/*.ts'"
}
]
}
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
@@ -548,7 +547,12 @@
"tsConfig": "lib/process-services/tsconfig.spec.json",
"karmaConfig": "lib/process-services/karma.conf.js",
"sourceMap": true,
"codeCoverage": true
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
},
"lint": {
@@ -560,26 +564,6 @@
]
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/process-services/**/*.ts'"
}
]
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx stylelint lib/process-services/**/*.scss --config stylelint-config.json"
}
]
}
}
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
@@ -634,7 +618,12 @@
"tsConfig": "lib/process-services-cloud/tsconfig.spec.json",
"karmaConfig": "lib/process-services-cloud/karma.conf.js",
"sourceMap": true,
"codeCoverage": true
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
},
"lint": {
@@ -654,12 +643,16 @@
"configDir": "lib/process-services-cloud/.storybook",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -675,12 +668,16 @@
"outputDir": "dist/storybook/process-services-cloud",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
@@ -699,16 +696,6 @@
]
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/process-services-cloud/**/*.ts'"
}
]
}
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
@@ -763,7 +750,12 @@
"tsConfig": "lib/insights/tsconfig.spec.json",
"karmaConfig": "lib/insights/karma.conf.js",
"sourceMap": true,
"codeCoverage": true
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
},
"lint": {
@@ -775,16 +767,6 @@
]
}
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/insights/**/*.ts'"
}
]
}
},
"stylelint": {
"executor": "nx:run-commands",
"options": {
@@ -838,7 +820,12 @@
"tsConfig": "lib/extensions/tsconfig.spec.json",
"karmaConfig": "lib/extensions/karma.conf.js",
"sourceMap": true,
"codeCoverage": true
"codeCoverage": true,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
}
},
"lint": {
@@ -848,17 +835,6 @@
"lib/extensions/**/*.ts",
"lib/extensions/**/*.html"
]
},
"dependsOn": ["spellcheck"]
},
"spellcheck": {
"executor": "nx:run-commands",
"options": {
"commands": [
{
"command": "npx cspell 'lib/extensions/**/*.ts'"
}
]
}
},
"npm-publish": {
@@ -897,7 +873,12 @@
"entryName": "shared",
"entryPath": "/lib/testing/src/lib/shared/index.ts"
}
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"production": {
@@ -978,7 +959,12 @@
"outputPath": "dist/libs/eslint-plugin-eslint-angular",
"main": "lib/eslint-angular/index.ts",
"generatePackageJson" : true,
"tsConfig": "lib/eslint-angular/tsconfig.lib.prod.json"
"tsConfig": "lib/eslint-angular/tsconfig.lib.prod.json",
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"production": {
@@ -1033,11 +1019,15 @@
"prefix": "adf",
"architect": {
"build": {
"builder": "@nrwl/workspace:run-commands",
"builder": "nx:run-commands",
"options": {
"commands": [
"cd lib/cli && npm i && npm run dist"
]
"command":
"cd lib/cli && npm i && npm run dist",
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"production": {
@@ -1113,8 +1103,12 @@
"browserTarget": "stories:storybook",
"configDir": "lib/stories/.storybook",
"compodoc": false,
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
},
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
@@ -1135,12 +1129,16 @@
"outputDir": "dist/storybook/stories",
"compodoc": false,
"styles": [
"demo-shell/src/assets/fonts/muli/muli.css",
"demo-shell/src/styles.scss",
"demo-shell/src/custom-style-dev.scss",
"node_modules/cropperjs/dist/cropper.min.css",
"node_modules/pdfjs-dist/web/pdf_viewer.css"
]
],
"stylePreprocessorOptions": {
"includePaths": [
"lib", "lib/core/src/lib"
]
}
},
"configurations": {
"ci": {
+4 -1
View File
@@ -44,6 +44,7 @@
"docx",
"dropdownrestprocess",
"Droppable",
"dryrun",
"ECMBPM",
"ECMHOST",
"Examinate",
@@ -125,6 +126,7 @@
"typeahed",
"uncheck",
"Unclaim",
"Undeployed",
"unfavorite",
"unlisten",
"unshare",
@@ -139,7 +141,8 @@
"webscript",
"Whitespaces",
"xdescribe",
"xsrf"
"xsrf",
"BPMECM"
],
"dictionaries": [
"html",
+1 -1
View File
@@ -25,7 +25,7 @@ const fs = require("fs");
const os = require("os");
const cp = require("child_process");
const isWindows = os.platform() === "win32";
const { output } = require("@nrwl/workspace");
const output = require('nx/src/utils/output').output;
/**
* Paths to files being patched
+71 -93
View File
@@ -1,95 +1,73 @@
path = require('path');
module.exports = {
extends: '../.eslintrc.js',
ignorePatterns: [
'!**/*'
],
overrides: [
{
files: [
'*.ts'
],
parserOptions: {
project: [
path.join(__dirname, 'tsconfig.app.json'),
path.join(__dirname, 'src/tsconfig.spec.json'),
path.join(__dirname, 'e2e/tsconfig.e2e.json')
],
createDefaultProgram: true
},
plugins: [
'eslint-plugin-unicorn',
'eslint-plugin-rxjs'
],
rules: {
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: [
'adf',
'app'
],
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: [
'element',
'attribute'
],
prefix: [
'adf',
'app'
],
style: 'kebab-case'
}
],
'@angular-eslint/no-host-metadata-property': 'off',
'@angular-eslint/no-input-prefix': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'off',
{
accessibility: 'explicit'
}
],
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'error',
'brace-style': [
'error',
'1tbs'
],
'comma-dangle': 'error',
'default-case': 'error',
'import/order': 'off',
'max-len': [
'error',
{
code: 240
}
],
'no-bitwise': 'off',
'no-duplicate-imports': 'error',
'no-multiple-empty-lines': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'rxjs/no-create': 'error',
'rxjs/no-subject-unsubscribe': 'error',
'rxjs/no-subject-value': 'error',
'rxjs/no-unsafe-takeuntil': 'error',
'unicorn/filename-case': 'error'
}
},
{
files: [
'*.html'
],
rules: {}
}
]
}
extends: '../.eslintrc.js',
ignorePatterns: ['!**/*'],
overrides: [
{
files: ['*.ts'],
parserOptions: {
project: [
path.join(__dirname, 'tsconfig.app.json'),
path.join(__dirname, 'src/tsconfig.spec.json'),
path.join(__dirname, 'e2e/tsconfig.e2e.json')
],
createDefaultProgram: true
},
plugins: ['eslint-plugin-unicorn', 'eslint-plugin-rxjs'],
rules: {
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: ['element', 'attribute'],
prefix: ['adf', 'app'],
style: 'kebab-case'
}
],
'@angular-eslint/no-host-metadata-property': 'off',
'@angular-eslint/no-input-prefix': 'error',
'@typescript-eslint/consistent-type-definitions': 'error',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'off',
{
accessibility: 'explicit'
}
],
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'error',
'comma-dangle': 'error',
'default-case': 'error',
'import/order': 'off',
'max-len': [
'error',
{
code: 240
}
],
'no-bitwise': 'off',
'no-duplicate-imports': 'error',
'no-multiple-empty-lines': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'rxjs/no-create': 'error',
'rxjs/no-subject-unsubscribe': 'error',
'rxjs/no-subject-value': 'error',
'rxjs/no-unsafe-takeuntil': 'error',
'unicorn/filename-case': 'error'
}
},
{
files: ['*.html'],
rules: {}
}
]
};
-77
View File
@@ -1,77 +0,0 @@
var port = process.env.PORT || 3000,
http = require('http'),
fs = require('fs'),
url = require('url'),
mime = require('mime'),
html = fs.readFileSync('index.html');
var log = function(entry) {
fs.appendFileSync('/tmp/sample-app.log', new Date().toISOString() + ' - ' + entry + '\n');
};
var server = http.createServer(function (req, res) {
// Parse the request containing file name
var pathname = url.parse(req.url).pathname;
// Print the name of the file for which request is made.
console.log("Request for " + pathname + " received.");
if (req.method === 'POST') {
var body = '';
req.on('data', function(chunk) {
body += chunk;
});
req.on('end', function() {
if (req.url === '/') {
log('Received message: ' + body);
} else if (req.url === '/scheduled') {
log('Received task ' + req.headers['x-aws-sqsd-taskname'] + ' scheduled at ' + req.headers['x-aws-sqsd-scheduled-at']);
}
res.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
res.end();
});
} else {
var filename = pathname.substr(1);
if(filename === '' || filename.indexOf('.') === -1){
filename = 'index.html';
}
// Read the requested file content from file system
fs.readFile(filename, function (err, data) {
if (err) {
console.log(err, filename);
// HTTP Status: 404 : NOT FOUND
// Content Type: text/plain
res.writeHead(404, {'Content-Type': 'text/html'});
}else{
//Page found
// HTTP Status: 200 : OK
// Content Type: text/plain
var type = mime.lookup(filename);
console.log('type',type);
if (!res.getHeader('content-type')) {
var charset = mime.charsets.lookup(type);
res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));
}
if(type.indexOf('image') > -1 || type.indexOf('font') > -1){
var img = fs.readFileSync(pathname.substr(1));
res.end(img, 'binary');
}else{
res.write(data.toString());
}
// Write the content of the file to response body
}
// Send the response body
res.end();
});
}
});
// Listen on port 3000, IP defaults to 127.0.0.1
server.listen(port);
// Put a friendly message on the terminal
console.log('Server running at http://127.0.0.1:' + port + '/');
-31
View File
@@ -1,31 +0,0 @@
/*!
* @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 { MyAppPage } from './app.po';
describe('MyApp App', () => {
let page: MyAppPage;
beforeEach(() => {
page = new MyAppPage();
});
it('should display toolbar', () => {
page.navigateTo();
expect(page.getToolbar()).toBeDefined();
});
});
-28
View File
@@ -1,28 +0,0 @@
/*!
* @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 { browser, element, by } from 'protractor';
export class MyAppPage {
navigateTo() {
return browser.get('/');
}
getToolbar() {
return element(by.tagName('adf-toolbar'));
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"module": "commonjs",
"target": "es5",
"types": ["jasmine", "jasminewd2", "node"]
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Alfresco-ADF-Angular-Demo",
"description": "Demo shell for Alfresco Angular components",
"version": "6.2.0",
"version": "6.5.2",
"author": "Hyland Software, Inc. and its affiliates",
"repository": {
"type": "git",
-39
View File
@@ -1,39 +0,0 @@
{
"title": "مرحبًا",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "تم تعيين المهمة {{taskName}} إلى {{assignee}}",
"PROCESS_STARTED": "تم بدء عملية {{processName}}",
"TASK_UPDATED": "تم تحديث تفاصيل مهمة {{taskName}}",
"TASK_CREATED": "تم إنشاء المهمة {{TaskName}}"
},
"SEARCH": {
"RESULTS": "نتائج البحث",
"NO_RESULT": "لم يتم العثور على نتائج",
"FACET_FIELDS": {
"TYPE": "1:النوع",
"SIZE": "2:الحجم",
"CREATOR": "3:المُنشئ",
"MODIFIER": "4:المُعدل",
"CREATED": "5:تم الإنشاء"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "استعلامات واجهتي",
"CREATED_THIS_YEAR": "1.تم الإنشاء هذا العام",
"MIMETYPE": "2.النوع: HTML",
"XTRASMALL": "3.الحجم: فائق الصغر",
"SMALL": "4.الحجم: صغير",
"MEDIUM": "5.الحجم: متوسط",
"LARGE": "6.الحجم: كبير",
"XTRALARGE": "7.الحجم: فائق الكبر",
"XXTRALARGE": "8.الحجم: كبير XX"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "الترجمة الأولى للعنوان المخصص",
"GROUP-TITLE2-TRANSLATION-KEY": "الترجمة الثانية للعنوان المخصص",
"ERROR_CONTENT": {
"507": {
"TITLE": "قرص ACS ممتلئ",
"DESCRIPTION": "يتجاوز المحتوى حد سعة التخزين المكون للشبكة أو النظام"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Vítejte",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "Úkol {{taskName}} byl přiřazen uživateli {{assignee}}",
"PROCESS_STARTED": "Byl spuštěn proces {{processName}}",
"TASK_UPDATED": "Byly aktualizovány podrobnosti úkolu {{taskName}}",
"TASK_CREATED": "Úkol {{taskName}} byl vytvořen"
},
"SEARCH": {
"RESULTS": "Výsledky hledání",
"NO_RESULT": "Nebyly nalezeny žádné výsledky",
"FACET_FIELDS": {
"TYPE": "1:Typ",
"SIZE": "2:Velikost",
"CREATOR": "3:Autor",
"MODIFIER": "4:Upravil(a)",
"CREATED": "5:Vytvořeno"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Moje dotazy na aspekty",
"CREATED_THIS_YEAR": "1.Vytvořeno tento rok",
"MIMETYPE": "2.Typ: HTML",
"XTRASMALL": "3.Velikost: extra malé",
"SMALL": "4.Velikost: malé",
"MEDIUM": "5.Velikost: střední",
"LARGE": "6.Velikost: velké",
"XTRALARGE": "7.Velikost: extra velké",
"XXTRALARGE": "8.Velikost: XX velké"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Vlastní překlad názvu 1",
"GROUP-TITLE2-TRANSLATION-KEY": "Vlastní překlad názvu 2",
"ERROR_CONTENT": {
"507": {
"TITLE": "Disk ACS plný",
"DESCRIPTION": "Obsah přesahuje celkovou kvótu úložiště nastavenou pro síť nebo systém"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Velkommen",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}} opgave er blevet tildelt til {{assignee}}",
"PROCESS_STARTED": "{{processName}} processen er startet",
"TASK_UPDATED": "{{taskName}} opgavedetaljer er blevet opdateret",
"TASK_CREATED": "Opgaven {{taskName}} blev oprettet"
},
"SEARCH": {
"RESULTS": "Søgeresultater",
"NO_RESULT": "Der blev ikke fundet nogen resultater",
"FACET_FIELDS": {
"TYPE": "1: Type",
"SIZE": "2: Størrelse",
"CREATOR": "3: Opretter",
"MODIFIER": "4: Modifikator",
"CREATED": "5: Oprettet"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mine facetforespørgsler",
"CREATED_THIS_YEAR": "1. Oprettet i år",
"MIMETYPE": "2. Type: HTML",
"XTRASMALL": "3. Størrelse: xtra small",
"SMALL": "4. Størrelse: small",
"MEDIUM": "5. Størrelse: medium",
"LARGE": "6. Størrelse: large",
"XTRALARGE": "7. Størrelse: xtra large",
"XXTRALARGE": "8. Størrelse: XX large"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Brugerdefineret titel oversættelse et",
"GROUP-TITLE2-TRANSLATION-KEY": "Brugerdefineret titel oversættelse to",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS-disken er fuld",
"DESCRIPTION": "Indholdet overskrider den generelle lagerkvotegrænse, der er konfigureret for netværket eller systemet"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Willkommen",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "Aufgabe '{{taskName}}' wurde {{assignee}} zugewiesen",
"PROCESS_STARTED": "Prozess '{{processName}}' wurde gestartet",
"TASK_UPDATED": "Aufgabe '{{taskName}}' wurde aktualisiert",
"TASK_CREATED": "Die Aufgabe {{taskName}} wurde erstellt"
},
"SEARCH": {
"RESULTS": "Ergebnisse durchsuchen",
"NO_RESULT": "Keine Ergebnisse gefunden",
"FACET_FIELDS": {
"TYPE": "1:Typ",
"SIZE": "2:Größe",
"CREATOR": "3:Erstellt von",
"MODIFIER": "4:Bearbeitet von",
"CREATED": "5:Erstellt am"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Meine Facet-Abfragen",
"CREATED_THIS_YEAR": "1.Dieses Jahr erstellt",
"MIMETYPE": "2.Typ: HTML",
"XTRASMALL": "3.Größe: sehr klein",
"SMALL": "4.Größe: klein",
"MEDIUM": "5.Größe: mittel",
"LARGE": "6.Größe: groß",
"XTRALARGE": "7.Größe: sehr groß",
"XXTRALARGE": "8.Größe: extrem groß"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Übersetzung benutzerdefinierter Titel 1",
"GROUP-TITLE2-TRANSLATION-KEY": "Übersetzung benutzerdefinierter Titel 2",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS-Datenträger voll",
"DESCRIPTION": "Inhalt übersteigt die für das Netzwerk oder System konfigurierte Gesamtspeicherbegrenzung"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Bienvenido",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "La tarea {{taskName}} ha sido asignada a {{assignee}}",
"PROCESS_STARTED": "Se ha iniciado el proceso {{processName}}",
"TASK_UPDATED": "Se actualizaron los detalles de la tarea {{taskName}}",
"TASK_CREATED": "Se ha creado la tarea {{taskName}}"
},
"SEARCH": {
"RESULTS": "Resultados de la búsqueda",
"NO_RESULT": "Ningún resultado encontrado",
"FACET_FIELDS": {
"TYPE": "1:Tipo",
"SIZE": "2:Tamaño",
"CREATOR": "3:Creador",
"MODIFIER": "4:Modificador",
"CREATED": "5:Creados"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mis consultas por filtros",
"CREATED_THIS_YEAR": "1.Creadas este año",
"MIMETYPE": "2.Tipo: HTML",
"XTRASMALL": "3.Tamaño: extrapequeño",
"SMALL": "4.Tamaño: pequeño",
"MEDIUM": "5.Tamaño: mediano",
"LARGE": "6.Tamaño: grande",
"XTRALARGE": "7.Tamaño: extragrande",
"XXTRALARGE": "8.Tamaño: extraextragrande"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Traducción de título personalizado 1",
"GROUP-TITLE2-TRANSLATION-KEY": "Traducción de título personalizado 2",
"ERROR_CONTENT": {
"507": {
"TITLE": "Disco ACS lleno",
"DESCRIPTION": "El contenido supera el límite de la cuota de almacenamiento general configurado para la red o sistema."
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Tervetuloa",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}} -tehtävä on määritetty käyttäjälle {{assignee}}",
"PROCESS_STARTED": "{{processName}} -prosessi on käynnistetty",
"TASK_UPDATED": "{{taskName}} -tehtävän tiedot on päivitetty",
"TASK_CREATED": "{{taskName}} -tehtävä luotiin"
},
"SEARCH": {
"RESULTS": "Hakutulokset",
"NO_RESULT": "Tuloksia ei löydy",
"FACET_FIELDS": {
"TYPE": "1: tyyppi",
"SIZE": "2: koko",
"CREATOR": "3: tekijä",
"MODIFIER": "4: muokkaaja",
"CREATED": "5: luotu"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Omat kyselyt",
"CREATED_THIS_YEAR": "1. Luotu tänä vuonna",
"MIMETYPE": "2. Tyyppi: HTML",
"XTRASMALL": "3. Koko: XS",
"SMALL": "4. Koko: S",
"MEDIUM": "5. Koko: M",
"LARGE": "6. Koko: L",
"XTRALARGE": "7. Koko: XL",
"XXTRALARGE": "8. Koko: XXL"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Oma otsikkokäännös yksi",
"GROUP-TITLE2-TRANSLATION-KEY": "Oma otsikkokäännös kaksi",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS-levy täynnä",
"DESCRIPTION": "Sisältö ylittää verkolle tai järjestelmälle määritetyn tallennustilan kokonaisrajoituksen"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Bienvenue",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "La tâche {{taskName}} a été assignée à {{assignee}}",
"PROCESS_STARTED": "Le processus {{processName}} a été démarré",
"TASK_UPDATED": "Les détails de la tâche {{taskName}} ont été mis à jour",
"TASK_CREATED": "{{taskName}} tâche a été créée"
},
"SEARCH": {
"RESULTS": "Résultats de la recherche",
"NO_RESULT": "Aucun résultat trouvé",
"FACET_FIELDS": {
"TYPE": "1:Type",
"SIZE": "2:Taille",
"CREATOR": "3:Créateur",
"MODIFIER": "4:Modificateur",
"CREATED": "5:Créé"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mes recherches avec filtre",
"CREATED_THIS_YEAR": "1.Créé cette année",
"MIMETYPE": "2.Type : HTML",
"XTRASMALL": "3.Taille : très petit",
"SMALL": "4.Taille : petit",
"MEDIUM": "5.Taille : moyen",
"LARGE": "6.Taille : gros",
"XTRALARGE": "7.Taille : très gros",
"XXTRALARGE": "8.Taille : énorme"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Titre personnalisé traduction un",
"GROUP-TITLE2-TRANSLATION-KEY": "Titre personnalisé traduction deux",
"ERROR_CONTENT": {
"507": {
"TITLE": "Disque ACS plein",
"DESCRIPTION": "Le contenu dépasse le quota maximum de stockage configuré pour le réseau ou système"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Benvenuto",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "Il compito {{taskName}} è stato assegnato a {{assignee}}",
"PROCESS_STARTED": "Il processo {{processName}} è stato avviato",
"TASK_UPDATED": "I dettagli del compito {{taskName}} sono stati aggiornati",
"TASK_CREATED": "Il compito {{taskName}} è stato creato"
},
"SEARCH": {
"RESULTS": "Risultati della ricerca",
"NO_RESULT": "Nessun risultato trovato",
"FACET_FIELDS": {
"TYPE": "1. Tipo",
"SIZE": "2. Dimensioni",
"CREATOR": "3. Autore",
"MODIFIER": "4. Modificatore",
"CREATED": "5. Creati"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Le mie query filtri",
"CREATED_THIS_YEAR": "1. Creati quest'anno",
"MIMETYPE": "2.Tipo: HTML",
"XTRASMALL": "3. Dimensioni: extra piccolo",
"SMALL": "4. Dimensioni: piccolo",
"MEDIUM": "5. Dimensioni: medio",
"LARGE": "6. Dimensioni: grande",
"XTRALARGE": "7. Dimensioni: extra grande",
"XXTRALARGE": "8. Dimensioni: extra extra grande"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Custom Title Translation One",
"GROUP-TITLE2-TRANSLATION-KEY": "Custom Title Translation Two",
"ERROR_CONTENT": {
"507": {
"TITLE": "Dico ACS pieno",
"DESCRIPTION": "Il contenuto supera il limite di archiviazione complessivo configurato per la rete o il sistema"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "ようこそ",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}}タスクが{{assignee}}に割り当てられました",
"PROCESS_STARTED": "{{processName}}プロセスが開始しました",
"TASK_UPDATED": "{{taskName}}タスクの詳細が更新されました",
"TASK_CREATED": "{{taskName}}タスクが作成されました"
},
"SEARCH": {
"RESULTS": "検索結果",
"NO_RESULT": "一致するアイテムはありません",
"FACET_FIELDS": {
"TYPE": "1:タイプ",
"SIZE": "2:サイズ",
"CREATOR": "3:作成者",
"MODIFIER": "4:変更者",
"CREATED": "5:作成日"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "あなたのファセットクエリ",
"CREATED_THIS_YEAR": "1.今年作成",
"MIMETYPE": "2.タイプ: HTML",
"XTRASMALL": "3.サイズ: 極小",
"SMALL": "4.サイズ: 小",
"MEDIUM": "5.サイズ: 中",
"LARGE": "6.サイズ: 大",
"XTRALARGE": "7.サイズ: 特大",
"XXTRALARGE": "8.サイズ: 超特大"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "カスタムのタイトル翻訳 1",
"GROUP-TITLE2-TRANSLATION-KEY": "カスタムのタイトル翻訳 2",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS のディスクがいっぱいです",
"DESCRIPTION": "コンテンツのサイズが、ネットワークまたはシステムに設定されているストレージクォータの上限を超えています。"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Velkommen",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}}-oppgaven er tilordnet til {{assignee}}",
"PROCESS_STARTED": "{{processName}}-prosessen er startet",
"TASK_UPDATED": "{{taskName}}-oppgavedetaljene er oppdatert",
"TASK_CREATED": "Oppgaven {{taskName}} ble opprettet"
},
"SEARCH": {
"RESULTS": "Søkeresultater",
"NO_RESULT": "Ingen resultater funnet",
"FACET_FIELDS": {
"TYPE": "1:Type",
"SIZE": "2:Størrelse",
"CREATOR": "3:Oppretter",
"MODIFIER": "4:Modifikator",
"CREATED": "5:Opprettet"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mine egenskapsspørringer",
"CREATED_THIS_YEAR": "1.Opprettet i år",
"MIMETYPE": "2.Type: HTML",
"XTRASMALL": "3.Størrelse: xtra small",
"SMALL": "4.Størrelse: small",
"MEDIUM": "5.Størrelse: medium",
"LARGE": "6.Størrelse: large",
"XTRALARGE": "7.Størrelse: xtra large",
"XXTRALARGE": "8.Størrelse: XX large"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Egendefinert tittel, oversettelse én",
"GROUP-TITLE2-TRANSLATION-KEY": "Egendefinert tittel, oversettelse to",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS-disk er full",
"DESCRIPTION": "Innhold overgår samlet lagringskvotegrense konfigurert for nettverket eller systemet"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Welkom",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}}-taak is toegewezen aan {{assignee}}",
"PROCESS_STARTED": "{{processName}}-proces is gestart",
"TASK_UPDATED": "{{taskName}}-taakdetails zijn bijgewerkt",
"TASK_CREATED": "Taak {{taskName}} is gemaakt"
},
"SEARCH": {
"RESULTS": "Zoekresultaten",
"NO_RESULT": "Geen resultaten gevonden",
"FACET_FIELDS": {
"TYPE": "1:Type",
"SIZE": "2:Grootte",
"CREATOR": "3:Maker",
"MODIFIER": "4:Gewijzigd door",
"CREATED": "5:Gemaakt"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mijn facetquery's",
"CREATED_THIS_YEAR": "1.Dit jaar gemaakt",
"MIMETYPE": "2.Type: HTML",
"XTRASMALL": "3.Grootte: extra klein",
"SMALL": "4.Grootte: klein",
"MEDIUM": "5.Grootte: middelgroot",
"LARGE": "6.Grootte: groot",
"XTRALARGE": "7.Grootte: extra groot",
"XXTRALARGE": "8.Grootte: XX groot"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Aangepaste titel vertaling één",
"GROUP-TITLE2-TRANSLATION-KEY": "Aangepaste titel vertaling twee",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS-schijf vol",
"DESCRIPTION": "Content overschrijdt de totale opslaglimiet die is geconfigureerd voor het netwerk of systeem"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Witaj",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "Zadanie {{taskName}} zostało przydzielone do {{assignee}}",
"PROCESS_STARTED": "Proces {{processName}} został uruchomiony",
"TASK_UPDATED": "Szczegóły zadania {{taskName}} zostały zaktualizowane",
"TASK_CREATED": "Zadanie {{taskName}} zostało utworzone"
},
"SEARCH": {
"RESULTS": "Wyniki wyszukiwania",
"NO_RESULT": "Brak wyników",
"FACET_FIELDS": {
"TYPE": "1: Typ",
"SIZE": "2: Rozmiar",
"CREATOR": "3: Twórca",
"MODIFIER": "4: Modyfikator",
"CREATED": "5: Utworzono"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Moje zapytania dotyczące aspektu",
"CREATED_THIS_YEAR": "1. Utworzone w tym roku",
"MIMETYPE": "2. Typ: HTML",
"XTRASMALL": "3. Rozmiar: bardzo mały",
"SMALL": "4. Rozmiar: mały",
"MEDIUM": "5. Rozmiar: średni",
"LARGE": "6. Rozmiar: duży",
"XTRALARGE": "7. Rozmiar: bardzo duży",
"XXTRALARGE": "8. Rozmiar: wyjątkowo duży"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Tytuł niestandardowy — tłumaczenie pierwsze",
"GROUP-TITLE2-TRANSLATION-KEY": "Tytuł niestandardowy — tłumaczenie drugie",
"ERROR_CONTENT": {
"507": {
"TITLE": "Dysk ACS pełny",
"DESCRIPTION": "Zawartość przekracza limit łącznego przydziału miejsca w magazynie skonfigurowany w sieci lub systemie"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Bem-vindo",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "A tarefa {{taskName}} foi atribuída a {{assignee}}",
"PROCESS_STARTED": "O processo {{processName}} foi iniciado",
"TASK_UPDATED": "Os detalhes da tarefa {{taskName}} foram atualizados",
"TASK_CREATED": "A tarefa {{taskName}} foi criada"
},
"SEARCH": {
"RESULTS": "Resultados da pesquisa",
"NO_RESULT": "Nenhum resultado encontrado",
"FACET_FIELDS": {
"TYPE": "1:Tipo",
"SIZE": "2:Tamanho",
"CREATOR": "3:Criador",
"MODIFIER": "4:Modificador",
"CREATED": "5:Criado"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Minhas consultas de faceta",
"CREATED_THIS_YEAR": "1.Criado este ano",
"MIMETYPE": "2.Tipo: HTML",
"XTRASMALL": "3.Tamanho: muito pequeno",
"SMALL": "4.Tamanho: pequeno",
"MEDIUM": "5.Tamanho: médio",
"LARGE": "6.Tamanho: grande",
"XTRALARGE": "7.Tamanho: muito grande",
"XXTRALARGE": "8.Tamanho: extragrande"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Tradução um de título personalizado",
"GROUP-TITLE2-TRANSLATION-KEY": "Tradução dois de título personalizado",
"ERROR_CONTENT": {
"507": {
"TITLE": "Disco ACS cheio",
"DESCRIPTION": "O conteúdo excede o limite de armazenamento geral configurado para a rede ou o sistema"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Добро пожаловать",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "Задача {{taskName}} была назначена {{assignee}}",
"PROCESS_STARTED": "Процесс {{processName}} запущен",
"TASK_UPDATED": "Сведения о задаче {{taskName}} обновлены",
"TASK_CREATED": "{{taskName}} задача создана"
},
"SEARCH": {
"RESULTS": "Результаты поиска",
"NO_RESULT": "Результаты не найдены",
"FACET_FIELDS": {
"TYPE": "1: тип",
"SIZE": "2: размер",
"CREATOR": "3: автор",
"MODIFIER": "4: редактор",
"CREATED": "5: создано"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Мои фасетные запросы",
"CREATED_THIS_YEAR": "1. Создано в этом году",
"MIMETYPE": "2. Тип HTML",
"XTRASMALL": "3. Размер: крайне малый",
"SMALL": "4. Размер: малый",
"MEDIUM": "5. Размер: средний",
"LARGE": "6. Размер: большой",
"XTRALARGE": "7. Размер: очень большой",
"XXTRALARGE": "8. Размер: огромный"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Перевод пользовательского заголовка один",
"GROUP-TITLE2-TRANSLATION-KEY": "Перевод пользовательского заголовка два",
"ERROR_CONTENT": {
"507": {
"TITLE": "Диск ACS заполнен",
"DESCRIPTION": "Объем данных превысил максимально допустимое значение, установленное для сети или системы"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "Välkommen",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}} uppgiften har tilldelats till {{assignee}}",
"PROCESS_STARTED": "{{processName}} processen har startats",
"TASK_UPDATED": "{{taskName}} uppgiftsinformation har uppdaterats",
"TASK_CREATED": "Uppgiften {{taskName}} skapades"
},
"SEARCH": {
"RESULTS": "Sökresultat",
"NO_RESULT": "Inga resultat hittades",
"FACET_FIELDS": {
"TYPE": "1:Typ",
"SIZE": "2:Storlek",
"CREATOR": "3:Skapad av",
"MODIFIER": "4:Ändrad av",
"CREATED": "5:Skapad den"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "Mina fasettförfrågningar",
"CREATED_THIS_YEAR": "1.Skapad det här året",
"MIMETYPE": "2.Typ: HTML",
"XTRASMALL": "3.Storlek: extra small",
"SMALL": "4.Storlek: small",
"MEDIUM": "5.Storlek: medium",
"LARGE": "6.Storlek: large",
"XTRALARGE": "7.Storlek: extra large",
"XXTRALARGE": "8.Storlek: XX large"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "Anpassad titelöversättning ett",
"GROUP-TITLE2-TRANSLATION-KEY": "Anpassad titelöversättning två",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS disk full",
"DESCRIPTION": "Innehållet överskrider övergripande kvotbegränsning som är konfigurerad för nätverket eller systemet"
}
}
}
-39
View File
@@ -1,39 +0,0 @@
{
"title": "欢迎使用",
"NOTIFICATIONS": {
"TASK_ASSIGNED": "{{taskName}} 任务已分配给 {{assignee}}",
"PROCESS_STARTED": "{{processName}} 进程已启动",
"TASK_UPDATED": "{{taskName}} 任务详细信息已更新",
"TASK_CREATED": "{{taskName}} 任务已创建"
},
"SEARCH": {
"RESULTS": "搜索结果",
"NO_RESULT": "未找到结果",
"FACET_FIELDS": {
"TYPE": "1:类型",
"SIZE": "2:字号",
"CREATOR": "3:创建者",
"MODIFIER": "4:修改者",
"CREATED": "5:已创建"
},
"FACET_QUERIES": {
"MY_FACET_QUERIES": "我的分面查询",
"CREATED_THIS_YEAR": "1. 今年创建",
"MIMETYPE": "2. 类型: HTML",
"XTRASMALL": "3. 字号:超小",
"SMALL": "4. 字号:小",
"MEDIUM": "5. 字号:中等",
"LARGE": "6. 字号:大",
"XTRALARGE": "7. 字号:特大",
"XXTRALARGE": "8. 字号:超大"
}
},
"GROUP-TITLE1-TRANSLATION-KEY": "自定义标题翻译 1",
"GROUP-TITLE2-TRANSLATION-KEY": "自定义标题翻译 2",
"ERROR_CONTENT": {
"507": {
"TITLE": "ACS 磁盘已满",
"DESCRIPTION": "内容超出为网络或系统配置的总存储配额限制"
}
}
}
-4
View File
@@ -11,7 +11,3 @@ router-outlet[name='overlay'] + * {
height: 100%;
width: 100%;
}
[dir='rtl'] .mat-icon {
transform: scale(-1, 1);
}
+3 -3
View File
@@ -18,11 +18,11 @@
import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import {
AuthenticationService,
AlfrescoApiService,
PageTitleService
} from '@alfresco/adf-core';
import { Router } from '@angular/router';
import { MatDialog } from '@angular/material/dialog';
import { AdfHttpClient } from '@alfresco/adf-core/api';
@Component({
selector: 'app-root',
@@ -33,7 +33,7 @@ import { MatDialog } from '@angular/material/dialog';
export class AppComponent implements OnInit {
constructor(private pageTitleService: PageTitleService,
private alfrescoApiService: AlfrescoApiService,
private adfHttpClient: AdfHttpClient,
private authenticationService: AuthenticationService,
private router: Router,
private dialogRef: MatDialog) {
@@ -43,7 +43,7 @@ export class AppComponent implements OnInit {
ngOnInit() {
this.pageTitleService.setTitle('title');
this.alfrescoApiService.getInstance().on('error', (error) => {
this.adfHttpClient.on('error', (error) => {
if (error.status === 401) {
if (!this.authenticationService.isLoggedIn()) {
this.dialogRef.closeAll();
+4 -74
View File
@@ -16,31 +16,21 @@
*/
import { BrowserModule } from '@angular/platform-browser';
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgChartsModule } from 'ng2-charts';
import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule } from '@ngx-translate/core';
import {
AppConfigService,
DebugAppConfigService,
CoreModule,
CoreAutomationService,
AuthModule,
provideTranslations
} from '@alfresco/adf-core';
import { AppConfigService, DebugAppConfigService, CoreModule, CoreAutomationService, AuthModule, provideTranslations } from '@alfresco/adf-core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { AppComponent } from './app.component';
import { MaterialModule } from './material.module';
import { LogoutComponent } from './components/logout/logout.component';
import { AppLayoutComponent } from './components/app-layout/app-layout.component';
import { HomeComponent } from './components/home/home.component';
import { SearchBarComponent } from './components/search/search-bar.component';
import { SearchResultComponent } from './components/search/search-result.component';
import { FormComponent } from './components/form/form.component';
import { FormListComponent } from './components/form/form-list.component';
import { FormLoadingComponent } from './components/form/form-loading.component';
import { ProcessServiceComponent } from './components/process-service/process-service.component';
import { ShowDiagramComponent } from './components/process-service/show-diagram.component';
import { FormViewerComponent } from './components/process-service/form-viewer.component';
@@ -48,31 +38,25 @@ import { FormNodeViewerComponent } from './components/process-service/form-node-
import { AppsViewComponent } from './components/process-service/apps-view.component';
import { FilesComponent } from './components/files/files.component';
import { VersionManagerDialogAdapterComponent } from './components/files/version-manager-dialog-adapter.component';
import { MetadataDialogAdapterComponent } from './components/files/metadata-dialog-adapter.component';
import { appRoutes } from './app.routes';
import { TaskAttachmentsComponent } from './components/process-service/task-attachments.component';
import { ProcessAttachmentsComponent } from './components/process-service/process-attachments.component';
import { SharedLinkViewComponent } from './components/shared-link-view/shared-link-view.component';
import { DemoPermissionComponent } from './components/permissions/demo-permissions.component';
import { MonacoEditorModule } from 'ngx-monaco-editor-v2';
import { ContentModule } from '@alfresco/adf-content-services';
import { InsightsModule } from '@alfresco/adf-insights';
import { ProcessModule } from '@alfresco/adf-process-services';
import { TreeViewSampleComponent } from './components/tree-view/tree-view-sample.component';
import { CloudLayoutComponent } from './components/cloud/cloud-layout.component';
import { AppsCloudDemoComponent } from './components/cloud/apps-cloud-demo.component';
import { TasksCloudDemoComponent } from './components/cloud/tasks-cloud-demo.component';
import { ProcessesCloudDemoComponent } from './components/cloud/processes-cloud-demo.component';
import { TaskDetailsCloudDemoComponent } from './components/cloud/task-details-cloud-demo.component';
import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
import { ServiceTaskListCloudDemoComponent } from './components/cloud/service-task-list-cloud-demo.component';
import { CloudViewerComponent } from './components/cloud/cloud-viewer.component';
import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-details-cloud-demo.component';
import { StartTaskCloudDemoComponent } from './components/cloud/start-task-cloud-demo.component';
import { StartProcessCloudDemoComponent } from './components/cloud/start-process-cloud-demo.component';
import { CloudBreadcrumbsComponent } from './components/cloud/cloud-breadcrumb-component';
import { CloudFiltersDemoComponent } from './components/cloud/cloud-filters-demo.component';
import { PeopleGroupCloudDemoComponent } from './components/cloud/people-groups-cloud-demo.component';
import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component';
import { environment } from '../environments/environment';
import { AppCloudSharedModule } from './components/cloud/shared/cloud.shared.module';
@@ -81,53 +65,16 @@ import { ProcessServicesCloudModule } from '@alfresco/adf-process-services-cloud
import { RouterModule } from '@angular/router';
import { ProcessCloudLayoutComponent } from './components/cloud/process-cloud-layout.component';
import { CustomEditorComponent, CustomWidgetComponent } from './components/cloud/custom-form-components/custom-editor.component';
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
import localeDe from '@angular/common/locales/de';
import localeIt from '@angular/common/locales/it';
import localeEs from '@angular/common/locales/es';
import localeJa from '@angular/common/locales/ja';
import localeNl from '@angular/common/locales/nl';
import localePt from '@angular/common/locales/pt';
import localeNb from '@angular/common/locales/nb';
import localeRu from '@angular/common/locales/ru';
import localeCh from '@angular/common/locales/zh';
import localeAr from '@angular/common/locales/ar';
import localeCs from '@angular/common/locales/cs';
import localePl from '@angular/common/locales/pl';
import localeFi from '@angular/common/locales/fi';
import localeDa from '@angular/common/locales/da';
import localeSv from '@angular/common/locales/sv';
import { setupAppNotifications } from './services/app-notifications-factory';
import { AppNotificationsService } from './services/app-notifications.service';
import { SearchFilterChipsComponent } from './components/search/search-filter-chips.component';
import { UserInfoComponent } from './components/app-layout/user-info/user-info.component';
registerLocaleData(localeFr);
registerLocaleData(localeDe);
registerLocaleData(localeIt);
registerLocaleData(localeEs);
registerLocaleData(localeJa);
registerLocaleData(localeNl);
registerLocaleData(localePt);
registerLocaleData(localeNb);
registerLocaleData(localeRu);
registerLocaleData(localeCh);
registerLocaleData(localeAr);
registerLocaleData(localeCs);
registerLocaleData(localePl);
registerLocaleData(localeFi);
registerLocaleData(localeDa);
registerLocaleData(localeSv);
@NgModule({
imports: [
BrowserModule,
environment.e2e ? NoopAnimationsModule : BrowserAnimationsModule,
ReactiveFormsModule,
RouterModule.forRoot(appRoutes, { useHash: true, relativeLinkResolution: 'legacy' }),
...(environment.oidc ? [AuthModule.forRoot({ useHash: true })] : []),
AuthModule.forRoot({ useHash: true }),
FormsModule,
HttpClientModule,
MaterialModule,
@@ -147,7 +94,6 @@ registerLocaleData(localeSv);
LogoutComponent,
AppLayoutComponent,
UserInfoComponent,
HomeComponent,
SearchBarComponent,
SearchResultComponent,
ProcessServiceComponent,
@@ -157,47 +103,31 @@ registerLocaleData(localeSv);
AppsViewComponent,
FilesComponent,
FormComponent,
FormListComponent,
VersionManagerDialogAdapterComponent,
MetadataDialogAdapterComponent,
TaskAttachmentsComponent,
ProcessAttachmentsComponent,
SharedLinkViewComponent,
FormLoadingComponent,
DemoPermissionComponent,
DemoErrorComponent,
FormLoadingComponent,
TreeViewSampleComponent,
CloudLayoutComponent,
AppsCloudDemoComponent,
TasksCloudDemoComponent,
ProcessesCloudDemoComponent,
TaskDetailsCloudDemoComponent,
TaskHeaderCloudDemoComponent,
CloudViewerComponent,
ProcessDetailsCloudDemoComponent,
StartTaskCloudDemoComponent,
StartProcessCloudDemoComponent,
CloudBreadcrumbsComponent,
CloudFiltersDemoComponent,
PeopleGroupCloudDemoComponent,
FormCloudDemoComponent,
CustomEditorComponent,
CustomWidgetComponent,
ProcessCloudLayoutComponent,
ServiceTaskListCloudDemoComponent,
SearchFilterChipsComponent
],
providers: [
{ provide: AppConfigService, useClass: DebugAppConfigService }, // not use this service in production
provideTranslations('app', 'resources'),
AppNotificationsService,
{
provide: APP_INITIALIZER,
useFactory: setupAppNotifications,
deps: [AppNotificationsService],
multi: true
}
provideTranslations('app', 'resources')
],
bootstrap: [AppComponent]
})
-53
View File
@@ -28,14 +28,9 @@ import { AppsViewComponent } from './components/process-service/apps-view.compon
import { SearchResultComponent } from './components/search/search-result.component';
import { FilesComponent } from './components/files/files.component';
import { FormComponent } from './components/form/form.component';
import { FormListComponent } from './components/form/form-list.component';
import { SharedLinkViewComponent } from './components/shared-link-view/shared-link-view.component';
import { FormLoadingComponent } from './components/form/form-loading.component';
import { DemoPermissionComponent } from './components/permissions/demo-permissions.component';
import { AppComponent } from './app.component';
import { TreeViewSampleComponent } from './components/tree-view/tree-view-sample.component';
import { AppsCloudDemoComponent } from './components/cloud/apps-cloud-demo.component';
import { PeopleGroupCloudDemoComponent } from './components/cloud/people-groups-cloud-demo.component';
import { CloudLayoutComponent } from './components/cloud/cloud-layout.component';
import { TasksCloudDemoComponent } from './components/cloud/tasks-cloud-demo.component';
import { ProcessesCloudDemoComponent } from './components/cloud/processes-cloud-demo.component';
@@ -46,9 +41,7 @@ import { CloudViewerComponent } from './components/cloud/cloud-viewer.component'
import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-details-cloud-demo.component';
import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component';
import { DemoErrorComponent } from './components/error/demo-error.component';
import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
import { ProcessCloudLayoutComponent } from './components/cloud/process-cloud-layout.component';
import { ServiceTaskListCloudDemoComponent } from './components/cloud/service-task-list-cloud-demo.component';
import { SearchFilterChipsComponent } from './components/search/search-filter-chips.component';
export const appRoutes: Routes = [
@@ -81,7 +74,6 @@ export const appRoutes: Routes = [
pathMatch: 'full',
loadChildren: () => import('./components/file-view/file-view.module').then(m => m.FileViewModule)
},
{ path: 'preview/s/:id', component: SharedLinkViewComponent },
{
path: '',
component: AppLayoutComponent,
@@ -92,10 +84,6 @@ export const appRoutes: Routes = [
redirectTo: `/home`,
pathMatch: 'full'
},
{
path: 'config-editor',
loadChildren: () => import('./components/config-editor/config-editor.module').then(m => m.AppConfigEditorModule)
},
{
path: 'card-view',
loadChildren: () => import('./components/card-view/card-view.module').then(m => m.AppCardViewModule)
@@ -118,26 +106,6 @@ export const appRoutes: Routes = [
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
component: AppsCloudDemoComponent
},
{
path: 'people-group-cloud',
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
component: PeopleGroupCloudDemoComponent
},
{
path: 'task-header-cloud',
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
component: TaskHeaderCloudDemoComponent
},
{
path: 'service-task-list',
data: { roles: ['ACTIVITI_ADMIN'], redirectUrl: '/error/403' },
component: ServiceTaskListCloudDemoComponent
},
{
path: 'community',
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
loadChildren: () => import('./components/cloud/community/community.module').then(m => m.AppCommunityModule)
},
{
path: ':appName',
canActivate: [AuthGuardSsoRoleService],
@@ -187,11 +155,6 @@ export const appRoutes: Routes = [
path: 'settings-layout',
loadChildren: () => import('./components/settings/settings.module').then(m => m.AppSettingsModule)
},
{
path: 'trashcan',
canActivate: [AuthGuardEcm],
loadChildren: () => import('./components/trashcan/trashcan.module').then(m => m.AppTrashcanModule)
},
{
path: 'files',
component: FilesComponent,
@@ -207,11 +170,6 @@ export const appRoutes: Routes = [
component: FilesComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'dl-custom-sources',
canActivate: [AuthGuardEcm],
loadChildren: () => import('./components/files/custom-sources.module').then(m => m.AppCustomSourcesModule)
},
{
path: 'search',
component: SearchResultComponent,
@@ -286,19 +244,8 @@ export const appRoutes: Routes = [
component: DemoPermissionComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'treeview',
component: TreeViewSampleComponent,
canActivate: [AuthGuardEcm]
},
{
path: 'about',
loadChildren: () => import('./components/about/about.module').then(m => m.AppAboutModule)
},
{ path: 'form-cloud', component: FormCloudDemoComponent },
{ path: 'form', component: FormComponent },
{ path: 'form-list', component: FormListComponent },
{ path: 'form-loading', component: FormLoadingComponent },
{
path: 'task-list',
canActivate: [AuthGuardBpm],
@@ -1,34 +0,0 @@
<mat-slide-toggle [(ngModel)]="dev">Dev Mode</mat-slide-toggle>
<adf-about>
<adf-about-panel *ngIf="dev" [label]="'ABOUT.SERVER_SETTINGS.TITLE' | translate">
<ng-template>
<adf-about-server-settings></adf-about-server-settings>
</ng-template>
</adf-about-panel>
<adf-about-panel *ngIf="dev" [label]="'ABOUT.PACKAGES.TITLE' | translate">
<ng-template>
<adf-about-package-list [dependencies]="pkg?.dependencies"></adf-about-package-list>
</ng-template>
</adf-about-panel>
<adf-about-panel [label]="'ABOUT.REPOSITORY' | translate" *ngIf="repository">
<ng-template>
<adf-about-repository-info [data]="repository"></adf-about-repository-info>
</ng-template>
</adf-about-panel>
<adf-about-panel [label]="'ABOUT.VERSIONS.TITLE' | translate">
<ng-template>
<adf-about-platform-version [repository]="repository" [process]="bpmVersion"></adf-about-platform-version>
</ng-template>
</adf-about-panel>
<adf-about-panel *ngIf="extensions$ | async as extensions" [label]="'ABOUT.PLUGINS.TITLE' | translate">
<ng-template>
<adf-about-extension-list [data]="extensions"></adf-about-extension-list>
</ng-template>
</adf-about-panel>
</adf-about>
@@ -1,67 +0,0 @@
/*!
* @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 { Component, OnInit } from '@angular/core';
import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
import { AuthenticationService, BpmProductVersionModel, RepositoryInfo } from '@alfresco/adf-core';
import { DiscoveryApiService } from '@alfresco/adf-content-services';
import pkg from '../../../../../package.json';
import { Observable } from 'rxjs';
@Component({
selector: 'app-about-page',
templateUrl: './about.component.html'
})
export class AboutComponent implements OnInit {
pkg: any;
dev: true;
extensions$: Observable<ExtensionRef[]>;
repository: RepositoryInfo = null;
bpmVersion: BpmProductVersionModel = null;
constructor(
private authenticationService: AuthenticationService,
private appExtensionService: AppExtensionService,
private discoveryApiService: DiscoveryApiService
) {
this.pkg = pkg;
this.extensions$ = this.appExtensionService.references$;
}
ngOnInit(): void {
if (this.authenticationService.isEcmLoggedIn()) {
this.setECMInfo();
}
if (this.authenticationService.isBpmLoggedIn()) {
this.setBPMInfo();
}
}
setECMInfo() {
this.discoveryApiService.getEcmProductInfo().subscribe((repository) => {
this.repository = repository as RepositoryInfo;
});
}
setBPMInfo() {
this.discoveryApiService.getBpmProductInfo().subscribe((bpmVersion) => {
this.bpmVersion = bpmVersion;
});
}
}
@@ -1,39 +0,0 @@
/*!
* @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 { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AboutComponent } from './about.component';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@alfresco/adf-core';
const routes: Routes = [
{
path: '',
component: AboutComponent
}
];
@NgModule({
imports: [
CommonModule,
CoreModule,
RouterModule.forChild(routes)
],
declarations: [AboutComponent]
})
export class AppAboutModule {}
@@ -18,27 +18,18 @@
<app-search-bar></app-search-bar>
<app-shell-user-info [menuPositionX]="'before'" [menuPositionY]="'above'"></app-shell-user-info>
<button data-automation-id="language-menu-button" mat-icon-button [matMenuTriggerFor]="langMenu">
<mat-icon>language</mat-icon>
</button>
<mat-menu #langMenu="matMenu" class="app-menu">
<adf-language-menu></adf-language-menu>
</mat-menu>
<adf-notification-history menuPositionX="before" menuPositionY="above"></adf-notification-history>
</adf-layout-header>
</ng-template>
</adf-sidenav-layout-header>
<adf-sidenav-layout-navigation>
<ng-template let-isMenuMinimized="isMenuMinimized">
<ng-template>
<mat-nav-list class="app-sidenav-linklist">
<ng-container *ngFor="let link of links">
<ng-container *ngIf="link.children">
<mat-list-item (click)="trigger.openMenu()" [attr.data-automation-id]="link.title | translate" class="app-sidenav-link">
<mat-icon matListIcon>{{link.icon}}</mat-icon>
<span matLine *ngIf="!isMenuMinimized()">{{link.title | translate }}</span>
<span matLine>{{ link.title | translate }}</span>
<mat-icon class="app-sidenav-link__expand-button" [matMenuTriggerData]="{links: link.children}"
rippleTrigger mat-icon-button #trigger="matMenuTrigger"
[matMenuTriggerFor]="nestedMenu">arrow_right</mat-icon>
@@ -50,14 +41,14 @@
routerLinkActive="app-sidenav-link--active" [routerLinkActiveOptions]="{ exact: true }"
[attr.data-automation-id]="link.title | translate" class="app-sidenav-link">
<mat-icon matListIcon >{{link.icon}}</mat-icon>
<span matLine *ngIf="!isMenuMinimized()">{{link.title | translate }}</span>
<span matLine>{{link.title | translate }}</span>
</mat-list-item>
</ng-container>
</ng-container>
<mat-list-item adf-logout [enableRedirect]="enableRedirect" redirectUri="/logout" class="app-sidenav-link" data-automation-id="Logout" >
<mat-icon matListIcon>exit_to_app</mat-icon>
<span matLine *ngIf="!isMenuMinimized()">Logout</span>
<span matLine>Logout</span>
</mat-list-item>
</mat-nav-list>
@@ -1,7 +1,3 @@
adf-file-uploading-dialog {
z-index: 1100;
}
.app-layout {
display: flex;
flex: 1;
@@ -12,25 +8,7 @@ adf-file-uploading-dialog {
color: var(--theme-primary-color);
}
.app-sidenav-link {
.mat-list-text {
font-size: 14px;
white-space: nowrap;
min-width: 120px;
padding: 0 10px;
}
}
&-menu-spacer {
flex: 1 1 auto;
}
}
mat-sidenav-content > div {
display: flex;
height: 100%;
> div {
flex: auto;
}
}
@@ -33,27 +33,16 @@ export class AppLayoutComponent {
{
href: '/cloud', icon: 'cloud', title: 'Process Cloud', children: [
{ href: '/cloud/', icon: 'cloud', title: 'Home' },
{ href: '/cloud/community', icon: 'cloud', title: 'Community' },
{ href: '/form-cloud', icon: 'poll', title: 'Form' },
{ href: '/cloud/people-group-cloud', icon: 'group', title: 'People/Group Cloud' },
{ href: '/cloud/task-header-cloud', icon: 'cloud', title: 'Task Header Cloud' },
{ href: '/cloud/service-task-list', icon: 'cloud', title: 'Service Task List' }
{ href: '/form-cloud', icon: 'poll', title: 'Form' }
]
},
{ href: '/activiti', icon: 'device_hub', title: 'Process Services', children: [
{ href: '/activiti', icon: 'vpn_key', title: 'App' },
{ href: '/process-list', icon: 'assignment', title: 'Process List' },
{ href: '/form', icon: 'poll', title: 'Form' },
{ href: '/form-list', icon: 'library_books', title: 'Form List' },
{ href: '/form-loading', icon: 'cached', title: 'Form Loading' }
{ href: '/form', icon: 'poll', title: 'Form' }
]},
{ href: '/login', icon: 'vpn_key', title: 'Login' },
{ href: '/trashcan', icon: 'delete', title: 'Trashcan' },
{ href: '/dl-custom-sources', icon: 'extension', title: 'Custom Sources' },
{ href: '/settings-layout', icon: 'settings', title: 'Settings' },
{ href: '/config-editor', icon: 'code', title: 'Configuration Editor' },
{ href: '/treeview', icon: 'nature', title: 'Tree View' },
{ href: '/about', icon: 'info_outline', title: 'About' }
{ href: '/settings-layout', icon: 'settings', title: 'Settings' }
];
enableRedirect = true;
@@ -1,6 +1,5 @@
<div class="main-content">
<mat-tab-group>
<mat-tab-group [animationDuration]="0">
<mat-tab label="Form" class="form-cloud-render">
<div class="app-form-container">
<adf-cloud-form
@@ -13,8 +12,7 @@
<div class="app-console" #console>
<h3>Error log:</h3>
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message |
translate}}</p>
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message | translate}}</p>
</div>
</mat-tab>
<mat-tab label="Editor" class="form-cloud-editor">
@@ -26,15 +24,9 @@
(onInit)="onInitFormEditor($event)">
</ngx-monaco-editor>
<div class="app-form-editor-buttons">
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()" color="primary">Save
form config
</button>
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()" color="primary">Clear
form config
</button>
</div>
<div class="app-upload-config-button">
<a mat-raised-button color="primary" >
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()">Save form config</button>
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()">Clear form config</button>
<a mat-raised-button class="app-upload-config-button">
<mat-icon>file_upload</mat-icon>
<label for="upload-config-file">Upload JSON File</label>
<input
@@ -46,7 +38,6 @@
(change)="onConfigAdded($event)">
</a>
</div>
</mat-tab>
</mat-tab-group>
@@ -6,11 +6,6 @@
padding: 0 15px;
}
.app-card-view {
width: 30%;
display: inline-block;
}
.app-console {
width: 60%;
display: inline-block;
@@ -36,22 +31,18 @@
}
.app-form-editor-buttons {
display: flex;
justify-content: space-evenly;
& > .mat-raised-button {
margin-right: 5px;
}
}
.app-upload-config-button {
display: flex;
justify-content: center;
input {
cursor: pointer;
height: 100%;
right: 0;
opacity: 0;
position: absolute;
top: 0;
width: 300px;
z-index: 4;
}
}
@@ -17,7 +17,13 @@
import { EcmUserModel, PeopleContentService } from '@alfresco/adf-content-services';
import { BpmUserModel, PeopleProcessService } from '@alfresco/adf-process-services';
import { AuthenticationService, IdentityUserModel, IdentityUserService, UserInfoMode } from '@alfresco/adf-core';
import {
AuthenticationService,
BasicAlfrescoAuthService,
IdentityUserModel,
IdentityUserService,
UserInfoMode
} from '@alfresco/adf-core';
import { Component, OnInit, Input } from '@angular/core';
import { MenuPositionX, MenuPositionY } from '@angular/material/menu';
import { Observable, of } from 'rxjs';
@@ -46,6 +52,7 @@ export class UserInfoComponent implements OnInit {
constructor(private peopleContentService: PeopleContentService,
private peopleProcessService: PeopleProcessService,
private identityUserService: IdentityUserService,
private basicAlfrescoAuthService: BasicAlfrescoAuthService,
private authService: AuthenticationService) {
}
@@ -77,7 +84,7 @@ export class UserInfoComponent implements OnInit {
}
get isLoggedIn(): boolean {
if (this.authService.isKerberosEnabled()) {
if (this.basicAlfrescoAuthService.isKerberosEnabled()) {
return true;
}
return this.authService.isLoggedIn();
@@ -96,15 +103,15 @@ export class UserInfoComponent implements OnInit {
}
private isAllLoggedIn() {
return (this.authService.isEcmLoggedIn() && this.authService.isBpmLoggedIn()) || (this.authService.isALLProvider() && this.authService.isKerberosEnabled());
return (this.authService.isEcmLoggedIn() && this.authService.isBpmLoggedIn()) || (this.authService.isALLProvider() && this.basicAlfrescoAuthService.isKerberosEnabled());
}
private isBpmLoggedIn() {
return this.authService.isBpmLoggedIn() || (this.authService.isECMProvider() && this.authService.isKerberosEnabled());
return this.authService.isBpmLoggedIn() || (this.authService.isECMProvider() && this.basicAlfrescoAuthService.isKerberosEnabled());
}
private isEcmLoggedIn() {
return this.authService.isEcmLoggedIn() || (this.authService.isECMProvider() && this.authService.isKerberosEnabled());
return this.authService.isEcmLoggedIn() || (this.authService.isECMProvider() && this.basicAlfrescoAuthService.isKerberosEnabled());
}
}
@@ -1,17 +1,15 @@
<div class="app-main-content">
<h1>CardView Component</h1>
<mat-card class="app-card-view">
<adf-card-view
[properties]="properties"
[editable]="isEditable"
[displayClearAction]="showClearDateAction"
[displayNoneOption]="showNoneOption"
[displayLabelForChips]="showLabelForChips">
</adf-card-view>
</mat-card>
<adf-card-view
[properties]="properties"
[editable]="isEditable"
[displayClearAction]="showClearDateAction"
[displayNoneOption]="showNoneOption"
[displayLabelForChips]="showLabelForChips">
</adf-card-view>
<div class="app-console" #console>
<div class="app-console">
<h3>Changes log:</h3>
<p *ngFor="let log of logs">{{ log }}</p>
</div>
@@ -49,6 +47,4 @@
</mat-slide-toggle>
</p>
<button mat-button id="adf-reset-card-log" (click)="reset()" color="primary">Reset Log</button>
<br>
<button mat-raised-button id="adf-reset-card-log" (click)="reset()">Reset Log</button>
@@ -2,7 +2,7 @@
padding: 0 15px;
}
.app-card-view {
adf-card-view {
width: 30%;
display: inline-block;
}
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { Component, OnInit, ElementRef, ViewChild, OnDestroy } from '@angular/core';
import { Component, OnInit, OnDestroy } from '@angular/core';
import {
CardViewTextItemModel,
CardViewDateItemModel,
@@ -39,9 +39,6 @@ import { takeUntil } from 'rxjs/operators';
styleUrls: ['./card-view.component.scss']
})
export class CardViewComponent implements OnInit, OnDestroy {
@ViewChild('console', { static: true }) console: ElementRef;
isEditable = true;
properties: any;
logs: string[];
@@ -51,8 +48,7 @@ export class CardViewComponent implements OnInit, OnDestroy {
private onDestroy$ = new Subject<boolean>();
constructor(private cardViewUpdateService: CardViewUpdateService,
private decimalNumberPipe: DecimalNumberPipe) {
constructor(private cardViewUpdateService: CardViewUpdateService, private decimalNumberPipe: DecimalNumberPipe) {
this.logs = [];
this.createCard();
}
@@ -62,9 +58,7 @@ export class CardViewComponent implements OnInit, OnDestroy {
}
ngOnInit() {
this.cardViewUpdateService.itemUpdated$
.pipe(takeUntil(this.onDestroy$))
.subscribe(this.onItemChange.bind(this));
this.cardViewUpdateService.itemUpdated$.pipe(takeUntil(this.onDestroy$)).subscribe(this.onItemChange.bind(this));
}
ngOnDestroy() {
@@ -192,20 +186,29 @@ export class CardViewComponent implements OnInit, OnDestroy {
}),
new CardViewKeyValuePairsItemModel({
label: 'CardView Key-Value Pairs Item',
value: [{ name: 'hey', value: 'you' }, { name: 'hey', value: 'you' }],
value: [
{ name: 'hey', value: 'you' },
{ name: 'hey', value: 'you' }
],
key: 'key-value-pairs',
editable: this.isEditable
}),
new CardViewKeyValuePairsItemModel({
label: 'CardView Key-Value Pairs Item',
value: [{ name: 'hey', value: 'you' }, { name: 'hey', value: 'you' }],
value: [
{ name: 'hey', value: 'you' },
{ name: 'hey', value: 'you' }
],
key: 'key-value-pairs',
editable: false
}),
new CardViewSelectItemModel({
label: 'CardView Select Item',
value: 'one',
options$: of([{ key: 'one', label: 'One' }, { key: 'two', label: 'Two' }]),
options$: of([
{ key: 'one', label: 'One' },
{ key: 'two', label: 'Two' }
]),
key: 'select',
editable: this.isEditable
}),
@@ -253,7 +256,6 @@ export class CardViewComponent implements OnInit, OnDestroy {
}
this.logs.push(`[${notification.target.label}] - ${value}`);
this.console.nativeElement.scrollTop = this.console.nativeElement.scrollHeight;
}
toggleEditable() {
@@ -53,7 +53,7 @@ export class CloudFiltersDemoComponent implements OnInit {
this.currentProcessFilter$ = this.cloudLayoutService.processFilter$;
let root = '';
if (this.route.snapshot && this.route.snapshot.firstChild) {
if (this.route.snapshot?.firstChild) {
root = this.route.snapshot.firstChild.url[0].path;
if (root === 'tasks') {
this.expandTaskFilter = true;
@@ -41,7 +41,7 @@ export class CloudLayoutComponent implements OnInit {
this.appName = params.appName;
});
if (this.route.snapshot && this.route.snapshot.firstChild) {
if (this.route.snapshot?.firstChild) {
root = this.route.snapshot.firstChild.url[0].path;
}
@@ -1,34 +0,0 @@
<mat-tab-group class="app-cloud-layout-tab-body">
<mat-tab label="App">
<adf-sidenav-layout [sidenavMin]="70" [sidenavMax]="270" [stepOver]="780">
<adf-sidenav-layout-navigation>
<ng-template>
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
<mat-icon adf-sidebar-menu-title-icon>arrow_drop_down</mat-icon>
<div adf-sidebar-menu-options>
<button mat-menu-item data-automation-id="btn-start-task" (click)="onStartTask()">
<mat-icon>assessment</mat-icon>
<span>New Task</span>
</button>
</div>
<div adf-sidebar-menu-options>
<button mat-menu-item data-automation-id="btn-start-process" (click)="onStartProcess()">
<mat-icon>assessment</mat-icon>
<span>New Process</span>
</button>
</div>
</adf-sidebar-action-menu>
<app-community-cloud-filters-demo></app-community-cloud-filters-demo>
</ng-template>
</adf-sidenav-layout-navigation>
<adf-sidenav-layout-content>
<ng-template>
<router-outlet></router-outlet>
</ng-template>
</adf-sidenav-layout-content>
</adf-sidenav-layout>
</mat-tab>
<mat-tab label="Settings">
<app-cloud-settings></app-cloud-settings>
</mat-tab>
</mat-tab-group>
@@ -1,20 +0,0 @@
.app-cloud-layout-overflow {
overflow: auto;
}
.app-cloud-layout-tab-body {
height: 100%;
min-height: 100%;
min-width: 100%;
width: 100%;
.mat-tab-body-wrapper {
height: 100%;
}
adf-sidenav-layout {
min-height: 100%;
min-width: 100%;
}
}
@@ -1,59 +0,0 @@
/*!
* @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 { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { CloudLayoutService } from '../services/cloud-layout.service';
@Component({
templateUrl: './community-cloud.component.html',
styleUrls: ['./community-cloud.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CommunityCloudComponent implements OnInit {
constructor(
private router: Router,
private route: ActivatedRoute,
private cloudLayoutService: CloudLayoutService
) { }
ngOnInit() {
let root: string = '';
if (this.route.snapshot && this.route.snapshot.firstChild) {
root = this.route.snapshot.firstChild.url[0].path;
}
this.route.queryParams.subscribe((params) => {
if (root === 'tasks' && params.id) {
this.cloudLayoutService.setCurrentTaskFilterParam({ id: params.id });
}
if (root === 'processes' && params.id) {
this.cloudLayoutService.setCurrentProcessFilterParam({ id: params.id });
}
});
}
onStartTask() {
this.router.navigate([`/cloud/community/start-task/`]);
}
onStartProcess() {
this.router.navigate([`/cloud/community/start-process/`]);
}
}
@@ -1,29 +0,0 @@
<mat-accordion>
<mat-expansion-panel [expanded]="expandTaskFilter" (opened)="onTaskFilterOpen()" (closed)="onTaskFilterClose()" data-automation-id='Task Filters'>
<mat-expansion-panel-header>
<mat-panel-title>
Task Filters
</mat-panel-title>
</mat-expansion-panel-header>
<adf-cloud-task-filters
*ngIf="expandTaskFilter"
[showIcons]="true"
[filterParam]="currentTaskFilter$ | async"
(filterClick)="onTaskFilterSelected($event)">
</adf-cloud-task-filters>
</mat-expansion-panel>
<mat-expansion-panel [expanded]="expandProcessFilter" (opened)="onProcessFilterOpen()" (closed)="onProcessFilterClose()" data-automation-id='Process Filters'>
<mat-expansion-panel-header>
<mat-panel-title>
Process Filters
</mat-panel-title>
</mat-expansion-panel-header>
<adf-cloud-process-filters
*ngIf="expandProcessFilter"
[showIcons]="true"
[filterParam]="currentProcessFilter$ | async"
(filterClick)="onProcessFilterSelected($event)">
</adf-cloud-process-filters>
</mat-expansion-panel>
</mat-accordion>
@@ -1,92 +0,0 @@
/*!
* @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 { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { Router, ActivatedRoute } from '@angular/router';
import { CloudLayoutService } from '../services/cloud-layout.service';
@Component({
selector: 'app-community-cloud-filters-demo',
templateUrl: './community-filters.component.html',
encapsulation: ViewEncapsulation.None
})
export class CommunityCloudFiltersDemoComponent implements OnInit {
currentTaskFilter$: Observable<any>;
currentProcessFilter$: Observable<any>;
toggleTaskFilter = true;
toggleProcessFilter = true;
expandTaskFilter = true;
expandProcessFilter = false;
constructor(
private cloudLayoutService: CloudLayoutService,
private router: Router,
private route: ActivatedRoute
) {}
ngOnInit() {
this.currentTaskFilter$ = this.cloudLayoutService.taskFilter$;
this.currentProcessFilter$ = this.cloudLayoutService.processFilter$;
let root = '';
if (this.route.snapshot && this.route.snapshot.firstChild) {
root = this.route.snapshot.firstChild.url[0].path;
if (root === 'tasks') {
this.expandTaskFilter = true;
this.expandProcessFilter = false;
} else if (root === 'processes') {
this.expandProcessFilter = true;
this.expandTaskFilter = false;
}
}
}
onTaskFilterSelected(filter) {
this.cloudLayoutService.setCurrentTaskFilterParam({id: filter.id});
const currentFilter = Object.assign({}, filter);
this.router.navigate([`/cloud/community/tasks/`], { queryParams: currentFilter });
}
onProcessFilterSelected(filter) {
this.cloudLayoutService.setCurrentProcessFilterParam({id: filter.id});
const currentFilter = Object.assign({}, filter);
this.router.navigate([`/cloud/community/processes/`], { queryParams: currentFilter });
}
onTaskFilterOpen(): boolean {
this.expandTaskFilter = true;
this.expandProcessFilter = false;
return this.toggleTaskFilter;
}
onTaskFilterClose(): boolean {
return !this.toggleTaskFilter;
}
onProcessFilterOpen(): boolean {
this.expandProcessFilter = true;
this.expandTaskFilter = false;
return this.toggleProcessFilter;
}
onProcessFilterClose(): boolean {
return !this.toggleProcessFilter;
}
}
@@ -1,21 +0,0 @@
<button data-automation-id="go-back" mat-icon-button (click)="onGoBack()">
<mat-icon>arrow_back</mat-icon> Go Back
</button>
<h4 data-automation-id="process-details-header">Simple page to show the process instance: {{ processInstanceId }}</h4>
<div class="app-process-cloud-container">
<adf-cloud-task-list
class="app-cloud-layout-overflow"
[processInstanceId]="processInstanceId"
(rowClick)="onRowClick($event)">
</adf-cloud-task-list>
<adf-cloud-process-header
class="app-process-cloud-header"
[processInstanceId]="processInstanceId">
</adf-cloud-process-header>
</div>
@@ -1,17 +0,0 @@
app-community-process-details-cloud {
.app {
&-process-cloud-container {
display: flex;
}
&-cloud-layout-overflow {
width: 67%;
flex: 1;
}
&-process-cloud-header {
margin-left: 10px;
width: 25%;
}
}
}
@@ -1,46 +0,0 @@
/*!
* @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 { Component, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-community-process-details-cloud',
templateUrl: './community-process-details-cloud.component.html',
styleUrls: ['./community-process-details-cloud.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CommunityProcessDetailsCloudDemoComponent {
processInstanceId: string;
constructor(private route: ActivatedRoute, private router: Router) {
this.route.params.subscribe((params) => {
this.processInstanceId = params.processInstanceId;
});
}
onGoBack() {
this.router.navigate([`/cloud/community/`]);
}
onRowClick(taskId: string) {
if (taskId) {
this.router.navigate([`/cloud/community/task-details/${taskId}`]);
}
}
}
@@ -1,42 +0,0 @@
<adf-cloud-edit-process-filter
[id]="filterId"
[filterProperties]="processFilterProperties.filterProperties"
[sortProperties]="processFilterProperties.sortProperties"
[actions]="processFilterProperties.actions"
(filterChange)="onFilterChange($event)"
(action)="onProcessFilterAction($event)">
</adf-cloud-edit-process-filter>
<div
class="app-cloud-process-list-container"
*ngIf="editedFilter">
<adf-cloud-process-list
#processCloud
class="app-cloud-layout-overflow"
[initiator]="editedFilter.initiator"
[processDefinitionId]="editedFilter.processDefinitionId"
[processDefinitionKey]="editedFilter.processDefinitionKey"
[id]="editedFilter.processInstanceId"
[status]="editedFilter.status"
[name]="editedFilter.processName"
[businessKey]="editedFilter['businessKey']"
[lastModifiedFrom]="editedFilter.lastModifiedFrom"
[lastModifiedTo]="editedFilter.lastModifiedTo"
[sorting]="sortArray"
[selectionMode]="selectionMode"
[multiselect]="multiselect"
(rowClick)="onRowClick($event)"
(rowsSelected)="onRowsSelected($event)">
</adf-cloud-process-list>
<adf-pagination
[target]="processCloud"
(changePageSize)="onChangePageSize($event)"
(nextPage)="resetSelectedRows()"
(prevPage)="resetSelectedRows()">
</adf-pagination>
<div *ngIf="testingMode">
Selected rows:
<ul>
<li *ngFor="let row of selectedRows">{{ row.id }}</li>
</ul>
</div>
</div>
@@ -1,21 +0,0 @@
app-community-processes-cloud-demo {
height: 100%;
min-height: 100%;
min-width: 100%;
width: 100%;
.app-cloud-process-list-container {
place-content: stretch space-between;
align-items: stretch;
margin-top: 2px;
}
&, .app-cloud-process-list-container {
flex-direction: column;
display: flex;
}
.app-cloud-layout-overflow, .app-cloud-process-list-container {
flex: 1;
}
}
@@ -1,153 +0,0 @@
/*!
* @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 { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import {
ProcessFilterCloudModel,
ProcessFilterCloudService,
ProcessFiltersCloudComponent,
ProcessListCloudComponent,
ProcessListCloudSortingModel
} from '@alfresco/adf-process-services-cloud';
import { ActivatedRoute, Router } from '@angular/router';
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
import { CloudLayoutService } from '../services/cloud-layout.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { Pagination } from '@alfresco/js-api';
const PROCESS_FILTER_PROPERTY_KEYS = 'adf-edit-process-filter';
const ACTION_SAVE_AS = 'saveAs';
@Component({
selector: 'app-community-processes-cloud-demo',
templateUrl: './community-processes-cloud.component.html',
styleUrls: ['./community-processes-cloud.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CommunityProcessesCloudDemoComponent implements OnInit, OnDestroy {
@ViewChild('processCloud')
processCloud: ProcessListCloudComponent;
@ViewChild('processFiltersCloud')
processFiltersCloud: ProcessFiltersCloudComponent;
isFilterLoaded: boolean;
filterId: string = '';
sortArray: any = [];
selectedRow: any;
multiselect: boolean;
selectionMode: string;
selectedRows: any[] = [];
testingMode: boolean;
processFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
editedFilter: ProcessFilterCloudModel;
private onDestroy$ = new Subject<boolean>();
constructor(
private route: ActivatedRoute,
private router: Router,
private cloudLayoutService: CloudLayoutService,
private userPreference: UserPreferencesService,
private processFilterCloudService: ProcessFilterCloudService,
private appConfig: AppConfigService) {
const properties = this.appConfig.get<Array<any>>(
PROCESS_FILTER_PROPERTY_KEYS
);
if (properties) {
this.processFilterProperties = properties;
}
}
ngOnInit() {
this.isFilterLoaded = false;
this.route.queryParams.subscribe((params) => {
if (Object.keys(params).length > 0) {
this.isFilterLoaded = true;
this.onFilterChange(params);
this.filterId = params.id;
} else {
this.loadDefaultFilters();
}
});
this.cloudLayoutService
.settings$
.pipe(takeUntil(this.onDestroy$))
.subscribe(settings => this.setCurrentSettings(settings));
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
}
loadDefaultFilters() {
this.processFilterCloudService
.getProcessFilters('community')
.subscribe((filters: ProcessFilterCloudModel[]) => {
this.onFilterChange(filters[0]);
});
}
setCurrentSettings(settings) {
if (settings) {
this.multiselect = settings.multiselect;
this.testingMode = settings.testingMode;
this.selectionMode = settings.selectionMode;
}
}
onChangePageSize(event: Pagination) {
this.userPreference.paginationSize = event.maxItems;
}
resetSelectedRows() {
this.selectedRows = [];
}
onRowClick(processInstanceId: string) {
this.router.navigate([`/cloud/community/process-details/${processInstanceId}`]);
}
onFilterChange(query: any) {
this.editedFilter = Object.assign({}, query);
this.sortArray = [
new ProcessListCloudSortingModel({
orderBy: this.editedFilter.sort,
direction: this.editedFilter.order
})
];
}
onProcessFilterAction(filterAction: any) {
this.cloudLayoutService.setCurrentProcessFilterParam({ id: filterAction.filter.id });
if (filterAction.actionType === ACTION_SAVE_AS) {
this.router.navigate([`/cloud/community/processes/`], { queryParams: filterAction.filter });
}
}
onRowsSelected(nodes) {
this.resetSelectedRows();
this.selectedRows = nodes.map((node) => node.obj);
}
}
@@ -1,6 +0,0 @@
<adf-cloud-start-process
[name]="processName"
(error)="openSnackMessage($event)"
(success)="onStartProcessSuccess()"
(cancel)="onCancelStartProcess()">
</adf-cloud-start-process>
@@ -1,55 +0,0 @@
/*!
* @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 { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { NotificationService, AppConfigService } from '@alfresco/adf-core';
import { CloudLayoutService } from '../services/cloud-layout.service';
@Component({
templateUrl: './community-start-process-cloud.component.html'
})
export class CommunityStartProcessCloudDemoComponent implements OnInit {
processName: string;
constructor(private appConfig: AppConfigService,
private cloudLayoutService: CloudLayoutService,
private notificationService: NotificationService,
private router: Router) {
}
ngOnInit() {
this.processName = this.appConfig.get<string>('adf-start-process-cloud.name');
}
onStartProcessSuccess() {
this.cloudLayoutService.setCurrentProcessFilterParam({ key: 'running-processes' });
this.router.navigate([`/cloud/community/processes`]);
}
onCancelStartProcess() {
this.cloudLayoutService.setCurrentProcessFilterParam({ key: 'all-processes' });
this.router.navigate([`/cloud/community/processes`]);
}
openSnackMessage(event: any) {
this.notificationService.openSnackMessage(
event.response.body.message
);
}
}
@@ -1,5 +0,0 @@
<adf-cloud-start-task
(error)="openSnackMessage($event)"
(success)="onStartTaskSuccess()"
(cancel)="onCancelStartTask()">
</adf-cloud-start-task>
@@ -1,48 +0,0 @@
/*!
* @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 { Component } from '@angular/core';
import { Router } from '@angular/router';
import { NotificationService } from '@alfresco/adf-core';
import { CloudLayoutService } from '../services/cloud-layout.service';
@Component({
templateUrl: './community-start-task-cloud.component.html'
})
export class CommunityStartTaskCloudDemoComponent {
constructor(
private cloudLayoutService: CloudLayoutService,
private notificationService: NotificationService,
private router: Router) {
}
onStartTaskSuccess() {
this.cloudLayoutService.setCurrentTaskFilterParam({key: 'community'});
this.router.navigate([`/cloud/community/tasks`]);
}
onCancelStartTask() {
this.cloudLayoutService.setCurrentTaskFilterParam({key: 'community'});
this.router.navigate([`/cloud/community/tasks`]);
}
openSnackMessage(event: any) {
this.notificationService.openSnackMessage(
event.response.body.message
);
}
}
@@ -1,46 +0,0 @@
<adf-cloud-edit-task-filter
[id]="filterId"
[filterProperties]="taskFilterProperties.filterProperties"
[sortProperties]="taskFilterProperties.sortProperties"
[actions]="taskFilterProperties.actions"
(action)="onTaskFilterAction($event)"
(filterChange)="onFilterChange($event)">
</adf-cloud-edit-task-filter>
<div
class="app-cloud-task-list-container"
*ngIf="editedFilter">
<adf-cloud-task-list
#taskCloud
class="app-cloud-layout-overflow"
[processDefinitionId]="editedFilter.processDefinitionId"
[processInstanceId]="editedFilter.processInstanceId"
[name]="editedFilter.taskName"
[id]="editedFilter.taskId"
[parentTaskId]="editedFilter.parentTaskId"
[priority]="editedFilter.priority"
[owner]="editedFilter.owner"
[lastModifiedFrom]="editedFilter.lastModifiedFrom"
[lastModifiedTo]="editedFilter.lastModifiedTo"
[status]="editedFilter.status"
[assignee]="editedFilter.assignee"
[createdDate]="editedFilter.createdDate"
[dueDate]="editedFilter.dueDate"
[sorting]="sortArray"
[multiselect]="multiselect"
[selectionMode]="selectionMode"
(rowClick)="onRowClick($event)"
(rowsSelected)="onRowsSelected($event)">
</adf-cloud-task-list>
<adf-pagination
[target]="taskCloud"
(changePageSize)="onChangePageSize($event)"
(nextPage)="resetSelectedRows()"
(prevPage)="resetSelectedRows()">
</adf-pagination>
<div *ngIf="testingMode">
Selected rows:
<ul>
<li *ngFor="let row of selectedRows" [attr.data-automation-id]="row.id">{{ row.name }}</li>
</ul>
</div>
</div>
@@ -1,27 +0,0 @@
app-community-tasks-cloud-demo {
height: 100%;
min-height: 100%;
min-width: 100%;
width: 100%;
.adf-cloud-layout-tab-body {
.mat-tab-body-wrapper {
height: 100%;
}
}
.app-cloud-task-list-container {
place-content: stretch space-between;
align-items: stretch;
margin-top: 2px;
}
&, .app-cloud-task-list-container {
flex-direction: column;
display: flex;
}
.app-cloud-layout-overflow, .app-cloud-task-list-container {
flex: 1;
}
}
@@ -1,148 +0,0 @@
/*!
* @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 { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import {
TaskFilterCloudModel,
TaskFilterCloudService,
TaskListCloudComponent,
TaskListCloudSortingModel
} from '@alfresco/adf-process-services-cloud';
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
import { ActivatedRoute, Router } from '@angular/router';
import { CloudLayoutService } from '../services/cloud-layout.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { Pagination } from '@alfresco/js-api';
const ACTION_SAVE_AS = 'saveAs';
const TASK_FILTER_PROPERTY_KEYS = 'adf-edit-task-filter';
@Component({
selector: 'app-community-tasks-cloud-demo',
templateUrl: './community-task-cloud.component.html',
styleUrls: ['./community-task-cloud.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CommunityTasksCloudDemoComponent implements OnInit, OnDestroy {
@ViewChild('taskCloud')
taskCloud: TaskListCloudComponent;
isFilterLoaded = false;
selectedRow: any;
sortArray: TaskListCloudSortingModel[];
editedFilter: TaskFilterCloudModel;
taskFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
filterId;
multiselect: boolean;
selectedRows: any[] = [];
testingMode: boolean;
selectionMode: string;
taskDetailsRedirection: boolean;
private onDestroy$ = new Subject<boolean>();
constructor(
private cloudLayoutService: CloudLayoutService,
private route: ActivatedRoute,
private router: Router,
private taskFilterCloudService: TaskFilterCloudService,
private userPreference: UserPreferencesService,
private appConfig: AppConfigService) {
const properties = this.appConfig.get<Array<any>>(TASK_FILTER_PROPERTY_KEYS);
if (properties) {
this.taskFilterProperties = properties;
}
}
ngOnInit() {
this.isFilterLoaded = false;
this.route.queryParams.subscribe((params) => {
if (Object.keys(params).length > 0) {
this.isFilterLoaded = true;
this.onFilterChange(params);
this.filterId = params.id;
} else {
setTimeout( () => {
this.loadDefaultFilters();
});
}
});
this.cloudLayoutService
.settings$
.pipe(takeUntil(this.onDestroy$))
.subscribe(settings => this.setCurrentSettings(settings));
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
}
loadDefaultFilters() {
this.taskFilterCloudService
.getTaskListFilters('community')
.subscribe((filters: TaskFilterCloudModel[]) => {
this.onFilterChange(filters[0]);
});
}
setCurrentSettings(settings) {
if (settings) {
this.multiselect = settings.multiselect;
this.testingMode = settings.testingMode;
this.selectionMode = settings.selectionMode;
this.taskDetailsRedirection = settings.taskDetailsRedirection;
}
}
onChangePageSize(event: Pagination) {
this.userPreference.paginationSize = event.maxItems;
}
resetSelectedRows() {
this.selectedRows = [];
}
onRowClick(taskId: string) {
if (!this.multiselect && this.selectionMode !== 'multiple' && this.taskDetailsRedirection) {
this.router.navigate([`/cloud/community/task-details/${taskId}`]);
}
}
onRowsSelected(nodes) {
this.resetSelectedRows();
this.selectedRows = nodes.map((node) => node.obj);
}
onFilterChange(filter: any) {
this.editedFilter = Object.assign({}, filter);
this.sortArray = [new TaskListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })];
}
onTaskFilterAction(filterAction: any) {
this.cloudLayoutService.setCurrentTaskFilterParam({ id: filterAction.filter.id });
if (filterAction.actionType === ACTION_SAVE_AS) {
this.router.navigate([`/cloud/community/tasks/`], { queryParams: filterAction.filter });
}
}
}
@@ -1,16 +0,0 @@
<h4 data-automation-id="task-details-header">Simple page to show the taskId: {{ taskId }}</h4>
<div class="app-community-task-details-cloud-column">
<div class="app-community-task-details-cloud-row">
<adf-cloud-task-form
[taskId]="taskId"
(cancelClick)="goBack()"
(taskClaimed)="onClaimTask()"
(taskCompleted)="onTaskCompleted()"
(taskUnclaimed)="onUnclaimTask()"
(formSaved)="onFormSaved()"
(error)="onError($event)">
</adf-cloud-task-form>
<adf-cloud-task-header [taskId]="taskId"></adf-cloud-task-header>
</div>
</div>
@@ -1,48 +0,0 @@
app-community-task-details-cloud {
.app {
&-task-detail-container {
display: flex;
}
&-task-title {
margin-left: 15px;
}
&-task-control {
width: 70%;
}
&-demop-card-container {
width: 30%;
font-family: inherit;
}
&-community-task-details-cloud-column {
margin: 0;
flex-direction: column;
.app-community-task-details-cloud-row {
flex-direction: row;
adf-cloud-task-form {
flex: 1 1 100%;
flex-direction: column;
display: flex;
max-width: 80%;
}
adf-cloud-task-header {
flex: 1;
}
}
}
&-community-task-details-cloud-column, &-community-task-details-cloud-row {
height: 100%;
min-height: 100%;
min-width: 100%;
width: 100%;
display: flex;
}
}
}
@@ -1,78 +0,0 @@
/*!
* @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 { Component, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { NotificationService } from '@alfresco/adf-core';
@Component({
selector: 'app-community-task-details-cloud',
templateUrl: './community-task-details-cloud.component.html',
styleUrls: ['./community-task-details-cloud.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CommunityTaskDetailsCloudDemoComponent {
taskId: string;
constructor(
private route: ActivatedRoute,
private router: Router,
private notificationService: NotificationService
) {
this.route.params.subscribe((params) => {
this.taskId = params.taskId;
});
}
isTaskValid(): boolean {
return this.taskId !== undefined;
}
goBack() {
this.router.navigate([`/cloud/community/`]);
}
onCompletedTask() {
this.goBack();
}
onUnclaimTask() {
this.goBack();
}
onClaimTask() {
this.goBack();
}
onTaskCompleted() {
this.goBack();
}
onFormSaved() {
this.notificationService.openSnackMessage('Task has been saved successfully');
}
onError({ message: error }: Error) {
let errorMessage;
try {
errorMessage = JSON.parse(error).message || JSON.parse(error).entry?.message;
errorMessage = JSON.parse(errorMessage).message;
} catch {}
this.notificationService.showError(errorMessage || error);
}
}
@@ -1,95 +0,0 @@
/*!
* @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 { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@alfresco/adf-core';
import {
ProcessServicesCloudModule,
LocalPreferenceCloudService,
PROCESS_FILTERS_SERVICE_TOKEN,
TASK_FILTERS_SERVICE_TOKEN
} from '@alfresco/adf-process-services-cloud';
import { CommunityCloudComponent } from './community-cloud.component';
import { CommunityTasksCloudDemoComponent } from './community-task-cloud.component';
import { CommunityCloudFiltersDemoComponent } from './community-filters.component';
import { CommunityProcessesCloudDemoComponent } from './community-processes-cloud.component';
import { CommunityStartProcessCloudDemoComponent } from './community-start-process-cloud.component';
import { CommunityStartTaskCloudDemoComponent } from './community-start-task-cloud.component';
import { CommunityProcessDetailsCloudDemoComponent } from './community-process-details-cloud.component';
import { CommunityTaskDetailsCloudDemoComponent } from './community-task-details-cloud.component';
import { AppCloudSharedModule } from '../shared/cloud.shared.module';
const routes: Routes = [
{
path: '',
component: CommunityCloudComponent,
children: [
{
path: 'tasks',
component: CommunityTasksCloudDemoComponent
},
{
path: 'processes',
component: CommunityProcessesCloudDemoComponent
},
{
path: 'start-task',
component: CommunityStartTaskCloudDemoComponent
},
{
path: 'start-process',
component: CommunityStartProcessCloudDemoComponent
},
{
path: 'task-details/:taskId',
component: CommunityTaskDetailsCloudDemoComponent
},
{
path: 'process-details/:processInstanceId',
component: CommunityProcessDetailsCloudDemoComponent
}
]
}
];
@NgModule({
imports: [
CommonModule,
CoreModule,
ProcessServicesCloudModule,
RouterModule.forChild(routes),
AppCloudSharedModule
],
declarations: [
CommunityCloudComponent,
CommunityTasksCloudDemoComponent,
CommunityCloudFiltersDemoComponent,
CommunityProcessesCloudDemoComponent,
CommunityStartProcessCloudDemoComponent,
CommunityStartTaskCloudDemoComponent,
CommunityProcessDetailsCloudDemoComponent,
CommunityTaskDetailsCloudDemoComponent
],
providers: [
{ provide: PROCESS_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService },
{ provide: TASK_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService }
]
})
export class AppCommunityModule {}
@@ -1,128 +0,0 @@
<mat-card class="app-section">
<mat-card-title>People Cloud Component</mat-card-title>
<mat-card-content>
<br>
<mat-radio-group (change)="onChangePeopleMode($event)">
<mat-radio-button [checked]="true" class="app-people-single-mode" data-automation-id="app-people-single-mode" value="single">Single Selection</mat-radio-button>
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-people-multiple-mode" value="multiple">Multiple Selection</mat-radio-button>
</mat-radio-group>
<div class="app-people-control-options">
<mat-form-field *ngIf="isPeopleAppNameSelected()" class="app-preselect-value">
<mat-label>Application Name</mat-label>
<input matInput (input)="setPeopleAppName($any($event).target?.value)" data-automation-id="app-people-app-input" />
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>Roles: ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput (input)="setPeopleRoles($any($event).target?.value)" data-automation-id="app-people-roles-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>Groups Restriction ["hr", "sales"]</mat-label>
<input matInput
(input)="setPeopleGroupsRestriction($any($event).target?.value)"
data-automation-id="app-people-groups-restriction-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value-full">
<mat-label>Preselect: {{ defaultPeoplePlaceholder }}</mat-label>
<input matInput (input)="setPeoplePreselectValue($any($event).target?.value)" data-automation-id="app-people-preselect-input" />
</mat-form-field>
<mat-checkbox class="app-preselect-value" (change)="onChangePeopleValidation($event)">Preselect validation</mat-checkbox>
<mat-checkbox data-automation-id="app-people-readonly" value="{{ peopleReadonly }}" (change)="onChangePeopleReadonly($event)">Read-only Mode</mat-checkbox>
</div>
<div>
<adf-cloud-people
[preSelectUsers]="preSelectUsers"
[readOnly]="peopleReadonly"
[validate]="peoplePreselectValidation"
[appName]="peopleAppName"
[roles]="peopleRoles"
[groupsRestriction]="groupsRestriction"
[title]="'ADF_TASK_LIST.START_TASK.FORM.LABEL.ASSIGNEE'"
[mode]="peopleMode"
(warning)="onUsersWarning($event)"></adf-cloud-people>
</div>
<div class="app-people-list" *ngIf="peopleMode === 'multiple'">
<h4>All Preselected Users</h4>
<mat-list role="list">
<mat-list-item *ngFor="let item of preSelectUsers" role="listitem">
<mat-icon mat-list-icon>person</mat-icon>
{{item | fullName}}
</mat-list-item>
</mat-list>
<div *ngIf="invalidUsers.length > 0">
<h4>Invalid Users <mat-icon>warning</mat-icon> </h4>
<mat-list role="list">
<mat-list-item *ngFor="let invalidUser of invalidUsers" role="listitem">
<mat-icon mat-list-icon>person</mat-icon>
{{invalidUser | fullName}}
</mat-list-item>
</mat-list>
</div>
</div>
</mat-card-content>
</mat-card>
<mat-card class="app-section">
<mat-card-title>Groups Cloud Component</mat-card-title>
<mat-card-content>
<br>
<mat-radio-group (change)="onChangeGroupsMode($event)">
<mat-radio-button [checked]="true" class="app-people-single-mode" data-automation-id="app-group-single-mode" value="single">Single Selection</mat-radio-button>
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-group-multiple-mode" value="multiple">Multiple Selection</mat-radio-button>
</mat-radio-group>
<div class="app-groups-control-options">
<mat-form-field *ngIf="isGroupAppNameSelected()" class="app-preselect-value">
<mat-label>Application Name</mat-label>
<input matInput (input)="setGroupAppName($any($event).target?.value)" data-automation-id="app-group-app-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>Roles: ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput (input)="setGroupRoles($any($event).target?.value)" data-automation-id="app-group-roles-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value-full">
<mat-label>Preselect: {{ defaultGroupPlaceholder }}</mat-label>
<input matInput (input)="setGroupsPreselectValue($any($event).target?.value)" data-automation-id="app-group-preselect-input" />
</mat-form-field>
<mat-checkbox class="app-preselect-value" (change)="onChangeGroupValidation($event)">Preselect validation</mat-checkbox>
<mat-checkbox
data-automation-id="app-group-readonly"
value="{{ groupReadonly }}"
(change)="onChangeGroupReadonly($event)">
Read-only Mode
</mat-checkbox>
</div>
<div>
<adf-cloud-group
[mode]="groupMode"
[readOnly]="groupReadonly"
[validate]="groupPreselectValidation"
[roles]="groupRoles"
[appName]="groupAppName"
[preSelectGroups]="preSelectGroup"
(warning)="onGroupsWarning($event)"></adf-cloud-group>
</div>
<div class="app-group-list" *ngIf="groupMode === 'multiple'">
<h4>All Preselected Groups</h4>
<mat-list role="list">
<mat-list-item *ngFor="let item of preSelectGroup" role="listitem">
<mat-icon mat-list-icon>group</mat-icon>
{{ item.name }}
</mat-list-item>
</mat-list>
<div *ngIf="invalidGroups.length > 0">
<h4>Invalid Groups <mat-icon>warning</mat-icon> </h4>
<mat-list role="list">
<mat-list-item *ngFor="let invalidGroup of invalidGroups" role="listitem">
<mat-icon mat-list-icon>group</mat-icon>
{{invalidGroup?.name}}
</mat-list-item>
</mat-list>
</div>
</div>
</mat-card-content>
</mat-card>
@@ -1,31 +0,0 @@
.app {
&-section {
mat-card-title {
font-size: 18px;
font-weight: bold;
}
mat-radio-group {
margin: 7px 10px;
mat-radio-button {
margin: 0 3px;
}
}
mat-card-content {
.app-preselect-value {
margin-right: 15px;
min-width: 25%;
&-big {
width: 60%;
}
&-full {
width: 100%;
}
}
}
}
}
@@ -1,164 +0,0 @@
/*!
* @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 { Component, ViewEncapsulation } from '@angular/core';
import { ComponentSelectionMode, IdentityUserModel, IdentityGroupModel } from '@alfresco/adf-process-services-cloud';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { MatRadioChange } from '@angular/material/radio';
@Component({
selector: 'app-people-groups-cloud',
templateUrl: './people-groups-cloud-demo.component.html',
styleUrls: ['./people-groups-cloud-demo.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class PeopleGroupCloudDemoComponent {
defaultFilterMode: string = 'appName';
defaultGroupPlaceholder: string = `[{"id": "1", "name":"activitiUserGroup"}]`;
defaultPeoplePlaceholder: string = `[{"id": "1", email": "user@user.com", "firstName":"user", "lastName": "lastName", "username": "user"}]`;
peopleMode: ComponentSelectionMode = 'single';
preSelectUsers: IdentityUserModel[] = [];
invalidUsers: IdentityUserModel[] = [];
peopleRoles: string[] = [];
groupsRestriction: string[] = [];
peopleAppName: string;
peopleFilterMode: string = this.defaultFilterMode;
peoplePreselectValidation = false;
groupPreselectValidation = false;
peopleReadonly = false;
groupReadonly = false;
groupMode: ComponentSelectionMode = 'single';
preSelectGroup: IdentityGroupModel[] = [];
invalidGroups: IdentityGroupModel[] = [];
groupRoles: string[];
groupAppName: string;
groupFilterMode: string = this.defaultFilterMode;
setPeoplePreselectValue(value: string): void {
this.preSelectUsers = this.getArrayFromString(value);
}
setGroupsPreselectValue(value: string): void {
this.preSelectGroup = this.getArrayFromString(value);
}
setPeopleRoles(value: string): void {
this.peopleRoles = this.getArrayFromString(value);
}
setGroupRoles(value: string): void {
this.groupRoles = this.getArrayFromString(value);
}
setPeopleAppName(value: string): void {
this.peopleAppName = value;
}
setGroupAppName(value: string): void {
this.groupAppName = value;
}
setPeopleGroupsRestriction(value: string): void {
this.groupsRestriction = this.getArrayFromString(value);
}
onChangePeopleMode(event: MatRadioChange): void {
this.peopleMode = event.value;
}
onChangePeopleReadonly(event: MatCheckboxChange): void {
this.peopleReadonly = event.checked;
}
onChangeGroupReadonly(event: MatCheckboxChange): void {
this.groupReadonly = event.checked;
}
onChangeGroupsMode(event: MatRadioChange): void {
this.groupMode = event.value;
}
onChangePeopleFilterMode(event: MatRadioChange): void {
this.peopleFilterMode = event.value;
this.resetPeopleFilter();
}
onChangeGroupsFilterMode(event: MatRadioChange): void {
this.groupFilterMode = event.value;
this.restGroupFilter();
}
isPeopleAppNameSelected(): boolean {
return this.peopleFilterMode === 'appName';
}
isGroupAppNameSelected(): boolean {
return this.groupFilterMode === 'appName';
}
resetPeopleFilter(): void {
if (this.isPeopleAppNameSelected()) {
this.peopleRoles = [];
} else {
this.peopleAppName = '';
}
}
restGroupFilter(): void {
if (this.isGroupAppNameSelected()) {
this.groupRoles = [];
} else {
this.groupAppName = '';
}
}
onChangePeopleValidation(event: MatCheckboxChange): void {
this.peoplePreselectValidation = event.checked;
}
onChangeGroupValidation(event: MatCheckboxChange): void {
this.groupPreselectValidation = event.checked;
}
onGroupsWarning(warning: any): void {
this.invalidGroups = warning.groups;
}
onUsersWarning(warning: any): void {
this.invalidUsers = warning.users;
}
isStringArray(str: string): boolean {
try {
const result = JSON.parse(str);
return Array.isArray(result);
} catch (e) {
return false;
}
}
private getArrayFromString<T = any>(value: string): T[] {
if (this.isStringArray(value)) {
return JSON.parse(value);
} else {
return [];
}
}
}
@@ -185,7 +185,7 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy {
}
private loadFilter(model: ProcessFilterCloudModel) {
if (model && model.appName && model.id) {
if (model?.appName && model.id) {
this.editedFilter = model;
}
}
@@ -1,38 +0,0 @@
<adf-cloud-service-task-filters
[appName]="appName"
[filterParam]="{index: 0}"
(filterClicked)="onTaskFilterSelected($event)"
(filterSelected)="onTaskFilterSelected($event)">
</adf-cloud-service-task-filters>
<div class="app-task-list-with-filter">
<adf-cloud-edit-service-task-filter
[id]="filterId"
[appName]="appName"
[filterProperties]="taskFilterProperties.filterProperties"
[sortProperties]="taskFilterProperties.sortProperties"
[actions]="taskFilterProperties.actions"
(filterChange)="onFilterChange($event)">
</adf-cloud-edit-service-task-filter>
<div
class="app-task-list-container"
*ngIf="editedFilter">
<adf-cloud-service-task-list
#taskCloud
[queryParams]="editedFilter"
class="app-cloud-layout-overflow"
[appName]="editedFilter.appName"
[sorting]="sortArray"
[multiselect]="multiselect"
[selectionMode]="selectionMode"
[stickyHeader]="true"
[showActions]="actionMenu"
[showContextMenu]="contextMenu">
</adf-cloud-service-task-list>
<adf-pagination
[target]="taskCloud"
(changePageSize)="onChangePageSize($event)"
(nextPage)="resetSelectedRows()"
(prevPage)="resetSelectedRows()">
</adf-pagination>
</div>
</div>
@@ -1,25 +0,0 @@
app-service-task-list-cloud-demo {
min-height: 100%;
min-width: 100%;
display: flex;
.app-task-list-with-filter, .app-task-list-container {
flex-direction: column;
display: flex;
flex: 1;
}
&, .app-task-list-container {
height: 100%;
width: 100%;
}
.app-task-list-container {
place-content: stretch space-between;
align-items: stretch;
.app-cloud-layout-overflow {
flex: 1;
}
}
}
@@ -1,114 +0,0 @@
/*!
* @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 { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import {
ServiceTaskFilterCloudModel,
ServiceTaskListCloudComponent,
TaskListCloudSortingModel
} from '@alfresco/adf-process-services-cloud';
import { AppConfigService, PaginationModel, UserPreferencesService } from '@alfresco/adf-core';
import { CloudLayoutService, CloudServiceSettings } from './services/cloud-layout.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
const TASK_FILTER_PROPERTY_KEYS = 'adf-edit-service-task-filter';
@Component({
selector: 'app-service-task-list-cloud-demo',
templateUrl: './service-task-list-cloud-demo.component.html',
styleUrls: ['./service-task-list-cloud-demo.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ServiceTaskListCloudDemoComponent implements OnInit, OnDestroy {
@ViewChild('taskCloud')
taskCloud: ServiceTaskListCloudComponent;
appName = 'simpleapp';
isFilterLoaded = false;
selectedRow: any;
sortArray: TaskListCloudSortingModel[];
editedFilter: ServiceTaskFilterCloudModel;
taskFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
multiselect: boolean;
selectedRows: string[] = [];
actionMenu: boolean;
contextMenu: boolean;
actions: any[] = [];
selectedAction: { id: number; name: string; actionType: string};
selectedContextAction: { id: number; name: string; actionType: string};
selectionMode: string;
filterId: string;
private onDestroy$ = new Subject<boolean>();
constructor(
private cloudLayoutService: CloudLayoutService,
private userPreference: UserPreferencesService,
private appConfig: AppConfigService) {
const properties = this.appConfig.get<Array<any>>(TASK_FILTER_PROPERTY_KEYS);
if (properties === this.taskFilterProperties) {
this.taskFilterProperties = properties;
}
}
ngOnInit() {
this.isFilterLoaded = false;
this.cloudLayoutService.settings$
.pipe(takeUntil(this.onDestroy$))
.subscribe(settings => this.setCurrentSettings(settings));
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
}
setCurrentSettings(settings: CloudServiceSettings) {
if (settings) {
this.multiselect = settings.multiselect;
this.selectionMode = settings.selectionMode;
this.actionMenu = settings.actionMenu;
this.contextMenu = settings.contextMenu;
this.actions = settings.actions;
}
}
onTaskFilterSelected(filter: ServiceTaskFilterCloudModel) {
this.filterId = filter.id;
this.editedFilter = filter;
}
onChangePageSize(event: PaginationModel) {
this.userPreference.paginationSize = event.maxItems;
}
resetSelectedRows() {
this.selectedRows = [];
}
onFilterChange(filter: ServiceTaskFilterCloudModel) {
this.appName = filter.appName;
this.editedFilter = Object.assign({}, filter);
this.sortArray = [new TaskListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })];
}
}
@@ -16,7 +16,8 @@
<mat-slide-toggle [checked]="processDetailsRedirection" (change)="toggleProcessDetailsRedirection()" data-automation-id="processDetailsRedirection">
Display process details on process click
</mat-slide-toggle>
<mat-form-field data-automation-id="selectionMode">
<mat-form-field data-automation-id="selectionMode" class="adf-cloud-settings-selection-mode">
<mat-label>Selection Mode</mat-label>
<mat-select [(ngModel)]="selectionMode" (selectionChange)="onSelectionModeChange()">
<mat-option *ngFor="let option of selectionModeOptions" [value]="option.value">
@@ -24,32 +25,29 @@
</mat-option>
</mat-select>
</mat-form-field>
<mat-card *ngIf="actionMenu || contextMenu">
<mat-card-header>
<mat-card-title>Add Action</mat-card-title>
</mat-card-header>
<mat-card-content>
<form class="app-cloud-settings-form" [formGroup]="actionMenuForm">
<mat-form-field>
<input matInput formControlName="key" placeholder="Key">
</mat-form-field>
<mat-form-field>
<input matInput formControlName="title" placeholder="Title">
</mat-form-field>
<mat-form-field>
<input matInput formControlName="icon" placeholder="Icon">
</mat-form-field>
<mat-checkbox formControlName="visible">Visible</mat-checkbox>
<mat-checkbox formControlName="disabled">Disable</mat-checkbox>
<button mat-raised-button (click)="addAction()">Add</button>
</form>
<div *ngIf="actions.length > 0">
<mat-chip-list>
<mat-chip *ngFor="let action of actions" [removable]="true">
{{action.title}}
<mat-icon matChipRemove (click)="removeAction(action)">cancel</mat-icon>
</mat-chip>
</mat-chip-list>
</div>
</mat-card-content>
</mat-card>
<div class="app-cloud-actions" *ngIf="actionMenu || contextMenu">
<h2>Add Action</h2>
<form class="app-cloud-settings-form" [formGroup]="actionMenuForm">
<mat-form-field class="app-cloud-settings-form-input">
<input matInput formControlName="key" placeholder="Key">
</mat-form-field>
<mat-form-field class="app-cloud-settings-form-input">
<input matInput formControlName="title" placeholder="Title">
</mat-form-field>
<mat-form-field class="app-cloud-settings-form-input">
<input matInput formControlName="icon" placeholder="Icon">
</mat-form-field>
<mat-checkbox formControlName="visible">Visible</mat-checkbox>
<mat-checkbox formControlName="disabled">Disable</mat-checkbox>
<button mat-raised-button (click)="addAction()">Add</button>
</form>
<div *ngIf="actions.length > 0">
<mat-chip-list>
<mat-chip *ngFor="let action of actions" [removable]="true">
{{action.title}}
<mat-icon matChipRemove (click)="removeAction(action)">cancel</mat-icon>
</mat-chip>
</mat-chip-list>
</div>
</div>
@@ -4,7 +4,11 @@ app-cloud-settings {
display: flex;
flex: 1;
mat-form-field {
.app-cloud-actions {
background-color: white;
}
.adf-cloud-settings-selection-mode {
max-width: 200px;
}
@@ -13,13 +17,9 @@ app-cloud-settings {
place-content: center space-around;
align-items: center;
mat-form-field {
.app-cloud-settings-form-input {
flex: 1 1 100%;
max-width: 23%;
}
mat-form-field, mat-checkbox {
margin-right: 20px;
}
}
}
@@ -1,27 +0,0 @@
<h2>Task Header Cloud</h2>
<mat-form-field class="app-appName-input">
App name
<input matInput
[type]="'text'"
[formControl]="appNameFormControl"
(change)="updateTaskHeader()">
</mat-form-field>
<mat-form-field class="app-taskId-input">
Task id
<input matInput
[type]="'text'"
[formControl]="taskIdFormControl"
(change)="updateTaskHeader()">
</mat-form-field>
<mat-error *ngIf="errorMessage">{{errorMessage}}</mat-error>
<div>
<adf-cloud-task-header #taskHeader
[appName]="appName"
[taskId]="taskId"
(error)="onError($event)">
</adf-cloud-task-header>
</div>
@@ -1,15 +0,0 @@
.app {
&-appName-input {
width: 500px;
margin-right: 50px;
}
&-taskId-input {
width: 500px;
}
&-find-task-button {
background-color: #ff9800;
margin-left: 30px;
}
}
@@ -1,49 +0,0 @@
/*!
* @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 { Component, ViewChild } from '@angular/core';
import { TaskHeaderCloudComponent } from '@alfresco/adf-process-services-cloud';
import { UntypedFormControl } from '@angular/forms';
@Component({
templateUrl: './task-header-cloud-demo.component.html',
styleUrls: ['./task-header-cloud-demo.component.scss']
})
export class TaskHeaderCloudDemoComponent {
@ViewChild('taskHeader', { static: true })
taskHeader: TaskHeaderCloudComponent;
appName: string;
taskId: string;
errorMessage;
appNameFormControl = new UntypedFormControl('');
taskIdFormControl = new UntypedFormControl('');
constructor() {}
updateTaskHeader() {
this.errorMessage = undefined;
this.appName = this.appNameFormControl.value;
this.taskId = this.taskIdFormControl.value;
}
onError(error) {
this.errorMessage = error;
}
}
@@ -1,49 +0,0 @@
<div>
<mat-nav-list class="app-list-confgurations">
<mat-list-item (click)="appConfigClick()">
<a matLine id="adf-app-conf">App Config Editor</a>
<button mat-icon-button>
<mat-icon>info</mat-icon>
</button>
</mat-list-item>
<mat-list-item (click)="infinitePaginationConfClick()">
<a matLine id="adf-infinite-pagination-conf">Infinite pagination</a>
<button mat-icon-button>
<mat-icon>info</mat-icon>
</button>
</mat-list-item>
<mat-list-item (click)="supportedPageSizesClick()">
<a matLine id="adf-supported-page-size">Supported Page Sizes </a>
<button mat-icon-button>
<mat-icon>info</mat-icon>
</button>
</mat-list-item>
<mat-list-item (click)="textOrientationClick()">
<a matLine id="adf-page-orientation-conf">Page Orientation</a>
<button mat-icon-button>
<mat-icon>info</mat-icon>
</button>
</mat-list-item>
</mat-nav-list>
<div>
<ngx-monaco-editor id="adf-code-configuration-editor"
class="app-file-editor"
[options]="editorOptions"
[(ngModel)]="code"
(onInit)="onInit($event)">
</ngx-monaco-editor>
<div class="app-list-confgurations-buttons">
<button mat-raised-button id="adf-configuration-save" (click)="onSave()" color="primary">
Save
</button>
<button mat-raised-button id="adf-configuration-clear" (click)="onClear()" color="primary">
Clear
</button>
</div>
</div>
</div>
@@ -1,16 +0,0 @@
.app-file-editor {
height: 500px;
width: 65%;
float: left;
}
.app-list-configurations {
float: left;
width: 30%;
}
.app-list-configurations-buttons {
width: 200px;
margin-left: 30%;
float: left;
}
@@ -1,143 +0,0 @@
/*!
* @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 { Component, OnDestroy } from '@angular/core';
import {
AppConfigService,
NotificationService,
UserPreferencesService,
UserPreferenceValues
} from '@alfresco/adf-core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'app-config-editor',
templateUrl: './config-editor.component.html',
styleUrls: ['./config-editor.component.scss']
})
export class ConfigEditorComponent implements OnDestroy {
private onDestroy$ = new Subject<boolean>();
editor: any;
code: any;
field: string;
invalidJson = false;
isUserPreference = false;
userPreferenceProperty: string;
editorOptions = {
theme: 'vs-dark',
language: 'json',
autoIndent: true,
formatOnPaste: true,
formatOnType: true
};
onInit(editor) {
this.editor = editor;
this.indentCode();
}
constructor(private appConfig: AppConfigService,
private userPreferencesService: UserPreferencesService,
private notificationService: NotificationService) {
this.code = JSON.stringify(appConfig.config);
}
onSave() {
try {
if (this.isUserPreference) {
this.userPreferencesService.set(this.userPreferenceProperty, JSON.parse(this.editor.getValue()));
} else {
this.appConfig.config = JSON.parse(this.editor.getValue());
}
} catch (error) {
this.invalidJson = true;
this.notificationService.openSnackMessage('Wrong Code configuration ' + error);
} finally {
if (!this.invalidJson) {
this.notificationService.openSnackMessage('Saved');
}
}
}
onClear() {
this.code = '';
}
appConfigClick() {
this.isUserPreference = false;
this.code = JSON.stringify(this.appConfig.config);
this.indentCode();
}
ngOnDestroy() {
this.onDestroy$.next(true);
this.onDestroy$.complete();
}
textOrientationClick() {
this.isUserPreference = true;
this.userPreferenceProperty = 'textOrientation';
this.userPreferencesService
.select(this.userPreferenceProperty)
.pipe(takeUntil(this.onDestroy$))
.subscribe((textOrientation: number) => {
this.code = JSON.stringify(textOrientation);
this.field = 'textOrientation';
this.indentCode();
});
this.indentCode();
}
infinitePaginationConfClick() {
this.isUserPreference = true;
this.userPreferenceProperty = UserPreferenceValues.PaginationSize;
this.userPreferencesService
.select(this.userPreferenceProperty)
.pipe(takeUntil(this.onDestroy$))
.subscribe((pageSize: number) => {
this.code = JSON.stringify(pageSize);
this.field = 'adf-infinite-pagination';
this.indentCode();
});
}
supportedPageSizesClick() {
this.isUserPreference = true;
this.userPreferenceProperty = UserPreferenceValues.SupportedPageSizes;
this.userPreferencesService
.select(this.userPreferenceProperty)
.pipe(takeUntil(this.onDestroy$))
.subscribe((supportedPageSizes: number) => {
this.code = JSON.stringify(supportedPageSizes);
this.field = 'adf-supported-page-size';
this.indentCode();
});
}
indentCode() {
setTimeout(() => {
this.editor.getAction('editor.action.formatDocument').run();
}, 300);
}
}
@@ -1,41 +0,0 @@
/*!
* @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 { NgModule } from '@angular/core';
import { ConfigEditorComponent } from './config-editor.component';
import { Routes, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@alfresco/adf-core';
import { MonacoEditorModule } from 'ngx-monaco-editor-v2';
const routes: Routes = [
{
path: '',
component: ConfigEditorComponent
}
];
@NgModule({
imports: [
CommonModule,
CoreModule,
RouterModule.forChild(routes),
MonacoEditorModule
],
declarations: [ConfigEditorComponent]
})
export class AppConfigEditorModule {}
@@ -1,71 +1,24 @@
<ng-container *ngIf="nodeId">
<adf-alfresco-viewer
(showViewerChange)="onViewerClosed()"
[nodeId]="nodeId"
[versionId]="versionId"
[showRightSidebar]="showRightSidebar"
[showLeftSidebar]="showLeftSidebar"
[allowGoBack]="allowGoBack"
[showToolbar]="showToolbar"
[allowPrint]="allowPrint"
[allowDownload]="allowDownload"
[allowRightSidebar]="allowRightSidebar"
[allowLeftSidebar]="allowLeftSidebar"
[sidebarLeftTemplate]="sidebarLeftTemplate"
[showToolbar]="true"
[allowRightSidebar]="true"
[sidebarRightTemplate]="sidebarRightTemplate">
<adf-viewer-toolbar *ngIf="customToolbar" data-automation-id="adf-viewer-custom-toolbar">
<h1>My custom toolbar</h1>
</adf-viewer-toolbar>
<adf-viewer-toolbar-actions *ngIf="moreActions">
<button mat-icon-button id="adf-viewer-time">
<mat-icon>alarm</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-upload">
<mat-icon>backup</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-bug">
<mat-icon>bug_report</mat-icon>
</button>
</adf-viewer-toolbar-actions>
<adf-viewer-more-actions *ngIf="moreActionsMenu">
<button mat-menu-item id="adf-viewer-more-menu-alarm">
<mat-icon>alarm</mat-icon>
<span>Alarm</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-backup">
<mat-icon>backup</mat-icon>
<span>Backup</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-bug">
<mat-icon>bug_report</mat-icon>
<span>Bug report</span>
</button>
</adf-viewer-more-actions>
<ng-container *ngIf="openWith">
<adf-viewer-open-with>
<button mat-menu-item>
<mat-icon>dialpad</mat-icon>
<span>Option 1</span>
</button>
<button mat-menu-item disabled>
<mat-icon>voicemail</mat-icon>
<span>Option 2</span>
</button>
<button mat-menu-item>
<mat-icon>notifications_off</mat-icon>
<span>Option 3</span>
</button>
</adf-viewer-open-with>
</ng-container>
</adf-alfresco-viewer>
</ng-container>
<ng-container *ngIf="blobFile">
<adf-viewer
[blobFile]="blobFile"
[fileName]="fileName"
[showToolbar]="true"
[allowRightSidebar]="true"
(showViewerChange)="onViewerClosed()"
[sidebarRightTemplate]="sidebarRightTemplate">
</adf-viewer>
</ng-container>
<ng-template let-node="node" #sidebarRightTemplate>
<adf-info-drawer title="Details">
@@ -157,242 +110,10 @@
</adf-info-drawer-tab>
<adf-info-drawer-tab label="Versions">
<mat-card>
<mat-card-content>
<adf-version-manager [node]="node"
(uploadError)="onUploadError($event)"
(viewVersion)="onViewVersion($event)">
</adf-version-manager>
</mat-card-content>
</mat-card>
<adf-version-manager [node]="node"
(uploadError)="onUploadError($event)"
(viewVersion)="onViewVersion($event)">
</adf-version-manager>
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<ng-template #sidebarLeftTemplate>
<adf-info-drawer [title]="'Viewer Options'">
<adf-info-drawer-tab label="Settings">
<p class="toggle">
<mat-slide-toggle
id="adf-switch-fileurl"
(change)="toggleFileUrl()"
[checked]="fileUrlSwitch">
Url File
</mat-slide-toggle>
</p>
<p class="toggle">
<ng-container *ngIf="fileUrlSwitch">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Url File"
[(ngModel)]="urlFile"
data-automation-id="adf-text-file-url">
</mat-form-field>
</ng-container>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-toolbar"
(change)="toggleShowToolbar()"
[checked]="showToolbar">
Show Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-goback"
(change)="toggleAllowGoBack()"
[checked]="allowGoBack">
Allow GoBack
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-openwith"
(change)="toggleOpenWith()"
[checked]="openWith">
Open With
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactions"
(change)="toggleOpenMoreActions()"
[checked]="moreActions">
More Actions
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactionsmenu"
(change)="toggleMoreActionsMenu()"
[checked]="moreActionsMenu">
More Actions Menu
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-download"
(change)="toggleAllowDownload()"
[checked]="allowDownload">
Allow Download
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-print"
(change)="toggleAllowPrint()"
[checked]="allowPrint">
Allow Print
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowsidebar"
(change)="toggleAllowRightSidebar()"
[checked]="allowRightSidebar">
Allow Right Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowLeftSidebar"
(change)="toggleAllowLeftSidebar()"
[checked]="allowLeftSidebar">
Allow Left Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-toggle-custom-toolbar"
(change)="toggleToolbar()"
[checked]="customToolbar">
Custom Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-tab-with-icon"
(change)="toggleShowTabWithIcon()"
[checked]="showTabWithIcon">
Show tab with icon
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-icon-and-label-tab"
(change)="toggleShowTabWithIconAndLabel()"
[checked]="showTabWithIconAndLabel">
Show tab with icon and label
</mat-slide-toggle>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showrightsidebar" (click)="toggleShowRightSidebar()">
Toggle Right Sidebar
</button>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showleftsidebar" (click)="hideLeftSidebar()">
Hide Left Sidebar
</button>
</p>
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIcon"
[label]=""
[icon]="'face'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIconAndLabel"
[label]="'Comments'"
[icon]="'comment'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<ng-container *ngIf="blobFile">
<adf-viewer
[blobFile]="blobFile"
[fileName]="fileName"
[showRightSidebar]="showRightSidebar"
[showLeftSidebar]="showLeftSidebar"
[allowGoBack]="allowGoBack"
[showToolbar]="showToolbar"
[allowRightSidebar]="allowRightSidebar"
[allowLeftSidebar]="allowLeftSidebar"
(showViewerChange)="onViewerClosed()"
[sidebarLeftTemplate]="sidebarLeftTemplate"
[sidebarRightTemplate]="sidebarRightTemplate">
<adf-viewer-toolbar *ngIf="customToolbar" data-automation-id="adf-viewer-custom-toolbar">
<h1>My custom toolbar</h1>
</adf-viewer-toolbar>
<adf-viewer-toolbar-actions *ngIf="moreActions">
<button mat-icon-button id="adf-viewer-time">
<mat-icon>alarm</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-upload">
<mat-icon>backup</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-bug">
<mat-icon>bug_report</mat-icon>
</button>
</adf-viewer-toolbar-actions>
<adf-viewer-more-actions *ngIf="moreActionsMenu">
<button mat-menu-item id="adf-viewer-more-menu-alarm">
<mat-icon>alarm</mat-icon>
<span>Alarm</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-backup">
<mat-icon>backup</mat-icon>
<span>Backup</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-bug">
<mat-icon>bug_report</mat-icon>
<span>Bug report</span>
</button>
</adf-viewer-more-actions>
<ng-container *ngIf="openWith">
<adf-viewer-open-with>
<button mat-menu-item>
<mat-icon>dialpad</mat-icon>
<span>Option 1</span>
</button>
<button mat-menu-item disabled>
<mat-icon>voicemail</mat-icon>
<span>Option 2</span>
</button>
<button mat-menu-item>
<mat-icon>notifications_off</mat-icon>
<span>Option 3</span>
</button>
</adf-viewer-open-with>
</ng-container>
</adf-viewer>
</ng-container>
@@ -1,12 +0,0 @@
.app-viewer__sidebar {
width: 380px !important;
}
/* stylelint-disable */
.monaco-scrollable-element {
width: 600px;
}
app-preview-extension {
width: 600px;
}
@@ -17,26 +17,16 @@
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router, PRIMARY_OUTLET } from '@angular/router';
import {
NotificationService
} from '@alfresco/adf-core';
import {
ContentService,
AllowableOperationsEnum,
PermissionsEnum,
NodesApiService,
FileUploadErrorEvent
} from '@alfresco/adf-content-services';
import { NotificationService } from '@alfresco/adf-core';
import { ContentService, AllowableOperationsEnum, PermissionsEnum, NodesApiService, FileUploadErrorEvent } from '@alfresco/adf-content-services';
import { PreviewService } from '../../services/preview.service';
@Component({
selector: 'app-file-view',
templateUrl: './file-view.component.html',
styleUrls: ['./file-view.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class FileViewComponent implements OnInit {
nodeId: string = null;
versionId: string = null;
displayEmptyMetadata = false;
@@ -46,36 +36,21 @@ export class FileViewComponent implements OnInit {
isPreset = false;
customPreset: string = null;
displayDefaultProperties = true;
showToolbar = true;
urlFile = null;
allowGoBack = true;
openWith = false;
allowDownload = true;
allowPrint = true;
allowRightSidebar = true;
allowLeftSidebar = true;
moreActions = true;
moreActionsMenu = false;
fileUrlSwitch = false;
showLeftSidebar = null;
showRightSidebar = false;
customToolbar = false;
isCommentEnabled = false;
showTabWithIcon = false;
showTabWithIconAndLabel = false;
desiredAspect: string = null;
showAspect: string = null;
name: string;
fileName: string;
blobFile: Blob;
constructor(private router: Router,
private route: ActivatedRoute,
private nodeApiService: NodesApiService,
private contentServices: ContentService,
private preview: PreviewService,
private notificationService: NotificationService) {
}
constructor(
private router: Router,
private route: ActivatedRoute,
private nodeApiService: NodesApiService,
private contentServices: ContentService,
private preview: PreviewService,
private notificationService: NotificationService
) {}
ngOnInit() {
this.route.params.subscribe((params) => {
@@ -84,8 +59,9 @@ export class FileViewComponent implements OnInit {
if (id) {
this.nodeApiService.getNode(id).subscribe(
(node) => {
if (node && node.isFile) {
this.isCommentEnabled = this.contentServices.hasPermissions(node, PermissionsEnum.NOT_CONSUMER) ||
if (node?.isFile) {
this.isCommentEnabled =
this.contentServices.hasPermissions(node, PermissionsEnum.NOT_CONSUMER) ||
this.contentServices.hasAllowableOperations(node, AllowableOperationsEnum.UPDATE);
this.nodeId = id;
return;
@@ -131,66 +107,6 @@ export class FileViewComponent implements OnInit {
this.displayDefaultProperties = !this.displayDefaultProperties;
}
toggleShowToolbar() {
this.showToolbar = !this.showToolbar;
}
toggleAllowGoBack() {
this.allowGoBack = !this.allowGoBack;
}
toggleOpenWith() {
this.openWith = !this.openWith;
}
toggleAllowDownload() {
this.allowDownload = !this.allowDownload;
}
toggleAllowPrint() {
this.allowPrint = !this.allowPrint;
}
toggleOpenMoreActions() {
this.moreActions = !this.moreActions;
}
toggleMoreActionsMenu() {
this.moreActionsMenu = !this.moreActionsMenu;
}
toggleShowRightSidebar() {
this.showRightSidebar = !this.showRightSidebar;
}
hideLeftSidebar() {
this.showLeftSidebar = false;
}
toggleAllowRightSidebar() {
this.allowRightSidebar = !this.allowRightSidebar;
}
toggleAllowLeftSidebar() {
this.allowLeftSidebar = !this.allowLeftSidebar;
}
toggleShowTabWithIcon() {
this.showTabWithIcon = !this.showTabWithIcon;
}
toggleShowTabWithIconAndLabel() {
this.showTabWithIconAndLabel = !this.showTabWithIconAndLabel;
}
toggleFileUrl() {
this.fileUrlSwitch = !this.fileUrlSwitch;
if (!this.fileUrlSwitch) {
this.urlFile = null;
}
}
togglePreset() {
this.isPreset = !this.isPreset;
if (!this.isPreset) {
@@ -198,10 +114,6 @@ export class FileViewComponent implements OnInit {
}
}
toggleToolbar() {
this.customToolbar = !this.customToolbar;
}
applyCustomPreset() {
this.isPreset = false;
setTimeout(() => {
@@ -1,24 +0,0 @@
<adf-toolbar>
<adf-toolbar-title>
<mat-form-field>
<mat-select [(ngModel)]="selectedSource" data-automation-id="custom-sources-select">
<mat-option *ngFor="let source of sources" [value]="source.value">
{{ source.title }}
</mat-option>
</mat-select>
</mat-form-field>
</adf-toolbar-title>
<adf-toolbar-divider></adf-toolbar-divider>
<button mat-icon-button
[disabled]="!hasSelection(customSourcesDocumentList.selection)"
title="Download"
[adfNodeDownload]="customSourcesDocumentList.selection">
<mat-icon>get_app</mat-icon>
</button>
</adf-toolbar>
<adf-document-list
#customSourcesDocumentList
[currentFolderId]="selectedSource"
locationFormat="/files"
selectionMode="multiple">
</adf-document-list>
@@ -1,49 +0,0 @@
/*!
* @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 { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { DocumentListComponent } from '@alfresco/adf-content-services';
@Component({
selector: 'app-custom-sources',
templateUrl: './custom-sources.component.html',
encapsulation: ViewEncapsulation.None
})
export class CustomSourcesComponent {
@Input()
selectedSource = '-recent-';
@ViewChild('customSourcesDocumentList', { static: true })
documentList: DocumentListComponent;
sources = [
{ title: 'Favorites', value: '-favorites-' },
{ title: 'Recent', value: '-recent-' },
{ title: 'Shared Links', value: '-sharedlinks-' },
{ title: 'Sites', value: '-sites-' },
{ title: 'My Sites', value: '-mysites-' },
{ title: 'Trashcan', value: '-trashcan-' },
{ title: 'Root', value: '-root-' },
{ title: 'My', value: '-my-' },
{ title: 'Shared', value: '-shared-' }
];
hasSelection(selection: any[]): boolean {
return selection && selection.length > 0;
}
}
@@ -1,41 +0,0 @@
/*!
* @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 { NgModule } from '@angular/core';
import { CustomSourcesComponent } from './custom-sources.component';
import { Routes, RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@alfresco/adf-core';
import { ContentModule } from '@alfresco/adf-content-services';
const routes: Routes = [
{
path: '',
component: CustomSourcesComponent
}
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes),
CoreModule,
ContentModule.forChild()
],
declarations: [CustomSourcesComponent]
})
export class AppCustomSourcesModule {}
@@ -1,9 +1,4 @@
<div class="app-container">
<div *ngIf="showSitePicker" class="app-site-container-style" id="site-container">
<adf-sites-dropdown (change)="onSiteChange($event)" [hideMyFiles]="false" [relations]="'members'">
</adf-sites-dropdown>
</div>
<div
id="document-list-container"
class="app-document-list-container">
@@ -14,7 +9,6 @@
[versioning]="versioning"
[adf-check-allowable-operation]="'create'"
[adf-nodes]="disableDragArea ? getCurrentDocumentListNode() : []"
(beginUpload)="onBeginUpload($event)"
(updateFileVersion)="onUploadNewVersion($event)">
<div *ngIf="errorMessage" class="app-error-message">
<button (click)="resetError()" mat-icon-button>
@@ -30,16 +24,7 @@
</adf-dropdown-breadcrumb>
</adf-toolbar-title>
<adf-toolbar-divider></adf-toolbar-divider>
<div class="app-document-action-buttons">
<button
mat-icon-button
data-automation-id="document-list-grid-view"
title="Toggle display mode"
(click)="toggleGalleryView()">
<mat-icon>list</mat-icon>
</button>
<button
data-automation-id="create-new-folder"
mat-icon-button
@@ -50,23 +35,6 @@
[adf-create-folder]="currentFolderId">
<mat-icon>create_new_folder</mat-icon>
</button>
<button
mat-icon-button
title="Create Library}"
data-automation-id="create-new-library"
(click)="createLibrary()">
<mat-icon>library_add</mat-icon>
</button>
<button
data-automation-id="edit-folder"
mat-icon-button
[disabled]="!canEditFolder(documentList.selection)"
title="Edit folder"
(error)="openSnackMessageError($event)"
[adf-edit-folder]="documentList.selection[0]?.entry"
(success)="documentList.reload()">
<mat-icon>create</mat-icon>
</button>
<button mat-icon-button
[disabled]="!hasSelection(documentList.selection)"
title="Download"
@@ -83,23 +51,6 @@
[adf-delete]="documentList.selection">
<mat-icon>delete</mat-icon>
</button>
<button
data-automation-id="favorite"
mat-icon-button
[disabled]="!documentList.selection.length"
#favorite="adfFavorite"
[adf-node-favorite]="documentList.selection"
title="Add to favorites">
<mat-icon>{{ favorite.hasFavorites() ? 'star' :'star_border' }}</mat-icon>
</button>
<button mat-icon-button
[disabled]="documentList.selection.length && !shareRef.isFile"
[baseShareUrl]="baseShareUrl"
#shareRef="adfShare"
[adf-share]="documentList.selection[0]"
[title]="(shareRef.isShared ? 'Edit settings' : 'Share')">
<mat-icon>share</mat-icon>
</button>
</div>
<button mat-icon-button (click)="showVersions = !showVersions" class="app-show-versions-button"
@@ -113,22 +64,12 @@
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="toggleGalleryView()">
<mat-icon *ngIf="displayMode === 'list'">view_comfy</mat-icon>
<mat-icon *ngIf="displayMode === 'gallery'">list</mat-icon>
<span>Card view mode</span>
</button>
<button mat-menu-item
(error)="openSnackMessageError($event)"
[adf-create-folder]="currentFolderId">
<mat-icon>create_new_folder</mat-icon>
<span>New folder</span>
</button>
<button mat-menu-item
(click)="createLibrary()">
<mat-icon>library_add</mat-icon>
<span>Create Library</span>
</button>
<button mat-menu-item
[disabled]="!canEditFolder(documentList.selection)"
(error)="openSnackMessageError($event)"
@@ -164,7 +105,6 @@
[sorting]="sorting"
[sortingMode]="sortingMode"
[showHeader]="showHeader"
[thumbnails]="thumbnails"
[stickyHeader]="stickyHeader"
[headerFilters]="headerFilters"
[filterValue]="paramValues"
@@ -186,41 +126,26 @@
<data-column
key="$thumbnail"
type="image"
[sortable]="false"
class="app-image-table-cell"
[class.adf-cell-thumbnail]="thumbnails">
[sortable]="false">
</data-column>
<data-column
*ngIf="showNameColumn && hyperlinkNavigation"
key="name"
sortingKey="name"
class="app-ellipsis-cell"
title="Display name"
[formatTooltip]="getNodeNameTooltip">
<ng-template let-context>
<adf-name-column key="name" [context]="context"></adf-name-column>
</ng-template>
</data-column>
<data-column
*ngIf="showNameColumn && !hyperlinkNavigation"
key="name"
sortingKey="name"
title="Display name"
[formatTooltip]="getNodeNameTooltip"
class="app-ellipsis-cell adf-expand-cell-5">
class="adf-expand-cell-5">
</data-column>
<data-column
key="content.sizeInBytes"
title="Size"
type="fileSize"
sortingKey="sizeInBytes"
class="app-desktop-only adf-ellipsis-cell">
class="adf-ellipsis-cell">
</data-column>
<data-column
*ngIf="searchTerm"
key="search"
title="Search"
class="app-desktop-only adf-expand-cell-3">
class="adf-expand-cell-3">
<ng-template let-entry="$implicit">
<div [innerHTML]="searchResultsHighlight(entry.row.node.entry.search) | highlight:searchTerm">
</div>
@@ -239,7 +164,7 @@
key="lock"
[focus]="false"
[sortable]="false"
class="app-desktop-only adf-ellipsis-cell">
class="adf-ellipsis-cell">
<ng-template let-entry="$implicit">
<button mat-icon-button [adf-node-lock]="entry.row.node.entry" class="app-lock-button">
<mat-icon *ngIf="entry.row.getValue('isLocked')">lock</mat-icon>
@@ -251,7 +176,7 @@
title="Created by"
key="createdByUser.displayName"
sortingKey="createdByUser"
class="app-desktop-only adf-ellipsis-cell">
class="adf-ellipsis-cell">
</data-column>
<data-column
title="Created"
@@ -259,7 +184,7 @@
sortingKey="createdAt"
type="date"
[format]="enableMediumTimeFormat ? 'medium' : 'timeAgo'"
class="app-desktop-only adf-ellipsis-cell">
class="adf-ellipsis-cell">
</data-column>
</data-columns>
@@ -270,24 +195,6 @@
title="Download"
handler="download">
</content-action>
<content-action
icon="content_copy"
title="Copy"
permission="copy"
[disableWithNoPermission]="true"
(error)="onContentActionError($event)"
(success)="onContentActionSuccess($event)"
handler="copy">
</content-action>
<content-action
icon="redo"
title="Move"
permission="update"
[disableWithNoPermission]="true"
(error)="onContentActionError($event)"
(success)="onContentActionSuccess($event)"
handler="move">
</content-action>
<content-action
icon="delete"
permission="delete"
@@ -297,11 +204,6 @@
(success)="onDeleteActionSuccess($event)"
handler="delete">
</content-action>
<content-action
icon="info"
title="Info"
(execute)="onManageMetadata($event)">
</content-action>
<content-action
icon="supervisor_account"
title="Permission"
@@ -316,13 +218,6 @@
title="Manage versions"
(execute)="onManageVersions($event)">
</content-action>
<content-action
target="document"
icon="lock"
permission="lock"
handler="lock"
title="Lock">
</content-action>
<content-action
icon="beach_access"
target="document"
@@ -333,21 +228,12 @@
</adf-document-list>
</div>
<adf-pagination
#standardPagination
*ngIf="!infiniteScrolling"
class="app-documentlist-pagination"
[target]="documentList"
(changePageSize)="onChangePageSize($event)"
(changePageNumber)="onChangePageNumber($event)"
(nextPage)="onNextPage($event)"
(prevPage)="onPrevPage($event)">
</adf-pagination>
<adf-infinite-pagination
[hidden]="!infiniteScrolling"
[target]="documentList"
[loading]="documentList.loading">
{{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}
</adf-infinite-pagination>
</adf-upload-drag-area>
<adf-info-drawer-layout *ngIf="showVersions" class="app-manage-versions-sidebar">
@@ -365,7 +251,7 @@
<ng-container *ngIf="userHasPermissionToManageVersions(); else no_permission_to_versions">
<adf-version-manager
[node]="documentList.selection[0].entry"
[showComments]="showVersionComments"
[showComments]="true"
[allowDownload]="allowVersionDownload">
</adf-version-manager>
</ng-container>
@@ -402,18 +288,6 @@
</div>
<div class="app-container">
<section>
<mat-slide-toggle [(ngModel)]="showNameColumn">
Show Name Column
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="hyperlinkNavigation">
Hyperlink navigation
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle data-automation-id="multiSelectToggle" [(ngModel)]="multiselect">
Multiselect (with checkboxes)
@@ -444,48 +318,18 @@
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle id="adf-thumbnails-upload-switch" (click)="toggleThumbnails()">
Enable Thumbnails
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle id="adf-document-list-enable-drop-files" [checked]="allowDropFiles" (change)="toggleAllowDropFiles()">
Enable Drop Files in a folder or a file
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle id="adf-version-upload-switch" [(ngModel)]="versioning">
Enable versioning
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle (click)="onInfiniteScrolling()">
Enable Infinite Scrolling
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="showVersionComments">
Show comments on versions
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="allowVersionDownload">
Enable version download
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="warnOnMultipleUploads">
Display warning for multiple uploads
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="enableMediumTimeFormat" id="enableMediumTimeFormat">
Enable medium time format for document list
@@ -504,39 +348,6 @@
</mat-slide-toggle>
</section>
<section>
<mat-slide-toggle [(ngModel)]="enableDownloadPrompt" id="enableDownloadPrompt" (change)="onEnableDownloadPrompt()">
Enable Download Prompt
</mat-slide-toggle>
</section>
<section *ngIf="enableDownloadPrompt">
<mat-form-field>
<input matInput type="number" [(ngModel)]="downloadPromptDelay" (change)="onDownloadPromptDelayChange()">
</mat-form-field>
</section>
<section *ngIf="enableDownloadPrompt">
<mat-slide-toggle [(ngModel)]="enableDownloadPromptReminder" id="enableDownloadPromptReminders" (change)="onEnableDownloadPromptReminderChange()">
Enable Download Prompt Reminders
</mat-slide-toggle>
</section>
<section *ngIf="enableDownloadPrompt && enableDownloadPromptReminder">
<mat-form-field>
<input matInput type="number" [(ngModel)]="downloadPromptReminderDelay" (change)="onDownloadPromptReminderChange()">
</mat-form-field>
</section>
<section>
<mat-slide-toggle [(ngModel)]="enableFileAutoDownload" id="enableFileAutoDownload" (change)="onEnableFileAutoDownloadChange()">
Enable FileAutoDownload
</mat-slide-toggle>
</section>
<section *ngIf="enableFileAutoDownload">
<mat-form-field>
<input matInput type="number" [(ngModel)]="fileAutoDownloadSizeThresholdInMB" (change)="onFileAutoDownloadSizeThresholdChange()">
</mat-form-field>
</section>
<h5>Upload</h5>
<section *ngIf="acceptedFilesTypeShow">
<mat-form-field floatPlaceholder="float">
@@ -555,7 +366,6 @@
<div *ngIf="!acceptedFilesTypeShow">
<adf-upload-button
#uploadButton
tooltip="Custom tooltip"
[disabled]="!enableUpload"
[rootFolderId]="documentList.currentFolderId"
[multipleFiles]="multipleFileUpload"
@@ -565,14 +375,12 @@
[versioning]="versioning"
[adf-check-allowable-operation]="'create'"
[adf-nodes]="enableUpload ? getCurrentDocumentListNode() : []"
(permissionEvent)="handlePermissionError($event)"
(beginUpload)="onBeginUpload($event)">
(permissionEvent)="handlePermissionError($event)">
</adf-upload-button>
</div>
<div *ngIf="acceptedFilesTypeShow">
<adf-upload-button
#uploadButton
tooltip="Custom tooltip"
[disabled]="!enableUpload"
[rootFolderId]="documentList.currentFolderId"
[acceptedFilesType]="acceptedFilesType"
@@ -2,16 +2,6 @@
margin: 10px !important;
}
@media screen and (max-width: 599px) {
.app-container {
margin: 0;
}
.app-show-versions-button.mat-icon-button {
display: none;
}
}
.app-error-message {
text-align: left;
}
@@ -37,18 +27,6 @@
.app-document-action-buttons {
flex: 0 0 auto;
}
@media screen and (max-width: 600px) {
adf-breadcrumb, .app-document-action-buttons {
display: none;
}
}
@media screen and (min-width: 600px) {
adf-dropdown-breadcrumb, .app-toolbar-divider-before-more-menu, .app-toolbar-more-menu-button {
display: none;
}
}
}
&:not(.app-document-list-container-in-upload-drag-area) {
@@ -64,13 +42,6 @@
position: absolute;
}
.app-site-container-style {
margin-top: 10px;
margin-bottom: 10px;
width: 100%;
min-width: 200px;
}
.app-content-service-settings {
padding: 16px;
}
@@ -28,49 +28,31 @@ import {
Output,
ViewEncapsulation
} from '@angular/core';
import { Location } from '@angular/common';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { NodeEntry, NodePaging, Pagination, Node, SearchEntry } from '@alfresco/js-api';
import {
MinimalNodeEntity,
NodePaging,
Pagination,
MinimalNodeEntryEntity,
SiteEntry,
SearchEntry
} from '@alfresco/js-api';
import {
AppConfigService,
AppConfigValues,
NotificationService,
DataRow,
UserPreferencesService,
PaginationComponent,
DisplayMode,
ShowHeaderMode,
InfinitePaginationComponent,
FormRenderingService
} from '@alfresco/adf-core';
import {
ContentService,
FolderCreatedEvent,
UploadService,
DocumentListComponent,
PermissionStyleModel,
UploadFilesEvent,
ConfirmDialogComponent,
LibraryDialogComponent,
ContentMetadataService,
FilterSearch,
DialogAspectListService,
FileUploadEvent,
NodesApiService,
SharedLinksApiService
NodesApiService
} from '@alfresco/adf-content-services';
import { ProcessFormRenderingService } from '@alfresco/adf-process-services';
import { VersionManagerDialogAdapterComponent } from './version-manager-dialog-adapter.component';
import { MetadataDialogAdapterComponent } from './metadata-dialog-adapter.component';
import { Subject } from 'rxjs';
import { PreviewService } from '../../services/preview.service';
import { takeUntil, debounceTime, scan } from 'rxjs/operators';
@@ -82,12 +64,9 @@ const DEFAULT_FOLDER_TO_SHOW = '-my-';
templateUrl: './files.component.html',
styleUrls: ['./files.component.scss'],
encapsulation: ViewEncapsulation.None,
providers: [
{provide: FormRenderingService, useClass: ProcessFormRenderingService}
]
providers: [{ provide: FormRenderingService, useClass: ProcessFormRenderingService }]
})
export class FilesComponent implements OnInit, OnChanges, OnDestroy {
protected onDestroy$ = new Subject<boolean>();
errorMessage: string = null;
@@ -98,14 +77,10 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
displayMode = DisplayMode.List;
includeFields = ['isFavorite', 'isLocked', 'aspectNames', 'definition'];
baseShareUrl = (
this.appConfig.get<string>(AppConfigValues.BASESHAREURL) ||
this.appConfig.get<string>(AppConfigValues.ECMHOST)) + '/preview/s/';
selectionModes = [
{value: 'none', viewValue: 'None'},
{value: 'single', viewValue: 'Single'},
{value: 'multiple', viewValue: 'Multiple'}
{ value: 'none', viewValue: 'None' },
{ value: 'single', viewValue: 'Single' },
{ value: 'multiple', viewValue: 'Multiple' }
];
// The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root-
@@ -118,12 +93,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Input()
sortingMode: 'server' | 'client' = 'server';
@Input()
showRecentFiles = true;
@Input()
showSitePicker = true;
@Input()
showSettingsPanel = true;
@@ -148,9 +117,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Input()
maxSizeShow = false;
@Input()
showVersionComments = true;
@Input()
versioning = false;
@@ -175,9 +141,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Input()
disableDragArea = false;
@Input()
showNameColumn = true;
@Input()
searchTerm = '';
@@ -214,64 +177,38 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Output()
deleteElementSuccess: EventEmitter<any> = new EventEmitter();
@ViewChild('documentList', {static: true})
@ViewChild('documentList', { static: true })
documentList: DocumentListComponent;
@ViewChild('standardPagination')
standardPagination: PaginationComponent;
@ViewChild(InfinitePaginationComponent, {static: true})
infinitePaginationComponent: InfinitePaginationComponent;
permissionsStyle: PermissionStyleModel[] = [];
infiniteScrolling: boolean;
stickyHeader: boolean;
warnOnMultipleUploads = false;
thumbnails = false;
enableMediumTimeFormat = false;
displayEmptyMetadata = false;
hyperlinkNavigation = false;
enableDownloadPrompt = this.appConfig.get<boolean>('viewer.enableDownloadPrompt', false);
enableDownloadPromptReminder: boolean = this.appConfig.get('viewer.enableDownloadPromptReminders', false);
downloadPromptDelay = this.appConfig.get('viewer.downloadPromptDelay', 50);
downloadPromptReminderDelay = this.appConfig.get('viewer.downloadPromptReminderDelay', 30);
enableFileAutoDownload: boolean = this.appConfig.get('viewer.enableFileAutoDownload', true);
fileAutoDownloadSizeThresholdInMB: number = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);
constructor(private notificationService: NotificationService,
private uploadService: UploadService,
private contentService: ContentService,
private dialog: MatDialog,
private location: Location,
private router: Router,
private appConfig: AppConfigService,
private preference: UserPreferencesService,
private preview: PreviewService,
@Optional() private route: ActivatedRoute,
private contentMetadataService: ContentMetadataService,
private sharedLinksApiService: SharedLinksApiService,
private dialogAspectListService: DialogAspectListService,
private nodeService: NodesApiService) {
}
constructor(
private notificationService: NotificationService,
private uploadService: UploadService,
private contentService: ContentService,
private dialog: MatDialog,
private router: Router,
private preference: UserPreferencesService,
private preview: PreviewService,
@Optional() private route: ActivatedRoute,
private contentMetadataService: ContentMetadataService,
private dialogAspectListService: DialogAspectListService,
private nodeService: NodesApiService
) {}
showFile(event) {
const entry = event.value.entry;
if (entry && entry.isFile) {
if (entry?.isFile) {
this.preview.showResource(entry.id);
}
}
toggleThumbnails() {
this.thumbnails = !this.thumbnails;
this.documentList.reload();
}
toggleAllowDropFiles() {
this.allowDropFiles = !this.allowDropFiles;
this.documentList.reload();
}
ngOnInit() {
if (!this.pagination) {
this.pagination = {
@@ -302,33 +239,17 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
this.onFileUploadEvent(value[0]);
});
this.uploadService.fileUploadDeleted
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFileUploadEvent(value));
this.uploadService.fileUploadDeleted.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFileUploadEvent(value));
this.contentService.folderCreated
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFolderCreated(value));
this.contentService.folderCreated.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderCreated(value));
this.contentService.folderCreate
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFolderAction(value));
this.contentService.folderCreate.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderAction(value));
this.contentService.folderEdit
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFolderAction(value));
this.contentService.folderEdit.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderAction(value));
this.contentMetadataService.error
.pipe(takeUntil(this.onDestroy$))
.subscribe((err: { message: string }) => {
this.notificationService.showError(err.message);
});
this.sharedLinksApiService.error
.pipe(takeUntil(this.onDestroy$))
.subscribe((err: { message: string }) => {
this.notificationService.showError(err.message);
});
this.contentMetadataService.error.pipe(takeUntil(this.onDestroy$)).subscribe((err: { message: string }) => {
this.notificationService.showError(err.message);
});
}
onFileUploadEvent(event: FileUploadEvent) {
@@ -343,7 +264,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
}
ngOnChanges(changes: SimpleChanges) {
if (changes.nodeResult && changes.nodeResult.currentValue) {
if (changes.nodeResult?.currentValue) {
this.nodeResult = changes.nodeResult.currentValue;
this.pagination = this.nodeResult.list.pagination;
}
@@ -361,9 +282,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
} as Pagination;
}
getCurrentDocumentListNode(): MinimalNodeEntity[] {
getCurrentDocumentListNode(): NodeEntry[] {
if (this.documentList.folderNode) {
return [{entry: this.documentList.folderNode}];
return [{ entry: this.documentList.folderNode }];
} else {
return [];
}
@@ -433,11 +354,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
this.openSnackMessageError(message);
}
onContentActionSuccess(message: string) {
this.openSnackMessageInfo(message);
this.documentList.reload();
}
onDeleteActionSuccess(message: string) {
this.uploadService.fileDeleted.next(message);
this.deleteElementSuccess.emit();
@@ -451,12 +367,12 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
onManageVersions(event: any) {
const contentEntry = event.value.entry;
const showComments = this.showVersionComments;
const showComments = true;
const allowDownload = this.allowVersionDownload;
if (this.contentService.hasAllowableOperations(contentEntry, 'update')) {
this.dialog.open(VersionManagerDialogAdapterComponent, {
data: {contentEntry, showComments, allowDownload},
data: { contentEntry, showComments, allowDownload },
panelClass: 'adf-version-manager-dialog',
width: '630px'
});
@@ -467,34 +383,12 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
onAspectUpdate(event: any) {
this.dialogAspectListService.openAspectListDialog(event.value.entry.id).subscribe((aspectList) => {
this.nodeService.updateNode(event.value.entry.id, {aspectNames: [...aspectList]}).subscribe(() => {
this.nodeService.updateNode(event.value.entry.id, { aspectNames: [...aspectList] }).subscribe(() => {
this.openSnackMessageInfo('Node Aspects Updated');
});
});
}
onManageMetadata(event: any) {
const contentEntry = event.value.entry;
const displayEmptyMetadata = this.displayEmptyMetadata;
if (this.contentService.hasAllowableOperations(contentEntry, 'update')) {
this.dialog.open(MetadataDialogAdapterComponent, {
data: {
contentEntry,
displayEmptyMetadata
},
panelClass: 'adf-metadata-manager-dialog',
width: '630px'
});
} else {
this.openSnackMessageError('OPERATION.ERROR.PERMISSION');
}
}
onSiteChange(site: SiteEntry) {
this.currentFolderId = site.entry.guid;
}
hasSelection(selection: Array<any>): boolean {
return selection && selection.length > 0;
}
@@ -509,25 +403,18 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
return this.contentService.hasAllowableOperations(selection[0].entry, 'update');
}
getNodeNameTooltip(row: DataRow): string {
if (row) {
return row.getValue('name');
}
return null;
}
canEditFolder(selection: Array<MinimalNodeEntity>): boolean {
canEditFolder(selection: Array<NodeEntry>): boolean {
if (selection && selection.length === 1) {
const entry = selection[0].entry;
if (entry && entry.isFolder) {
if (entry?.isFolder) {
return this.contentService.hasAllowableOperations(entry, 'update');
}
}
return false;
}
canCreateContent(parentNode: MinimalNodeEntryEntity): boolean {
canCreateContent(parentNode: Node): boolean {
if (parentNode) {
return this.contentService.hasAllowableOperations(parentNode, 'create');
}
@@ -559,47 +446,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
this.turnedPreviousPage.emit(event);
}
toggleGalleryView(): void {
this.displayMode = this.displayMode === DisplayMode.List ? DisplayMode.Gallery : DisplayMode.List;
const url = this
.router
.createUrlTree(['/files', this.currentFolderId, 'display', this.displayMode])
.toString();
this.location.go(url);
}
onInfiniteScrolling(): void {
this.infiniteScrolling = !this.infiniteScrolling;
this.infinitePaginationComponent.reset();
}
onBeginUpload(event: UploadFilesEvent) {
if (this.warnOnMultipleUploads && event) {
const files = event.files || [];
if (files.length > 1) {
event.pauseUpload();
const dialogRef = this.dialog.open(ConfirmDialogComponent, {
data: {
title: 'Upload',
message: `Are you sure you want to upload ${files.length} file(s)?`
},
minWidth: '250px'
});
dialogRef.afterClosed().subscribe((result) => {
if (result === true) {
event.resumeUpload();
}
});
}
}
}
onUploadNewVersion(ev) {
const contentEntry = ev.detail.data.node.entry;
const showComments = this.showVersionComments;
const showComments = true;
const allowDownload = this.allowVersionDownload;
const newFileVersion = ev.detail.files[0].file;
@@ -624,18 +473,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
return this.acceptedFilesTypeShow ? this.acceptedFilesType : '*';
}
createLibrary(): void {
const dialogInstance: any = this.dialog.open(LibraryDialogComponent, {
width: '400px'
});
dialogInstance.componentInstance.error.subscribe((message: string) => {
this.notificationService.openSnackMessage(message);
});
}
searchResultsHighlight(search: SearchEntry): string {
if (search && search.highlight) {
if (search?.highlight) {
return search.highlight.map((currentHighlight) => currentHighlight.snippets).join(', ');
}
return '';
@@ -653,7 +492,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
const objectFromMap = {};
activeFilters.forEach((filter: FilterSearch) => {
let paramValue = null;
if (filter.value && filter.value.from && filter.value.to) {
if (filter.value?.from && filter.value.to) {
paramValue = `${filter.value.from}||${filter.value.to}`;
} else {
paramValue = filter.value;
@@ -661,7 +500,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
objectFromMap[filter.key] = paramValue;
});
this.router.navigate([], {relativeTo: this.route, queryParams: objectFromMap});
this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });
}
clearFilterNavigation() {
@@ -673,34 +512,4 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
}
this.documentList.reload();
}
onEnableDownloadPrompt() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['enableDownloadPrompt'] = this.enableDownloadPrompt;
}
onDownloadPromptDelayChange() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['downloadPromptDelay'] = this.downloadPromptDelay;
}
onEnableDownloadPromptReminderChange() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['enableDownloadPromptReminder'] = this.enableDownloadPromptReminder;
}
onDownloadPromptReminderChange() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['downloadPromptReminderDelay'] = this.downloadPromptReminderDelay;
}
onEnableFileAutoDownloadChange() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['enableFileAutoDownload'] = this.enableFileAutoDownload;
}
onFileAutoDownloadSizeThresholdChange() {
const previewConfig = this.appConfig?.config['viewer'];
previewConfig['fileAutoDownloadSizeThresholdInMB'] = this.fileAutoDownloadSizeThresholdInMB;
}
}

Some files were not shown because too many files have changed in this diff Show More