@zohodesk/library-platform 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/es/bc/column-chooser/Constants.js +4 -0
  2. package/es/bc/column-chooser/EventHandlers.js +2 -0
  3. package/es/bc/column-chooser/Events.js +59 -0
  4. package/es/bc/column-chooser/Properties.js +18 -0
  5. package/es/bc/keyboard-controls/Constants.js +5 -0
  6. package/es/bc/keyboard-controls/Events.js +51 -0
  7. package/es/bc/keyboard-controls/Properties.js +11 -0
  8. package/es/bc/keyboard-controls/types/KeyboardControlBehaviourState.js +1 -0
  9. package/es/bc/zlist/Properties.js +15 -0
  10. package/es/cc/fields/field/Properties.js +10 -1
  11. package/es/cc/fields/index.js +1 -1
  12. package/es/cc/table-column-chooser/Constants.js +6 -0
  13. package/es/cc/table-column-chooser/Events.js +69 -0
  14. package/es/cc/table-column-chooser/Properties.js +122 -0
  15. package/es/cc/table-column-chooser/index.js +3 -0
  16. package/es/cc/table-connected/Properties.js +16 -0
  17. package/es/cc/table-connected/constants/Events.js +4 -1
  18. package/es/cc/table-list/Properties.js +27 -1
  19. package/es/cc/table-list/data-types/KeyboardControlsConfig.js +1 -0
  20. package/es/cc/table-list/row/Properties.js +18 -0
  21. package/es/desk-frameworks/table-connected/adapters/controllers/ColumnChooserOpenedController.js +36 -0
  22. package/es/desk-frameworks/table-connected/adapters/controllers/ColumnChooserUpdateController.js +25 -0
  23. package/es/desk-frameworks/table-connected/frameworks/EventHandlersFactory.js +8 -2
  24. package/es/desk-frameworks/table-connected/frameworks/TableConnectedFactory.js +5 -2
  25. package/es/desk-frameworks/table-connected/frameworks/TableConnectedView.js +9 -6
  26. package/es/library/behaviours/keyboard-controls/adapters/controllers/AbstractController.js +9 -0
  27. package/es/library/behaviours/keyboard-controls/adapters/controllers/DestructController.js +20 -0
  28. package/es/library/behaviours/keyboard-controls/adapters/controllers/DownArrowPressController.js +20 -0
  29. package/es/library/behaviours/keyboard-controls/adapters/controllers/EnterPressController.js +24 -0
  30. package/es/library/behaviours/keyboard-controls/adapters/controllers/FocusNextController.js +20 -0
  31. package/es/library/behaviours/keyboard-controls/adapters/controllers/FocusPreviousController.js +20 -0
  32. package/es/library/behaviours/keyboard-controls/adapters/controllers/InitializeController.js +20 -0
  33. package/es/library/behaviours/keyboard-controls/adapters/controllers/SpacePressController.js +24 -0
  34. package/es/library/behaviours/keyboard-controls/adapters/controllers/UpArrowPressController.js +20 -0
  35. package/es/library/behaviours/keyboard-controls/adapters/gateways/KeyboardHandler.js +81 -0
  36. package/es/library/behaviours/keyboard-controls/adapters/gateways/Repository.js +47 -0
  37. package/es/library/behaviours/keyboard-controls/adapters/gateways/Service.js +40 -0
  38. package/es/library/behaviours/keyboard-controls/adapters/presenters/Presenter.js +39 -0
  39. package/es/library/behaviours/keyboard-controls/applications/interfaces/UseCase.js +0 -0
  40. package/es/library/behaviours/keyboard-controls/applications/interfaces/UseCaseDependencies.js +1 -0
  41. package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IKeyboardHandler.js +1 -0
  42. package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IRepository.js +1 -0
  43. package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IService.js +1 -0
  44. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/DestructInputModel.js +1 -0
  45. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/DownArrowPressInputModel.js +1 -0
  46. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/EnterPressInputModel.js +1 -0
  47. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/FocusNextInputModel.js +1 -0
  48. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/FocusPreviousInputModel.js +1 -0
  49. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/InitializeInputModel.js +1 -0
  50. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/RowActionInputModel.js +1 -0
  51. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/SelectionInputModel.js +1 -0
  52. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/SpacePressInputModel.js +1 -0
  53. package/es/library/behaviours/keyboard-controls/applications/interfaces/input/UpArrowPressInputModel.js +1 -0
  54. package/es/library/behaviours/keyboard-controls/applications/interfaces/output/IPresenter.js +1 -0
  55. package/es/library/behaviours/keyboard-controls/applications/interfaces/output/OutputModel.js +1 -0
  56. package/es/library/behaviours/keyboard-controls/applications/usecases/AbstractUseCase.js +19 -0
  57. package/es/library/behaviours/keyboard-controls/applications/usecases/DestructUsecase.js +17 -0
  58. package/es/library/behaviours/keyboard-controls/applications/usecases/DownArrowPress.js +16 -0
  59. package/es/library/behaviours/keyboard-controls/applications/usecases/EnterPress.js +19 -0
  60. package/es/library/behaviours/keyboard-controls/applications/usecases/FocusNextUsecase.js +16 -0
  61. package/es/library/behaviours/keyboard-controls/applications/usecases/FocusPreviousUsecase.js +16 -0
  62. package/es/library/behaviours/keyboard-controls/applications/usecases/InitializeUsecase.js +20 -0
  63. package/es/library/behaviours/keyboard-controls/applications/usecases/SpacePress.js +19 -0
  64. package/es/library/behaviours/keyboard-controls/applications/usecases/UpArrowPress.js +16 -0
  65. package/es/library/behaviours/keyboard-controls/domain/entities/KeyboardControls.js +87 -0
  66. package/es/library/behaviours/keyboard-controls/domain/entities/interface/IKeyboardControls.js +1 -0
  67. package/es/library/behaviours/keyboard-controls/domain/entities/interface/KeyboardControlModel.js +1 -0
  68. package/es/library/behaviours/keyboard-controls/frameworks/EventHandlerFactory.js +48 -0
  69. package/es/library/behaviours/keyboard-controls/frameworks/KeyboardControlBehaviourFactory.js +23 -0
  70. package/es/library/custom-component/frameworks/ui/ComponentRegistry.js +8 -0
  71. package/es/library/dot/components/action-location/frameworks/ui/ActionComponentMapping.js +4 -0
  72. package/es/library/dot/components/table-list/adapters/controllers/KeyboardRowClickController.js +36 -0
  73. package/es/library/dot/components/table-list/adapters/controllers/KeyboardRowSelectController.js +31 -0
  74. package/es/library/dot/components/table-list/adapters/controllers/index.js +3 -1
  75. package/es/library/dot/components/table-list/adapters/presenters/TableTranslator.js +5 -3
  76. package/es/library/dot/components/table-list/frameworks/ui/EventHandlersFactory.js +4 -1
  77. package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +10 -3
  78. package/es/library/dot/components/table-list/frameworks/ui/css/TableList.module.css +3 -0
  79. package/es/library/dot/components/table-list/frameworks/ui/sub-components/Header.js +9 -10
  80. package/es/library/dot/components/table-list/frameworks/ui/sub-components/Rows.js +7 -3
  81. package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/HeaderData.js +7 -2
  82. package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/MassAction.js +28 -0
  83. package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/Row.js +5 -0
  84. package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/RowData.js +7 -2
  85. package/es/library/dot/legacy-to-new-arch/table-column-chooser/frameworks/ui/TableColumnChooser.js +11 -0
  86. package/es/library/dot/legacy-to-new-arch/table-column-chooser/frameworks/ui/TableColumnChooserView.js +79 -0
  87. package/es/library/dot/legacy-to-new-arch/table-field-components/lookup-field/frameworks/ui/LookupFieldView.js +6 -8
  88. package/es/platform/client-actions/components/row-actions-renderer/frameworks/ui/RowActionsRenderer.module.css +0 -6
  89. package/es/platform/client-actions/components/row-actions-renderer/frameworks/ui/RowActionsRendererView.js +1 -1
  90. package/es/platform/column-chooser/adapters/controllers/AbstractController.js +10 -0
  91. package/es/platform/column-chooser/adapters/controllers/ColumnChooserCloseController.js +21 -0
  92. package/es/platform/column-chooser/adapters/controllers/ColumnChooserOpenController.js +26 -0
  93. package/es/platform/column-chooser/adapters/controllers/ColumnChooserReorderController.js +26 -0
  94. package/es/platform/column-chooser/adapters/controllers/ColumnChooserSaveController.js +21 -0
  95. package/es/platform/column-chooser/adapters/controllers/ColumnChooserSearchController.js +24 -0
  96. package/es/platform/column-chooser/adapters/controllers/ColumnChooserSelectController.js +26 -0
  97. package/es/platform/column-chooser/adapters/gateways/Repository.js +38 -0
  98. package/es/platform/column-chooser/adapters/gateways/Service.js +34 -0
  99. package/es/platform/column-chooser/adapters/gateways/State.js +1 -0
  100. package/es/platform/column-chooser/adapters/presenters/Presenter.js +25 -0
  101. package/es/platform/column-chooser/applications/interfaces/UsecaseDependencies.js +1 -0
  102. package/es/platform/column-chooser/applications/interfaces/gateways/IRepository.js +1 -0
  103. package/es/platform/column-chooser/applications/interfaces/gateways/IService.js +1 -0
  104. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserCloseInput.js +1 -0
  105. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserOpenInput.js +1 -0
  106. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserReorderInput.js +1 -0
  107. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSaveInput.js +1 -0
  108. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSearchInput.js +1 -0
  109. package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSelectInput.js +1 -0
  110. package/es/platform/column-chooser/applications/interfaces/output/BehaviourState.js +1 -0
  111. package/es/platform/column-chooser/applications/interfaces/output/IPresenter.js +1 -0
  112. package/es/platform/column-chooser/applications/usecases/AbstractUseCase.js +18 -0
  113. package/es/platform/column-chooser/applications/usecases/ColumnChooserCloseUseCase.js +34 -0
  114. package/es/platform/column-chooser/applications/usecases/ColumnChooserOpenUseCase.js +20 -0
  115. package/es/platform/column-chooser/applications/usecases/ColumnChooserReorderUseCase.js +20 -0
  116. package/es/platform/column-chooser/applications/usecases/ColumnChooserSaveUseCase.js +31 -0
  117. package/es/platform/column-chooser/applications/usecases/ColumnChooserSearchUseCase.js +19 -0
  118. package/es/platform/column-chooser/applications/usecases/ColumnChooserSelectUseCase.js +26 -0
  119. package/es/platform/column-chooser/domain/entities/ColumnChooserImp.js +95 -0
  120. package/es/platform/column-chooser/domain/entities/ReorderEntityImp.js +35 -0
  121. package/es/platform/column-chooser/domain/entities/SearchEntityImp.js +28 -0
  122. package/es/platform/column-chooser/domain/entities/SelectEntityImp.js +58 -0
  123. package/es/platform/column-chooser/domain/entities/interfaces/ColumnChooser.js +1 -0
  124. package/es/platform/column-chooser/domain/entities/interfaces/ReorderEntity.js +1 -0
  125. package/es/platform/column-chooser/domain/entities/interfaces/SearchEntity.js +1 -0
  126. package/es/platform/column-chooser/domain/entities/interfaces/SelectEntity.js +1 -0
  127. package/es/platform/column-chooser/frameworks/ColumnChooserBehaviourFactory.js +19 -0
  128. package/es/platform/column-chooser/frameworks/EventHandlersFactory.js +30 -0
  129. package/es/platform/data-source/http-template/updateSelectedFields.js +28 -0
  130. package/es/platform/data-source/index.js +2 -0
  131. package/es/platform/zfield/domain/entities/fields-manager/FieldsManager.js +3 -1
  132. package/es/platform/zfield/domain/entities/interfaces/FieldApiName.js +1 -0
  133. package/es/platform/zfield/frameworks/ZFieldBehaviourFactory.js +6 -1
  134. package/es/platform/zlist/adapters/gateways/Repository.js +4 -2
  135. package/es/platform/zlist/adapters/presenters/SelectionTranslator.js +92 -0
  136. package/es/platform/zlist/adapters/presenters/TableTranslator.js +32 -19
  137. package/es/platform/zlist/adapters/presenters/translators/ColumnTranslator.js +63 -4
  138. package/es/platform/zlist/adapters/presenters/translators/Row.js +1 -1
  139. package/es/platform/zlist/adapters/presenters/translators/fields/LookUpFieldTranslator.js +6 -6
  140. package/es/platform/zlist/adapters/presenters/translators/interfaces/State.js +2 -1
  141. package/es/platform/zlist/adapters/presenters/utils/DefaultClientActions.js +78 -6
  142. package/es/platform/zlist/applications/entities-factory/ListFactory.js +3 -2
  143. package/es/platform/zlist/applications/usecases/FetchMoreUseCase.js +4 -1
  144. package/es/platform/zlist/applications/usecases/RecordExecuteFailedUseCase.js +3 -1
  145. package/es/platform/zlist/domain/entities/List.js +14 -2
  146. package/package.json +6 -4
  147. package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/SelectAll.js +0 -26
