@zohodesk/library-platform 1.0.2-exp.1.1 → 1.0.2-exp.1.2
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/zlist/Constants.js +1 -0
- package/es/cc/action-icon/Properties.js +6 -46
- package/es/cc/component/properties/slotName.js +1 -0
- package/es/cc/fields/coloured-multi-select/Events.js +3 -0
- package/es/cc/fields/coloured-multi-select/Model.js +18 -0
- package/es/cc/fields/coloured-multi-select/Properties.js +37 -0
- package/es/cc/fields/coloured-pick-list/Events.js +3 -0
- package/es/cc/fields/coloured-pick-list/Model.js +16 -0
- package/es/cc/fields/coloured-pick-list/Properties.js +37 -0
- package/es/cc/fields/field/Types.js +2 -0
- package/es/cc/fields/index.js +2 -0
- package/es/cc/fields/multi-select/Model.js +2 -0
- package/es/cc/fields/multi-select/Properties.js +2 -4
- package/es/cc/fields/pick-list/Model.js +1 -3
- package/es/cc/fields/pick-list/Properties.js +1 -3
- package/es/cc/table-column-sort/Constants.js +1 -0
- package/es/cc/table-column-sort/Properties.js +30 -0
- package/es/cc/table-column-sort/index.js +3 -0
- package/es/cc/table-connected/constants/Events.js +2 -0
- package/es/cc/table-list/Properties.js +38 -27
- package/es/desk-frameworks/table-connected/frameworks/EventHandlersFactory.js +17 -6
- package/es/desk-frameworks/table-connected/frameworks/TableConnectedView.js +2 -0
- package/es/library/behaviours/table-column-resizer/domain/entities/Constants.js +1 -1
- package/es/library/custom-component/frameworks/ui/CreateCustomComponent.js +28 -6
- package/es/library/custom-component/frameworks/ui/CreateSlotComponent.js +77 -22
- package/es/library/dot/components/action-location/frameworks/ui/ActionComponentMapping.js +4 -4
- package/es/library/dot/components/table-list/adapters/presenters/TableTranslator.js +4 -9
- package/es/library/dot/components/table-list/frameworks/ui/EventHandlersFactory.js +1 -3
- package/es/library/dot/components/table-list/frameworks/ui/TableList.js +1 -2
- package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +6 -2
- 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/ErrorState.js +28 -0
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/HeaderData.js +3 -10
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/Headers.js +1 -3
- package/es/library/dot/legacy-to-new-arch/action-icon/frameworks/ui/ActionIcon.js +4 -20
- package/es/library/dot/legacy-to-new-arch/action-icon/frameworks/ui/ActionIconView.js +4 -84
- package/es/library/dot/legacy-to-new-arch/table-column-sort/frameworks/ui/TableColumnSort.js +11 -0
- package/es/library/dot/legacy-to-new-arch/table-column-sort/frameworks/ui/TableColumnSortView.js +44 -0
- package/es/library/dot/legacy-to-new-arch/table-column-sort/frameworks/ui/css/TableColumnSort.module.css +10 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/coloured-multiselect-field/frameworks/ui/ColouredMultiSelectField.js +12 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/coloured-multiselect-field/frameworks/ui/ColouredMultiSelectFieldView.js +23 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/coloured-picklist-field/frameworks/ui/ColouredPickListField.js +14 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/coloured-picklist-field/frameworks/ui/ColouredPickListFieldView.js +33 -0
- package/es/library/dot/legacy-to-new-arch/table-field-components/index.js +4 -0
- package/es/platform/client-actions/components/row-actions-renderer/frameworks/ui/RowActionsRenderer.module.css +2 -2
- package/es/platform/data-source/http-template/getAvailableFields.js +62 -0
- package/es/platform/zdata-source/domain/entities/APITemplate.js +3 -2
- package/es/platform/zhttp/applications/usecases/FetchUseCase.js +1 -1
- package/es/platform/zlist/adapters/controllers/RecordSuccessCallbackController.js +28 -0
- package/es/platform/zlist/adapters/controllers/SortController.js +1 -3
- package/es/platform/zlist/adapters/gateways/Repository.js +12 -2
- package/es/platform/zlist/adapters/gateways/Service.js +4 -0
- package/es/platform/zlist/adapters/presenters/Presenters.js +26 -0
- package/es/platform/zlist/adapters/presenters/TableTranslator.js +11 -2
- package/es/platform/zlist/adapters/presenters/translators/Header.js +28 -3
- package/es/platform/zlist/adapters/presenters/translators/HeadersTranslator.js +3 -2
- package/es/platform/zlist/adapters/presenters/translators/fields/MultiSelectFieldTranslator.js +28 -8
- package/es/platform/zlist/adapters/presenters/translators/fields/PickListFieldTranslator.js +28 -2
- package/es/platform/zlist/adapters/presenters/utils/DefaultClientActions.js +54 -0
- package/es/platform/zlist/applications/interfaces/output/IPresenter.js +1 -0
- package/es/platform/zlist/applications/usecases/AbstractUseCase.js +4 -2
- package/es/platform/zlist/applications/usecases/RecordSuccessCallbackUsecase.js +24 -0
- package/es/platform/zlist/applications/usecases/SortUseCase.js +9 -3
- package/es/platform/zlist/domain/entities/List.js +32 -8
- package/es/platform/zlist/domain/entities/SortBy.js +58 -0
- package/es/platform/zlist/domain/entities/interfaces/ISortBy.js +1 -0
- package/es/platform/zlist/domain/entities/interfaces/ListModel.js +1 -0
- package/es/platform/zlist/domain/entities/interfaces/Properties.js +6 -1
- package/es/platform/zlist/frameworks/EventHandlersFactory.js +9 -4
- package/es/platform/zlist/frameworks/ZListBehaviourFactory.js +7 -1
- package/es/platform/zrecord/adapters/controllers/ActionExecutorController.js +2 -1
- package/es/platform/zrecord/adapters/controllers/RefetchController.js +2 -1
- package/es/platform/zrecord/applications/usecases/ExecuteActionUseCase.js +3 -2
- package/es/platform/zrecord/applications/usecases/RefetchUseCase.js +3 -2
- package/es/platform/zrecord/domain/entities/RecordsManager.js +4 -3
- package/package.json +11 -11
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/HeaderText.js +0 -34
- package/es/library/dot/legacy-to-new-arch/action-icon/frameworks/ui/css/ActionIcon.module.css +0 -3
|
@@ -1,11 +1,73 @@
|
|
|
1
|
+
async function getValidJsonResArray(res, key) {
|
|
2
|
+
if (res.status === 204) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
if (res.ok) {
|
|
7
|
+
const json = await res.json();
|
|
8
|
+
return json[key] || [];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
throw new Error(`Error: ${res.status} ${res.statusText}`);
|
|
12
|
+
}
|
|
13
|
+
|
|
1
14
|
let getAvailableFields = {
|
|
2
15
|
name: 'availableFields',
|
|
3
16
|
api: '/{{servicePrefix}}/{{orgName}}/api/v1/views/availableFields',
|
|
4
17
|
parameters: `{
|
|
18
|
+
"servicePrefix": "{{servicePrefix}}",
|
|
19
|
+
"orgName": "{{orgName}}",
|
|
5
20
|
"departmentId":"{{departmentId}}",
|
|
6
21
|
"module":"{{moduleName}}"
|
|
7
22
|
}`,
|
|
8
23
|
type: 'GET',
|
|
24
|
+
getResponse: async _ref => {
|
|
25
|
+
let {
|
|
26
|
+
params,
|
|
27
|
+
payload,
|
|
28
|
+
headers
|
|
29
|
+
} = _ref;
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const {
|
|
33
|
+
servicePrefix,
|
|
34
|
+
orgName,
|
|
35
|
+
departmentId,
|
|
36
|
+
moduleName
|
|
37
|
+
} = params;
|
|
38
|
+
const availableFieldsUrl = `/${servicePrefix}/${orgName}/api/v1/views/availableFields?departmentId=${departmentId}&module=${moduleName}`;
|
|
39
|
+
const res = await fetch(availableFieldsUrl, {
|
|
40
|
+
method: 'GET',
|
|
41
|
+
headers
|
|
42
|
+
});
|
|
43
|
+
const availableFields = await getValidJsonResArray(res, 'fields');
|
|
44
|
+
const organizationFieldsUrl = `/${servicePrefix}/${orgName}/api/v1/organizationFields?departmentId=${departmentId}&module=${moduleName}`;
|
|
45
|
+
const ores = await fetch(organizationFieldsUrl, {
|
|
46
|
+
method: 'GET',
|
|
47
|
+
headers
|
|
48
|
+
});
|
|
49
|
+
const organizationFields = await getValidJsonResArray(ores, 'data');
|
|
50
|
+
return {
|
|
51
|
+
fields: availableFields.map(field => {
|
|
52
|
+
const organizationField = organizationFields.find(orgField => orgField.apiName === field.name);
|
|
53
|
+
|
|
54
|
+
if (!organizationField) {
|
|
55
|
+
return field;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { ...field,
|
|
59
|
+
pickListValues: organizationField.pickListValues,
|
|
60
|
+
subType: organizationField.subType
|
|
61
|
+
};
|
|
62
|
+
})
|
|
63
|
+
};
|
|
64
|
+
} catch (error) {
|
|
65
|
+
throw {
|
|
66
|
+
error,
|
|
67
|
+
message: 'Error fetching available fields'
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
},
|
|
9
71
|
transformer: res => res.fields,
|
|
10
72
|
properties: {
|
|
11
73
|
moduleName: {
|
|
@@ -67,12 +67,13 @@ class APITemplate {
|
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
if (this.getResponseInTemplate) {
|
|
70
|
-
apiDetails.getResponse =
|
|
70
|
+
apiDetails.getResponse = headers => {
|
|
71
71
|
const payload = JSON.parse(this.getPayloadString(obj));
|
|
72
72
|
const params = JSON.parse(this.getParameter(obj));
|
|
73
73
|
return this.getResponseInTemplate({
|
|
74
74
|
payload,
|
|
75
|
-
params
|
|
75
|
+
params,
|
|
76
|
+
headers
|
|
76
77
|
});
|
|
77
78
|
};
|
|
78
79
|
}
|
|
@@ -33,7 +33,7 @@ class FetchUseCase extends AbstractUseCase {
|
|
|
33
33
|
try {
|
|
34
34
|
// NOTE: getResponse is hacky solution to get the data using function call instead of fetch, So any handling added to here needs to be added to fetch and vise versa
|
|
35
35
|
if (typeof getResponse === 'function') {
|
|
36
|
-
const data = await getResponse();
|
|
36
|
+
const data = await getResponse(headers);
|
|
37
37
|
|
|
38
38
|
if (data === undefined) {
|
|
39
39
|
dispatch({
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import AbstractController from "./AbstractController";
|
|
2
|
+
|
|
3
|
+
class RecordSuccessCallbackController extends AbstractController {
|
|
4
|
+
handle(event) {
|
|
5
|
+
const {
|
|
6
|
+
state,
|
|
7
|
+
updateState,
|
|
8
|
+
dispatch,
|
|
9
|
+
action
|
|
10
|
+
} = event;
|
|
11
|
+
const {
|
|
12
|
+
payload,
|
|
13
|
+
metaData
|
|
14
|
+
} = action;
|
|
15
|
+
const {
|
|
16
|
+
recordSuccessCallbackUseCase
|
|
17
|
+
} = this.service;
|
|
18
|
+
recordSuccessCallbackUseCase.updateDependency(state, updateState);
|
|
19
|
+
recordSuccessCallbackUseCase.execute({
|
|
20
|
+
dispatch,
|
|
21
|
+
payload,
|
|
22
|
+
metaData
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default RecordSuccessCallbackController;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
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
2
|
|
|
3
3
|
import ListFactory from "../../applications/entities-factory/ListFactory";
|
|
4
|
+
import SortBy from "../../domain/entities/SortBy";
|
|
4
5
|
|
|
5
6
|
class Repository {
|
|
6
7
|
constructor() {
|
|
@@ -13,13 +14,15 @@ class Repository {
|
|
|
13
14
|
|
|
14
15
|
getList() {
|
|
15
16
|
const {
|
|
16
|
-
sortBy,
|
|
17
17
|
departmentId,
|
|
18
18
|
viewId,
|
|
19
19
|
moduleName,
|
|
20
20
|
query,
|
|
21
21
|
context
|
|
22
22
|
} = this.state.properties;
|
|
23
|
+
const {
|
|
24
|
+
sortBy
|
|
25
|
+
} = this.getZListState();
|
|
23
26
|
const list = ListFactory.createList({
|
|
24
27
|
context,
|
|
25
28
|
query: {
|
|
@@ -28,12 +31,19 @@ class Repository {
|
|
|
28
31
|
moduleName,
|
|
29
32
|
...query
|
|
30
33
|
},
|
|
31
|
-
sortBy,
|
|
34
|
+
sortBy: new SortBy(sortBy.id, sortBy.name, sortBy.order),
|
|
32
35
|
limit: 50
|
|
33
36
|
});
|
|
34
37
|
return list;
|
|
35
38
|
}
|
|
36
39
|
|
|
40
|
+
getZListState() {
|
|
41
|
+
const {
|
|
42
|
+
zlist
|
|
43
|
+
} = this.state.behaviours;
|
|
44
|
+
return zlist;
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
}
|
|
38
48
|
|
|
39
49
|
export default Repository;
|
|
@@ -12,6 +12,7 @@ import RecordExecuteSucceededUseCase from "../../applications/usecases/RecordExe
|
|
|
12
12
|
import RecordExecuteFailedUseCase from "../../applications/usecases/RecordExecuteFailedUseCase";
|
|
13
13
|
import UpdateSuccessUseCase from "../../applications/usecases/UpdateSuccessUseCase";
|
|
14
14
|
import DeleteSuccessUseCase from "../../applications/usecases/DeleteSuccessUseCase";
|
|
15
|
+
import RecordSuccessCallbackUsecase from "../../applications/usecases/RecordSuccessCallbackUsecase";
|
|
15
16
|
|
|
16
17
|
class Service {
|
|
17
18
|
constructor(dependencies) {
|
|
@@ -31,6 +32,8 @@ class Service {
|
|
|
31
32
|
|
|
32
33
|
_defineProperty(this, "recordExecuteSucceededUseCase", void 0);
|
|
33
34
|
|
|
35
|
+
_defineProperty(this, "recordSuccessCallbackUseCase", void 0);
|
|
36
|
+
|
|
34
37
|
_defineProperty(this, "recordExecuteFailedUseCase", void 0);
|
|
35
38
|
|
|
36
39
|
_defineProperty(this, "sortUseCase", void 0);
|
|
@@ -49,6 +52,7 @@ class Service {
|
|
|
49
52
|
this.deleteMultipleRecordUseCase = new DeleteMultipleRecordUseCase(this.dependencies);
|
|
50
53
|
this.deleteSingleRecordUseCase = new DeleteSingleRecordUseCase(this.dependencies);
|
|
51
54
|
this.recordExecuteSucceededUseCase = new RecordExecuteSucceededUseCase(this.dependencies);
|
|
55
|
+
this.recordSuccessCallbackUseCase = new RecordSuccessCallbackUsecase(this.dependencies);
|
|
52
56
|
this.recordExecuteFailedUseCase = new RecordExecuteFailedUseCase(this.dependencies);
|
|
53
57
|
this.recordUpdateUseCase = new RecordUpdateUseCase(this.dependencies);
|
|
54
58
|
this.updateSuccessUseCase = new UpdateSuccessUseCase(this.dependencies);
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
class Presenter {
|
|
4
|
+
constructor() {
|
|
5
|
+
_defineProperty(this, "updateState", void 0);
|
|
6
|
+
|
|
7
|
+
_defineProperty(this, "state", void 0);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
updateDependencies(state, updateState) {
|
|
11
|
+
this.updateState = updateState;
|
|
12
|
+
this.state = state;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
updateView(zlist) {
|
|
16
|
+
this.state = { ...this.state,
|
|
17
|
+
behaviours: { ...this.state.behaviours,
|
|
18
|
+
zlist
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
this.updateState(this.state);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default Presenter;
|
|
@@ -7,7 +7,9 @@ import RowCursor from "../../../../cc/table-list/data-types/RowCursor";
|
|
|
7
7
|
import { TableListConstants } from "../../../../cc/table-list";
|
|
8
8
|
import { ResizerStateTranslator } from "./translators/ResizerStateTranslator";
|
|
9
9
|
import { calculateFieldWidths } from "./utils/calculateFieldWidths";
|
|
10
|
+
import DefaultClientActions from "./utils/DefaultClientActions";
|
|
10
11
|
const EMPTY_OBJECT = {};
|
|
12
|
+
const EMPTY_ARRAY = [];
|
|
11
13
|
|
|
12
14
|
const fallbackToDefault = (value, defaultValue) => [undefined, null].includes(value) ? defaultValue : value;
|
|
13
15
|
|
|
@@ -34,11 +36,16 @@ export default class TableTranslator {
|
|
|
34
36
|
context['servicePrefix'] = 'supportapi/zd'; // FIX: servicePrefix defaultValue should be available from properties
|
|
35
37
|
|
|
36
38
|
const {
|
|
39
|
+
zlist,
|
|
37
40
|
zrecord,
|
|
38
41
|
zfield,
|
|
39
42
|
zclientAction
|
|
40
43
|
} = fallbackToDefault(behaviours, {}); // FIX: behaviours should be available by default
|
|
41
44
|
|
|
45
|
+
const {
|
|
46
|
+
sortBy
|
|
47
|
+
} = fallbackToDefault(zlist, {}); // FIX: zlist should be available by default
|
|
48
|
+
|
|
42
49
|
const {
|
|
43
50
|
records,
|
|
44
51
|
isFetching: isRecordsFetching
|
|
@@ -60,12 +67,13 @@ export default class TableTranslator {
|
|
|
60
67
|
|
|
61
68
|
const isLoading = !!(isRecordsFetching || isAvailableFieldsFetching || isSelectedFieldsFetching);
|
|
62
69
|
const fields = selectedFields === null || selectedFields === void 0 ? void 0 : selectedFields.map(selectedField => availableFields === null || availableFields === void 0 ? void 0 : availableFields.find(availableField => availableField.name === selectedField)).filter(f => f != undefined);
|
|
70
|
+
const newClientActions = DefaultClientActions.createSortActions(fields, clientActions || EMPTY_ARRAY);
|
|
63
71
|
const {
|
|
64
72
|
headerActions,
|
|
65
73
|
fieldActions,
|
|
66
74
|
rowActions,
|
|
67
75
|
noLocation
|
|
68
|
-
} = mapClientActions(
|
|
76
|
+
} = mapClientActions(newClientActions || EMPTY_ARRAY);
|
|
69
77
|
const isRowClickable = noLocation.some(action => action.uiComponentMapping.eventMappings.some(mapping => mapping.sourceEvent === TableListConstants.TABLE_LIST_ROW_CLICKED));
|
|
70
78
|
const rowCursor = isRowClickable ? RowCursor.Pointer : RowCursor.Default;
|
|
71
79
|
const {
|
|
@@ -75,7 +83,7 @@ export default class TableTranslator {
|
|
|
75
83
|
|
|
76
84
|
const localStorageFieldWidths = fallbackToDefault(localStorageBehaviour === null || localStorageBehaviour === void 0 ? void 0 : (_localStorageBehaviou = localStorageBehaviour[moduleName]) === null || _localStorageBehaviou === void 0 ? void 0 : (_localStorageBehaviou2 = _localStorageBehaviou[viewId]) === null || _localStorageBehaviou2 === void 0 ? void 0 : _localStorageBehaviou2.modifiedWidths, EMPTY_OBJECT);
|
|
77
85
|
const modifiedWidths = calculateFieldWidths(fields, localStorageFieldWidths, preferences);
|
|
78
|
-
const headersTranslator = new HeadersTranslator(fields, headerActions, context, modifiedWidths);
|
|
86
|
+
const headersTranslator = new HeadersTranslator(fields, headerActions, context, modifiedWidths, sortBy);
|
|
79
87
|
const rowsTranslator = new RowsTranslator(records, fields, rowActions, context, fieldComponentMapping, rowActionsUiType, fieldActions); // const actionTranslator = new ClientActionsTranslator(clientActions, records, fields, pageContext);
|
|
80
88
|
// const translators = [headersTranslator.getTranslator(), rowsTranslator.getTranslator(), actionTranslator.getTranslator()];
|
|
81
89
|
|
|
@@ -86,6 +94,7 @@ export default class TableTranslator {
|
|
|
86
94
|
properties,
|
|
87
95
|
behaviours,
|
|
88
96
|
selection: behaviours === null || behaviours === void 0 ? void 0 : behaviours.selection,
|
|
97
|
+
sortBy,
|
|
89
98
|
rowCursor,
|
|
90
99
|
resizerState: ResizerStateTranslator({
|
|
91
100
|
columnResizer: columnResizer,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import ColumnAlignmentTranslator from "./ColumnAlignmentTranslator";
|
|
2
2
|
import ClientActionsTranslator from "../../../../client-actions/translators/client-actions-translator";
|
|
3
|
+
import { SortOrder } from "../../../../zlist/domain/entities/interfaces/Properties";
|
|
3
4
|
|
|
4
|
-
function HeaderTranslator(field, actions, context, modifiedWidths) {
|
|
5
|
+
function HeaderTranslator(field, actions, context, modifiedWidths, sortBy) {
|
|
5
6
|
const {
|
|
6
7
|
id,
|
|
7
8
|
name,
|
|
@@ -9,8 +10,11 @@ function HeaderTranslator(field, actions, context, modifiedWidths) {
|
|
|
9
10
|
isSortable,
|
|
10
11
|
type
|
|
11
12
|
} = field;
|
|
13
|
+
const newField = { ...field,
|
|
14
|
+
sort: translateSortBy(field.id, sortBy)
|
|
15
|
+
};
|
|
12
16
|
const transformedActions = ClientActionsTranslator.transform(actions, { ...context,
|
|
13
|
-
field
|
|
17
|
+
field: newField
|
|
14
18
|
});
|
|
15
19
|
const width = modifiedWidths[name];
|
|
16
20
|
return {
|
|
@@ -24,4 +28,25 @@ function HeaderTranslator(field, actions, context, modifiedWidths) {
|
|
|
24
28
|
};
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
export default HeaderTranslator;
|
|
31
|
+
export default HeaderTranslator;
|
|
32
|
+
|
|
33
|
+
function translateSortBy(id, sortBy) {
|
|
34
|
+
const newSortBy = { ...sortBy,
|
|
35
|
+
tooltip: ''
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (sortBy.id === id) {
|
|
39
|
+
if (sortBy.order === SortOrder.ASC) {
|
|
40
|
+
newSortBy.tooltip = 'Click to Sort Descending';
|
|
41
|
+
} else if (newSortBy.order === SortOrder.DES) {
|
|
42
|
+
newSortBy.tooltip = 'Click to Sort Ascending';
|
|
43
|
+
} else if (newSortBy.order === SortOrder.NONE) {
|
|
44
|
+
newSortBy.tooltip = 'Click to Sort';
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
newSortBy.order = SortOrder.NONE;
|
|
48
|
+
newSortBy.tooltip = 'Click to Sort';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return newSortBy;
|
|
52
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import HeaderTranslator from "./Header";
|
|
2
2
|
export default class HeadersTranslator {
|
|
3
|
-
constructor(fields, actions, context, modifiedWidths) {
|
|
3
|
+
constructor(fields, actions, context, modifiedWidths, sortBy) {
|
|
4
4
|
this.fields = fields;
|
|
5
5
|
this.actions = actions;
|
|
6
6
|
this.context = context;
|
|
7
7
|
this.modifiedWidths = modifiedWidths;
|
|
8
|
+
this.sortBy = sortBy;
|
|
8
9
|
this.pipe = this.pipe.bind(this);
|
|
9
10
|
}
|
|
10
11
|
|
|
@@ -13,7 +14,7 @@ export default class HeadersTranslator {
|
|
|
13
14
|
return [];
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
return this.fields.map(field => HeaderTranslator(field, this.actions, this.context, this.modifiedWidths));
|
|
17
|
+
return this.fields.map(field => HeaderTranslator(field, this.actions, this.context, this.modifiedWidths, this.sortBy));
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
pipe(viewModel) {
|
package/es/platform/zlist/adapters/presenters/translators/fields/MultiSelectFieldTranslator.js
CHANGED
|
@@ -1,24 +1,44 @@
|
|
|
1
1
|
import FieldTypes from "../../../../../../cc/fields/field/Types";
|
|
2
2
|
import MultiListFieldModel from "../../../../../../cc/fields/multi-select/Model";
|
|
3
|
+
import ColouredMultiListFieldModel from "../../../../../../cc/fields/coloured-multi-select/Model";
|
|
3
4
|
|
|
4
5
|
const MultiSelectFieldTranslator = (field, value, appendToActionPayload) => {
|
|
5
6
|
const {
|
|
6
7
|
uiType,
|
|
7
|
-
name
|
|
8
|
+
name,
|
|
9
|
+
subType,
|
|
10
|
+
pickListValues
|
|
8
11
|
} = field;
|
|
9
|
-
const updatedValue = value.split(';').map(item =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const updatedValue = value.split(';').map(item => item === '' ? '-None-' : item);
|
|
13
|
+
|
|
14
|
+
if (['colored', 'ColorCoded'].includes(subType)) {
|
|
15
|
+
return ColouredMultiSelectFieldTranslator(field, updatedValue, appendToActionPayload);
|
|
16
|
+
}
|
|
13
17
|
|
|
14
|
-
return item;
|
|
15
|
-
});
|
|
16
18
|
return MultiListFieldModel({
|
|
17
19
|
uiType: uiType || FieldTypes.MultiSelectField,
|
|
18
20
|
appendToActionPayload,
|
|
19
21
|
name,
|
|
22
|
+
options: pickListValues,
|
|
20
23
|
value: updatedValue
|
|
21
24
|
});
|
|
22
25
|
};
|
|
23
26
|
|
|
24
|
-
export default MultiSelectFieldTranslator;
|
|
27
|
+
export default MultiSelectFieldTranslator;
|
|
28
|
+
|
|
29
|
+
const ColouredMultiSelectFieldTranslator = (field, value, appendToActionPayload) => {
|
|
30
|
+
const {
|
|
31
|
+
uiType,
|
|
32
|
+
name,
|
|
33
|
+
pickListValues
|
|
34
|
+
} = field;
|
|
35
|
+
return ColouredMultiListFieldModel({
|
|
36
|
+
uiType: uiType || FieldTypes.ColouredMultiSelectField,
|
|
37
|
+
appendToActionPayload,
|
|
38
|
+
name,
|
|
39
|
+
options: pickListValues.map(option => ({ ...option,
|
|
40
|
+
colorCode: option.colorCode || ''
|
|
41
|
+
})),
|
|
42
|
+
value
|
|
43
|
+
});
|
|
44
|
+
};
|
|
@@ -1,17 +1,43 @@
|
|
|
1
1
|
import FieldTypes from "../../../../../../cc/fields/field/Types";
|
|
2
2
|
import PickListFieldModel from "../../../../../../cc/fields/pick-list/Model";
|
|
3
|
+
import ColouredPickListFieldModel from "../../../../../../cc/fields/coloured-pick-list/Model";
|
|
3
4
|
|
|
4
5
|
const PickListFieldTranslator = (field, value, appendToActionPayload) => {
|
|
5
6
|
const {
|
|
6
7
|
uiType,
|
|
7
|
-
name
|
|
8
|
+
name,
|
|
9
|
+
pickListValues,
|
|
10
|
+
subType
|
|
8
11
|
} = field;
|
|
12
|
+
|
|
13
|
+
if (['colored', 'ColorCoded'].includes(subType)) {
|
|
14
|
+
return ColouredPickListFieldTranslator(field, value, appendToActionPayload);
|
|
15
|
+
}
|
|
16
|
+
|
|
9
17
|
return PickListFieldModel({
|
|
10
18
|
uiType: uiType || FieldTypes.PickListField,
|
|
11
19
|
appendToActionPayload,
|
|
20
|
+
options: pickListValues,
|
|
12
21
|
name,
|
|
13
22
|
value
|
|
14
23
|
});
|
|
15
24
|
};
|
|
16
25
|
|
|
17
|
-
export default PickListFieldTranslator;
|
|
26
|
+
export default PickListFieldTranslator;
|
|
27
|
+
|
|
28
|
+
const ColouredPickListFieldTranslator = (field, value, appendToActionPayload) => {
|
|
29
|
+
const {
|
|
30
|
+
uiType,
|
|
31
|
+
name,
|
|
32
|
+
pickListValues
|
|
33
|
+
} = field;
|
|
34
|
+
return ColouredPickListFieldModel({
|
|
35
|
+
uiType: uiType || FieldTypes.ColouredPickListField,
|
|
36
|
+
appendToActionPayload,
|
|
37
|
+
options: pickListValues.map(option => ({ ...option,
|
|
38
|
+
colorCode: option.colorCode || ''
|
|
39
|
+
})),
|
|
40
|
+
name,
|
|
41
|
+
value
|
|
42
|
+
});
|
|
43
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import ClientAction from "../../../../client-actions/behaviour/zclient-actions/domain/entities/ClientAction";
|
|
2
|
+
|
|
3
|
+
class DefaultClientActions {
|
|
4
|
+
static constructAction(clientAction) {
|
|
5
|
+
return new ClientAction(clientAction).toObject();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
static constructSortAction() {
|
|
9
|
+
return this.constructAction({
|
|
10
|
+
uiComponentMapping: {
|
|
11
|
+
component: 'TableColumnSort',
|
|
12
|
+
name: 'SortBy',
|
|
13
|
+
propertiesValueMapping: {
|
|
14
|
+
value: '{{@context.field.sort.order}}',
|
|
15
|
+
ascendingLabel: 'Ascending',
|
|
16
|
+
descendingLabel: 'Descending'
|
|
17
|
+
},
|
|
18
|
+
eventMappings: [{
|
|
19
|
+
payloadValueMapping: {
|
|
20
|
+
id: '{{@context.field.id}}',
|
|
21
|
+
name: '{{@context.field.name}}',
|
|
22
|
+
order: `{{@payload.value}}`
|
|
23
|
+
},
|
|
24
|
+
sourceEvent: 'SORT#CLICKED',
|
|
25
|
+
targetEvent: 'SMART_TABLE#SORT',
|
|
26
|
+
id: '4000000080005'
|
|
27
|
+
}],
|
|
28
|
+
id: '4000000080003'
|
|
29
|
+
},
|
|
30
|
+
conditions: {
|
|
31
|
+
fields: [{
|
|
32
|
+
fieldName: 'field.isSortable',
|
|
33
|
+
condition: '=',
|
|
34
|
+
value: ['true']
|
|
35
|
+
}],
|
|
36
|
+
pattern: '1'
|
|
37
|
+
},
|
|
38
|
+
location: 'header_actions',
|
|
39
|
+
id: '4000000080009',
|
|
40
|
+
modules: ['MODULE'],
|
|
41
|
+
name: 'SortBy Action',
|
|
42
|
+
component: 'SmartTable',
|
|
43
|
+
modifiedTime: '2024-11-21T06:11:59.000Z',
|
|
44
|
+
createdTime: '2024-11-21T06:11:59.000Z'
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static createSortActions(fields, clientActions) {
|
|
49
|
+
return [...clientActions, this.constructSortAction()];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default DefaultClientActions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -4,11 +4,13 @@ class AbstractUseCase {
|
|
|
4
4
|
this.execute = this.execute.bind(this);
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
updateDependency(state) {
|
|
7
|
+
updateDependency(state, updateState) {
|
|
8
8
|
const {
|
|
9
|
-
repository
|
|
9
|
+
repository,
|
|
10
|
+
presenter
|
|
10
11
|
} = this.dependencies;
|
|
11
12
|
repository.init(state);
|
|
13
|
+
presenter.updateDependencies(state, updateState);
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import AbstractUseCase from "./AbstractUseCase";
|
|
2
|
+
|
|
3
|
+
class RecordSuccessCallbackUsecase extends AbstractUseCase {
|
|
4
|
+
execute(input) {
|
|
5
|
+
const {
|
|
6
|
+
dispatch,
|
|
7
|
+
payload,
|
|
8
|
+
metaData
|
|
9
|
+
} = input;
|
|
10
|
+
const {
|
|
11
|
+
repository,
|
|
12
|
+
presenter
|
|
13
|
+
} = this.dependencies;
|
|
14
|
+
const list = repository.getList();
|
|
15
|
+
|
|
16
|
+
if (list.isAcknowledgeBySortBy(metaData)) {
|
|
17
|
+
list.setSortBy(metaData);
|
|
18
|
+
presenter.updateView(list.toObject());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default RecordSuccessCallbackUsecase;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SmartTableConstants } from "../../../../cc/table-connected";
|
|
1
2
|
import AbstractUseCase from "./AbstractUseCase";
|
|
2
3
|
|
|
3
4
|
class SortUseCase extends AbstractUseCase {
|
|
@@ -8,11 +9,16 @@ class SortUseCase extends AbstractUseCase {
|
|
|
8
9
|
} = input;
|
|
9
10
|
const {
|
|
10
11
|
repository,
|
|
11
|
-
|
|
12
|
+
presenter
|
|
12
13
|
} = this.dependencies;
|
|
13
14
|
const list = repository.getList();
|
|
14
|
-
|
|
15
|
-
dispatch(list.
|
|
15
|
+
list.setSortBy(sortBy);
|
|
16
|
+
dispatch(list.createRecordsRefetchAction());
|
|
17
|
+
dispatch({
|
|
18
|
+
type: SmartTableConstants.Events.SORTED,
|
|
19
|
+
payload: sortBy
|
|
20
|
+
});
|
|
21
|
+
presenter.updateView(list.toObject());
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
}
|
|
@@ -3,6 +3,7 @@ import { FIELD_EXECUTE, FIELD_REFETCH } from "../../../../bc/zfield/Constants";
|
|
|
3
3
|
import { ZLIST_RECORD_DELETE_FAILED, ZLIST_RECORD_DELETE_SUCCEEDED, ZLIST_RECORD_UPDATE_FAILED, ZLIST_RECORD_UPDATE_SUCCEEDED } from "../../../../bc/zlist/Constants";
|
|
4
4
|
import { CLIENTACTION_BEHAVIOUR_EXECUTE } from "../../../client-actions/bc/zclient-actions/Constants";
|
|
5
5
|
import { SmartTableConstants } from "../../../../cc/table-connected";
|
|
6
|
+
import SortBy from "./SortBy";
|
|
6
7
|
|
|
7
8
|
class List {
|
|
8
9
|
constructor(limit, sortBy, query, context) {
|
|
@@ -12,6 +13,28 @@ class List {
|
|
|
12
13
|
this.context = context;
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
toObject() {
|
|
17
|
+
return {
|
|
18
|
+
sortBy: this.sortBy.toObject()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
setSortBy(sortBy) {
|
|
23
|
+
this.sortBy = new SortBy(sortBy.id, sortBy.name, sortBy.order);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
toggleSortBy() {
|
|
27
|
+
const {
|
|
28
|
+
id,
|
|
29
|
+
name
|
|
30
|
+
} = this.sortBy;
|
|
31
|
+
this.sortBy.doSorting(id, name);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
isAcknowledgeBySortBy(metaData) {
|
|
35
|
+
return metaData && metaData['SMART_TABLE#SORTED'];
|
|
36
|
+
}
|
|
37
|
+
|
|
15
38
|
createApiProps() {
|
|
16
39
|
const {
|
|
17
40
|
query,
|
|
@@ -21,17 +44,12 @@ class List {
|
|
|
21
44
|
} = this;
|
|
22
45
|
return {
|
|
23
46
|
limit,
|
|
24
|
-
sortBy,
|
|
47
|
+
sortBy: sortBy.toQueryString(),
|
|
25
48
|
...query,
|
|
26
49
|
...context
|
|
27
50
|
};
|
|
28
51
|
}
|
|
29
52
|
|
|
30
|
-
createSortByRefetchAction(sortBy) {
|
|
31
|
-
this.sortBy = sortBy;
|
|
32
|
-
return this.createRecordsRefetchAction();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
53
|
getInitialMountFetchActions() {
|
|
36
54
|
return [this.createRecordsFetchAction(), this.createAvailableFieldsFetchAction(), this.createSelectedFieldsFetchAction(), this.createClientActionsFetchAction()];
|
|
37
55
|
}
|
|
@@ -288,15 +306,21 @@ class List {
|
|
|
288
306
|
};
|
|
289
307
|
}
|
|
290
308
|
|
|
291
|
-
createRecordsRefetchAction() {
|
|
309
|
+
createRecordsRefetchAction(triggerer) {
|
|
292
310
|
const props = this.createApiProps();
|
|
311
|
+
const metaData = triggerer === 'sortBy' && {
|
|
312
|
+
['SMART_TABLE#SORTED']: {
|
|
313
|
+
sortBy: this.sortBy.toObject()
|
|
314
|
+
}
|
|
315
|
+
};
|
|
293
316
|
return {
|
|
294
317
|
type: RECORD_REFETCH,
|
|
295
318
|
payload: {
|
|
296
319
|
actionName: RecordApiActionName.GET_RECORDS,
|
|
297
320
|
props,
|
|
298
321
|
apiName: 'records'
|
|
299
|
-
}
|
|
322
|
+
},
|
|
323
|
+
metaData
|
|
300
324
|
};
|
|
301
325
|
}
|
|
302
326
|
|