@zohodesk/library-platform 1.0.2-exp.1.1 → 1.0.2-exp.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/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/domain/entities/DefaultSlotNameAppend.js +10 -0
- package/es/library/custom-component/domain/entities/Properties.js +2 -0
- package/es/library/custom-component/frameworks/ui/CreateCustomComponent.js +15 -6
- package/es/library/custom-component/frameworks/ui/CreateSlotComponent.js +77 -22
- package/es/library/custom-component/frameworks/ui/__testcases__/CreateSlotComponent.spec.js +211 -0
- 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
package/es/library/dot/legacy-to-new-arch/table-column-sort/frameworks/ui/TableColumnSortView.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import SortDropdown from '@zohodesk-private/desk-components/es/table/SortDropdown/SortDropdown';
|
|
3
|
+
import { TableColumnSortConstants } from "../../../../../../cc/table-column-sort"; // @ts-ignore
|
|
4
|
+
|
|
5
|
+
import style from "./css/TableColumnSort.module.css";
|
|
6
|
+
|
|
7
|
+
function TableColumnSortView(_ref, ref) {
|
|
8
|
+
let {
|
|
9
|
+
state,
|
|
10
|
+
helpers
|
|
11
|
+
} = _ref;
|
|
12
|
+
let {
|
|
13
|
+
dispatch
|
|
14
|
+
} = helpers;
|
|
15
|
+
let {
|
|
16
|
+
value,
|
|
17
|
+
ascendingLabel,
|
|
18
|
+
descendingLabel
|
|
19
|
+
} = state.properties;
|
|
20
|
+
return /*#__PURE__*/React.createElement(SortDropdown, {
|
|
21
|
+
selectedValue: value,
|
|
22
|
+
ascendingLabel: ascendingLabel,
|
|
23
|
+
descendingLabel: descendingLabel,
|
|
24
|
+
onSort: _ref2 => {
|
|
25
|
+
let {
|
|
26
|
+
value
|
|
27
|
+
} = _ref2;
|
|
28
|
+
return dispatch({
|
|
29
|
+
type: TableColumnSortConstants.SORT_CLICKED,
|
|
30
|
+
payload: {
|
|
31
|
+
value
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
customStyle: {
|
|
36
|
+
parentContainer: `${style.parentContainer} ${value !== 'none' ? style.active : ''}`
|
|
37
|
+
},
|
|
38
|
+
customAttributes_container: {
|
|
39
|
+
ref
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default TableColumnSortView;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createCustomComponent } from "../../../../../../custom-component";
|
|
2
|
+
import ColouredMultiSelectProperties from "../../../../../../../cc/fields/coloured-multi-select/Properties";
|
|
3
|
+
import ColouredMultiSelectEvents from "../../../../../../../cc/fields/coloured-multi-select/Events";
|
|
4
|
+
import { ColouredMultiSelectFieldView } from "./ColouredMultiSelectFieldView";
|
|
5
|
+
const ColouredMultiSelectField = createCustomComponent({
|
|
6
|
+
name: 'ColouredMultiSelectField',
|
|
7
|
+
View: ColouredMultiSelectFieldView,
|
|
8
|
+
properties: ColouredMultiSelectProperties,
|
|
9
|
+
events: ColouredMultiSelectEvents,
|
|
10
|
+
eventHandlers: {}
|
|
11
|
+
});
|
|
12
|
+
export default ColouredMultiSelectField;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tags } from "../../../..";
|
|
3
|
+
export function ColouredMultiSelectFieldView(_ref, ref) {
|
|
4
|
+
let {
|
|
5
|
+
state
|
|
6
|
+
} = _ref;
|
|
7
|
+
const {
|
|
8
|
+
value,
|
|
9
|
+
options
|
|
10
|
+
} = state.properties;
|
|
11
|
+
const selectedOptions = value.map(item => {
|
|
12
|
+
const option = options.find(opt => opt.value === item);
|
|
13
|
+
return {
|
|
14
|
+
id: option.value,
|
|
15
|
+
label: option.value,
|
|
16
|
+
color: option.colorCode
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
return /*#__PURE__*/React.createElement(Tags, {
|
|
20
|
+
getRef: ref,
|
|
21
|
+
tags: selectedOptions
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createCustomComponent } from "../../../../../../custom-component";
|
|
2
|
+
import ColouredPickListProperties from "../../../../../../../cc/fields/coloured-pick-list/Properties";
|
|
3
|
+
import ColouredPickListEvents from "../../../../../../../cc/fields/coloured-pick-list/Events";
|
|
4
|
+
import TextToFieldClickBehaviourFactory from "../../../../../../behaviours/text-to-field-click/frameworks/ui/TextToFieldClickBehaviourFactory";
|
|
5
|
+
import { ColouredPickListFieldView } from "./ColouredPickListFieldView";
|
|
6
|
+
const ColouredPickListField = createCustomComponent({
|
|
7
|
+
name: 'ColouredPickListField',
|
|
8
|
+
View: ColouredPickListFieldView,
|
|
9
|
+
properties: ColouredPickListProperties,
|
|
10
|
+
behaviours: [TextToFieldClickBehaviourFactory.create()],
|
|
11
|
+
events: ColouredPickListEvents,
|
|
12
|
+
eventHandlers: {}
|
|
13
|
+
});
|
|
14
|
+
export default ColouredPickListField;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ColoredTag from '@zohodesk-private/desk-components/es/ColoredTag/ColoredTag';
|
|
3
|
+
import { TagsConstants } from "../../../../../../../cc/tags";
|
|
4
|
+
export function ColouredPickListFieldView(_ref, ref) {
|
|
5
|
+
let {
|
|
6
|
+
state,
|
|
7
|
+
helpers
|
|
8
|
+
} = _ref;
|
|
9
|
+
let {
|
|
10
|
+
dispatch
|
|
11
|
+
} = helpers;
|
|
12
|
+
const {
|
|
13
|
+
value,
|
|
14
|
+
options
|
|
15
|
+
} = state.properties;
|
|
16
|
+
const selectedOption = options.find(option => option.value === value);
|
|
17
|
+
return /*#__PURE__*/React.createElement(ColoredTag, {
|
|
18
|
+
$data_id: value,
|
|
19
|
+
$data_text: value,
|
|
20
|
+
$data_color: selectedOption.colorCode || '',
|
|
21
|
+
$event_onClick: id => {
|
|
22
|
+
dispatch({
|
|
23
|
+
type: TagsConstants.TAG_CLICKED,
|
|
24
|
+
payload: {
|
|
25
|
+
id
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
$customProps_tag: {
|
|
30
|
+
getRef: ref
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -8,6 +8,8 @@ import PhoneField from "./phone-field/frameworks/ui/PhoneField";
|
|
|
8
8
|
import CurrencyField from "./currency-field/frameworks/ui/CurrencyField";
|
|
9
9
|
import LookUpField from "./lookup-field/frameworks/ui/LookupField";
|
|
10
10
|
import PickListField from "./picklist-field/frameworks/ui/PickListField";
|
|
11
|
+
import ColouredPickListField from "./coloured-picklist-field/frameworks/ui/ColouredPickListField";
|
|
12
|
+
import ColouredMultiSelectField from "./coloured-multiselect-field/frameworks/ui/ColouredMultiSelectField";
|
|
11
13
|
import PercentageField from "./percentage-field/frameworks/ui/PercentageField";
|
|
12
14
|
import DateField from "./date-field/frameworks/ui/DateField";
|
|
13
15
|
import DateTimeField from "./datetime-field/frameworks/ui/DateTimeField";
|
|
@@ -24,6 +26,8 @@ const FieldComponents = {
|
|
|
24
26
|
[FieldTypes.CurrencyField]: CurrencyField,
|
|
25
27
|
[FieldTypes.LookUpField]: LookUpField,
|
|
26
28
|
[FieldTypes.PickListField]: PickListField,
|
|
29
|
+
[FieldTypes.ColouredPickListField]: ColouredPickListField,
|
|
30
|
+
[FieldTypes.ColouredMultiSelectField]: ColouredMultiSelectField,
|
|
27
31
|
[FieldTypes.PercentageField]: PercentageField,
|
|
28
32
|
[FieldTypes.DateField]: DateField,
|
|
29
33
|
[FieldTypes.DateTimeField]: DateTimeField,
|
|
@@ -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
|
+
};
|