@@ -0,0 +1,95 @@
1
+ export default class ColumnChooserImp {
2
+ constructor() {
3
+ let isSaved = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4
+ let reorderEntity = arguments.length > 1 ? arguments[1] : undefined;
5
+ let searchEntity = arguments.length > 2 ? arguments[2] : undefined;
6
+ let selectEntity = arguments.length > 3 ? arguments[3] : undefined;
7
+ this.isSaved = isSaved;
8
+ this.reorderEntity = reorderEntity;
9
+ this.searchEntity = searchEntity;
10
+ this.selectEntity = selectEntity;
11
+ }
12
+
13
+ markAsSaved() {
14
+ this.isSaved = true;
15
+ }
16
+
17
+ hasBeenSaved() {
18
+ return this.isSaved;
19
+ }
20
+
21
+ markAsUnsaved() {
22
+ this.isSaved = false;
23
+ }
24
+
25
+ init(order, selectedArray) {
26
+ this.reorderEntity.initOrder(order);
27
+ this.selectEntity.resetSelection(selectedArray);
28
+ this.searchEntity.setSearchText('');
29
+ }
30
+
31
+ setSearchText(searchStr) {
32
+ this.searchEntity.setSearchText(searchStr);
33
+ }
34
+
35
+ select(id) {
36
+ if (!this.selectEntity.isMaxSelectionReached()) {
37
+ this.selectEntity.select(id);
38
+ this.rearrangeSelectedFirst();
39
+ }
40
+ }
41
+
42
+ deselect(id) {
43
+ if (this.selectEntity.getSelectedCount() > 1) {
44
+ this.selectEntity.deselect(id);
45
+ this.rearrangeSelectedFirst();
46
+ }
47
+ }
48
+
49
+ rearrangeSelectedFirst() {
50
+ const order = this.reorderEntity.getOrder();
51
+ const selected = this.selectEntity.getSelected();
52
+ const selectedArray = [];
53
+ const unselectedArray = [];
54
+ order.forEach(field => {
55
+ if (selected[field]) {
56
+ selectedArray.push(field);
57
+ } else {
58
+ unselectedArray.push(field);
59
+ }
60
+ });
61
+ this.reorderEntity.initOrder([...selectedArray, ...unselectedArray]);
62
+ }
63
+
64
+ arrayMoveImmutable(fromIndex, toIndex) {
65
+ this.reorderEntity.arrayMoveImmutable(fromIndex, toIndex);
66
+ }
67
+
68
+ getOrder() {
69
+ return this.reorderEntity.getOrder();
70
+ }
71
+
72
+ getSelectedWithOrder() {
73
+ const order = this.reorderEntity.getOrder();
74
+ const selected = this.selectEntity.getSelected();
75
+ return order.filter(field => selected[field]);
76
+ }
77
+
78
+ toObject() {
79
+ const isSaved = this.hasBeenSaved();
80
+ const order = this.reorderEntity.getOrder();
81
+ const selected = this.selectEntity.getSelected();
82
+ const fieldsOrder = this.searchEntity.filterOptions(order);
83
+ const searchText = this.searchEntity.getSearchText();
84
+ const isMaxSelectionReached = this.selectEntity.isMaxSelectionReached();
85
+ return {
86
+ order,
87
+ selected,
88
+ isSaved,
89
+ isMaxSelectionReached,
90
+ fieldsOrder,
91
+ searchText
92
+ };
93
+ }
94
+
95
+ }
@@ -0,0 +1,35 @@
1
+ export default class ReorderEntityImp {
2
+ constructor(order) {
3
+ this.order = order;
4
+ }
5
+
6
+ initOrder(order) {
7
+ this.order = [...order];
8
+ }
9
+
10
+ moveTo(id, index) {
11
+ const currentIndex = this.order.indexOf(id);
12
+ this.arrayMoveImmutable(currentIndex, index);
13
+ }
14
+
15
+ arrayMoveImmutable(fromIndex, toIndex) {
16
+ if (fromIndex === toIndex) {
17
+ return;
18
+ }
19
+
20
+ const newOrder = [...this.order];
21
+ const startIndex = fromIndex < 0 ? newOrder.length + fromIndex : fromIndex;
22
+
23
+ if (startIndex >= 0 && startIndex < newOrder.length) {
24
+ const endIndex = toIndex < 0 ? newOrder.length + toIndex : toIndex;
25
+ const [item] = newOrder.splice(fromIndex, 1);
26
+ newOrder.splice(endIndex, 0, item);
27
+ this.order = newOrder;
28
+ }
29
+ }
30
+
31
+ getOrder() {
32
+ return this.order;
33
+ }
34
+
35
+ }
@@ -0,0 +1,28 @@
1
+ export default class SearchEntityImp {
2
+ constructor(searchText, getValue) {
3
+ this.searchText = searchText;
4
+ this.getValue = getValue;
5
+ }
6
+
7
+ getSearchText() {
8
+ return this.searchText;
9
+ }
10
+
11
+ setSearchText(term) {
12
+ this.searchText = term;
13
+ }
14
+
15
+ filterOptions(options) {
16
+ if (!this.searchText) {
17
+ return options;
18
+ }
19
+
20
+ return options.filter(option => this.matches(this.getValue(option)));
21
+ }
22
+
23
+ matches(value) {
24
+ if (!this.searchText) return true;
25
+ return value.toLowerCase().includes(this.searchText.toLowerCase());
26
+ }
27
+
28
+ }
@@ -0,0 +1,58 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ export default class SelectEntityImp {
4
+ constructor(selected, maxCount) {
5
+ this.selected = selected;
6
+ this.maxCount = maxCount;
7
+
8
+ _defineProperty(this, "selectedCount", void 0);
9
+
10
+ this.calculateSelectedCount();
11
+ }
12
+
13
+ getSelectedCount() {
14
+ this.calculateSelectedCount();
15
+ return this.selectedCount;
16
+ }
17
+
18
+ resetSelection(selectedArray) {
19
+ // Clear all current selections
20
+ this.selected = {}; // Select items in the given order, up to maxCount
21
+
22
+ for (let i = 0; i < selectedArray.length && (this.maxCount === 0 || i < this.maxCount); i++) {
23
+ this.selected[selectedArray[i]] = true;
24
+ }
25
+
26
+ this.calculateSelectedCount();
27
+ }
28
+
29
+ calculateSelectedCount() {
30
+ this.selectedCount = Object.values(this.selected).filter(Boolean).length;
31
+ return this.selectedCount;
32
+ }
33
+
34
+ select(item) {
35
+ if (this.isMaxSelectionReached()) {
36
+ return; // throw new Error(`Cannot select more than ${this.maxCount} items`);
37
+ }
38
+
39
+ this.selected[item] = true;
40
+ this.calculateSelectedCount();
41
+ }
42
+
43
+ isMaxSelectionReached() {
44
+ return this.maxCount > 0 && this.selectedCount >= this.maxCount;
45
+ }
46
+
47
+ deselect(item) {
48
+ if (this.selected[item]) {
49
+ delete this.selected[item];
50
+ this.calculateSelectedCount();
51
+ }
52
+ }
53
+
54
+ getSelected() {
55
+ return this.selected;
56
+ }
57
+
58
+ }
@@ -0,0 +1,19 @@
1
+ import Properties from "../../../bc/column-chooser/Properties";
2
+ import EventHandlersFactory from "./EventHandlersFactory";
3
+ export default class ColumnChooserBehaviourFactory {
4
+ static create() {
5
+ return {
6
+ name: 'columnChooser',
7
+ setInitialState: () => ({
8
+ order: [],
9
+ selected: {},
10
+ isMaxSelectionReached: false,
11
+ fieldsOrder: [],
12
+ searchText: ''
13
+ }),
14
+ eventHandlers: EventHandlersFactory.create(),
15
+ properties: Properties
16
+ };
17
+ }
18
+
19
+ }
@@ -0,0 +1,30 @@
1
+ import Service from "../adapters/gateways/Service";
2
+ import Presenter from "../adapters/presenters/Presenter";
3
+ import Repository from "../adapters/gateways/Repository";
4
+ import { COLUMN_CHOOSER_BEHAVIOUR_OPENED } from "../../../bc/column-chooser/Constants";
5
+ import { COLUMN_CHOOSER_SELECT_REQUESTED, COLUMN_CHOOSER_REORDER_REQUESTED, COLUMN_CHOOSER_SEARCH_REQUESTED, COLUMN_CHOOSER_SAVE_REQUESTED, COLUMN_CHOOSER_CLOSE_REQUESTED } from "../../../cc/table-column-chooser/Constants";
6
+ import ColumnChooserOpenController from "../adapters/controllers/ColumnChooserOpenController";
7
+ import ColumnChooserSelectController from "../adapters/controllers/ColumnChooserSelectController";
8
+ import ColumnChooserReorderController from "../adapters/controllers/ColumnChooserReorderController";
9
+ import ColumnChooserSaveController from "../adapters/controllers/ColumnChooserSaveController";
10
+ import ColumnChooserSearchController from "../adapters/controllers/ColumnChooserSearchController";
11
+ import ColumnChooserCloseController from "../adapters/controllers/ColumnChooserCloseController";
12
+ export default class EventHandlersFactory {
13
+ static create() {
14
+ const repository = new Repository();
15
+ const presenter = new Presenter();
16
+ const service = new Service({
17
+ repository,
18
+ presenter
19
+ });
20
+ return {
21
+ [COLUMN_CHOOSER_BEHAVIOUR_OPENED]: new ColumnChooserOpenController(service).handle,
22
+ [COLUMN_CHOOSER_SELECT_REQUESTED]: new ColumnChooserSelectController(service).handle,
23
+ [COLUMN_CHOOSER_REORDER_REQUESTED]: new ColumnChooserReorderController(service).handle,
24
+ [COLUMN_CHOOSER_SEARCH_REQUESTED]: new ColumnChooserSearchController(service).handle,
25
+ [COLUMN_CHOOSER_SAVE_REQUESTED]: new ColumnChooserSaveController(service).handle,
26
+ [COLUMN_CHOOSER_CLOSE_REQUESTED]: new ColumnChooserCloseController(service).handle
27
+ };
28
+ }
29
+
30
+ }
@@ -0,0 +1,28 @@
1
+ const updateSelectedFields = {
2
+ name: 'selectedFields',
3
+ api: '/{{servicePrefix}}/{{orgName}}/api/v1/views/{{viewId}}/selectedFields',
4
+ parameters: `{}`,
5
+ type: 'PUT',
6
+ requestBody: '{"fields": {{fields}}}',
7
+ transformer: res => res.fields,
8
+ properties: {
9
+ viewId: {
10
+ required: true,
11
+ typeMetadata: {
12
+ schema: {
13
+ type: 'string'
14
+ }
15
+ }
16
+ },
17
+ departmentId: {
18
+ required: true,
19
+ defaultValue: 1,
20
+ typeMetadata: {
21
+ schema: {
22
+ type: 'number'
23
+ }
24
+ }
25
+ }
26
+ }
27
+ };
28
+ export default updateSelectedFields;
@@ -13,6 +13,7 @@ import fetchLayoutRules from "./http-template/fetchLayoutRules";
13
13
  import fetchDependencyMappings from "./http-template/fetchDependencyMappings";
