Compare commits

..
Author SHA1 Message Date
Maurizio Vitale 819ed9ae6a Fix start process form (#4847) 2019-06-13 18:21:33 +01:00
davidcanonieto c44c2eae77 Fix Start Process Cloud Layout (#4846) 2019-06-13 16:41:37 +01:00
Maurizio Vitale 88c04ad7b8 Fix issue (#4844) 2019-06-13 13:50:27 +01:00
Eugenio Romano d43274f891 remove unused general dependency 2019-06-13 13:46:18 +01:00
Eugenio Romano 6d2f2030fe fix license script old licenses array 2019-06-13 11:24:40 +01:00
Geeta Mandakini Ayyalasomayajula ab3bb9002f [ADF-4288] -Sort Process Custom filters (#4826)
* Update data-table-component.page.ts

* new pr

* fix error - sortOrder.toLowerCase is not a function

* new pr

* new process definition added

* taking the development branch changes
2019-06-13 11:04:46 +01:00
Geeta Mandakini Ayyalasomayajula 626bb01bf7 [ADF-4488] - FormCloud - Should be able to render a dropdown with a RestService bind (#4834)
* new test file

* fix failures, passing string instead of boolean flag.

* ADF-4488 - FormCloud - Not able to render a dropdown with a RestService bind

* ADF-4488 - FormCloud - Not able to render a dropdown with a RestService bind

* added await for entry of undefined error

* added missing async for the tests.

* changed location

* changed locatioremoved unnecessary async

* moved the locators to task-form-cloud-component page

* removed the taskDetailsCloudPage as is unnecessary and getting the assertions from taskHeaderCloudPage.

* fiv circular dependency

* fix circular dependency
2019-06-12 20:21:03 +01:00
Eugenio Romano b04b717296 [ADF-4651] fix task form cloud (#4843)
* fix task form cloud

* fix form
2019-06-12 20:16:04 +01:00
Eugenio Romano ecb8410d1b fix pr deploy script 2019-06-12 18:01:13 +01:00
Denys Vuika f64cd9cffd [ADF-4640] share dialog fixes (#4830)
* unshare fixes and error notifications

* fix disabled toggles issue

* code fixes and separate interface

* remove 'isFavorite' include

* safety checks for properties

* update e2e

* refactor test after functionality change

* fix issue with the missing properties

* safety checks
2019-06-12 17:21:23 +01:00
Eugenio Romano 3a2cfb3626 fix date localization (#4841) 2019-06-12 16:16:00 +01:00
Maurizio Vitale 63f00e21cf [ADF-4468] FormCloud - Be able to display the value of a form variables (#4676)
* Fix the value passed as processDefinition
Be sure we fetch the form variables

* * Rename formId to formKey.

* * Reverted form Changes

* * Fixed failing unit test

* Fix the value passed as processDefinition
Be sure we fetch the form variables

* * Fixed failing unit test

* * Rename formId to formKey.

* * Reverted form Changes

* * Fixed failing unit test

* Fix form representation structure

* Refactor form models

* Change tslint config

* Fix lint

* Refactor form models

* Remove duplicated export

* improve variable names

* Update form mock
2019-06-12 12:50:09 +01:00
Eugenio Romano 051e8df091 fix refresh token sso logout 2019-06-12 12:36:05 +01:00
Eugenio Romano 492aa1e850 fix flaky test upload service 2019-06-12 10:15:33 +01:00
davidcanonieto f42e1a4ada [ADF-4041] Fix preselected user selection on People Cloud Component (#4648)
* [ADF-4041] Fix preselected user selection on People Cloud Component

* [ADF-4041] Fix unit test and add new one

* [ADF-4041] Fix validation of users

* Improve code

* Fix C309677 test
2019-06-11 22:47:06 +01:00
Eugenio Romano 9838d1e5d8 [ADF-4524] Checkbox widget is not displayed on a form on APS1 when having some visibility conditions on it (#4838)
* fix visibbility conditions form

* fix visibbility conditions form
2019-06-11 19:44:29 +01:00
Eugenio Romano 1c412ab15f new translation files (#4840) 2019-06-11 19:44:17 +01:00
Eugenio Romano 924c20d410 remove duplicated column and fix null in checkbox 2019-06-11 17:28:12 +01:00
Mario Romano fb082cdfdc [ACTIVITI-3234] add processInstanceId to save/submit event, change get folder… (#4833)
* [ACTIVITI-3234] add processId to save/submit event, change get folder rest call api

* Update form-cloud.component.md

* lint fix

* [ACTIVITI-3234] fix tests

* [ACTIVITI-3234] fix tests

* Fix rename processId in processInstanceId
2019-06-11 14:30:43 +01:00
Maurizio Vitale 7b191d37eb [ADF-4631] Start Process Cloud - Add the start form as part of a process (#4820)
* Add the start form as part of a process
Ability to pre-fill a form with values
Ability to send variables

* Fix unit test

* remove empty before each
2019-06-11 12:02:26 +01:00
davidcanonieto 7497822a46 [ADF-4342] Create localized pipe and centralize date format (#4813)
* [ADF-4342] Date Format defined in app config

* [ADF-4342] Create localized pipe and centralize date format

* Add unit test for new date pipe

* Add info internationalization docs

* Fix lining

* Fix linting

* Fix date pipe unit test

* [ADF-4342] Add supported language files

* Fix e2e tests
2019-06-11 09:35:35 +01:00
Eugenio Romano 990fa4625b fix ordering e2e failing test (#4825)
* ordering fix use common method in datatable

* ordering fix use common method in datatable

* fix sorting ps e2e

* fix ordering

* move search page in testing and fix sorting boolean flag

* fix import

* fix moment

* use common sort method in document list test

* use common sort method in document list test

* remove unnecesary sort control

* remove duplicate test

* remove e2e suspended removed status

* documentation
2019-06-11 07:34:16 +01:00
davidcanonieto c85df84a01 [ADF-4636][ADF-4137][ADF-4596] Datatable and Assignee bugs (#4832) 2019-06-11 00:35:02 +01:00
mcchrys be35267df3 [ADF-4634] Different statuses should load for Tasks than for Processes (#4819)
* Removed 'Suspended' option from Task Status dropdown
2019-06-11 00:13:52 +01:00
Eugenio Romano cb37254cae [ADF-4637] logout cross tabs event (#4823)
* logout cross tabs event

* fix remove listner

* fix remove listner

* Update auth-guard.service.ts
2019-06-10 19:37:28 +01:00
arditdomi 105a1a2b28 [ADF-4435] Added documentation about task-form buttons (#4831)
* [ADF-4435] Added documentation about task-form buttons

* [ADF-4435] Images of the documentation added don't have the correct dimensions

* [ADF-4435] Resize images

* [ADF-4435] Resize images
2019-06-10 19:31:07 +01:00
Geeta Mandakini Ayyalasomayajula 238fbf3d88 [ADF-4600] Should be able to filter groups based on composite roles (#4775)
* ADF-4600 Should be able to filter groups based on composite roles - automated

* minor fixes

* removed the template literals
2019-06-10 14:59:21 +01:00
loictrichaud 6c08231f33 fix adf-delete directive NodeResult (#4827) 2019-06-10 14:26:49 +01:00
arditdomi 117050decf [ADF-4421] Fix excluded tests (#4829) 2019-06-10 12:47:46 +01:00
arditdomi 4ea656e537 [ADF-4441] Save button should be disabled when form fields are invalid (#4817)
* [ADF-4441] Save button should be disabled when form inputs are invalid, Refactored disable custom outcome buttons unit tests

* [ADF-4441] add missing space

* [ADF-4441] Refactor failing unit tests

* [ADF-4441] Added documentation for disableSaveButton property
2019-06-10 12:01:58 +01:00
Eugenio Romano 3e1092d7bf Update process-custom-filters.e2e.ts 2019-06-10 10:27:50 +01:00
Eugenio Romano da5258edcd Revert "[ADF-4421] Fix excluded tests in task filters (#4721)" (#4824)
This reverts commit 51f0a2da47.
2019-06-07 18:48:41 +01:00
arditdomi 51f0a2da47 [ADF-4421] Fix excluded tests in task filters (#4721) 2019-06-07 16:27:48 +01:00
Eugenio Romano 8a2a71d60b fix build cli 2019-06-07 10:46:27 +01:00
Geeta Mandakini Ayyalasomayajula 7a3e2932bb [ADF-4462] - Should be possible to restore an old version of your file and the document list updated (#4708)
* ADF-4462 automated
2019-06-06 18:20:15 +01:00
Eugenio Romano 5e54cd4d43 Increase timeout and modify login async (#4795)
* increase timeout and modify login async

* run e2e if testing is changed

* improve cdk fix

* fix travis update projects

* disable ghostMode lite server

* lint fix

* fix timeout

* multiple try

* Update content-services-e2e.sh

* Update search-e2e.sh

* Update process-services-e2e.sh

* Update core-e2e.sh

* Update protractor.conf.ts

* fix unit

* remove async

* increqase notification time

* 3 parallel

* dix path issue in save

* small refactor protractor ts

* fix save

* create license check first script adf cli

* modify regex check

* refactor notification history component

* decrease notification

* fix notification message problem

* fix test

* update packages wit high risk

* revert cahnge login sso e2e

* fix dep

* fix documentation duplication and issue

* fix after review

* fix after review

* try 6 parallel test

* back to 3 parallel test no real time improve with 6
2019-06-06 16:47:50 +01:00
Denys Vuika 99f4b07878 [ADF-4496] Share dialog enhancements (#4705)
* raise snackbars on unshare errors

* remove time from datepicker

* update tests

* Update en.json

* code updates as per review

* update docs

* bind datetimepicker type attribute

* set datetimepicker type by configuration or default

* tests

* e2e test

* update docs

* e2e set sharedLinkDateTimePickerType config
2019-06-06 16:32:36 +01:00
cristinaj c3b1300d86 Add test for delete standalone task and cancelled process. (#4809) 2019-06-06 11:26:08 +01:00
Cilibiu Bogdan f18d534f9e update documentation (#4814) 2019-06-06 11:17:22 +01:00
Cilibiu Bogdan cb25979a00 mirror mat icon when direction is rtl (#4815) 2019-06-06 11:13:07 +01:00
Geeta Mandakini Ayyalasomayajula e65e32e0cf Enable tests and add a newly created user to run the tests. (#4796)
* enabled tests and added the new user to run the tests.

* lint fix

* adding a new user and add the user to hr group which will be used when deploying the apps.

* Test commit

* adding a new user and add the user to hr group which will be used when deploying the apps.

* linting fixes

* crc's moved the roles constants to identityService.

* crc's moved the roles constants to identityService.

* wrapped the createIdentityUser and assign Role calls into 1 method and used in the tests.

* wrapped the createIdentityUser and assign Role calls into 1 method and used in the tests.

* Added a method in identityService to pass the required roles to be added in a string array.

* linting fixes

* added the command line arguments to run the e2e tests -identity_admin_email and -identity_admin_password

* added the command line arguments to run the e2e tests -identity_admin_email and -identity_admin_password

* crc's, removed the step to add user to the hr group, as not needed in this test.

* renamed the E2E travis variable to end with identity.

* replaced the candidateuserapp with candidatebaseapp

* replaced candidateuserapp with candidatebaseapp

* replaced candidateuserapp with candidatebaseapp

* replaced candidateuserapp with candidatebaseapp

* timeout wait for the test to pass.

* crc's
2019-06-06 11:12:05 +01:00
Suzana Dirla 3d73e94b5d [ADF-4402] Move component related styles from demo-shell to ADF components (#4808)
* [ADF-4402] remove styling of non-existent items

* [ADF-4402] remove not needed style - bcs overwritten by style from core

* [ADF-4559] remove demo-shell only class from core styling

- use class name from core component for styling

* [ADF-4402] remove not used styling code

- .adf-app-layout-toolbar no longer exists, so no need keep its style

* [ADF-4402] move style from demo-shell to core

- same style was needed in ACA, so probably should be best in core ADF

* [ADF-4402] remove not used styling code

* [ADF-4402] move adf-toolbar-title style from demo-shell to core

* [ADF-4402] remove not used styling code

* [ADF-4402] use existing css class

* [ADF-4402] remove style already set from pagination component

* [ADF-4402] remove not used styling code

* [ADF-4402] viewer toolbar width
2019-06-05 16:01:38 +01:00
Maurizio Vitale 67485daece [ADF-4550] Form Cloud - Be able to upload a file on the content taken from the process-storage (#4807)
* * Process-storage

* * Used jsapiServcie

* Be able to upload a file on the content with the createNode api

* Fix lint

* Refactor

* * Removed needless method.

* Remove useless method

* Add properties type
2019-06-05 15:46:28 +01:00
Cilibiu Bogdan 0684098f60 [ADF-4626] Breadcrumb - directionality styling (#4810)
* direction styling

* remove text align
2019-06-05 15:01:05 +01:00
Cilibiu Bogdan 0cfc5bc1b7 [ADF-4625] Search Input does not respect RTL mode (#4806)
* configurable animation

* bind state attribute to value

* configure animation state based on direction

* update tests

* lint

* direction style
2019-06-04 09:15:44 +01:00
mcchrys 656eeaf017 [ADF-4034] Task list cloud - The Deleted task is changing the Status from "Deleted" in "Canceled" (#4803)
Removed DELETED status
Modified unit test to check recent changes
2019-06-04 09:08:39 +01:00
Geeta Mandakini Ayyalasomayajula 2b05f72a2f [ADF-4577] - Should display the processId when Process Definition has process name missing (#4802)
* updated the Test case in TestRail, basically if there is no process name in the process definition, then in the dropdown the processId is displayed and allows the user to start a process using that.

* updated the simpleapp to have a few more processes definitions which will enable to add new e2e tests.

* linting fixes
2019-06-03 17:19:54 +01:00
Cilibiu Bogdan 148f9830aa fix textOrientation value (#4805) 2019-06-03 17:15:37 +01:00
arditdomi 5392f3d229 [ADF-4527] Fix buttons duplication error in taskFormCloudComponent (#4804) 2019-06-03 17:01:05 +01:00
arditdomi 3d67d9dc75 [ADF-4552][ADF-4482] Social component refactoring, add ability to unRate, added e2e automation (#4749)
* [ADF-4552] Rating component refactoring, add ability to unRate

* [ADF-4552] RTL support added

* [ADF-4552] Improve behaviour and styling structure in RTL languages

* [ADF-4552] Improve behaviour and styling structure in RTL languages

* [ADF-4552] Added refresh rating when the node Id input changes

* [ADF-4552][ADF-4482] Refactor social component, add ability to unrate, add e2e automation

* [ADF-4552][ADF-4482] Added unsibscribe from Observables, added css variables, removed unused class id's

* [ADF-4552][ADF-4482] Improve structure and behaviour of e2e automation tests

* [ADF-4552][ADF-4482] Improve structure and behaviour of e2e automation tests

* [ADF-4552][ADF-4482] fix expected single space

* [ADF-4552][ADF-4482] fix lint check failure

* Fix circular dependency error
2019-06-03 14:27:13 +01:00
davidcanonieto b19646d201 [ADF-4232] Fix filePreviewPage methods to reach expectations (#4668)
* [ADF-4232] Fix filePreviewPage methods to reach expectations

* [ADF-4232] Implement new methods

* Fix word spelling

* [ADF-4232] Fix e2e test and rebase

* Rebase branch

* [ADF-4232] add test for reset zoom check

- remove un-reached expects from filePreviewPage

* [ADF-4232] better naming - review changes

* [ADF-4232] no sleep(s), more timeout

* [ADF-4232] some code clean up

* [ADF-4232] some code clean up

* [ADF-4232] refactoring - renaming

* [ADF-4232] refactoring

* [ADF-4232] refactoring move expects to test - code review changes

* [ADF-4232] remove unused methods

- these already exist on viewerPage.ts

* [ADF-4232] remove duplicated code

- use viewerPage instead of filePreviewPage

* [ADF-4232] reset to original timeout in afterAll
2019-06-03 14:24:53 +01:00
Marouan Bentaleb 7611268bd9 [ADF-4613] Fixing tag-component.e2e.ts (#4793)
* [ADF-4613] Enabling tests

* [ADF-4613] Make tag-component tests more stable
2019-05-31 15:40:06 +01:00
Deepak Paul 7eb9ffe688 [ADF-4546] Visibility conditions for Form variables don't work on Multiline Widget. (#4786)
* * Finding variable values by id & used date format

* * Tests to validate visibility by using id

* * [ADF-4529] Refactor conditions

* [ADF-4529] Fixed cloud form editor script error
2019-05-31 13:58:45 +01:00
Silviu Popa 30c42d17d0 [ADF-4530] StartTaskCloud - fix process definition list for empty names (#4790)
* [ADF-4530] - reset filtered process when value it's empty or invalid

* [ADF-4530] - lint

* [ADF-4530] - fix unit test

* [ADF-4530] StartTaskCloud - fix process definition list for empty names

* [ADF-4530] - lint

* [ADF-4530] - add unit test

* [ADF4530] StartProcess - revert changes

* [ADF-4530] - revert changes
2019-05-31 11:48:19 +01:00
Silviu Popa 6040f59391 [ADF-4461] FormCloud - fix date validations (#4776)
* [ADF-4443] FormCloud - fix date validations

* [ADF-4443] - add save validation

* [ADF-4443] - PR changes

* [ADF-4443] FormCloud - fix date validations

* fix unit tests

* [ADF-4443] - add save validation

* [ADF-4443] - PR changes

* Revert changes on save form

* Revert check form valid on save
2019-05-31 11:44:33 +01:00
Eugenio Romano 8b5038218e Update shareDialog.ts
use the right moment format for share dialog pointer
2019-05-31 10:40:17 +01:00
Deepak Paul f27846ec5b [ADF-4544] Cloud Task From - Refresh the buttons and form after an action is complete (#4726)
* [ADF-4544] Reloaded task on action

* [ADF-4544] Changed routing in demo component

* [ADF-4544] Added tests
2019-05-31 10:07:08 +01:00
393 changed files with 9307 additions and 5792 deletions
+3 -3
View File
@@ -15,7 +15,7 @@ branches:
only:
- master
- development
- /.*old-env.*/
- /.*old-env.*/
- /.*next-release.*/
- /.*beta.*/
- /.*greenkeeper.*/
@@ -59,9 +59,9 @@ jobs:
script:
./scripts/travis/deploy/deploy.sh
- stage: Update children projects dependency #Update children projects dependency
name: Update Generator
name: Update Related Project
if: tag =~ .*beta.*
script: ./scripts/travis/e2e/update-project.sh
script: ./scripts/update-project.sh
- stage: e2e Test
name: core
script: ./scripts/travis/e2e/core-e2e.sh
-1
View File
@@ -126,7 +126,6 @@
"uncheck",
"subfolders",
"ECMBPM",
"candidateuserapp",
"processwithvariables"
],
"dictionaries": [
+3 -2
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "سحابة الأشخاص/المجموعة",
"PEOPLE_CLOUD": "مكون سحابة الأشخاص",
"GROUPS_CLOUD": "مكون سحابة المجموعة",
"CONFIRM-DIALOG": "مربع حوار التأكيد"
"CONFIRM-DIALOG": "مربع حوار التأكيد",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
@@ -245,7 +246,7 @@
"RATING": "مكون التقييم"
},
"TAG": {
"LIST": "خدمات محتوى علامات القائمة",
"LIST": "Content Services علامات القائمة",
"INSERT": "إدراج معرف العقدة",
"NODE_LIST": "قائمة العلامات حسب معرف العقدة"
},
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Cloud osob/skupin",
"PEOPLE_CLOUD": "Součást cloudu osob",
"GROUPS_CLOUD": "Součást cloudu skupin",
"CONFIRM-DIALOG": "Dialogové okno s potvrzením"
"CONFIRM-DIALOG": "Dialogové okno s potvrzením",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Personen-/Gruppen-Cloud",
"PEOPLE_CLOUD": "Personen-Cloud-Komponente",
"GROUPS_CLOUD": "Gruppen-Cloud-Komponente",
"CONFIRM-DIALOG": "Bestätigungsdialog"
"CONFIRM-DIALOG": "Bestätigungsdialog",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+1
View File
@@ -78,6 +78,7 @@
"UPLOADER": "Uploader",
"WEBSCRIPT": "Webscript",
"TAG": "Tag",
"DATE": "Date",
"TRASHCAN": "Trashcan",
"SOCIAL": "Social",
"SETTINGS": "Settings",
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Personas/Grupos en la nube",
"PEOPLE_CLOUD": "Componente en la nube de personas",
"GROUPS_CLOUD": "Componente en la nube de grupos",
"CONFIRM-DIALOG": "Cuadro de diálogo de confirmación"
"CONFIRM-DIALOG": "Cuadro de diálogo de confirmación",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Ihmispilvi/Ryhmäpilvi",
"PEOPLE_CLOUD": "Ihmispilvi-komponentti",
"GROUPS_CLOUD": "Ryhmäpilvi-komponentti",
"CONFIRM-DIALOG": "Vahvistusvalintaikkuna"
"CONFIRM-DIALOG": "Vahvistusvalintaikkuna",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Cloud des personnes/groupes",
"PEOPLE_CLOUD": "Composant cloud des personnes",
"GROUPS_CLOUD": "Composant cloud des groupes",
"CONFIRM-DIALOG": "Boîte de dialogue de confirmation"
"CONFIRM-DIALOG": "Boîte de dialogue de confirmation",
"COMMUNITY": "Communauté"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Cloud persone/gruppi",
"PEOPLE_CLOUD": "Componente Cloud persone",
"GROUPS_CLOUD": "Componente Cloud gruppi",
"CONFIRM-DIALOG": "Finestra di conferma"
"CONFIRM-DIALOG": "Finestra di conferma",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "メンバー/グループのクラウド",
"PEOPLE_CLOUD": "メンバーのクラウドコンポーネント",
"GROUPS_CLOUD": "グループのクラウドコンポーネント",
"CONFIRM-DIALOG": "確認ダイアログ"
"CONFIRM-DIALOG": "確認ダイアログ",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Person-/gruppesky",
"PEOPLE_CLOUD": "Personsky-komponent",
"GROUPS_CLOUD": "Gruppesky-kompontent",
"CONFIRM-DIALOG": "Bekreftelsesdialog"
"CONFIRM-DIALOG": "Bekreftelsesdialog",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Personen-/groepencloud",
"PEOPLE_CLOUD": "Component Personencloud",
"GROUPS_CLOUD": "Component Groepencloud",
"CONFIRM-DIALOG": "Bevestigingsdialoogvenster"
"CONFIRM-DIALOG": "Bevestigingsdialoogvenster",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Chmura dla osób/grup",
"PEOPLE_CLOUD": "Składnik Chmura dla osób",
"GROUPS_CLOUD": "Składnik Chmura dla grup",
"CONFIRM-DIALOG": "Okno dialogowe potwierdzenia"
"CONFIRM-DIALOG": "Okno dialogowe potwierdzenia",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Nuvem de Pessoas/Grupo",
"PEOPLE_CLOUD": "Componente da Nuvem de Pessoas",
"GROUPS_CLOUD": "Componente da Nuvem de Grupos",
"CONFIRM-DIALOG": "Caixa de diálogo de confirmação"
"CONFIRM-DIALOG": "Caixa de diálogo de confirmação",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Облако пользователей/групп",
"PEOPLE_CLOUD": "Компонент облака «Пользователи»",
"GROUPS_CLOUD": "Компонент облака «Группы»",
"CONFIRM-DIALOG": "Диалоговое окно подтверждения"
"CONFIRM-DIALOG": "Диалоговое окно подтверждения",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "Personer/grupp moln",
"PEOPLE_CLOUD": "Personer moln-komponent",
"GROUPS_CLOUD": "Grupper moln-komponent",
"CONFIRM-DIALOG": "Bekräftelsedialog"
"CONFIRM-DIALOG": "Bekräftelsedialog",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+2 -1
View File
@@ -95,7 +95,8 @@
"PEOPLE_GROUPS_CLOUD": "人员/一组云",
"PEOPLE_CLOUD": "人员云组件",
"GROUPS_CLOUD": "组云组件",
"CONFIRM-DIALOG": "确认对话"
"CONFIRM-DIALOG": "确认对话",
"COMMUNITY": "Community"
},
"TRASHCAN": {
"ACTIONS": {
+10 -2
View File
@@ -79,7 +79,7 @@
"direction": "rtl"
},
{
"key": "cz",
"key": "cs",
"label": "Czech"
},
{
@@ -438,6 +438,11 @@
20
]
},
"dateValues":{
"defaultDateFormat": "medium",
"defaultDateTimeFormat": "DD/MM/YYYY HH:mm",
"defaultLocale": "en-US"
},
"files": {
"excluded": [
".DS_Store",
@@ -739,6 +744,9 @@
"name": "My Default Name",
"processDefinitionName": "My default process def name"
},
"adf-cloud-start-process": {
"name": "My Default Cloud Name"
},
"adf-process-list": {
"presets": {
"default": [
@@ -887,7 +895,7 @@
},
"alfresco-deployed-apps": [
{
"name": "candidateuserapp"
"name": "candidatebaseapp"
},
{
"name": "simpleapp"
+4
View File
@@ -12,6 +12,10 @@ router-outlet[name='overlay'] + * {
width: 100%;
}
[dir='rtl'] .mat-icon {
transform: scale(-1, 1);
}
@media (max-width: 425px) {
adf-content-node-selector {
.adf-content-node-selector-content-list {
+35
View File
@@ -91,6 +91,41 @@ import { CommunityProcessDetailsCloudDemoComponent } from './components/cloud/co
import { CommunityProcessesCloudDemoComponent } from './components/cloud/community/community-processes-cloud.component';
import { CommunityTaskDetailsCloudDemoComponent } from './components/cloud/community/community-task-details-cloud.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';
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,
+9
View File
@@ -126,6 +126,15 @@ export const appRoutes: Routes = [
}
]
},
{
path: 'date',
children: [
{
path: '',
loadChildren: 'app/components/date/date.module#AppDateModule'
}
]
},
{
path: 'card-view',
children: [
@@ -14,7 +14,7 @@
<div class="adf-header-delimiexpandedSidenavter"></div>
<adf-userinfo class="adf-app-layout-user-profile" [menuPositionX]="'before'" [menuPositionY]="'above'">
<adf-userinfo [menuPositionX]="'before'" [menuPositionY]="'above'">
</adf-userinfo>
<app-theme-picker></app-theme-picker>
@@ -25,6 +25,8 @@
<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>
@@ -1,9 +1,6 @@
@mixin adf-app-layout-theme($theme) {
$primary: map-get($theme, primary);
$background: map-get($theme, background);
$foreground: map-get($theme, foreground);
$minimumAppWidth: 320px;
$toolbarHeight: 64px;
@media screen and ($mat-xsmall) {
app-search-bar {
@@ -17,24 +14,12 @@
}
}
.adf-app-layout-toolbar {
z-index: 998;
position: relative;
overflow: visible !important;
}
.adf-app-layout {
display: flex;
flex: 1;
min-width: $minimumAppWidth;
height: 100%;
.adf-nav-container {
display: block;
min-width: $minimumAppWidth;
height: 100%;
}
.adf-sidenav-link--active {
color: mat-color($primary);
}
@@ -52,34 +37,9 @@
height: 40px;
}
&-user-profile {
margin-right: 10px;
}
&-menu-spacer {
flex: 1 1 auto;
}
&-toolbar {
height: $toolbarHeight;
line-height: $toolbarHeight;
overflow: hidden;
mat-toolbar-row {
height: $toolbarHeight;
align-items: stretch;
justify-content: space-between;
}
.adf-toolbar-link {
min-width: 0;
line-height: $toolbarHeight;
&.adf-active {
background-color: rgba(0, 0, 0, 0.12);
}
}
}
}
@media screen and ($mat-small) {
@@ -72,6 +72,7 @@ export class AppLayoutComponent implements OnInit {
{ href: '/webscript', icon: 'extension', title: 'APP_LAYOUT.WEBSCRIPT' },
{ href: '/tag', icon: 'local_offer', title: 'APP_LAYOUT.TAG' },
{ href: '/social', icon: 'thumb_up', title: 'APP_LAYOUT.SOCIAL' },
{ href: '/date', icon: 'calendar_today', title: 'APP_LAYOUT.DATE' },
{ href: '/settings-layout', icon: 'settings', title: 'APP_LAYOUT.SETTINGS' },
{ href: '/config-editor', icon: 'code', title: 'APP_LAYOUT.CONFIG-EDITOR' },
{ href: '/extendedSearch', icon: 'search', title: 'APP_LAYOUT.SEARCH' },
@@ -54,7 +54,7 @@ export class FormCloudDemoComponent implements OnInit, OnDestroy {
}
ngOnInit() {
this.formConfig = this.automationService.forms.getFormCloudDefinition();
this.formConfig = JSON.stringify(this.automationService.forms.getFormCloudDefinition());
this.parseForm();
}
@@ -8,13 +8,6 @@
margin: 10px 0;
}
.adf-full-content-toolbar {
.adf-toolbar-title {
display: flex;
width: 100%;
.adf-breadcrumb {
width: 0;
}
}
.adf-full-content-toolbar .adf-toolbar-title .adf-breadcrumb {
width: 0;
}
@@ -27,7 +27,7 @@
<input matInput (input)="setPeopleAppName($event)" data-automation-id="adf-people-app-input" />
</mat-form-field>
<mat-form-field class="adf-preselect-value-full">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.PRESELECTED_VALUE' | translate }}: {{ DEFAULT_PEOPLE_PLACEHOLDER }}</mat-label>
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.PRESELECTED_VALUE' | translate }} {{ DEFAULT_PEOPLE_PLACEHOLDER }}</mat-label>
<input matInput (input)="setPeoplePreselectValue($event)" data-automation-id="adf-people-preselect-input" />
</mat-form-field>
<mat-checkbox class="adf-preselect-value" (change)="onChangePeopleValidation($event)">{{
@@ -1,6 +1,8 @@
<adf-cloud-start-process
[appName]="appName"
[name]="processName"
[values]="formValues"
[variables]="variables"
(error)="openSnackMessage($event)"
(success)="onStartProcessSuccess()"
(cancel)="onCancelStartProcess()">
@@ -28,6 +28,8 @@ export class StartProcessCloudDemoComponent implements OnInit {
appName;
processName: string;
formValues: string;
variables: any;
constructor(private appConfig: AppConfigService,
private cloudLayoutService: CloudLayoutService,
@@ -41,7 +43,9 @@ export class StartProcessCloudDemoComponent implements OnInit {
this.appName = params.appName;
});
this.processName = this.appConfig.get<string>('adf-start-process.name');
this.processName = this.appConfig.get<string>('adf-cloud-start-process.name');
this.formValues = this.appConfig.get<string>('adf-cloud-start-process.values');
this.variables = this.appConfig.get<string>('adf-cloud-start-process.variables');
}
onStartProcessSuccess() {
@@ -7,9 +7,7 @@
[appName]="appName"
[taskId]="taskId"
(cancelClick)="goBack()"
(taskClaimed)="onClaimTask()"
(taskCompleted)="onTaskCompleted()"
(taskUnclaimed)="onUnclaimTask()"
(formSaved)="onFormSaved()">
</adf-cloud-task-form>
</div>
@@ -50,18 +50,6 @@ export class TaskDetailsCloudDemoComponent {
this.router.navigate([`/cloud/${this.appName}/`]);
}
onCompletedTask() {
this.goBack();
}
onUnclaimTask() {
this.goBack();
}
onClaimTask() {
this.goBack();
}
onTaskCompleted() {
this.goBack();
}
@@ -0,0 +1,32 @@
<div class="adf-date-pipes-container">
<h2>Date Pipes</h2>
<mat-form-field class="adf-date-field">
<input matInput
placeholder="Format"
[(ngModel)]="format">
</mat-form-field>
<mat-form-field class="adf-date-field">
<mat-select placeholder="Locale dropdown" [(ngModel)]="locale">
<mat-option *ngFor="let language of languages" [value]="language.key">
{{language.label}}
</mat-option>
</mat-select>
</mat-form-field>
<h3>AdfLocalizedDate Pipe - Default</h3>
<div>{{ today | adfLocalizedDate }} </div>
<br>
<h3>AdfLocalizedDate Pipe - Custom format</h3>
<div>{{ today | adfLocalizedDate : format }} </div>
<br>
<h3>AdfLocalizedDate Pipe - Custom format and locale</h3>
<div>{{ today | adfLocalizedDate : format : locale }} </div>
<br>
<h3>AdfTimeAgo Pipe</h3>
<div>{{ today | adfTimeAgo }} </div>
<br>
<h3>AdfTimeAgo Pipe - Custom locale</h3>
<div>{{ today | adfTimeAgo : locale}} </div>
</div>
@@ -0,0 +1,7 @@
.adf-date-pipes-container {
padding: 20px;
}
.adf-date-field {
margin: 20px;
}
@@ -0,0 +1,36 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* 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 { AppConfigService } from '@alfresco/adf-core';
@Component({
selector: 'app-date-page',
templateUrl: './date.component.html',
styleUrls: ['date.component.scss']
})
export class DateComponent {
today = new Date();
locale: string;
format: string;
languages: any[];
constructor(private appConfig: AppConfigService) {
this.languages = this.appConfig.get('languages', []);
}
}
@@ -0,0 +1,39 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* 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 { DateComponent } from './date.component';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@alfresco/adf-core';
const routes: Routes = [
{
path: '',
component: DateComponent
}
];
@NgModule({
imports: [
CommonModule,
CoreModule.forChild(),
RouterModule.forChild(routes)
],
declarations: [DateComponent]
})
export class AppDateModule {}
@@ -250,12 +250,13 @@
key="$thumbnail"
type="image"
[sortable]="false"
class="adf-image-table-cell "
class="adf-image-table-cell"
[class.adf-cell-thumbnail]="thumbnails">
</data-column>
<data-column
*ngIf="showNameColumn && hyperlinkNavigation"
key="name"
class="adf-ellipsis-cell"
title="{{'DOCUMENT_LIST.COLUMNS.DISPLAY_NAME' | translate}}"
[formatTooltip]="getNodeNameTooltip">
<ng-template let-context>
@@ -282,7 +283,7 @@
key="content.sizeInBytes"
title="{{'DOCUMENT_LIST.COLUMNS.SIZE' | translate}}"
type="fileSize"
class="adf-desktop-only">
class="adf-desktop-only adf-ellipsis-cell">
</data-column>
<data-column
*ngIf="searchTerm"
@@ -313,7 +314,7 @@
<data-column
title="{{'DOCUMENT_LIST.COLUMNS.IS_LOCKED' | translate}}"
key="id"
class="adf-desktop-only">
class="adf-desktop-only adf-ellipsis-cell">
<ng-template let-entry="$implicit">
<button mat-icon-button [adf-node-lock]="entry.row.node.entry" class="adf-lock-button">
<mat-icon *ngIf="entry.row.getValue('isLocked')">lock</mat-icon>
@@ -1,7 +1,4 @@
@mixin adf-file-component-theme($theme) {
$foreground: map-get($theme, foreground);
.adf-container {
margin: 10px !important;
}
@@ -24,26 +21,6 @@
color: #d50000;
}
.adf-not-overlay-viewer {
height: 900px;
}
adf-document-list ::ng-deep adf-datatable tr.adf-document-list__create {
background: green !important;
}
adf-document-list ::ng-deep adf-datatable tr.adf-document-list__disable {
background: red !important;
}
adf-document-list ::ng-deep .adf-datatable-selected > svg {
fill: #00bcd4 !important;
margin-top: -4px;
margin-left: -4px;
width: 32px;
height: 32px;
}
.adf-document-list-container {
min-height: 400px;
@@ -67,13 +44,6 @@
padding: 16px;
}
.adf-files-toolbar {
.adf-toolbar-title {
display: flex;
width: 100%;
}
}
.adf-manage-versions-sidebar {
width: 360px !important;
@@ -117,117 +87,4 @@
justify-content: center;
}
}
@media all {
.adf-isLocked-column {
max-width: 30px !important;
margin-right: 5px;
}
.adf-folder-image-column {
max-width: 28px!important;
}
}
@media (max-width: 768px) {
.adf-createdOn-column {
display: none !important;
}
}
@media (max-width: 500px) {
.adf-datatable-list {
.adf {
&-display-name-column {
max-width: 50% !important;
}
&-size-column {
display: none !important;
}
&-createdBy-column {
max-width: 45% !important;
}
&-nodeId-column {
display: none !important;
}
}
}
}
@media (max-width: 600px) {
.adf-datatable-list {
.adf {
&-display-name-column {
max-width: 35%;
}
&-size-column {
max-width: 8%;
}
&-createdBy-column {
max-width: 35%;
}
&-createdOn-column {
max-width: 15%;
}
&-nodeId-column {
max-width: 10%;
}
&-isLocked-column {
display: none!important;
}
&-standard-breadcrumb {
display: none !important;
}
}
}
}
@media (min-width: 601px) {
.adf-datatable-list {
.adf {
&-display-name-column {
max-width: 30%;
}
&-size-column {
max-width: 10%;
}
&-createdBy-column {
max-width: 30%;
}
&-createdOn-column {
max-width: 15%;
}
&-nodeId-column {
max-width: 12%;
}
&-alternate-breadcrumb {
display: none !important;
}
}
}
}
@media (min-width: 1400px) {
.adf-datatable-list {
.adf {
&-display-name-column {
max-width: 40%;
}
&-size-column {
max-width: 15%;
}
&-createdBy-column {
max-width: 20%;
}
&-createdOn-column {
max-width: 20%;
}
&-nodeId-column {
max-width: 20%;
}
}
}
}
}
@@ -28,7 +28,8 @@ import {
AlfrescoApiService, AuthenticationService, AppConfigService, AppConfigValues, ContentService, TranslationService,
FileUploadEvent, FolderCreatedEvent, LogService, NotificationService,
UploadService, DataColumn, DataRow, UserPreferencesService,
PaginationComponent, FormValues, DisplayMode, InfinitePaginationComponent, HighlightDirective
PaginationComponent, FormValues, DisplayMode, InfinitePaginationComponent, HighlightDirective,
SharedLinksApiService
} from '@alfresco/adf-core';
import {
@@ -217,7 +218,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Optional() private route: ActivatedRoute,
public authenticationService: AuthenticationService,
public alfrescoApiService: AlfrescoApiService,
private contentMetadataService: ContentMetadataService) {
private contentMetadataService: ContentMetadataService,
private sharedLinksApiService: SharedLinksApiService) {
}
showFile(event) {
@@ -275,6 +277,12 @@ export class FilesComponent implements OnInit, OnChanges, 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);
});
}
ngOnDestroy() {
@@ -62,8 +62,7 @@ export class FormComponent implements OnInit, OnDestroy {
}
ngOnInit() {
const formDefinitionJSON: any = this.automationService.forms.getFormDefinition();
this.formConfig = JSON.stringify(formDefinitionJSON);
this.formConfig = JSON.stringify(this.automationService.forms.getFormDefinition());
this.parseForm();
}
@@ -4,7 +4,6 @@
right: 10px;
top: 10px;
z-index: 1;
}
.adf-settings {
@@ -34,7 +34,7 @@
</mat-accordion>
</div>
<div class="adf-grid-item adf-tasks-list" fxFlex.gt-md="380px"
[ngClass.gt-md]="{'small-pagination': true}"
[ngClass.gt-md]="{'adf-small-pagination': true}"
*ngIf="taskFilter && !isStartTaskMode()">
<adf-tasklist
[appId]="taskFilter?.appId"
@@ -6,7 +6,6 @@
}
.adf-grid {
.adf-grid-item {
margin: 4px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
@@ -19,10 +18,6 @@
margin-bottom: 24px;
}
.adf-list-buttons-start {
width: 100%;
}
.adf-tasks-list.adf-small-pagination,
.adf-processes-list.adf-small-pagination {
.adf-pagination {
@@ -31,10 +26,6 @@
padding-bottom: 24px;
padding-top: 8px;
&__block {
border-right: none;
}
&__range-block.adf-pagination__block:first-child {
order: 1;
width: 60%;
@@ -74,26 +65,6 @@
.adf-datatable-list {
border: none;
}
.adf-datatable tr,
.adf-datatable td {
height: 36px;
font-size: 14px;
}
.adf-datatable td {
padding-top: 0;
padding-bottom: 0;
border-bottom: none;
}
.adf-datatable th {
padding-top: 0;
padding-bottom: 0;
height: 40px;
vertical-align: middle;
font-size: 14px;
}
}
mat-slide-toggle {
@@ -108,7 +79,6 @@
}
.adf-accordion-panel {
.mat-expansion-panel {
background: inherit;
}
@@ -1,5 +1,5 @@
<div id="attachment-task-list" *ngIf="taskId">
<div class="adf-no-form-container">
<div>
<adf-upload-drag-area
[rootFolderId]="taskId">
@@ -171,12 +171,12 @@
<data-column key="description" title="Description"></data-column>
<data-column key="created" title="Created">
<ng-template let-entry="$implicit">
<div>{{entry.row.obj.created | date:'MMM d, yyyy' }} </div>
<div>{{entry.row.obj.created | adfLocalizedDate: 'MMM d, yyyy' }} </div>
</ng-template>
</data-column>
<data-column key="dueDate" title="Due Date" type="date">
<ng-template let-entry="$implicit">
<div>{{entry.row.obj.dueDate | date:'MMM d, yyyy' }} </div>
<div>{{entry.row.obj.dueDate | adfLocalizedDate: 'MMM d, yyyy' }} </div>
</ng-template>
</data-column>
<data-column key="processInstanceId" title="Process Instance Id"></data-column>
@@ -76,7 +76,7 @@
key="archivedAt"
title="DOCUMENT_LIST.COLUMNS.DELETED_ON">
<ng-template let-value="value">
<span title="{{ value | date:'medium' }}"
<span title="{{ value | adfLocalizedDate: 'medium' }}"
class="adf-datatable-cell-value">{{ value | adfTimeAgo: currentLocale }}</span>
</ng-template>
</data-column>
BIN
View File
Binary file not shown.
+6 -4
View File
@@ -103,11 +103,13 @@ for more information about installing and using the source code.
| [Login Dialog Panel component](core/components/login-dialog-panel.component.md) | Shows and manages a login dialog. | [Source](../lib/core/login/components/login-dialog-panel.component.ts) |
| [Login Dialog component](core/components/login-dialog.component.md) | Allows a user to perform a login via a dialog. | [Source](../lib/core/login/components/login-dialog.component.ts) |
| [Login component](core/components/login.component.md) | Authenticates to Alfresco Content Services and Alfresco Process Services. | [Source](../lib/core/login/components/login.component.ts) |
| [Notification History component](core/components/notification-history.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | This component is in the current status just an experimental component. | |
| The main purpose of the Notification history component is list all the notification received in the current session. They will disappear from the list after the refresh. | [Source](../lib/core/notification-history/notification-history.component.ts) | |
| [Pagination Component](core/components/pagination.component.md) | Adds pagination to the component it is used with. | [Source](../lib/core/pagination/pagination.component.ts) |
| [Sidebar action menu component](core/components/sidebar-action-menu.component.md) | Displays a sidebar-action menu information panel. | [Source](../lib/core/layout/components/sidebar-action/sidebar-action-menu.component.ts) |
| [Sidenav Layout component](core/components/sidenav-layout.component.md) | Displays the standard three-region ADF application layout. | [Source](../lib/core/layout/components/sidenav-layout/sidenav-layout.component.ts) |
| [Sorting Picker Component](core/components/sorting-picker.component.md) | Selects from a set of predefined sorting definitions and directions. | [Source](../lib/core/sorting-picker/sorting-picker.component.ts) |
| [Start Form component](core/components/start-form.component.md) | Displays the Start Form for a process. | [Source](../lib/core/form/components/start-form.component.ts) |
| [Start Form component](core/components/start-form.component.md) | Displays the Start Form for a process. | [Source](../lib/process-services/form/start-form.component.ts) |
| [Text Mask directive](core/components/text-mask.component.md) | Implements text field input masks. | [Source](../lib/core/form/components/widgets/text/text-mask.component.ts) |
| [Toolbar Divider Component](core/components/toolbar-divider.component.md) | Divides groups of elements in a Toolbar with a visual separator. | [Source](../lib/core/toolbar/toolbar-divider.component.ts) |
| [Toolbar Title Component](core/components/toolbar-title.component.md) | Supplies custom HTML to be included in a Toolbar component title. | [Source](../lib/core/toolbar/toolbar-title.component.ts) |
@@ -158,7 +160,7 @@ for more information about installing and using the source code.
| [Format Space pipe](core/pipes/format-space.pipe.md) | Replaces all the white space in a string with a supplied character. | [Source](../lib/core/pipes/format-space.pipe.ts) |
| [Full name pipe](core/pipes/full-name.pipe.md) | Joins the first and last name properties from a UserProcessModel object into a single string. | [Source](../lib/core/pipes/full-name.pipe.ts) |
| [Mime Type Icon pipe](core/pipes/mime-type-icon.pipe.md) | Retrieves an icon to represent a MIME type. | [Source](../lib/core/pipes/mime-type-icon.pipe.ts) |
| [Multi Value pipe](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is ', ', however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) |
| [](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is ', ', however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) |
| [Node Name Tooltip pipe](core/pipes/node-name-tooltip.pipe.md) | Formats the tooltip for a Node. | [Source](../lib/core/pipes/node-name-tooltip.pipe.ts) |
| [Text Highlight pipe](core/pipes/text-highlight.pipe.md) | Adds highlighting to words or sections of text that match a search string. | [Source](../lib/core/pipes/text-highlight.pipe.ts) |
| [Time Ago pipe](core/pipes/time-ago.pipe.md) | Converts a recent past date into a number of days ago. | [Source](../lib/core/pipes/time-ago.pipe.ts) |
@@ -410,7 +412,7 @@ for more information about installing and using the source code.
| [Edit Task Filter Cloud component](process-services-cloud/components/edit-task-filter-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Edits task filter details. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts) |
| [Form cloud custom outcomes component](process-services-cloud/components/form-cloud-custom-outcome.component.md) | Supplies custom outcome buttons to be included in Form cloud component. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud-custom-outcomes.component.ts) |
| [Form cloud component](process-services-cloud/components/form-cloud.component.md) | Shows a form from Process Services. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud.component.ts) |
| [Form definition selector Cloud componet](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form-definition-selector/components/form-definition-selector-cloud.component.ts) |
| [Form definition selector Cloud componet](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form/components/form-definition-selector-cloud.component.ts) |
| [Group Cloud component](process-services-cloud/components/group-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches Groups. | [Source](../lib/process-services-cloud/src/lib/group/components/group-cloud.component.ts) |
| [People Cloud Component](process-services-cloud/components/people-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Allows one or more users to be selected (with auto-suggestion) based on the input parameters. | [Source](../lib/process-services-cloud/src/lib/task/start-task/components/people-cloud/people-cloud.component.ts) |
| [Process Filters Cloud Component](process-services-cloud/components/process-filters-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Lists all available process filters and allows to select a filter. | [Source](../lib/process-services-cloud/src/lib/process/process-filters/components/process-filters-cloud.component.ts) |
@@ -419,7 +421,7 @@ for more information about installing and using the source code.
| [Start Process Cloud Component](process-services-cloud/components/start-process-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Starts a process. | [Source](../lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts) |
| [Start Task Cloud Component](process-services-cloud/components/start-task-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Creates/starts a new task for the specified app. | [Source](../lib/process-services-cloud/src/lib/task/start-task/components/start-task-cloud.component.ts) |
| [Task Filters Cloud component](process-services-cloud/components/task-filters-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Shows all available filters. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts) |
| [Form cloud component](process-services-cloud/components/task-form-cloud.component.md) | Shows a form for a task. | [Source](../lib/process-services-cloud/src/lib/form/components/task-form-cloud.component.ts) |
| [Form cloud component](process-services-cloud/components/task-form-cloud.component.md) | Shows a form for a task. | [Source](../lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts) |
| [Task Header Cloud Component](process-services-cloud/components/task-header-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Shows all the information related to a task. | [Source](../lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts) |
| [Task List Cloud component](process-services-cloud/components/task-list-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Renders a list containing all the tasks matched by the parameters specified. | [Source](../lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts) |
+1 -1
View File
@@ -20,7 +20,7 @@ You can find further information about released versions of ADF in the
[version index](versionIndex.md) and the [release notes](release-notes/README.md).
| ADF version | Content Services | Process Services |
| -- | -- | -- |
| --- | --- | --- |
| [3.2.0](versionIndex.md#v320) - [3.2.1](versionIndex.md#v321) | **Full test:** v6.1.0 <br/> **Smoke test:** v5.2.4 | **Full test:** v7.1.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
| [3.1.0](versionIndex.md#v310) | **Full test:** v6.1.0 RC7 <br/> **Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
| [3.0.0](versionIndex.md#v300) | **Full test:** v6.1.0 RC7 <br/> **Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0 <br/>**Smoke test:** v1.8.1 |
@@ -7,10 +7,18 @@ Last reviewed: 2019-01-14
# [Rating component](../../../lib/content-services/social/rating.component.ts "Defined in rating.component.ts")
Allows a user to add ratings to an item.
Allows a user to add and remove rating to an item.
It displays the average rating and the number of ratings. If the user has not rated the item the average rating stars color is grey.
![Rating component screenshot](../../docassets/images/social3.png)
If the user has rated the item the average rating stars color is yellow.
![Rating component screenshot](../../docassets/images/social2.png)
In order to remove the rating the user should click on the same star that he rated.
If the average is decimal number it will be rounded.
## Basic Usage
```html
@@ -31,7 +39,7 @@ Allows a user to add ratings to an item.
| Name | Type | Description |
| ---- | ---- | ----------- |
| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<Object>` | Emitted when the "vote" gets changed. |
| changeVote | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<Object>` | Average rating is emitted when the "vote" gets changed. |
## See also
@@ -67,3 +67,17 @@ and passes it to a [Viewer component](../../core/components/viewer.component.md)
[allowGoBack]="false">
</adf-viewer>
```
## Date and time widget
Date and time widget for setting the expiration date can be configured to show only the date picker or both date and time piker.
By default, the widget will show both date and time picker if `sharedLinkDateTimePickerType` is not present in the app.config.json.
Possible values are `'date'` or `'datetime'`
```json
{
...
"sharedLinkDateTimePickerType": 'date'
...
}
```
@@ -11,7 +11,7 @@ Defines the Image Resolver function used by the [Document List Component](../com
## Definitions
- `type` **[ImageResolver](../../../lib/content-services/document-list/data/image-resolver.model.ts)** = (row: [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts), column: [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts)) => `string`
- `type` **[`ImageResolver`](../../../lib/content-services/document-list/data/image-resolver.model.ts)** = (row: [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts), column: [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts)) => `string`
- _row:_ [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts) - Data that defines the row
- _column:_ [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts) - Data that defines the column
- **Returns** File path for the image
@@ -49,7 +49,7 @@ this.permissionsStyle.push(new PermissionStyleModel('document-list__create', All
```
```css
adf-document-list ::ng-deep adf-datatable tr.document-list__create {
adf-document-list adf-datatable .document-list__create {
background: green !important;
}
```
@@ -68,7 +68,7 @@ this.permissionsStyle.push(new PermissionStyleModel('document-list__disable', Al
```
```css
adf-document-list ::ng-deep adf-datatable tr.document-list__disable {
adf-document-list adf-datatable .document-list__disable {
background: red !important;
}
```
@@ -11,7 +11,7 @@ Defines the Row Filter function used by the [Document List Component](../compone
## Definitions
- `type` **[RowFilter](../../../lib/content-services/document-list/data/row-filter.model.ts)** = (value: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts), index: `number`, array: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]`) => any
- `type` **[`RowFilter`](../../../lib/content-services/document-list/data/row-filter.model.ts)** = (value: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts), index: `number`, array: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]`) => any
- _value:_ [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts) - Data that defines the row
- _index:_ `number` - Index of the row within the list
- _array:_ [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]` - The full set of rows for the list
@@ -48,7 +48,7 @@ Implements node operations used by the [Document List component](../components/d
- _nodeId:_ `string` -
- _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) -
- _includeFields:_ `string[]` -
- _where:_ `string` - (Optional)
- _where:_ `string` - (Optional)
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`DocumentLoaderNode`](../../../lib/content-services/document-list/models/document-folder.model.ts)`>` -
- **moveNode**(nodeId: `string`, targetParentId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodeEntry`](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/NodeEntry.md)`>`<br/>
@@ -0,0 +1,28 @@
---
Title: Notification History component
Added: v3.3.0
Status: Experimental
Last reviewed: 2019-06-05
---
# [Notification History component](../../../lib/core/notification-history/notification-history.component.ts "Defined in notification-history.component.ts")
This component is in the current status just an experimental component.
The main purpose of the [Notification history component](../../core/components/notification-history.component.md) is list all the notification received in the current session. They will disappear from the list after the refresh.
![Notification history component](../../docassets/notification-history-component.png)
## Basic Usage
```html
<adf-notification-history [menuPositionX]="'before'" [menuPositionY]="'above'"></adf-notification-history>
```
## Class members
### Properties
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| menuPositionX | `string` | "after" | Custom choice for opening the menu at the bottom. Can be `before` or `after`. |
| menuPositionY | `string` | "below" | Custom choice for opening the menu at the bottom. Can be `above` or `below`. |
+28
View File
@@ -0,0 +1,28 @@
# [Localized Date pipe](../../../lib/core/pipes/localized-date.pipe.ts "Defined in localized-date.pipe.ts")
Converts a date to an given format and locale.
## Basic Usage
<!-- {% raw %} -->
```HTML
<div>
Created date: {{ date | adfLocalizedDate }}
</div>
```
<!-- {% endraw %} -->
### Properties
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| format | string | 'medium' | A format to apply to the date value. [Date Pipe Formats.](https://angular.io/api/common/DatePipe#custom-format-options) |
| locale | string | 'en-US' | A locale id for the locale format rules to use. |
## Details
The pipe takes a date and formats it and localizes it so the date is displayed in the proper format for the region. It uses the [Angular Date Pipe](https://angular.io/api/common/DatePipe#custom-format-options) so all the pre-defined and custom formats can be used.
When localizing a date, you will need to add the specific locale file for your region in order to use it. Read more about internationalization [here](https://angular.io/guide/i18n#i18n-pipes).
+6
View File
@@ -21,8 +21,14 @@ Converts a recent past date into a number of days ago.
<!-- {% endraw %} -->
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| locale | string | 'en-US' | A locale id for the locale format rules to use. |
## Details
The pipe finds the difference between the input date and the current date. If it
is less than seven days then then the date will be formatted as "X days ago".
Otherwise, the usual full date format is used.
By default, it localizes the date to the language that is currently in use by the app. Furthermore, a different locale id can be passed to the pipe to overwrite the locale id to set a custom one.
+15 -16
View File
@@ -28,22 +28,21 @@ Shows a notification message with optional feedback.
- _action:_ `string` - Caption for the response button
- _config:_ `number|MatSnackBarConfig` - (Optional) Time before notification disappears after being shown or MatSnackBarConfig object
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` - Information/control object for the SnackBar
- **showError**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase error message
- _message:_ `string` - The message (or resource key) to show.
- _action:_ `string` - Caption for the response button
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` - Information/control object for the SnackBar
- **showInfo**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase info message
- _message:_ `string` - The message (or resource key) to show.
- _action:_ `string` - Caption for the response button
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` - Information/control object for the SnackBar
- **showWarning**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase warning message
- _message:_ `string` - The message (or resource key) to show.
- _action:_ `string` - Caption for the response button
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` - Information/control object for the SnackBar
- **showError**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase error message
- _message:_ `string` - Text message or translation key for the message.
- _action:_ `string` - (Optional) Action name
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` -
- **showInfo**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase info message
- _message:_ `string` - Text message or translation key for the message.
- _action:_ `string` - (Optional) Action name
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` -
- **showWarning**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>`<br/>
Rase warning message
- _message:_ `string` - Text message or translation key for the message.
- _action:_ `string` - (Optional) Action name
- **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`<any>` -
## Details
@@ -27,6 +27,12 @@ Finds shared links to Content Services items.
- _options:_ `any` - Options supported by JS-API
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/docs/NodePaging.md)`>` - List of shared links
### Events
| Name | Type | Description |
| --- | --- | --- |
| error | `Subject<{ statusCode: number, message: string }>` | Gets emitted upon errors. |
## Details
Content Services allows users to generate URLs that can be shared with
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

@@ -16,7 +16,7 @@ Manages and runs basic extension functionality.
- **evaluateRule**(ruleId: `string`, context?: [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts)): `boolean`<br/>
Evaluates a rule.
- _ruleId:_ `string` - ID of the rule to evaluate
- _context:_ [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts) - (Optional) (optional) Custom rule execution context.
- _context:_ [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts) - (Optional) Custom rule execution context.
- **Returns** `boolean` - True if the rule passed, false otherwise
- **getActionById**(id: `string`): [`ActionRef`](../../../lib/extensions/src/lib/config/action.extensions.ts)<br/>
Retrieves an action using its ID value.
+1 -1
View File
@@ -9,7 +9,7 @@ This page lists all third party libraries that ADF depends on.
## Libraries
| Name | Version | License |
| -- | -- | -- |
| --- | --- | --- |
| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
+1 -1
View File
@@ -10,7 +10,7 @@ with links to their licenses.
## Libraries
| Name | Version | License |
| -- | -- | -- |
| --- | --- | --- |
| [@angular/compiler](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [@angular/core](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) |
| [alfresco-components](https://github.com/Alfresco/alfresco-ng2-components) | 2.7.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
+1 -1
View File
@@ -9,7 +9,7 @@ This page lists all third party libraries that ADF v3.1.0 depends on.
## Libraries
| Name | Version | License |
| -- | -- | -- |
| --- | --- | --- |
| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
+1 -1
View File
@@ -9,7 +9,7 @@ This page lists all third party libraries that ADF v3.2.0 depends on.
## Libraries
| Name | Version | License |
| -- | -- | -- |
| --- | --- | --- |
| [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) |
@@ -29,7 +29,8 @@ Shows a [`form`](../../../lib/process-services-cloud/src/lib/form/models/form-cl
```html
<adf-cloud-form
[appName]="appName"
[taskId]="taskId">
[taskId]="taskId"
[processInstanceId]="processInstanceId">
</adf-cloud-form>
```
@@ -78,6 +79,7 @@ The template defined inside `empty-form` will be shown when no form definition i
| appName | `string` | | App id to fetch corresponding form and values. |
| data | [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` | | Custom form values map to be used with the rendered form. |
| disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but it will be disabled. |
| disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | \[] | Contains a list of form field validator instances. |
| form | [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. |
@@ -91,6 +93,7 @@ The template defined inside `empty-form` will be shown when no form definition i
| showTitle | `boolean` | true | Toggle rendering of the form title. |
| showValidationIcon | `boolean` | true | Toggle rendering of the validation icon next to the form title. |
| taskId | `string` | | Task id to fetch corresponding form and values. |
| processInstanceId | `string `| | Process instance id to fetch corresponding form and values.|
### Events
@@ -115,6 +118,7 @@ All `formXXX` events receive a [`FormCloudModel`](../../../lib/process-services-
<adf-cloud-form
[appName]="appName"
[taskId]="selectedTask?.id"
[processInstanceId]="selectedTask?.processInstanceId"
(formSaved)="onFormSaved($event)">
</adf-cloud-form>
```
@@ -131,12 +135,13 @@ onFormSaved(form: FormCloudModel) {
There are various ways to display a form. The common scenarios are detailed below.
#### Displaying a form instance by task id
#### Displaying a form instance by task id and processInstanceId
```html
<adf-cloud-form
[appName]="appName"
[taskId]="selectedTask?.id">
[taskId]="selectedTask?.id"
[processInstanceId]="selectedTask?.processInstanceId">
</adf-cloud-form>
```
@@ -171,6 +176,7 @@ of the form validation before it is submitted.
<adf-cloud-form
[appName]="appName"
[taskId]="selectedTask?.id"
[processInstanceId]="selectedTask?.processInstanceId"
executeOutcome="validateForm($event)">
</adf-cloud-form>
```
@@ -29,8 +29,8 @@ Searches Groups.
| appName | `string` | | Name of the application. If specified this shows the users who have access to the app. |
| mode | `string` | | User selection mode (single/multiple). |
| preSelectGroups | [`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. |
| searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group. |
| roles | `string[]` | \[] | Role names of the groups to be listed. |
| searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group |
| title | `string` | | Title of the field |
### Events
@@ -28,9 +28,9 @@ Allows one or more users to be selected (with auto-suggestion) based on the inpu
| mode | `string` | | User selection mode (single/multiple). |
| preSelectUsers | [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]` | | Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username |
| roles | `string[]` | | Role names of the users to be listed. |
| searchUserCtrl | `FormControl` | new FormControl() | FormControl to search the user |
| title | `string` | | Placeholder translation key |
| searchUserCtrl | `FormControl` | new FormControl() | FormControl to search the users. |
| validate | `Boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the [identity service](../../../lib/testing/src/lib/core/actions/identity/identity.service.ts) to verify the validity of the information passed as input. Otherwise, no check will be done. |
| validate | `Boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the identity service to verify the validity of the information passed as input. Otherwise, no check will be done. |
### Events
@@ -30,7 +30,8 @@ Starts a process.
| name | `string` | "" | Name of the process. |
| processDefinitionName | `string` | | Name of the process definition. |
| showSelectProcessDropdown | `boolean` | true | Show/hide the process dropdown list. |
| variables | `Map<string, object>[]` | | Variables to attach to the payload. |
| variables | `Object` | | Variables to attach to the payload. |
| values | `TaskVariableCloud` | | Values to attach to a form. |
### Events
@@ -55,3 +56,22 @@ Starts a process.
You can use the `processDefinitionName` property to select which process will be selected by default on the dropdown (when there is more than one process to choose from). Use the `name` property to set the name shown on the dropdown item.
If the app contains only one process definition, this process definition will be selected by default
### Starting a process with variables
```html
<adf-cloud-start-process
[appId]="YOUR_APP_ID"
[variables]="{ 'my-key1' : 'myvalue', 'my-key2' : 'myvalue2'}">
</adf-cloud-start-process>
```
### Starting a process with values passed to the form
```html
<adf-cloud-start-process
[appId]="YOUR_APP_ID"
[values]="[{'name': 'firstName', 'value': 'MyName'}, {'name': 'lastName', 'value': 'MyLastName'}]">
</adf-cloud-start-process>
```
@@ -5,17 +5,20 @@ Status: Active
Last reviewed: 2019-04-17
---
# [Task form cloud component](../../../lib/process-services-cloud/src/lib/form/components/task-form-cloud.component.ts "Defined in task-form-cloud.component.ts")
# [Task form cloud component](../../../lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts "Defined in task-form-cloud.component.ts")
Shows a [`form`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) for a task.
## Contents
Shows Cancel, Save, Complete, Claim and Release buttons. Cancel, Save and Complete buttons are always present. Claim and Release buttons are present according to user's permissions and task's condition (Claimed, Completed etc).
- [Basic Usage](#basic-usage)
- [Class members](#class-members)
- [Properties](#properties)
- [Events](#events)
- [See also](#see-also)
![Task form cloud component screenshot](../../docassets/images/adf-task-form-cloud-1.png)
The following example shows the buttons that are visible when the task's condition is released and the user has the admin permissions
![Task form cloud component screenshot](../../docassets/images/adf-task-form-cloud-3.png)
Save and Complete buttons get disabled when at least one of the form's inputs are invalid.
![Task form cloud component screenshot](../../docassets/images/adf-task-form-cloud-2.png)
## Basic Usage
@@ -33,27 +36,27 @@ Shows a [`form`](../../../lib/process-services-cloud/src/lib/form/models/form-cl
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| appName | `string` | | App id to fetch corresponding form and values. |
| taskId | `string` | | Task id to fetch corresponding form and values. |
| readOnly | `boolean` | false | Toggle readonly state of the task. |
| showCancelButton | `boolean` | true | Toggle rendering of the `Cancel` button. |
| showCompleteButton | `boolean` | true | Toggle rendering of the `Complete` button. |
| showRefreshButton | `boolean` | false | Toggle rendering of the `Refresh` button. |
| showValidationIcon | `boolean` | true | Toggle rendering of the `Validation` icon. |
| showCancelButton | `boolean` | true | Toggle rendering of the `Cancel` outcome button. |
| showCompleteButton | `boolean` | true | Toggle rendering of the `Complete` outcome button. |
| readOnly | `boolean` | false | Toggle readOnly state of the task. |
| taskId | `string` | | Task id to fetch corresponding form and values. |
### Events
| Name | Type | Description |
| ---- | ---- | ----------- |
| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is saved. |
| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. |
| taskCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is completed. |
| taskClaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is claimed. |
| taskUnclaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is unclaimed. |
| cancelClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the cancel button is clicked. |
| cancelClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<string>` | Emitted when the cancel button is clicked. |
| error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<any>` | Emitted when any error occurs. |
| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. |
| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is saved. |
| taskClaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<string>` | Emitted when the task is claimed. |
| taskCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<string>` | Emitted when the task is completed. |
| taskUnclaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<string>` | Emitted when the task is unclaimed. |
## See also
- [Form component](./form-cloud.component.md)
- [Form field model](../../core/models/form-field.model.md)
- [Form cloud service](../services/form-cloud.service.md)
- [Form component](./form-cloud.component.md)
- [Form field model](../../core/models/form-field.model.md)
- [Form cloud service](../services/form-cloud.service.md)
@@ -16,9 +16,12 @@ Gets details of deployed apps for the current user.
- **getDeployedApplicationsByStatus**(status: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>`<br/>
Gets a list of deployed apps for this user by status.
- _status:_ `string` - Required status value
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>` - The list of deployed apps.
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>` - The list of deployed apps
- **hasDeployedApps**(): `boolean`<br/>
You can override the behaviour by defining the required applications in app.config.json against the property `alfresco-deployed-apps`. The service will fetch the deployed apps only when there are no apps defined in the app.config.json
- **Returns** `boolean` -
- **loadApps**()<br/>
## Details
@@ -45,6 +45,10 @@ class MyComponent {
- _appName:_ `string` -
- **Returns** `string` -
- **getDropDownJsonData**(url: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FormFieldOption`](../../../lib/core/form/components/widgets/core/form-field-option.ts)`[]>`<br/>
Parses JSON data to create a corresponding form.
- _url:_ `string` - String data to make the request
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FormFieldOption`](../../../lib/core/form/components/widgets/core/form-field-option.ts)`[]>` - Array of FormFieldOption object
- **getForm**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<any>`<br/>
Gets a form definition.
- _appName:_ `string` - Name of the app
@@ -74,7 +78,7 @@ class MyComponent {
- **parseForm**(json: `any`, data?: [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]`, readOnly: `boolean` = `false`): [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)<br/>
Parses JSON data to create a corresponding form.
- _json:_ `any` - JSON data to create the form
- _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) (Optional) Values for the form's fields
- _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) Values for the form's fields
- _readOnly:_ `boolean` - Toggles whether or not the form should be read-only
- **Returns** [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) created from the JSON specification
- **saveTaskForm**(appName: `string`, taskId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
@@ -46,6 +46,10 @@ Manages task cloud.
- _appName:_ `string` - Name of the app
- _taskId:_ `string` - ID of the task whose details you want
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Task details
- **isTaskEditable**(taskDetails: [`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)): `boolean`<br/>
Validate if a task is editable.
- _taskDetails:_ [`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts) - task details object
- **Returns** `boolean` - Boolean value if the task is editable
- **unclaimTask**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`<br/>
Un-claims a task.
- _appName:_ `string` - Name of the app
@@ -56,6 +56,7 @@ Any content in the body of `<adf-form>` will be shown when no form definition is
| ---- | ---- | ------------- | ----------- |
| data | [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts) | | Custom form values map to be used with the rendered form. |
| disableCompleteButton | `boolean` | false | If true then the `Complete` outcome button is shown but it will be disabled. |
| disableSaveButton | `boolean` | false | If true then the `Save` outcome button is shown but it will be disabled. |
| disableStartProcessButton | `boolean` | false | If true then the `Start Process` outcome button is shown but it will be disabled. |
| fieldValidators | [`FormFieldValidator`](../../../lib/core/form/components/widgets/core/form-field-validator.ts)`[]` | \[] | Contains a list of form field validator instances. |
| form | [`FormModel`](../../../lib/core/form/components/widgets/core/form.model.ts) | | Underlying [form model](../../../lib/core/form/components/widgets/core/form.model.ts) instance. |
+3 -3
View File
@@ -246,8 +246,8 @@ Two new methods has been added into the alfresco-js-api to support retrieve the
| API | Name | HTTP method | URL | Description |
| --- | ---- | ----------- | --- | ----------- |
| _ActivitiPublicRestApi.[TaskApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditJson**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditJson) | **GET** | /api/enterprise/tasks/{taskId}/audit | Retrieve audit infromation in json format |
| _ActivitiPublicRestApi.[TaskApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditPdf**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditPdf) | **GET** | /app/rest/tasks/{taskId}/audit | Retrieve the task audit infromation in pdf format |
| _ActivitiPublicRestApi.[`TaskApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditJson**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditJson) | **GET** | /api/enterprise/tasks/{taskId}/audit | Retrieve audit infromation in json format |
| _ActivitiPublicRestApi.[`TaskApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditPdf**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditPdf) | **GET** | /app/rest/tasks/{taskId}/audit | Retrieve the task audit infromation in pdf format |
For further details about those endepoints please refer to the [official documentation](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-activiti-rest-api/docs/TaskApi.md)
@@ -343,7 +343,7 @@ Release Notes - Apps Development Framework - Version 1.7.
- \[[ADF-819](https://issues.alfresco.com/jira/browse/ADF-819)] - Snackbar does not appear when uploading files via DnD
- \[[ADF-923](https://issues.alfresco.com/jira/browse/ADF-923)] - Involved user should not be able to see 'Complete' button as active in a task.
- \[[ADF-939](https://issues.alfresco.com/jira/browse/ADF-939)] - [Login] Sign in button does not stay at the bottom
- \[[ADF-943](https://issues.alfresco.com/jira/browse/ADF-943)] - APS [ContentApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is not present on index.d.ts and [SitesApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/sites.api.ts) is not complete
- \[[ADF-943](https://issues.alfresco.com/jira/browse/ADF-943)] - APS [`ContentApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is not present on index.d.ts and [`SitesApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/sites.api.ts) is not complete
- \[[ADF-945](https://issues.alfresco.com/jira/browse/ADF-945)] - 'Undefined' is displayed in 'attach file' widget after restore.
- \[[ADF-950](https://issues.alfresco.com/jira/browse/ADF-950)] - when the [`Form`](../../lib/process-services/task-list/models/form.model.ts) in readonly mode you can edit the date
- \[[ADF-957](https://issues.alfresco.com/jira/browse/ADF-957)] - Duplicate Rest calls are made for fields where Rest end points are given
+4 -4
View File
@@ -701,7 +701,7 @@ Release Notes - Apps Development Framework - Version 2.0.
- \[[ADF-1710](https://issues.alfresco.com/jira/browse/ADF-1710)] - An error is logged into the console when using data widget
- \[[ADF-1711](https://issues.alfresco.com/jira/browse/ADF-1711)] - The adf-task-attachment-list component displays drag-and-drop area that is not working
- \[[ADF-1712](https://issues.alfresco.com/jira/browse/ADF-1712)] - The adf-task-header component displays a Requeue button for none pooled tasks
- \[[ADF-1716](https://issues.alfresco.com/jira/browse/ADF-1716)] - Process List - processDefinitionKey is not part of the [ProcessInstanceQueryRepresentation](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessInstanceQueryRepresentation.md)
- \[[ADF-1716](https://issues.alfresco.com/jira/browse/ADF-1716)] - Process List - processDefinitionKey is not part of the [`ProcessInstanceQueryRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessInstanceQueryRepresentation.md)
- \[[ADF-1718](https://issues.alfresco.com/jira/browse/ADF-1718)] - [`Pagination`](../../lib/content-services/document-list/models/document-library.model.ts) should not be displayed on Search Results page when there are no results
- \[[ADF-1720](https://issues.alfresco.com/jira/browse/ADF-1720)] - Date-time picker is not working properly with other Date Display Format than default
- \[[ADF-1722](https://issues.alfresco.com/jira/browse/ADF-1722)] - [object Object] appears in People control when selecting the same name
@@ -738,7 +738,7 @@ Release Notes - Apps Development Framework - Version 2.0.
- \[[ADF-1824](https://issues.alfresco.com/jira/browse/ADF-1824)] - Moment js security issue
- \[[ADF-1825](https://issues.alfresco.com/jira/browse/ADF-1825)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) field in start task no aligned
- \[[ADF-1827](https://issues.alfresco.com/jira/browse/ADF-1827)] - 'Object Object' displayed on search results page
- \[[ADF-1829](https://issues.alfresco.com/jira/browse/ADF-1829)] - [PeopleApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/people.api.ts) - getSiteMembership wrong returned type
- \[[ADF-1829](https://issues.alfresco.com/jira/browse/ADF-1829)] - [`PeopleApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/people.api.ts) - getSiteMembership wrong returned type
- \[[ADF-1830](https://issues.alfresco.com/jira/browse/ADF-1830)] - Cannot access processes or reports
- \[[ADF-1832](https://issues.alfresco.com/jira/browse/ADF-1832)] - [Document List] IE 11 erro on click
- \[[ADF-1835](https://issues.alfresco.com/jira/browse/ADF-1835)] - The pagination on search results page is not working properly
@@ -746,7 +746,7 @@ Release Notes - Apps Development Framework - Version 2.0.
- \[[ADF-1839](https://issues.alfresco.com/jira/browse/ADF-1839)] - Login does not switch user preferences
- \[[ADF-1856](https://issues.alfresco.com/jira/browse/ADF-1856)] - Document List - location fails for a user that has granular permissions
- \[[ADF-1859](https://issues.alfresco.com/jira/browse/ADF-1859)] - The [document list component](../content-services/components/document-list.component.md) no longer exports [`ShareDataRow`](../../lib/content-services/document-list/data/share-data-row.model.ts)
- \[[ADF-1860](https://issues.alfresco.com/jira/browse/ADF-1860)] - [NodesApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/nodes.api.ts).getNodeChildren has wrong return type
- \[[ADF-1860](https://issues.alfresco.com/jira/browse/ADF-1860)] - [`NodesApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/nodes.api.ts).getNodeChildren has wrong return type
- \[[ADF-1861](https://issues.alfresco.com/jira/browse/ADF-1861)] - Line breaks not displayed in "Display Text" widget in forms
- \[[ADF-1862](https://issues.alfresco.com/jira/browse/ADF-1862)] - Adf toolbar should get the background color from the theme
- \[[ADF-1865](https://issues.alfresco.com/jira/browse/ADF-1865)] - [Document List] "Empty View" does not wrap long text
@@ -782,7 +782,7 @@ Release Notes - Apps Development Framework - Version 2.0.
- \[[ADF-1951](https://issues.alfresco.com/jira/browse/ADF-1951)] - Date widget doesn't display the correct date.
- \[[ADF-1956](https://issues.alfresco.com/jira/browse/ADF-1956)] - Date widget with advanced properties does not display value.
- \[[ADF-1962](https://issues.alfresco.com/jira/browse/ADF-1962)] - getContentThumbnailUrl returns file data instead or URL
- \[[ADF-1963](https://issues.alfresco.com/jira/browse/ADF-1963)] - [ContentApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is missing the preview rendition API
- \[[ADF-1963](https://issues.alfresco.com/jira/browse/ADF-1963)] - [`ContentApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is missing the preview rendition API
- \[[ADF-1964](https://issues.alfresco.com/jira/browse/ADF-1964)] - [Demo Shell] Max size filter is not switched off.
- \[[ADF-1965](https://issues.alfresco.com/jira/browse/ADF-1965)] - 'Upload file' button is enabled if user does not have permission to upload a file/folder
- \[[ADF-1966](https://issues.alfresco.com/jira/browse/ADF-1966)] - Wrong sort on Document List
+1 -1
View File
@@ -324,7 +324,7 @@ Release Notes - Apps Development Framework - Version 2.3.0
- \[[ADF-2442](https://issues.alfresco.com/jira/browse/ADF-2442)] - [Search Service](../../lib/core/services/search.service.ts) has wrong types for the 'search' API
- \[[ADF-2443](https://issues.alfresco.com/jira/browse/ADF-2443)] - Typo in the UserPreferences service
- \[[ADF-2444](https://issues.alfresco.com/jira/browse/ADF-2444)] - CLONE - Incorrect Items per page values on all lists after upgrade to ADF 2.2.0
- \[[ADF-2448](https://issues.alfresco.com/jira/browse/ADF-2448)] - Wrong type definition for [RequestPagination](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/search-rest-api/docs/RequestPagination.md)
- \[[ADF-2448](https://issues.alfresco.com/jira/browse/ADF-2448)] - Wrong type definition for [`RequestPagination`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/search-rest-api/docs/RequestPagination.md)
- \[[ADF-2450](https://issues.alfresco.com/jira/browse/ADF-2450)] - Search api type definition is not defined
- \[[ADF-2454](https://issues.alfresco.com/jira/browse/ADF-2454)] - Login dialog icon and header text not centered correctly
- \[[ADF-2455](https://issues.alfresco.com/jira/browse/ADF-2455)] - Document List does not render thumbnails
+2 -2
View File
@@ -338,7 +338,7 @@ Release Notes - Apps Development Framework - Version 2.5.0
] - CLONE - Thumbs.db files are uploading with a folder upload
- \[
[ADF-3289](https://issues.alfresco.com/jira/browse/ADF-3289)
] - [AppsDefinitionApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/src/api/AppsDefinitionApi.ts) contains two methods with same name and different firms
] - [`AppsDefinitionApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/src/api/AppsDefinitionApi.ts) contains two methods with same name and different firms
- \[
[ADF-3292](https://issues.alfresco.com/jira/browse/ADF-3292)
] - CLONE - Filter category should be deselected when user makes a new search query
@@ -374,7 +374,7 @@ Release Notes - Apps Development Framework - Version 2.5.0
] - Refresh button is not displayed on the form
- \[
[ADF-3383](https://issues.alfresco.com/jira/browse/ADF-3383)
] - Incorrect datatype for password in [PersonBodyCreate](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/model/personBodyCreate.ts) in index.d.ts
] - Incorrect datatype for password in [`PersonBodyCreate`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/model/personBodyCreate.ts) in index.d.ts
- \[
[ADF-3386](https://issues.alfresco.com/jira/browse/ADF-3386)
] - Task Filters accordion is not expanding / collapsing
+6 -6
View File
@@ -382,13 +382,13 @@ Below is the list of JIRA issues that were closed for this release.
- [ADF-3497](https://issues.alfresco.com/jira/browse/ADF-3497) - Facet intervals on search filter
- [ADF-3677](https://issues.alfresco.com/jira/browse/ADF-3677) - [SearchQueryBuilderService](../content-services/services/search-query-builder.service.md) to support highlight
- [ADF-3677](https://issues.alfresco.com/jira/browse/ADF-3677) - [`SearchQueryBuilderService`](../content-services/services/search-query-builder.service.md) to support highlight
- [ADF-3735](https://issues.alfresco.com/jira/browse/ADF-3735) - SSO Login Error for [login component](../core/components/login.component.md)
- [ADF-3798](https://issues.alfresco.com/jira/browse/ADF-3798) - [Demo Shell][aps2] Show Task list related to a Process
- [ADF-4003](https://issues.alfresco.com/jira/browse/ADF-4003) - Add roles filtering to [PeopleCloudComponent](../process-services-cloud/components/people-cloud.component.md)
- [ADF-4003](https://issues.alfresco.com/jira/browse/ADF-4003) - Add roles filtering to [`PeopleCloudComponent`](../process-services-cloud/components/people-cloud.component.md)
- [ADF-4078](https://issues.alfresco.com/jira/browse/ADF-4078) - Fixed headers in the document list
@@ -469,7 +469,7 @@ Below is the list of JIRA issues that were closed for this release.
- [ADF-3934](https://issues.alfresco.com/jira/browse/ADF-3934) - [People Cloud Component](../process-services-cloud/components/people-cloud.component.md) - Remove the concept of assignee
- [ADF-3979](https://issues.alfresco.com/jira/browse/ADF-3979) - [GroupCloudComponent](../process-services-cloud/components/group-cloud.component.md) should be able to detect "preSelectGroups" input changes
- [ADF-3979](https://issues.alfresco.com/jira/browse/ADF-3979) - [`GroupCloudComponent`](../process-services-cloud/components/group-cloud.component.md) should be able to detect "preSelectGroups" input changes
- [ADF-3989](https://issues.alfresco.com/jira/browse/ADF-3989) - The list of apps in 'appName' filter is duplicated after switching between saved filters
@@ -495,7 +495,7 @@ Below is the list of JIRA issues that were closed for this release.
- [ADF-4154](https://issues.alfresco.com/jira/browse/ADF-4154) - Unit tests failing after upgrade to ADF 3.1.0-beta3
- [ADF-4156](https://issues.alfresco.com/jira/browse/ADF-4156) - Regression in [TaskListComponent](../process-services/components/task-list.component.md) Caused by in-place Date Formatting
- [ADF-4156](https://issues.alfresco.com/jira/browse/ADF-4156) - Regression in [`TaskListComponent`](../process-services/components/task-list.component.md) Caused by in-place Date Formatting
- [ADF-4165](https://issues.alfresco.com/jira/browse/ADF-4165) - ADF 3.0 Not able to login with implicitFlow false
@@ -529,7 +529,7 @@ Below is the list of JIRA issues that were closed for this release.
- [ADF-4305](https://issues.alfresco.com/jira/browse/ADF-4305) - DocumentList - CardViewMode - Field values missing in the display.
- [ADF-4313](https://issues.alfresco.com/jira/browse/ADF-4313) - [Demo shell] [Form](../../lib/process-services/task-list/models/form.model.ts) field looks like an editable field in task header after task was completed
- [ADF-4313](https://issues.alfresco.com/jira/browse/ADF-4313) - [Demo shell][form](../../lib/process-services/task-list/models/form.model.ts) field looks like an editable field in task header after task was completed
- [ADF-4316](https://issues.alfresco.com/jira/browse/ADF-4316) - [People component](../process-services/components/people.component.md) table is not well aligned
@@ -657,7 +657,7 @@ Below is the list of JIRA issues that were closed for this release.
- [ADF-4120](https://issues.alfresco.com/jira/browse/ADF-4120) - automate ADF-3989 - The list of apps in 'appName' filter is duplicated after switching between saved filters
- [ADF-4126](https://issues.alfresco.com/jira/browse/ADF-4126) - Automate ADF-4003 - Add roles filtering to [PeopleCloudComponent](../process-services-cloud/components/people-cloud.component.md)
- [ADF-4126](https://issues.alfresco.com/jira/browse/ADF-4126) - Automate ADF-4003 - Add roles filtering to [`PeopleCloudComponent`](../process-services-cloud/components/people-cloud.component.md)
- [ADF-4129](https://issues.alfresco.com/jira/browse/ADF-4129) - Automate ADF-4066 - Task doesn't have an assignee when the assignee is empty from Start Task form
+5 -6
View File
@@ -73,7 +73,7 @@ This component is responsible to show the form renderer in case the task has a f
For more details refer to the:
- [TaskFormCloudComponent](../process-services-cloud/components/task-form-cloud.component).
- [`TaskFormCloudComponent`](../process-services-cloud/components/task-form-cloud.component.md).
#### Form Cloud
@@ -86,9 +86,9 @@ This component is responsible to render the form cloud definition attached to th
</adf-cloud-form>
```
In case the form has an upload widget and the alfresco content has been configured*, the attached file will be stored into the alfresco repositoty.
In case the form has an upload widget and the alfresco content has been configured\*, the attached file will be stored into the alfresco repository.
Note*:
Note\*:
Don't forget to set the `providers` property to `ALL` and `ecmHost` value in the `app.config.json`.
e.g.
@@ -100,7 +100,7 @@ e.g.
For more details refer to the:
- [FormCloudComponent](../process-services-cloud/components/form-cloud.component.md).
- [`FormCloudComponent`](../process-services-cloud/components/form-cloud.component.md).
#### New permission template to app list
@@ -119,13 +119,12 @@ Cloud form definition selector component is a dropdown that shows all the form p
For more details refer to the:
- [FormDefinitionSelectorCloudComponent](../process-services-cloud/components/form-definition-selector-cloud.component.md).
- [`FormDefinitionSelectorCloudComponent`](../process-services-cloud/components/form-definition-selector-cloud.component.md).
#### Start a standalone task with a form
The start task cloud is now using the `cloud-form-definition-selector` that allows the user to attach a form to a task
### Five more languages available
Starting from ADF 3.2, five more languages are now available, together with the other ten already in the list. The new languages supported are: Danish, Finnish, Swedish, Czech, Polish.
-9
View File
@@ -13,14 +13,6 @@ The release can be found on GitHub at [this location](https://github.com/Alfresc
See the [ADF roadmap](../roadmap.md) for details of features planned for future
versions of ADF.
## Contents
- [New package versions](#new-package-versions)
- [Goals for this release](#goals-for-this-release)
- [Fix deployment service](#fix-deployment-service)
- [Localisation](#localisation)
- [References](#references)
## New package versions
"@alfresco/adf-content-services" : "3.2.1"
@@ -33,7 +25,6 @@ versions of ADF.
This patch version contain a fix for a changed endpoint in Activiti 7 [Rename alfresco-deployment-service in deployment-service](https://github.com/Alfresco/alfresco-ng2-components/pull/4711/files)
## Localisation
This release includes: French, German, Italian, Spanish, Arabic, Japanese, Dutch, Norwegian (Bokmål), Russian, Danish, Finnish, Swedish, Czech, Polish, Brazilian Portuguese and Simplified Chinese versions.
+1 -1
View File
@@ -13,7 +13,7 @@ Github only: true
| [**Adding a new component**](new-component.md) | Basic | In this tutorial, you will learn how to create a component using [Angular CLI](https://cli.angular.io/) within an existing application. |
| [**Adding a new view**](new-view.md) | Beginner | In this tutorial you will learn how to create a new view in your application and how to access it using a defined endpoint. |
| [**Using ADF Components**](using-components.md) | Basic | In this tutorial you will learn how to extend, use and configure ADF Components. |
| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. |
| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. |
| [**Customizing the Login component**](customising-login.md) | Intermediate | In this tutorial you will learn how to customize the [Login component](../core/components/login.component.md) following the technical documentation. |
| [**Working with a Data Table**](working-with-data-table.md) | Intermediate | In this tutorial you will learn how to populate a DataTable component. |
| [**Working with the Nodes API Service**](working-with-nodes-api-service.md) | Intermediate | In this tutorial you will learn how to use the [`NodesApiService`](../core/services/nodes-api.service.md). |
+25
View File
@@ -18,6 +18,7 @@ fairly straightforward to maintain.
- [I18n concepts](#i18n-concepts)
- [ADF support for i18n](#adf-support-for-i18n)
- [Using the translate pipe](#using-the-translate-pipe)
- [Using the localized date pipe](#using-the-localized-date-pipe)
- [Adding and replacing messages](#adding-and-replacing-messages)
- [Interpolations](#interpolations)
- [How the display language is selected](#how-the-display-language-is-selected)
@@ -153,6 +154,30 @@ component's `.ts` file:
<!-- {% endraw %} -->
## Using the localized date pipe
Date values are also localized in your ADF app. By default they are localized to en-US, although you can easily change this by adding the localization files provided by Angular.
If you want to use a different locale simply add the locale file for your region in your `app.module.ts`.
<!-- {% raw %} -->
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr);
<!-- {% endraw %} -->
Usage of the [localized date pipe](../core/pipes/localized-date.pipe.md).
<!-- {% raw %} -->
{{ date | adfLocalizedDate: format : locale }}
<!-- {% endraw %} -->
Find more info about this in the [Angular sDocs](https://angular.io/guide/i18n#setting-up-the-locale-of-your-app).
## Adding and replacing messages
The built-in translations certainly won't cover everything you will need for
+69 -14
View File
@@ -5,30 +5,85 @@ Added: 2019-03-13
# Right-to-left language support
ADF currently has limited support for languages that are written from right to left (such as Arabic).
ADF currently has partial support for languages that are written from right to left (such as Arabic) and has been tested to work with the HTML [`dir` attribute](https://www.w3.org/TR/html51/dom.html#the-dir-attribute) added to the main `<body>` element.
ADF has been updated and tested to work with the HTML
[`dir` attribute](https://www.w3.org/TR/html51/dom.html#the-dir-attribute)
added to the main `<body>` element in `index.html`. When the attribute is set to
`rtl`, text in the app will be right-aligned as required for right-to-left languages:
This is handled automatically by the framework and can be configured through `app.config.json`.
```html
<body dir="rtl">
## Configuration
Since directionality cannot be inferred from information about the locale, there is a one-to-one relation between locale and language configuration in `app.config.json`.
The minimum configuration is to declare the `"direction": "rtl"` alt the level of the language entry associated with your browser locale. Omitting `direction` or failing to map it with a language key will default to `ltr`.
```json
// browser locale 'ar'
{
...
</body>
"languages": [
...
{
"key": "ar",
"direction": "rtl"
},
...
],
...
}
```
If you use the [Sidenav Layout component](../core/components/sidenav-layout.component.md) you can choose set the direction property in it using the property direction ans set it to **'rtl'**
If it is desired to start the application with a certain language locale and not default to browser locale, we can specify the `locale` at the configuration level and associate it with a language entry.
```json
```html
<adf-sidenav-layout
[direction]="'rtl'">
......
</adf-sidenav-layout>
{
...
"locale": "ar",
"languages": [
...
{
"key": "ar",
"direction": "rtl"
},
...
],
...
}
```
## UserPreferencesService
For cases where a component logic depends on direction values over time, `UserPreferencesService` can be used to get information about the current direction value.
```typescript
import { Component, OnInit } from '@angular/core';
import { Direction } from '@angular/cdk/bidi';
import { UserPreferencesService } from '@alfresco/adf-core';
@Component({
...
})
export class MyComponent implements InInit {
constructor( private userPreferencesService: UserPreferencesService) { }
ngOnInit() {
this.userPreferencesService
.select('textOrientation')
.subscribe((direction: Direction) => {
console.log(direction); // 'ltr' / 'rtl'
});
}
}
```
## MatIcon
Currently, [mat-icon](https://material.angular.io/components/icon/overview) doesn't support [directionality](https://material.angular.io/components/icon/overview#bidirectionality) out of the box. As a workaround, this can be managed by adding a general styling rule, to the application top styling file. This will also ensure that [overlay](https://material.angular.io/cdk/overlay/overview) components will also be affected by direction.
```css
/* app.component.scss */
[dir='rtl'] .mat-icon {
transform: scale(-1, 1);
}
```
Also, we have a [translation file](internationalization.md) for Arabic (code: "ar"),
which is the
+1 -1
View File
@@ -111,7 +111,7 @@ backend services have been tested with each released version of ADF.
### Components retired
| Name | Reason | Alternative |
| -- | -- | -- |
| --- | --- | --- |
| Accordion component | Superseded by Angular `<mat-accordion>` | See the [Angular Expansion Panel](https://material.angular.io/components/expansion/overview#accordion) component for details. |
| Accordion group component | Superseded by Angular `<mat-expansion-panel>` | See the [Angular Expansion Panel](https://material.angular.io/components/expansion/overview#accordion) component for details. |
@@ -15,12 +15,10 @@
* limitations under the License.
*/
import { LoginPage } from '@alfresco/adf-testing';
import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { CreateFolderDialog } from '../../pages/adf/dialog/createFolderDialog';
import { NotificationPage } from '../../pages/adf/notificationPage';
import { MetadataViewPage } from '../../pages/adf/metadataViewPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { browser, Key } from 'protractor';
@@ -30,7 +28,7 @@ describe('Create folder directive', function () {
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const createFolderDialog = new CreateFolderDialog();
const notificationPage = new NotificationPage();
const notificationHistoryPage = new NotificationHistoryPage();
const metadataViewPage = new MetadataViewPage();
const acsUser = new AcsUserModel();
@@ -91,7 +89,7 @@ describe('Create folder directive', function () {
contentServicesPage.createNewFolder(folderName);
notificationPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.');
notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.');
});
it('[C260157] Should be possible create a folder under a folder with the same name', () => {
@@ -251,35 +251,26 @@ describe('Document List - Pagination', function () {
paginationPage.selectItemsPerPage(itemsPerPage.twenty);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getElementsDisplayedName().then((elements) => {
contentServicesPage.checkElementsSortedAsc(elements);
});
contentServicesPage.sortByName(false);
contentServicesPage.getElementsDisplayedName().then(function (list) {
contentServicesPage.checkElementsSortedDesc(list);
});
expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('ASC', 'Display name'));
contentServicesPage.sortByName('DESC');
expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name'));
paginationPage.selectItemsPerPage(itemsPerPage.five);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getElementsDisplayedName().then(function (list) {
contentServicesPage.checkElementsSortedDesc(list);
});
expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name'));
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getElementsDisplayedName().then(function (list) {
contentServicesPage.checkElementsSortedDesc(list);
});
expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name'));
paginationPage.selectItemsPerPage(itemsPerPage.ten);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getElementsDisplayedName().then(function (list) {
contentServicesPage.checkElementsSortedDesc(list);
});
expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name'));
});
it('[C260107] Should not display pagination bar when a folder is empty', () => {
@@ -24,7 +24,7 @@ import { browser } from 'protractor';
describe('Notifications Component', () => {
const loginPage = new LoginPage();
const notificationPage = new NotificationPage();
const notificationHistoryPage = new NotificationPage();
const acsUser = new AcsUserModel();
@@ -43,74 +43,74 @@ describe('Notifications Component', () => {
await loginPage.loginToContentServicesUsingUserModel(acsUser);
notificationPage.goToNotificationsPage();
notificationHistoryPage.goToNotificationsPage();
notificationPage.enterDurationField(3000);
notificationHistoryPage.enterDurationField(3000);
done();
});
afterEach( () => {
browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`);
notificationPage.enterDurationField(3000);
notificationHistoryPage.enterDurationField(3000);
});
it('[C279977] Should show notification when the message is not empty and button is clicked', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
});
it('[C279979] Should not show notification when the message is empty and button is clicked', () => {
notificationPage.clearMessage();
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsNotDisplayed();
notificationHistoryPage.clearMessage();
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed();
});
it('[C279978] Should show notification with action when the message is not empty and button is clicked', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.clickActionToggle();
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
notificationPage.clickActionButton();
notificationPage.checkActionEvent();
notificationPage.clickActionToggle();
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.clickActionToggle();
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
notificationHistoryPage.clickActionButton();
notificationHistoryPage.checkActionEvent();
notificationHistoryPage.clickActionToggle();
});
it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsDisplayed();
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsDisplayed();
});
it('[C279987] Should show custom notification during a limited time when a duration is added', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.enterDurationField(1000);
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsDisplayed();
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.enterDurationField(1000);
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsDisplayed();
browser.sleep(1500);
notificationPage.checkNotificationSnackBarIsNotDisplayed();
notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed();
});
it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.clickActionToggle();
notificationPage.clickNotificationButton();
notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
notificationPage.checkNotificationSnackBarIsNotDisplayed();
notificationPage.clickNotificationButton();
notificationPage.clickActionButton();
notificationPage.checkActionEvent();
notificationPage.clickActionToggle();
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.clickActionToggle();
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test');
notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed();
notificationHistoryPage.clickNotificationButton();
notificationHistoryPage.clickActionButton();
notificationHistoryPage.checkActionEvent();
notificationHistoryPage.clickActionToggle();
});
it('[C280001] Should meet configuration when a custom notification is set', () => {
notificationPage.enterMessageField('Notification test');
notificationPage.enterDurationField(1000);
notificationPage.selectHorizontalPosition('Right');
notificationPage.selectVerticalPosition('Top');
notificationPage.selectDirection('Left to right');
notificationPage.clickNotificationButton();
expect(notificationPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}');
notificationHistoryPage.enterMessageField('Notification test');
notificationHistoryPage.enterDurationField(1000);
notificationHistoryPage.selectHorizontalPosition('Right');
notificationHistoryPage.selectVerticalPosition('Top');
notificationHistoryPage.selectDirection('Left to right');
notificationHistoryPage.clickNotificationButton();
expect(notificationHistoryPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}');
});
});
@@ -16,18 +16,16 @@
*/
import { PermissionsPage } from '../../pages/adf/permissionsPage';
import { LoginPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import resources = require('../../util/resources');
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { FileModel } from '../../models/ACS/fileModel';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { StringUtil, BrowserActions } from '@alfresco/adf-testing';
import { StringUtil, BrowserActions, LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing';
import { browser } from 'protractor';
import { FolderModel } from '../../models/ACS/folderModel';
import { ViewerPage } from '../../pages/adf/viewerPage';
import { NotificationPage } from '../../pages/adf/notificationPage';
import { MetadataViewPage } from '../../pages/adf/metadataViewPage';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { UploadDialog } from '../../pages/adf/dialog/uploadDialog';
@@ -44,7 +42,7 @@ describe('Permissions Component', function () {
const viewerPage = new ViewerPage();
const metadataViewPage = new MetadataViewPage();
const notificationPage = new NotificationPage();
const notificationPage = new NotificationHistoryPage();
const uploadDialog = new UploadDialog();
let fileOwnerUser, filePermissionUser, file;
const fileModel = new FileModel({
@@ -300,8 +298,12 @@ describe('Permissions Component', function () {
afterEach(async (done) => {
await uploadActions.deleteFilesOrFolder(alfrescoJsApi, file.entry.id);
try {
await uploadActions.deleteFilesOrFolder(alfrescoJsApi, file.entry.id);
} catch (error) {
}
done();
});
@@ -587,7 +589,6 @@ describe('Permissions Component', function () {
permissionsPage.clickPermissionInheritedButton();
notificationPage.checkNotifyContains('You are not allowed to change permissions');
notificationPage.checkNotificationSnackBarIsNotDisplayed();
permissionsPage.clickAddPermissionButton();
@@ -23,10 +23,9 @@ import resources = require('../../util/resources');
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { FileModel } from '../../models/ACS/fileModel';
import { UploadActions } from '../../actions/ACS/upload.actions';
import { StringUtil } from '@alfresco/adf-testing';
import { StringUtil, NotificationHistoryPage } from '@alfresco/adf-testing';
import { browser } from 'protractor';
import { ViewerPage } from '../../pages/adf/viewerPage';
import { NotificationPage } from '../../pages/adf/notificationPage';
import CONSTANTS = require('../../util/constants');
import { MetadataViewPage } from '../../pages/adf/metadataViewPage';
import { UploadDialog } from '../../pages/adf/dialog/uploadDialog';
@@ -44,7 +43,7 @@ describe('Permissions Component', function () {
const viewerPage = new ViewerPage();
const navigationBarPage = new NavigationBarPage();
const metadataViewPage = new MetadataViewPage();
const notificationPage = new NotificationPage();
const notificationHistoryPage = new NotificationHistoryPage();
const uploadDialog = new UploadDialog();
let folderOwnerUser, consumerUser, siteConsumerUser, contributorUser, managerUser, collaboratorUser;
@@ -224,11 +223,11 @@ describe('Permissions Component', function () {
contentServicesPage.metadataContent('Site' + fileModel.name);
notificationPage.checkNotifyContains('You don\'t have access to do this.');
notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.');
contentServicesPage.uploadFile(fileModel.location);
notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content');
notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content');
});
@@ -254,7 +253,7 @@ describe('Permissions Component', function () {
contentServicesPage.metadataContent('Site' + fileModel.name);
notificationPage.checkNotifyContains('You don\'t have access to do this.');
notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.');
contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name);
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { LoginPage, BrowserActions } from '@alfresco/adf-testing';
import { LoginPage, BrowserActions, LocalStorageUtil, NotificationHistoryPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { ViewerPage } from '../../pages/adf/viewerPage';
@@ -38,6 +38,7 @@ describe('Share file', () => {
const shareDialog = new ShareDialog();
const navigationBarPage = new NavigationBarPage();
const viewerPage = new ViewerPage();
const notificationHistoryPage = new NotificationHistoryPage();
const acsUser = new AcsUserModel();
const uploadActions = new UploadActions();
@@ -101,7 +102,7 @@ describe('Share file', () => {
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.clickShareLinkButton();
shareDialog.checkNotificationWithMessage('Link copied to the clipboard');
notificationHistoryPage.checkNotifyContains('Link copied to the clipboard');
});
it('[C286543] Should be possible to close Share dialog', () => {
@@ -140,6 +141,22 @@ describe('Share file', () => {
shareDialog.clickDateTimePickerButton();
shareDialog.calendarTodayDayIsDisabled();
});
it('[C310329] Should be possible to set expiry date only for link', async () => {
await LocalStorageUtil.setConfigField('sharedLinkDateTimePickerType', JSON.stringify('date'));
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.clickDateTimePickerButton();
shareDialog.setDefaultDay();
shareDialog.dateTimePickerDialogIsClosed();
const value = await shareDialog.getExpirationDate();
shareDialog.clickCloseButton();
shareDialog.dialogIsClosed();
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.expirationDateInputHasValue(value);
BrowserActions.closeMenuAndDialogs();
});
});
describe('Shared link preview', () => {
@@ -163,7 +180,7 @@ describe('Share file', () => {
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.clickShareLinkButton();
shareDialog.checkNotificationWithMessage('Link copied to the clipboard');
notificationHistoryPage.checkNotifyContains('Link copied to the clipboard');
const sharedLink = await shareDialog.getShareLink();
BrowserActions.getUrl(sharedLink);
viewerPage.checkFileNameIsDisplayed(pngFileModel.name);
@@ -174,13 +191,13 @@ describe('Share file', () => {
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.clickShareLinkButton();
shareDialog.checkNotificationWithMessage('Link copied to the clipboard');
notificationHistoryPage.checkNotifyContains('Link copied to the clipboard');
const sharedLink = await shareDialog.getShareLink();
shareDialog.clickCloseButton();
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.clickShareLinkButton();
shareDialog.checkNotificationWithMessage('Link copied to the clipboard');
notificationHistoryPage.checkNotifyContains('Link copied to the clipboard');
const secondSharedLink = await shareDialog.getShareLink();
expect(sharedLink).toEqual(secondSharedLink);
BrowserActions.getUrl(sharedLink);
@@ -16,7 +16,7 @@
*/
import CONSTANTS = require('../../util/constants');
import { StringUtil, BrowserActions } from '@alfresco/adf-testing';
import { StringUtil, BrowserActions, NotificationHistoryPage } from '@alfresco/adf-testing';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { LoginPage, ErrorPage } from '@alfresco/adf-testing';
import { ContentServicesPage } from '../../pages/adf/contentServicesPage';
@@ -35,6 +35,7 @@ describe('Unshare file', () => {
const contentListPage = contentServicesPage.getDocumentList();
const navBar = new NavigationBarPage();
const errorPage = new ErrorPage();
const notificationHistoryPage = new NotificationHistoryPage();
const shareDialog = new ShareDialog();
const siteName = `PRIVATE-TEST-SITE-${StringUtil.generateRandomString(5)}`;
@@ -171,9 +172,12 @@ describe('Unshare file', () => {
contentServicesPage.clickShareButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.shareToggleButtonIsChecked();
shareDialog.shareToggleButtonIsDisabled();
shareDialog.clickUnShareFile();
shareDialog.confirmationDialogIsNotDisplayed();
shareDialog.confirmationDialogIsDisplayed();
shareDialog.clickConfirmationDialogRemoveButton();
shareDialog.checkDialogIsDisplayed();
shareDialog.shareToggleButtonIsChecked();
notificationHistoryPage.checkNotifyContains(`You don't have permission to unshare this file`);
});
});
});
@@ -0,0 +1,209 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* 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 { LoginPage, LikePage, RatePage } from '@alfresco/adf-testing';
import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api';
import { AcsUserModel } from '../../models/ACS/acsUserModel';
import { FileModel } from '../../models/ACS/fileModel';
import resources = require('../../util/resources');
import { UploadActions } from '../../actions/ACS/upload.actions';
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
import { SocialPage } from '../../pages/adf/demo-shell/socialPage';
import { browser } from 'protractor';
describe('Social component', () => {
const loginPage = new LoginPage();
const likePage = new LikePage();
const ratePage = new RatePage();
const socialPage = new SocialPage();
const navigationBarPage = new NavigationBarPage();
const componentOwner = new AcsUserModel();
const componentVisitor = new AcsUserModel();
const secondComponentVisitor = new AcsUserModel();
const uploadActions = new UploadActions();
const blueLikeColor = ('rgba(33, 150, 243, 1)');
const greyLikeColor = ('rgba(128, 128, 128, 1)');
const yellowRatedStarColor = ('rgba(255, 233, 68, 1)');
const averageStarColor = ('rgba(128, 128, 128, 1)');
let emptyFile;
const emptyFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name,
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location
});
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: browser.params.testConfig.adf.url
});
await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(componentOwner);
await this.alfrescoJsApi.core.peopleApi.addPerson(componentVisitor);
await this.alfrescoJsApi.core.peopleApi.addPerson(secondComponentVisitor);
await this.alfrescoJsApi.login(componentOwner.id, componentOwner.password);
emptyFile = await uploadActions.uploadFile(this.alfrescoJsApi, emptyFileModel.location, emptyFileModel.name, '-my-');
await this.alfrescoJsApi.core.nodesApi.updateNode(emptyFile.entry.id,
{
permissions: {
locallySet: [{
authorityId: componentVisitor.getId(),
name: 'Consumer',
accessStatus: 'ALLOWED'
}, {
authorityId: secondComponentVisitor.getId(),
name: 'Consumer',
accessStatus: 'ALLOWED'
}]
}
});
done();
});
afterAll(async (done) => {
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, emptyFile.entry.id);
done();
});
describe('User interaction on their own components', () => {
beforeEach(async () => {
await loginPage.loginToContentServicesUsingUserModel(componentOwner);
await navigationBarPage.clickSocialButton();
});
it('[C203006] Should be able to like and unlike their components but not rate them,', () => {
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
likePage.clickLike();
expect(likePage.getLikeCounter()).toBe('1');
likePage.removeHoverFromLikeButton();
expect(likePage.getLikedIconColor()).toBe(blueLikeColor);
ratePage.rateComponent(4);
expect(ratePage.getRatingCounter()).toBe('0');
expect(ratePage.isNotStarRated(4));
expect(ratePage.getUnratedStarColor(4)).toBe(averageStarColor);
likePage.clickUnlike();
expect(likePage.getLikeCounter()).toBe('0');
likePage.removeHoverFromLikeButton();
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
});
describe('User interaction on components that belong to other users', () => {
beforeEach(async () => {
await loginPage.loginToContentServicesUsingUserModel(componentVisitor);
await navigationBarPage.clickSocialButton();
});
it('[C260324] Should be able to like and unlike a component', () => {
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
expect(likePage.getLikeCounter()).toEqual('0');
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
likePage.clickLike();
expect(likePage.getLikeCounter()).toBe('1');
likePage.removeHoverFromLikeButton();
expect(likePage.getLikedIconColor()).toBe(blueLikeColor);
likePage.clickUnlike();
expect(likePage.getLikeCounter()).toBe('0');
likePage.removeHoverFromLikeButton();
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
it('[C310198] Should be able to rate and unRate a component', () => {
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
expect(ratePage.getRatingCounter()).toBe('0');
ratePage.rateComponent(4);
expect(ratePage.getRatingCounter()).toBe('1');
expect(ratePage.isStarRated(4));
expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor);
ratePage.removeRating(4);
expect(ratePage.getRatingCounter()).toBe('0');
expect(ratePage.isNotStarRated(4));
});
});
describe('Multiple Users interaction', () => {
beforeEach(async () => {
await loginPage.loginToContentServicesUsingUserModel(componentVisitor);
await navigationBarPage.clickSocialButton();
});
it('[C310197] Should be able to like, unLike, display total likes', async () => {
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
likePage.clickLike();
expect(likePage.getLikeCounter()).toBe('1');
likePage.removeHoverFromLikeButton();
expect(likePage.getLikedIconColor()).toBe(blueLikeColor);
await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor);
navigationBarPage.clickSocialButton();
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
likePage.clickLike();
expect(likePage.getLikeCounter()).toEqual('2');
likePage.removeHoverFromLikeButton();
expect(likePage.getLikedIconColor()).toBe(blueLikeColor);
likePage.clickUnlike();
expect(likePage.getLikeCounter()).toEqual('1');
likePage.removeHoverFromLikeButton();
expect(likePage.getUnLikedIconColor()).toBe(greyLikeColor);
});
it('[C260327] Should be able to rate, unRate, display total ratings, display average rating', async () => {
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
ratePage.rateComponent(4);
expect(ratePage.getRatingCounter()).toEqual('1');
expect(ratePage.isStarRated(4));
expect(ratePage.getRatedStarColor(4)).toBe(yellowRatedStarColor);
await loginPage.loginToContentServicesUsingUserModel(secondComponentVisitor);
navigationBarPage.clickSocialButton();
socialPage.writeCustomNodeId(emptyFile.entry.id);
expect(socialPage.getNodeIdFieldValue()).toEqual(emptyFile.entry.id);
expect(ratePage.getRatingCounter()).toEqual('1');
expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor);
ratePage.rateComponent(0);
expect(ratePage.getRatingCounter()).toEqual('2');
expect(ratePage.isStarRated(2));
ratePage.removeRating(0);
expect(ratePage.getRatingCounter()).toEqual('1');
expect(ratePage.getAverageStarColor(4)).toBe(averageStarColor);
});
});
});
+9 -22
View File
@@ -30,7 +30,7 @@ import { UploadActions } from '../actions/ACS/upload.actions';
import { StringUtil } from '@alfresco/adf-testing';
import { browser } from 'protractor';
xdescribe('Tag component', () => {
describe('Tag component', () => {
const loginPage = new LoginPage();
const tagPage = new TagPage();
@@ -51,10 +51,7 @@ xdescribe('Tag component', () => {
const tags = [
{ tag: 'test-tag-01' }, { tag: 'test-tag-02' }, { tag: 'test-tag-03' }, { tag: 'test-tag-04' }, { tag: 'test-tag-05' },
{ tag: 'test-tag-06' }, { tag: 'test-tag-07' }, { tag: 'test-tag-08' }, { tag: 'test-tag-09' }, { tag: 'test-tag-10' },
{ tag: 'test-tag-11' }, { tag: 'test-tag-12' }, { tag: 'test-tag-13' }, { tag: 'test-tag-14' }, { tag: 'test-tag-15' },
{ tag: 'test-tag-16' }, { tag: 'test-tag-17' }, { tag: 'test-tag-18' }, { tag: 'test-tag-19' }, { tag: 'test-tag-20' },
{ tag: 'test-tag-21' }, { tag: 'test-tag-22' }, { tag: 'test-tag-23' }, { tag: 'test-tag-24' }, { tag: 'test-tag-25' },
{ tag: 'test-tag-26' }, { tag: 'test-tag-27' }, { tag: 'test-tag-28' }, { tag: 'test-tag-29' }, { tag: 'test-tag-30' }];
{ tag: 'test-tag-11' }];
const uppercaseTag = StringUtil.generateRandomString().toUpperCase();
const digitsTag = StringUtil.generateRandomStringDigits();
@@ -129,24 +126,14 @@ xdescribe('Tag component', () => {
it('[C91326] Should be possible to create a tag with different characters', () => {
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(uppercaseTag);
tagPage.addTag(uppercaseTag + digitsTag + nonLatinTag);
tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase());
tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase());
browser.driver.sleep(5000); // wait CS return tags
tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag);
tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag);
tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase() + digitsTag + nonLatinTag);
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(digitsTag);
tagPage.checkTagIsDisplayedInTagList(digitsTag);
tagPage.checkTagIsDisplayedInTagListByNodeId(digitsTag);
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(nonLatinTag);
tagPage.checkTagIsDisplayedInTagList(nonLatinTag);
tagPage.checkTagIsDisplayedInTagListByNodeId(nonLatinTag);
tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag + digitsTag + nonLatinTag);
});
it('[C260375] Should be possible to delete a tag', () => {
@@ -200,8 +187,8 @@ xdescribe('Tag component', () => {
tagPage.clickShowMoreButton();
tagPage.checkShowLessButtonIsDisplayed();
tagPage.clickShowMoreButtonUntilNotDisplayed();
tagPage.checkShowLessButtonIsDisplayed();
tagPage.clickShowLessButton();
tagPage.checkShowLessButtonIsNotDisplayed();
});
it('[C260378] Should be possible to add multiple tags', () => {

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