@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.
- package/es/bc/column-chooser/Constants.js +4 -0
- package/es/bc/column-chooser/EventHandlers.js +2 -0
- package/es/bc/column-chooser/Events.js +59 -0
- package/es/bc/column-chooser/Properties.js +18 -0
- package/es/bc/keyboard-controls/Constants.js +5 -0
- package/es/bc/keyboard-controls/Events.js +51 -0
- package/es/bc/keyboard-controls/Properties.js +11 -0
- package/es/bc/keyboard-controls/types/KeyboardControlBehaviourState.js +1 -0
- package/es/bc/zlist/Properties.js +15 -0
- package/es/cc/fields/field/Properties.js +10 -1
- package/es/cc/fields/index.js +1 -1
- package/es/cc/table-column-chooser/Constants.js +6 -0
- package/es/cc/table-column-chooser/Events.js +69 -0
- package/es/cc/table-column-chooser/Properties.js +122 -0
- package/es/cc/table-column-chooser/index.js +3 -0
- package/es/cc/table-connected/Properties.js +16 -0
- package/es/cc/table-connected/constants/Events.js +4 -1
- package/es/cc/table-list/Properties.js +27 -1
- package/es/cc/table-list/data-types/KeyboardControlsConfig.js +1 -0
- package/es/cc/table-list/row/Properties.js +18 -0
- package/es/desk-frameworks/table-connected/adapters/controllers/ColumnChooserOpenedController.js +36 -0
- package/es/desk-frameworks/table-connected/adapters/controllers/ColumnChooserUpdateController.js +25 -0
- package/es/desk-frameworks/table-connected/frameworks/EventHandlersFactory.js +8 -2
- package/es/desk-frameworks/table-connected/frameworks/TableConnectedFactory.js +5 -2
- package/es/desk-frameworks/table-connected/frameworks/TableConnectedView.js +9 -6
- package/es/library/behaviours/keyboard-controls/adapters/controllers/AbstractController.js +9 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/DestructController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/DownArrowPressController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/EnterPressController.js +24 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/FocusNextController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/FocusPreviousController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/InitializeController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/SpacePressController.js +24 -0
- package/es/library/behaviours/keyboard-controls/adapters/controllers/UpArrowPressController.js +20 -0
- package/es/library/behaviours/keyboard-controls/adapters/gateways/KeyboardHandler.js +81 -0
- package/es/library/behaviours/keyboard-controls/adapters/gateways/Repository.js +47 -0
- package/es/library/behaviours/keyboard-controls/adapters/gateways/Service.js +40 -0
- package/es/library/behaviours/keyboard-controls/adapters/presenters/Presenter.js +39 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/UseCase.js +0 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/UseCaseDependencies.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IKeyboardHandler.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IRepository.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/gateways/IService.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/DestructInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/DownArrowPressInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/EnterPressInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/FocusNextInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/FocusPreviousInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/InitializeInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/RowActionInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/SelectionInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/SpacePressInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/input/UpArrowPressInputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/output/IPresenter.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/interfaces/output/OutputModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/AbstractUseCase.js +19 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/DestructUsecase.js +17 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/DownArrowPress.js +16 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/EnterPress.js +19 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/FocusNextUsecase.js +16 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/FocusPreviousUsecase.js +16 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/InitializeUsecase.js +20 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/SpacePress.js +19 -0
- package/es/library/behaviours/keyboard-controls/applications/usecases/UpArrowPress.js +16 -0
- package/es/library/behaviours/keyboard-controls/domain/entities/KeyboardControls.js +87 -0
- package/es/library/behaviours/keyboard-controls/domain/entities/interface/IKeyboardControls.js +1 -0
- package/es/library/behaviours/keyboard-controls/domain/entities/interface/KeyboardControlModel.js +1 -0
- package/es/library/behaviours/keyboard-controls/frameworks/EventHandlerFactory.js +48 -0
- package/es/library/behaviours/keyboard-controls/frameworks/KeyboardControlBehaviourFactory.js +23 -0
- package/es/library/custom-component/frameworks/ui/ComponentRegistry.js +8 -0
- package/es/library/dot/components/action-location/frameworks/ui/ActionComponentMapping.js +4 -0
- package/es/library/dot/components/table-list/adapters/controllers/KeyboardRowClickController.js +36 -0
- package/es/library/dot/components/table-list/adapters/controllers/KeyboardRowSelectController.js +31 -0
- package/es/library/dot/components/table-list/adapters/controllers/index.js +3 -1
- package/es/library/dot/components/table-list/adapters/presenters/TableTranslator.js +5 -3
- package/es/library/dot/components/table-list/frameworks/ui/EventHandlersFactory.js +4 -1
- package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +10 -3
- package/es/library/dot/components/table-list/frameworks/ui/css/TableList.module.css +3 -0
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/Header.js +9 -10
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/Rows.js +7 -3
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/HeaderData.js +7 -2
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/MassAction.js +28 -0
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/Row.js +5 -0
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/RowData.js +7 -2
- package/es/library/dot/legacy-to-new-arch/table-column-chooser/frameworks/ui/TableColumnChooser.js +11 -0
- package/es/library/dot/legacy-to-new-arch/table-column-chooser/frameworks/ui/TableColumnChooserView.js +79 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/lookup-field/frameworks/ui/LookupFieldView.js +6 -8
- package/es/platform/client-actions/components/row-actions-renderer/frameworks/ui/RowActionsRenderer.module.css +0 -6
- package/es/platform/client-actions/components/row-actions-renderer/frameworks/ui/RowActionsRendererView.js +1 -1
- package/es/platform/column-chooser/adapters/controllers/AbstractController.js +10 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserCloseController.js +21 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserOpenController.js +26 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserReorderController.js +26 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserSaveController.js +21 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserSearchController.js +24 -0
- package/es/platform/column-chooser/adapters/controllers/ColumnChooserSelectController.js +26 -0
- package/es/platform/column-chooser/adapters/gateways/Repository.js +38 -0
- package/es/platform/column-chooser/adapters/gateways/Service.js +34 -0
- package/es/platform/column-chooser/adapters/gateways/State.js +1 -0
- package/es/platform/column-chooser/adapters/presenters/Presenter.js +25 -0
- package/es/platform/column-chooser/applications/interfaces/UsecaseDependencies.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/gateways/IRepository.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/gateways/IService.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserCloseInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserOpenInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserReorderInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSaveInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSearchInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/input/ColumnChooserSelectInput.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/output/BehaviourState.js +1 -0
- package/es/platform/column-chooser/applications/interfaces/output/IPresenter.js +1 -0
- package/es/platform/column-chooser/applications/usecases/AbstractUseCase.js +18 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserCloseUseCase.js +34 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserOpenUseCase.js +20 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserReorderUseCase.js +20 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserSaveUseCase.js +31 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserSearchUseCase.js +19 -0
- package/es/platform/column-chooser/applications/usecases/ColumnChooserSelectUseCase.js +26 -0
- package/es/platform/column-chooser/domain/entities/ColumnChooserImp.js +95 -0
- package/es/platform/column-chooser/domain/entities/ReorderEntityImp.js +35 -0
- package/es/platform/column-chooser/domain/entities/SearchEntityImp.js +28 -0
- package/es/platform/column-chooser/domain/entities/SelectEntityImp.js +58 -0
- package/es/platform/column-chooser/domain/entities/interfaces/ColumnChooser.js +1 -0
- package/es/platform/column-chooser/domain/entities/interfaces/ReorderEntity.js +1 -0
- package/es/platform/column-chooser/domain/entities/interfaces/SearchEntity.js +1 -0
- package/es/platform/column-chooser/domain/entities/interfaces/SelectEntity.js +1 -0
- package/es/platform/column-chooser/frameworks/ColumnChooserBehaviourFactory.js +19 -0
- package/es/platform/column-chooser/frameworks/EventHandlersFactory.js +30 -0
- package/es/platform/data-source/http-template/updateSelectedFields.js +28 -0
- package/es/platform/data-source/index.js +2 -0
- package/es/platform/zfield/domain/entities/fields-manager/FieldsManager.js +3 -1
- package/es/platform/zfield/domain/entities/interfaces/FieldApiName.js +1 -0
- package/es/platform/zfield/frameworks/ZFieldBehaviourFactory.js +6 -1
- package/es/platform/zlist/adapters/gateways/Repository.js +4 -2
- package/es/platform/zlist/adapters/presenters/SelectionTranslator.js +92 -0
- package/es/platform/zlist/adapters/presenters/TableTranslator.js +32 -19
- package/es/platform/zlist/adapters/presenters/translators/ColumnTranslator.js +63 -4
- package/es/platform/zlist/adapters/presenters/translators/Row.js +1 -1
- package/es/platform/zlist/adapters/presenters/translators/fields/LookUpFieldTranslator.js +6 -6
- package/es/platform/zlist/adapters/presenters/translators/interfaces/State.js +2 -1
- package/es/platform/zlist/adapters/presenters/utils/DefaultClientActions.js +78 -6
- package/es/platform/zlist/applications/entities-factory/ListFactory.js +3 -2
- package/es/platform/zlist/applications/usecases/FetchMoreUseCase.js +4 -1
- package/es/platform/zlist/applications/usecases/RecordExecuteFailedUseCase.js +3 -1
- package/es/platform/zlist/domain/entities/List.js +14 -2
- package/package.json +6 -4
- 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 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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,
|
|
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
|