14
14
  import fetchValidationRules from "./http-template/fetchValidationRules";
15
15
  import createRecord from "./http-template/createRecord";
16
+ import updateSelectedFields from "./http-template/updateSelectedFields";
16
17
  let dataSource = {
17
18
  httpTemplates: {
18
19
  [RecordApiActionName.GET_RECORDS]: getRecords,
@@ -23,6 +24,7 @@ let dataSource = {
23
24
  [RecordApiActionName.GET_CLIENTACTIONS]: getClientActions,
24
25
  getAvailableFields,
25
26
  getSelectedFields,
27
+ updateSelectedFields,
26
28
  fetchMyLayouts,
27
29
  fetchMyForm,
28
30
  fetchLayoutRules,
@@ -61,7 +61,7 @@ class FieldManager {
61
61
  const {
62
62
  apiName
63
63
  } = metaData;
64
- return apiName === 'availableFields' || apiName === 'selectedFields';
64
+ return apiName === 'availableFields' || apiName === 'selectedFields' || apiName === FieldApiName.UPDATE_SELECTED_FIELDS;
65
65
  }
66
66
 
67
67
  startFetching(apiName) {
@@ -85,6 +85,8 @@ class FieldManager {
85
85
  this.fields = data;
86
86
  } else if (apiName === FieldApiName.SELECTED_FIELDS) {
87
87
  this.selectedFields = data;
88
+ } else if (apiName === FieldApiName.UPDATE_SELECTED_FIELDS) {
89
+ this.selectedFields = data;
88
90
  }
89
91
  }
90
92
 
@@ -1,6 +1,7 @@
1
1
  var FieldApiName = /*#__PURE__*/function (FieldApiName) {
2
2
  FieldApiName["AVAILABLE_FIELDS"] = "availableFields";
3
3
  FieldApiName["SELECTED_FIELDS"] = "selectedFields";
4
+ FieldApiName["UPDATE_SELECTED_FIELDS"] = "updateSelectedFields";
4
5
  return FieldApiName;
5
6
  }(FieldApiName || {});
6
7
 
@@ -4,7 +4,12 @@ class ZFieldBehaviourFactory {
4
4
  static create(apiTemplates) {
5
5
  return {
6
6
  name: 'zfield',
7
- setInitialState: () => ({}),
7
+ setInitialState: () => ({
8
+ fields: [],
9
+ selectedFields: [],
10
+ isFieldsFetching: false,
11
+ isSelectedFieldsFetching: false
12
+ }),
8
13
  eventHandlers: ActionHandlerFactory.create(apiTemplates),
9
14
  properties: {}
10
15
  };
@@ -21,7 +21,8 @@ class Repository {
21
21
  context
22
22
  } = this.state.properties;
23
23
  const {
24
- sortBy
24
+ sortBy,
25
+ errorRecordFailed
25
26
  } = this.getZListState();
26
27
  const list = ListFactory.createList({
27
28
  context,
@@ -32,7 +33,8 @@ class Repository {
32
33
  ...query
33
34
  },
34
35
  sortBy: new SortBy(sortBy.id, sortBy.name, sortBy.order),
35
- limit: 50
36
+ limit: 50,
37
+ errorRecordFailed
36
38
  });
37
39
  return list;
38
40
  }
@@ -0,0 +1,92 @@
1
+ /* eslint-disable @zohodesk/architecturerules/define-property-schema */
2
+
3
+ /* eslint-disable max-lines-per-function */
4
+ import ClientActionsTranslator from "../../../client-actions/translators/client-actions-translator";
5
+ import DefaultClientActions from "./utils/DefaultClientActions";
6
+ export default function SelectionTranslator(state) {
7
+ const {
8
+ behaviours,
9
+ properties
10
+ } = state;
11
+ const {
12
+ columnChooserConfig,
13
+ selectionConfig,
14
+ context,
15
+ moduleName
16
+ } = properties;
17
+ const {
18
+ zfield,
19
+ selection,
20
+ columnChooser
21
+ } = behaviours;
22
+ const {
23
+ selected,
24
+ hasAllSelected
25
+ } = selection;
26
+ const availableFields = zfield.fields;
27
+ const columnChooserProps = getColumnChooserProps(columnChooser, availableFields, context, moduleName);
28
+ const clientActions = generateClientActions(selectionConfig, columnChooserConfig, hasAllSelected, columnChooserProps);
29
+ const contextAppliedActions = ClientActionsTranslator.transform(clientActions, context);
30
+ return {
31
+ selected,
32
+ hasAllSelected,
33
+ actions: contextAppliedActions
34
+ };
35
+ }
36
+
37
+ function generateClientActions(selectionConfig, columnChooserConfig, hasAllSelected, columnChooserProps) {
38
+ const clientActions = [];
39
+
40
+ if (selectionConfig.isEnabled) {
41
+ if (columnChooserConfig.isEnabled) {
42
+ const columnChooserAction = DefaultClientActions.createColumnChooserAction(columnChooserProps);
43
+ clientActions.push(columnChooserAction);
44
+ } else if (selectionConfig.isSelectAllEnabled) {
45
+ const selectAllColumnsAction = DefaultClientActions.createSelectAllAction(hasAllSelected);
46
+ clientActions.push(selectAllColumnsAction);
47
+ }
48
+ }
49
+
50
+ return clientActions;
51
+ }
52
+
53
+ function getColumnChooserProps(columnChooser) {
54
+ var _context$modules, _context$modules$find;
55
+
56
+ let availableFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
57
+ let context = arguments.length > 2 ? arguments[2] : undefined;
58
+ let moduleName = arguments.length > 3 ? arguments[3] : undefined;
59
+ const {
60
+ searchText: searchString,
61
+ fieldsOrder,
62
+ selected,
63
+ isMaxSelectionReached
64
+ } = columnChooser;
65
+ const fieldMap = mapFieldsToObject(availableFields);
66
+ const disabledFieldName = (_context$modules = context.modules) === null || _context$modules === void 0 ? void 0 : (_context$modules$find = _context$modules.find(module => module.apiKey === moduleName)) === null || _context$modules$find === void 0 ? void 0 : _context$modules$find.nameField;
67
+ const columnChooserOptions = fieldsOrder.map(fieldName => getOption(fieldMap[fieldName], !!selected[fieldName], disabledFieldName === fieldName));
68
+ return {
69
+ options: columnChooserOptions,
70
+ searchString,
71
+ hasSearch: searchString !== '' || columnChooserOptions.length > 3,
72
+ errorMessage: isMaxSelectionReached ? "You've reached the limit of 15 columns." : ''
73
+ };
74
+ }
75
+
76
+ function getOption(field, checked, disabled) {
77
+ return {
78
+ id: field.name,
79
+ disabled,
80
+ locked: false,
81
+ // TODO - field.isLocked,
82
+ value: field.i18NLabel,
83
+ checked
84
+ };
85
+ }
86
+
87
+ function mapFieldsToObject(availableFields) {
88
+ return availableFields.reduce((acc, field) => {
89
+ acc[field.name] = field;
90
+ return acc;
91
+ }, {});
92
+ }
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @zohodesk/architecturerules/define-property-schema */
2
+
1
3
  /* eslint-disable max-lines-per-function */
2
4
  import { Width as ColumnWidth } from "../../../../cc/table-list/data-types/Header";
3
5
  import HeadersTranslator from "./translators/HeadersTranslator";
@@ -8,6 +10,7 @@ import { TableListConstants } from "../../../../cc/table-list";
8
10
  import { ResizerStateTranslator } from "./translators/ResizerStateTranslator";
9
11
  import { calculateFieldWidths } from "./utils/calculateFieldWidths";
10
12
  import DefaultClientActions from "./utils/DefaultClientActions";
13
+ import SelectionTranslator from "./SelectionTranslator";
11
14
  const EMPTY_OBJECT = {};
12
15
  const EMPTY_ARRAY = [];
13
16
 
@@ -27,11 +30,13 @@ export default class TableTranslator {
27
30
  } = properties;
28
31
  const {
29
32
  localStorage: localStorageBehaviour,
30
- columnResizer
33
+ columnResizer,
34
+ keyboardControls
31
35
  } = behaviours;
32
36
  const {
33
37
  resizeConfig,
34
- preferences
38
+ preferences,
39
+ keyboardControlsConfig
35
40
  } = properties;
36
41
  context['servicePrefix'] = 'supportapi/zd'; // FIX: servicePrefix defaultValue should be available from properties
37
42
 
@@ -46,6 +51,10 @@ export default class TableTranslator {
46
51
  sortBy
47
52
  } = fallbackToDefault(zlist, {}); // FIX: zlist should be available by default
48
53
 
54
+ const {
55
+ focussedIndex
56
+ } = fallbackToDefault(keyboardControls, {}); // FIX: KeyboardControls should be available by default
57
+
49
58
  const {
50
59
  records,
51
60
  isFetching: isRecordsFetching
@@ -93,23 +102,27 @@ export default class TableTranslator {
93
102
  return {
94
103
  properties,
95
104
  behaviours,
96
- selection: behaviours === null || behaviours === void 0 ? void 0 : behaviours.selection,
97
- sortBy,
98
- rowCursor,
99
- resizerState: ResizerStateTranslator({
100
- columnResizer: columnResizer,
101
- resizeConfig: resizeConfig,
102
- headerNames: selectedFields,
103
- modifiedWidths
104
- }),
105
- rowActionsConfig: {
106
- hasActions: Boolean(rowActions === null || rowActions === void 0 ? void 0 : rowActions.length),
107
- // Boolean(newRowActions?.length),
108
- columnWidth: ColumnWidth.XSmall
109
- },
110
- isLoading,
111
- emptyStateUiType: componentMapping.emptyState || '',
112
- data
105
+ viewModel: {
106
+ selection: SelectionTranslator(state),
107
+ focussedRow: focussedIndex,
108
+ sortBy,
109
+ rowCursor,
110
+ resizerState: ResizerStateTranslator({
111
+ columnResizer: columnResizer,
112
+ resizeConfig: resizeConfig,
113
+ headerNames: selectedFields,
114
+ modifiedWidths
115
+ }),
116
+ rowActionsConfig: {
117
+ hasActions: Boolean(rowActions === null || rowActions === void 0 ? void 0 : rowActions.length),
118
+ // Boolean(newRowActions?.length),
119
+ columnWidth: ColumnWidth.XSmall
120
+ },
121
+ keyboardControlsConfig,
122
+ isLoading,
123
+ emptyStateUiType: componentMapping.emptyState || '',
124
+ data
125
+ }
113
126
  };
114
127
  }
115
128
 
@@ -2,16 +2,38 @@ import EmptyViewModel from "./EmptyViewModel";
2
2
  import * as FieldTranslators from "./fields";
3
3
  import ClientActionsTranslator from "../../../../client-actions/translators/client-actions-translator";
4
4
 
5
- function ColumnTranslator(fieldModel, record, fieldComponentMapping, fieldActions) {
5
+ //hacking temp url construction for lookup
6
+ function getLookupUrlConstructions(_ref) {
7
+ var _field$lookup, _field$lookup$module;
8
+
9
+ let {
10
+ field,
11
+ value,
12
+ context
13
+ } = _ref;
14
+ let {
15
+ orgName,
16
+ departmentName
17
+ } = context;
18
+ let lookupModuleName = field === null || field === void 0 ? void 0 : (_field$lookup = field.lookup) === null || _field$lookup === void 0 ? void 0 : (_field$lookup$module = _field$lookup.module) === null || _field$lookup$module === void 0 ? void 0 : _field$lookup$module.apiName;
19
+ return `/agent/${orgName}/${departmentName}/${lookupModuleName}/details/${value.id}`;
20
+ }
21
+
22
+ function ColumnTranslator(field, record, fieldComponentMapping, fieldActions, context) {
6
23
  var _record$cf;
7
24
 
8
- const field = { ...fieldModel
9
- };
10
25
  const {
11
26
  isCustomField,
12
27
  name,
13
28
  type
14
29
  } = field;
30
+ let fieldToUiValue;
31
+ const fieldEntry = fieldComponentMapping[name];
32
+
33
+ if (typeof fieldEntry == 'string') {
34
+ console.warn(`The string format for componentMapping will soon be deprecated. Please update to the new JSON format. REF : ${JSON.stringify(fieldEntry)}`);
35
+ }
36
+
15
37
  const value = isCustomField ? (_record$cf = record.cf) === null || _record$cf === void 0 ? void 0 : _record$cf[name] : record[name];
16
38
  const actions = ClientActionsTranslator.transform(fieldActions, {
17
39
  field,
@@ -33,9 +55,46 @@ function ColumnTranslator(fieldModel, record, fieldComponentMapping, fieldAction
33
55
  return EmptyViewModel();
34
56
  }
35
57
 
58
+ if (field.type == "LookUp") {
59
+ value.url = getLookupUrlConstructions({
60
+ field,
61
+ value,
62
+ context
63
+ });
64
+ }
65
+
66
+ let finalValue = value;
67
+
68
+ if (fieldToUiValue !== undefined) {
69
+ finalValue = fieldToUiValue;
70
+ }
71
+
72
+ if (fieldEntry && typeof fieldEntry === 'object') {
73
+ let data = {
74
+ actions,
75
+ ...fieldTranslator(field, finalValue, {
76
+ recordId: record.id
77
+ })
78
+ };
79
+ data.value = fieldEntry.fieldToUIComponentTranslator({
80
+ field,
81
+ record,
82
+ context
83
+ });
84
+ data.type = fieldEntry.UIComponentName;
85
+ console.log(data, "====>>> custom field modal");
86
+ return data;
87
+ }
88
+
89
+ console.log({
90
+ actions,
91
+ ...fieldTranslator(field, finalValue, {
92
+ recordId: record.id
93
+ })
94
+ }, "====>>> normal pre-defined field modal");
36
95
  return {
37
96
  actions,
38
- ...fieldTranslator(field, value, {
97
+ ...fieldTranslator(field, finalValue, {
39
98
  recordId: record.id
40
99
  })
41
100
  };
@@ -15,7 +15,7 @@ export default function RowTranslator(_ref) {
15
15
  });
16
16
  return {
17
17
  id: record.id,
18
- columns: fields.map(field => ColumnTranslator(field, record, fieldComponentMapping, fieldActions)),
18
+ columns: fields.map(field => ColumnTranslator(field, record, fieldComponentMapping, fieldActions, context)),
19
19
  rowActionLocation: {
20
20
  type: rowActionsUiType,
21
21
  actions