awing-library 2.1.20 → 2.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/RetargetMacAddress/component.js +2 -1
  2. package/lib/ACM-AXN/CampaignSchedule/Components/ControlPanel/Filter.d.ts +1 -1
  3. package/lib/ACM-AXN/CampaignSchedule/Components/ControlPanel/Filter.js +2 -2
  4. package/lib/ACM-AXN/CampaignSchedule/Components/ControlPanel/index.d.ts +1 -1
  5. package/lib/ACM-AXN/CampaignSchedule/Components/ControlPanel/index.js +2 -2
  6. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/component.js +6 -2
  7. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/container.js +42 -41
  8. package/lib/ACM-AXN/CampaignSchedule/component.js +30 -4
  9. package/lib/ACM-AXN/CampaignSchedule/container.d.ts +1 -1
  10. package/lib/ACM-AXN/CampaignSchedule/container.js +2 -2
  11. package/lib/ACM-AXN/CampaignSchedule/interface.d.ts +3 -0
  12. package/lib/ACM-AXN/GroupUser/User/UserComponent.js +1 -1
  13. package/lib/ACM-AXN/Page/CreateOrEdit/Components/useListPageView.js +9 -4
  14. package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.d.ts +2 -1
  15. package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.js +14 -1
  16. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/FileUtils.d.ts +3 -1
  17. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/FileUtils.js +1 -6
  18. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.d.ts +7 -0
  19. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.js +13 -15
  20. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +23 -2
  21. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.d.ts +3 -2
  22. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/index.test.js +2 -1
  23. package/lib/ACM-AXN/Page/CreateOrEdit/Utils.d.ts +4 -3
  24. package/lib/ACM-AXN/Page/CreateOrEdit/Utils.js +4 -2
  25. package/lib/ACM-AXN/Page/Types.d.ts +10 -37
  26. package/lib/ACM-AXN/Page/enums.d.ts +6 -0
  27. package/lib/ACM-AXN/Page/enums.js +8 -1
  28. package/lib/ACM-AXN/PlaceFilter/DataTable/container.js +1 -2
  29. package/lib/ACM-AXN/PlaceFilter/Input/container.js +12 -2
  30. package/lib/ACM-AXN/PlaceFilter/common.d.ts +1 -0
  31. package/lib/ACM-AXN/PlaceFilter/common.js +27 -1
  32. package/lib/ACM-AXN/Statistics/ControlPanel.js +4 -4
  33. package/lib/ACM-AXN/Template/Constants.d.ts +0 -0
  34. package/lib/ACM-AXN/Template/Constants.js +1 -0
  35. package/lib/ACM-AXN/Template/Container.d.ts +2 -0
  36. package/lib/ACM-AXN/Template/Container.js +74 -0
  37. package/lib/ACM-AXN/Template/Container.test.d.ts +1 -0
  38. package/lib/ACM-AXN/Template/Container.test.js +259 -0
  39. package/lib/ACM-AXN/Template/CreateOrEdit/CreateOrEdit.test.d.ts +1 -0
  40. package/lib/ACM-AXN/Template/CreateOrEdit/CreateOrEdit.test.js +370 -0
  41. package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.d.ts +9 -0
  42. package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.js +78 -0
  43. package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.test.d.ts +1 -0
  44. package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.test.js +150 -0
  45. package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.d.ts +6 -0
  46. package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.js +79 -0
  47. package/lib/ACM-AXN/Template/CreateOrEdit/Script.d.ts +3 -0
  48. package/lib/ACM-AXN/Template/CreateOrEdit/Script.js +58 -0
  49. package/lib/ACM-AXN/Template/CreateOrEdit/Script.test.d.ts +1 -0
  50. package/lib/ACM-AXN/Template/CreateOrEdit/Script.test.js +162 -0
  51. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Events.d.ts +5 -0
  52. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Events.js +41 -0
  53. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.d.ts +20 -0
  54. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.js +283 -0
  55. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.d.ts +1 -0
  56. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.js +220 -0
  57. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.d.ts +25 -0
  58. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.js +138 -0
  59. package/lib/ACM-AXN/Template/CreateOrEdit/Template/index.d.ts +3 -0
  60. package/lib/ACM-AXN/Template/CreateOrEdit/Template/index.js +46 -0
  61. package/lib/ACM-AXN/Template/CreateOrEdit/index.d.ts +3 -0
  62. package/lib/ACM-AXN/Template/CreateOrEdit/index.js +215 -0
  63. package/lib/ACM-AXN/Template/Hooks.d.ts +5 -0
  64. package/lib/ACM-AXN/Template/Hooks.js +13 -0
  65. package/lib/ACM-AXN/Template/Import.d.ts +2 -0
  66. package/lib/ACM-AXN/Template/Import.js +123 -0
  67. package/lib/ACM-AXN/Template/Import.test.d.ts +1 -0
  68. package/lib/ACM-AXN/Template/Import.test.js +188 -0
  69. package/lib/ACM-AXN/Template/Types.d.ts +84 -0
  70. package/lib/ACM-AXN/Template/Types.js +2 -0
  71. package/lib/ACM-AXN/Template/UploadButton.d.ts +2 -0
  72. package/lib/ACM-AXN/Template/UploadButton.js +14 -0
  73. package/lib/ACM-AXN/Template/index.d.ts +5 -0
  74. package/lib/ACM-AXN/Template/index.js +44 -0
  75. package/lib/ACM-AXN/TransactionLog/Container.js +1 -1
  76. package/lib/ACM-AXN/ViewTemplate/index.d.ts +2 -1
  77. package/lib/ACM-AXN/ViewTemplate/interface.d.ts +6 -1
  78. package/lib/AWING/ButtonSelect/index.js +2 -2
  79. package/lib/AWING/DateRangePicker/component.js +101 -132
  80. package/lib/AWING/DateRangePicker/configDate.d.ts +8 -0
  81. package/lib/AWING/DateRangePicker/configDate.js +71 -0
  82. package/lib/AWING/DateRangePicker/interface.d.ts +1 -0
  83. package/lib/AWING/HOC/Wrapper.d.ts +6 -0
  84. package/lib/AWING/HOC/Wrapper.js +10 -0
  85. package/lib/AWING/LogicExpression/script.js +0 -1
  86. package/lib/AWING/PageManagement/PageManagement.js +2 -2
  87. package/lib/AWING/PageManagement/interface.d.ts +1 -2
  88. package/lib/translate/en/translation.json +32 -2
  89. package/lib/translate/vi/translation.json +32 -2
  90. package/package.json +1 -1
  91. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.test.d.ts +0 -1
  92. package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.test.js +0 -326
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ var jsx_runtime_1 = require("react/jsx-runtime");
15
+ var enums_1 = require("../../../ACM-AXN/Page/enums");
16
+ var AWING_1 = require("../../../AWING");
17
+ var react_1 = require("react");
18
+ var react_i18next_1 = require("react-i18next");
19
+ var recoil_1 = require("recoil");
20
+ var Recoils_1 = require("./Recoils");
21
+ var Infomation = function (props) {
22
+ var directories = props.directories, templateTypes = props.templateTypes;
23
+ var t = (0, react_i18next_1.useTranslation)().t;
24
+ var _a = (0, recoil_1.useRecoilState)(Recoils_1.templateInfoState), templateInfo = _a[0], handleTemplateData = _a[1];
25
+ var handleUpdate = (0, react_1.useCallback)(function (obj, formValid, fieldUpdate) {
26
+ if (fieldUpdate) {
27
+ handleTemplateData(function (prev) { return (__assign(__assign({}, prev), obj)); });
28
+ }
29
+ }, [handleTemplateData]);
30
+ return ((0, jsx_runtime_1.jsx)(AWING_1.DataForm, { fields: [
31
+ {
32
+ fieldName: 'directoryId',
33
+ type: 'select',
34
+ label: t('Common.Directory'),
35
+ required: true,
36
+ options: directories.map(function (directory) { return ({
37
+ value: directory.directoryId,
38
+ text: directory.name,
39
+ level: directory.level,
40
+ }); }),
41
+ },
42
+ {
43
+ fieldName: 'pageCode',
44
+ type: 'select',
45
+ label: t('Common.TypePage'),
46
+ required: true,
47
+ options: Object.values(enums_1.PageCode).filter(function (item) { return !isNaN(Number(item)); }).map(function (value) { return ({
48
+ value: enums_1.PageCode[value].toLowerCase(),
49
+ text: enums_1.PageCode[value],
50
+ }); }),
51
+ },
52
+ {
53
+ fieldName: 'templateTypeId',
54
+ type: 'select',
55
+ label: t('Common.TypeTemplate'),
56
+ required: true,
57
+ options: templateTypes.map(function (type) { return ({
58
+ value: type.id,
59
+ text: type.name,
60
+ }); }),
61
+ },
62
+ {
63
+ fieldName: 'description',
64
+ type: 'text',
65
+ label: t('TemplateManagement.TemplateName'),
66
+ pattern: false,
67
+ required: true,
68
+ length: 200,
69
+ },
70
+ {
71
+ fieldName: 'isDeprecated',
72
+ type: 'checkbox',
73
+ label: t('TemplateManagement.isDeprecate'),
74
+ error: false,
75
+ },
76
+ ], oldValue: templateInfo, onUpdate: handleUpdate }));
77
+ };
78
+ exports.default = Infomation;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/extend-expect';
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ require("@testing-library/jest-dom/extend-expect");
19
+ var react_1 = require("@testing-library/react");
20
+ var Infomation_1 = __importDefault(require("./Infomation"));
21
+ var enums_1 = require("../../../ACM-AXN/Page/enums");
22
+ var recoil_1 = require("recoil");
23
+ // Mock i18next
24
+ jest.mock('react-i18next', function () { return (__assign(__assign({}, jest.requireActual('react-i18next')), { useTranslation: function () { return ({ t: jest.fn(function (key) { return key; }) }); } })); });
25
+ // Mock Utils/Helpers
26
+ jest.mock('Utils/Helpers', function () { return (__assign(__assign({}, jest.requireActual('Utils/Helpers')), { downloadZipFile: function () { } })); });
27
+ // Mock DataForm
28
+ jest.mock('awing-library/lib/AWING', function () { return ({
29
+ DataForm: function (props) {
30
+ var _a, _b;
31
+ props.fields.forEach(function (element) {
32
+ if (element === null || element === void 0 ? void 0 : element.onValidate) {
33
+ element === null || element === void 0 ? void 0 : element.onValidate();
34
+ }
35
+ });
36
+ return ((0, jsx_runtime_1.jsxs)("div", { "data-testid": "DataForm", children: [(0, jsx_runtime_1.jsx)("p", { children: JSON.stringify(props.oldValue) }), (0, jsx_runtime_1.jsx)("p", { "data-testid": "file-name", children: (_a = props.fields.find(function (item) { return item.inputProps; })) === null || _a === void 0 ? void 0 : _a.inputProps.value }), (0, jsx_runtime_1.jsx)("p", { "data-testid": "select-options", children: JSON.stringify((_b = props.fields
37
+ .filter(function (item) { return item.options; })) === null || _b === void 0 ? void 0 : _b.map(function (field) { return field.options; })) }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "onUpdate", onClick: function () {
38
+ props.onUpdate({
39
+ directoryId: '',
40
+ pageCode: '',
41
+ templateTypeId: '',
42
+ description: '',
43
+ });
44
+ } })] }));
45
+ },
46
+ }); });
47
+ // props
48
+ var props = {
49
+ directories: [
50
+ {
51
+ directoryId: '5202880755274023966',
52
+ name: 'template',
53
+ parentDirectoryId: '4913100144472996590',
54
+ objectTypeCode: 'template',
55
+ level: 3,
56
+ isFile: false,
57
+ isSystem: true,
58
+ order: 0,
59
+ description: null,
60
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.',
61
+ },
62
+ {
63
+ directoryId: '4736019141892318583',
64
+ name: 'Beta template',
65
+ parentDirectoryId: '5202880755274023966',
66
+ objectTypeCode: 'template',
67
+ level: 4,
68
+ isFile: false,
69
+ isSystem: false,
70
+ order: 0,
71
+ description: '',
72
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.4736019141892318583.',
73
+ },
74
+ ],
75
+ templateTypes: [
76
+ {
77
+ id: 1,
78
+ name: 'Banner',
79
+ templateTypeCode: 'lgn',
80
+ },
81
+ {
82
+ id: 5,
83
+ name: 'Customize',
84
+ templateTypeCode: 'lgn',
85
+ },
86
+ {
87
+ id: 7,
88
+ name: 'Customize',
89
+ templateTypeCode: 'wlc',
90
+ },
91
+ ],
92
+ templateInfo: {
93
+ id: '5126659046455609087',
94
+ directoryId: '5202880755274023966',
95
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.5126659046455609087.',
96
+ name: 'video_square',
97
+ templateHtml: 'templateHtml',
98
+ layoutId: '5197905656409960384',
99
+ pageCode: 'lgn',
100
+ description: 'Square Video',
101
+ templateTypeId: 18,
102
+ validation: 'validation',
103
+ autoField: 'autoField',
104
+ },
105
+ handleTemplateData: function (fn) {
106
+ fn({ template: {} });
107
+ },
108
+ initValidDescription: { valid: true, message: '' }
109
+ };
110
+ var renderUi = function () {
111
+ return (0, react_1.render)((0, jsx_runtime_1.jsx)(Infomation_1.default, __assign({}, props)), { wrapper: recoil_1.RecoilRoot });
112
+ };
113
+ describe('Template Infomation Tab Component', function () {
114
+ it('renders without crashing', function () {
115
+ renderUi();
116
+ });
117
+ it('render data from props', function () {
118
+ renderUi();
119
+ expect(react_1.screen.getByText(JSON.stringify([
120
+ props.directories.map(function (directory) { return ({
121
+ value: directory.directoryId,
122
+ text: directory.name,
123
+ level: directory.level,
124
+ }); }),
125
+ Object.entries(enums_1.PageCode).map(function (_a) {
126
+ var _key = _a[0], value = _a[1];
127
+ return ({
128
+ value: value,
129
+ text: value,
130
+ });
131
+ }),
132
+ props.templateTypes.map(function (type) { return ({
133
+ value: type.id,
134
+ text: type.name,
135
+ }); }),
136
+ ]))).toBeInTheDocument();
137
+ });
138
+ it('update info data', function () {
139
+ var updateSpy = jest.spyOn(props, 'handleTemplateData');
140
+ renderUi();
141
+ react_1.fireEvent.click(react_1.screen.getByTestId('onUpdate'));
142
+ expect(updateSpy).toHaveBeenCalled();
143
+ });
144
+ it("props don't have templateInfo", function () {
145
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(Infomation_1.default, __assign({}, __assign(__assign({}, props), { templateInfo: {} }))));
146
+ expect(react_1.screen.getByText(JSON.stringify({
147
+ directoryId: props.directories[0].directoryId,
148
+ }))).toBeInTheDocument();
149
+ });
150
+ });
@@ -0,0 +1,6 @@
1
+ import { ITemplate, ITemplateEvent, ITemplateModel, ITemplateParameter } from "../Types";
2
+ export declare const templateState: import("recoil").RecoilState<ITemplateModel>;
3
+ export declare const templateInfoState: import("recoil").RecoilState<ITemplate>;
4
+ export declare const templateEventState: import("recoil").RecoilState<ITemplateEvent[]>;
5
+ export declare const templateParametersState: import("recoil").RecoilState<ITemplateParameter[]>;
6
+ export declare const isEditState: import("recoil").RecoilState<boolean>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.isEditState = exports.templateParametersState = exports.templateEventState = exports.templateInfoState = exports.templateState = void 0;
15
+ var recoil_1 = require("recoil");
16
+ var defaultValidation = "<!-- return function(fields) {\n // Parameter fields: [{fieldName, fieldValue}]\n // VALID_CODE: 200, NOT_VALID_CODE: 100\n // Return array include field name, error message and check code of them\n // Eg: Check field \"text\" must have equal or more than 10 character\n return new Promise((resolve, reject) => {\n const needCheckField = fields.find(field => field.fieldName === \"text\")\n const isOk = needCheckField.fieldValue.length >= 10\n resolve([\n {\n fieldName: needCheckField.fieldName,\n code: isOk ? 200 : 100,\n errorMessage: \"Text has less than 10 character\"\n }\n ])\n })\n} -->";
17
+ var defaultHandleEvent = "<!-- return function(fields, fieldChange) {\n // Parameter fields: [{fieldName, fieldValue}], fieldChange: field which change\n // Return array of field need update with new value\n // In case no update, return empty array\n // Eg: Auto update value of \"textUpperCase\" field when value of \"text\" field changed\n return new Promise((resolve, reject) => {\n if(fieldChange.fieldName === \"text\") {\n resolve([\n {\n fieldName: \"textUpperCase\",\n newValue: fieldChange.fieldValue.toUpperCase()\n }\n ])\n }else resolve([])\n })\n} -->";
18
+ exports.templateState = (0, recoil_1.atom)({
19
+ key: "templateState",
20
+ default: {
21
+ template: {
22
+ pageCode: 'lgn',
23
+ description: '',
24
+ templateTypeId: undefined,
25
+ autoField: defaultHandleEvent,
26
+ validation: defaultValidation,
27
+ directoryId: '',
28
+ id: '',
29
+ },
30
+ templateParameters: [],
31
+ templateEvents: [],
32
+ },
33
+ });
34
+ exports.templateInfoState = (0, recoil_1.selector)({
35
+ key: "templateInfoState",
36
+ get: function (_a) {
37
+ var get = _a.get;
38
+ return get(exports.templateState).template;
39
+ },
40
+ set: function (_a, newValue) {
41
+ var set = _a.set;
42
+ set(exports.isEditState, true);
43
+ set(exports.templateState, function (oldValue) {
44
+ return __assign(__assign({}, oldValue), { template: newValue });
45
+ });
46
+ }
47
+ });
48
+ exports.templateEventState = (0, recoil_1.selector)({
49
+ key: "templateEventState",
50
+ get: function (_a) {
51
+ var get = _a.get;
52
+ return get(exports.templateState).templateEvents;
53
+ },
54
+ set: function (_a, newValue) {
55
+ var set = _a.set;
56
+ set(exports.isEditState, true);
57
+ set(exports.templateState, function (oldValue) {
58
+ return __assign(__assign({}, oldValue), { templateEvents: newValue });
59
+ });
60
+ }
61
+ });
62
+ exports.templateParametersState = (0, recoil_1.selector)({
63
+ key: "templateParametersState",
64
+ get: function (_a) {
65
+ var get = _a.get;
66
+ return get(exports.templateState).templateParameters;
67
+ },
68
+ set: function (_a, newValue) {
69
+ var set = _a.set;
70
+ set(exports.isEditState, true);
71
+ set(exports.templateState, function (oldValue) {
72
+ return __assign(__assign({}, oldValue), { templateParameters: newValue });
73
+ });
74
+ }
75
+ });
76
+ exports.isEditState = (0, recoil_1.atom)({
77
+ key: "isEditState",
78
+ default: false,
79
+ });
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ declare const Script: FC;
3
+ export default Script;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ /* eslint-disable react-hooks/exhaustive-deps */
19
+ var material_1 = require("@mui/material");
20
+ var Constants_1 = require("../../../ACM-AXN/GroupUser/Constants");
21
+ var MonacoEditor_1 = __importDefault(require("../../../ACM-AXN/ViewTemplate/TemplateField/Fields/BasicField/MonacoEditor"));
22
+ var lodash_1 = require("lodash");
23
+ var react_1 = require("react");
24
+ var react_i18next_1 = require("react-i18next");
25
+ var recoil_1 = require("recoil");
26
+ var Recoils_1 = require("./Recoils");
27
+ var Script = function () {
28
+ var t = (0, react_i18next_1.useTranslation)().t;
29
+ var _a = (0, recoil_1.useRecoilState)(Recoils_1.templateInfoState), templateInfo = _a[0], setTemplateInfo = _a[1];
30
+ var handleChangeValidation = (0, react_1.useCallback)((0, lodash_1.debounce)(function (validation) {
31
+ setTemplateInfo(function (prev) { return (__assign(__assign({}, prev), { validation: validation })); });
32
+ }, Constants_1.DEBOUNCE_TIME_300), [setTemplateInfo]);
33
+ var handleChangeAutoField = (0, react_1.useCallback)((0, lodash_1.debounce)(function (autoField) {
34
+ setTemplateInfo(function (prev) { return (__assign(__assign({}, prev), { autoField: autoField })); });
35
+ }, Constants_1.DEBOUNCE_TIME_300), [setTemplateInfo]);
36
+ return ((0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, sx: { flexGrow: 1, padding: function (theme) { return theme.spacing(3); } }, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, component: material_1.Paper, sx: { padding: function (theme) { return theme.spacing(2); }, width: '100%' }, children: [(0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, xs: 12, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "subtitle1", sx: {
37
+ fontWeight: 'bold',
38
+ color: '#BDC7CC',
39
+ paddingTop: '16px',
40
+ paddingBottom: '4px',
41
+ }, children: t('TemplateManagement.TemplateValidation') }), (0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
42
+ pointerEvents: 'unset',
43
+ border: '1px solid #e4e4e4',
44
+ padding: '10px 0',
45
+ borderRadius: '4px',
46
+ }, children: (0, jsx_runtime_1.jsx)(MonacoEditor_1.default, { value: templateInfo.validation, height: "30vh", language: "html", onChange: handleChangeValidation, isShowMinimap: true }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, xs: 12, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "subtitle1", sx: {
47
+ fontWeight: 'bold',
48
+ color: '#BDC7CC',
49
+ paddingTop: '16px',
50
+ paddingBottom: '4px',
51
+ }, children: t('TemplateManagement.FieldAutoUpdate') }), (0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
52
+ pointerEvents: 'unset',
53
+ border: '1px solid #e4e4e4',
54
+ padding: '10px 0',
55
+ borderRadius: '4px',
56
+ }, children: (0, jsx_runtime_1.jsx)(MonacoEditor_1.default, { value: templateInfo.autoField, height: "30vh", language: "html", onChange: handleChangeAutoField, isShowMinimap: true }) })] })] }) }));
57
+ };
58
+ exports.default = Script;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/extend-expect';
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var jsx_runtime_1 = require("react/jsx-runtime");
54
+ /* eslint-disable testing-library/no-wait-for-side-effects */
55
+ require("@testing-library/jest-dom/extend-expect");
56
+ var react_1 = require("@testing-library/react");
57
+ var Script_1 = __importDefault(require("./Script"));
58
+ var recoil_1 = require("recoil");
59
+ var Recoils_1 = require("./Recoils");
60
+ // Mock i18next
61
+ jest.mock('react-i18next', function () { return (__assign(__assign({}, jest.requireActual('react-i18next')), { useTranslation: function () { return ({ t: jest.fn(function (key) { return key; }) }); } })); });
62
+ // Mock Monaco
63
+ jest.mock('ACM-AXN/ViewTemplate/TemplateField/Fields/BasicField/MonacoEditor', function () { return ({
64
+ __esModule: true,
65
+ default: function (props) { return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { children: props.value }), (0, jsx_runtime_1.jsx)("button", { onClick: function () {
66
+ props.onChange('aaaaabbb');
67
+ }, children: "onChange" })] })); },
68
+ }); });
69
+ // props
70
+ var props = {
71
+ directories: [
72
+ {
73
+ directoryId: '5202880755274023966',
74
+ name: 'template',
75
+ parentDirectoryId: '4913100144472996590',
76
+ objectTypeCode: 'template',
77
+ level: 3,
78
+ isFile: false,
79
+ isSystem: true,
80
+ order: 0,
81
+ description: null,
82
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.',
83
+ },
84
+ {
85
+ directoryId: '4736019141892318583',
86
+ name: 'Beta template',
87
+ parentDirectoryId: '5202880755274023966',
88
+ objectTypeCode: 'template',
89
+ level: 4,
90
+ isFile: false,
91
+ isSystem: false,
92
+ order: 0,
93
+ description: '',
94
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.4736019141892318583.',
95
+ },
96
+ ],
97
+ templateTypes: [
98
+ {
99
+ id: 1,
100
+ name: 'Banner',
101
+ templateTypeCode: 'lgn',
102
+ },
103
+ {
104
+ id: 5,
105
+ name: 'Customize',
106
+ templateTypeCode: 'lgn',
107
+ },
108
+ {
109
+ id: 7,
110
+ name: 'Customize',
111
+ templateTypeCode: 'wlc',
112
+ },
113
+ ],
114
+ handleTemplateData: function (fn) {
115
+ fn({ template: {} });
116
+ },
117
+ };
118
+ var templateData = {
119
+ template: {
120
+ id: '5126659046455609087',
121
+ directoryId: '5202880755274023966',
122
+ directoryPath: '.0.90.4913100144472996590.5202880755274023966.5126659046455609087.',
123
+ name: 'video_square',
124
+ templateHtml: 'templateHtml',
125
+ layoutId: '5197905656409960384',
126
+ pageCode: 'lgn',
127
+ description: 'Square Video',
128
+ templateTypeId: 18,
129
+ validation: 'validation-Monaco1',
130
+ autoField: 'autoField-Monaco2',
131
+ },
132
+ };
133
+ describe('Template Infomation Tab Component', function () {
134
+ var renderUi = function () {
135
+ return (0, react_1.render)((0, jsx_runtime_1.jsx)(recoil_1.RecoilRoot, { initializeState: function (_a) {
136
+ var set = _a.set;
137
+ set(Recoils_1.templateState, templateData);
138
+ }, children: (0, jsx_runtime_1.jsx)(Script_1.default, {}) }));
139
+ };
140
+ it('renders without crashing', function () {
141
+ renderUi();
142
+ });
143
+ it('update info data', function () { return __awaiter(void 0, void 0, void 0, function () {
144
+ var updateSpy;
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0:
148
+ updateSpy = jest.spyOn(props, 'handleTemplateData');
149
+ renderUi();
150
+ react_1.screen.getAllByText('onChange').forEach(function (btn) {
151
+ react_1.fireEvent.click(btn);
152
+ });
153
+ return [4 /*yield*/, (0, react_1.waitFor)(function () {
154
+ expect(updateSpy).toBeCalledTimes(2);
155
+ })];
156
+ case 1:
157
+ _a.sent();
158
+ return [2 /*return*/];
159
+ }
160
+ });
161
+ }); });
162
+ });
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ declare const Events: React.FC<{
3
+ templateId: string;
4
+ }>;
5
+ export default Events;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var material_1 = require("@mui/material");
19
+ var react_i18next_1 = require("react-i18next");
20
+ var i18n_1 = __importDefault(require("../../../../i18n"));
21
+ var recoil_1 = require("recoil");
22
+ var Recoils_1 = require("../Recoils");
23
+ var lodash_1 = require("lodash");
24
+ // id?: number
25
+ // templateId?: string
26
+ // event?: string
27
+ var Events = function (_a) {
28
+ var templateId = _a.templateId;
29
+ var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
30
+ var _b = (0, recoil_1.useRecoilState)(Recoils_1.templateEventState), events = _b[0], setEvent = _b[1];
31
+ var renderTags = function (options, getTagProps, ownerState) {
32
+ return options.map(function (option, i) {
33
+ console.log("ownerState", ownerState, options);
34
+ return ((0, jsx_runtime_1.jsx)(material_1.Chip, __assign({ label: option.text, title: option.text, size: "small" }, getTagProps({ index: i }))));
35
+ });
36
+ };
37
+ return ((0, jsx_runtime_1.jsx)(material_1.Box, { marginBottom: 2, children: (0, jsx_runtime_1.jsx)(material_1.Autocomplete, { fullWidth: true, multiple: true, autoComplete: true, options: [], onChange: function (reseaon, values) {
38
+ setEvent((0, lodash_1.uniqBy)(values.map(function (value) { return typeof value === 'string' ? { id: 0, templateId: templateId, event: value } : value; }), 'event'));
39
+ }, freeSolo: true, disableClearable: true, value: events, getOptionLabel: function (option) { return option === null || option === void 0 ? void 0 : option.event; }, isOptionEqualToValue: function (option, value) { return (option === null || option === void 0 ? void 0 : option.event) === (value === null || value === void 0 ? void 0 : value.event); }, renderInput: function (params) { return ((0, jsx_runtime_1.jsx)(material_1.TextField, __assign({ variant: 'standard' }, params, { placeholder: "".concat(t('Common.Events'), "..."), inputProps: __assign(__assign({}, params.inputProps), { autoComplete: 'off' }) }))); } }) }));
40
+ };
41
+ exports.default = Events;
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ interface ParameterProps {
3
+ templateId: string;
4
+ }
5
+ export declare const OmitListType: {
6
+ IMAGE: string;
7
+ TEXT_FIELD: string;
8
+ VIDEO: string;
9
+ TEXT_FIELD_NUMBER: string;
10
+ HTML: string;
11
+ CHECKBOX: string;
12
+ TEXTAREA: string;
13
+ DROPDOWN_LIST: string;
14
+ CHECKBOX_LIST: string;
15
+ LIST: string;
16
+ OBJECT: string;
17
+ COLOR: string;
18
+ };
19
+ declare const _default: import("react").NamedExoticComponent<ParameterProps>;
20
+ export default _default;