awing-library 2.1.95-beta → 2.1.97-beta
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/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/container.js +42 -41
- package/lib/ACM-AXN/Page/CreateOrEdit/Components/useListPageView.js +9 -4
- package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.d.ts +2 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.js +14 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/FileUtils.d.ts +3 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/FileUtils.js +1 -6
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.d.ts +7 -0
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.js +13 -15
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +23 -2
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.d.ts +3 -2
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/index.test.js +2 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/Utils.d.ts +4 -3
- package/lib/ACM-AXN/Page/CreateOrEdit/Utils.js +4 -2
- package/lib/ACM-AXN/Page/Types.d.ts +10 -37
- package/lib/ACM-AXN/Page/enums.d.ts +6 -0
- package/lib/ACM-AXN/Page/enums.js +8 -1
- package/lib/ACM-AXN/Template/Constants.d.ts +0 -0
- package/lib/ACM-AXN/Template/Constants.js +1 -0
- package/lib/ACM-AXN/Template/Container.d.ts +2 -0
- package/lib/ACM-AXN/Template/Container.js +74 -0
- package/lib/ACM-AXN/Template/Container.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/Container.test.js +259 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/CreateOrEdit.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/CreateOrEdit.test.js +370 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.d.ts +9 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.js +78 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.test.js +150 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.d.ts +6 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.js +79 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Script.d.ts +3 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Script.js +58 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Script.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Script.test.js +162 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Events.d.ts +5 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Events.js +41 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.d.ts +20 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.js +283 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.js +220 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.d.ts +25 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.js +138 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/index.d.ts +3 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/Template/index.js +46 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/index.d.ts +3 -0
- package/lib/ACM-AXN/Template/CreateOrEdit/index.js +215 -0
- package/lib/ACM-AXN/Template/Hooks.d.ts +5 -0
- package/lib/ACM-AXN/Template/Hooks.js +13 -0
- package/lib/ACM-AXN/Template/Import.d.ts +2 -0
- package/lib/ACM-AXN/Template/Import.js +123 -0
- package/lib/ACM-AXN/Template/Import.test.d.ts +1 -0
- package/lib/ACM-AXN/Template/Import.test.js +188 -0
- package/lib/ACM-AXN/Template/Types.d.ts +84 -0
- package/lib/ACM-AXN/Template/Types.js +2 -0
- package/lib/ACM-AXN/Template/UploadButton.d.ts +2 -0
- package/lib/ACM-AXN/Template/UploadButton.js +14 -0
- package/lib/ACM-AXN/Template/index.d.ts +5 -0
- package/lib/ACM-AXN/Template/index.js +44 -0
- package/lib/ACM-AXN/ViewTemplate/index.d.ts +2 -1
- package/lib/ACM-AXN/ViewTemplate/interface.d.ts +6 -1
- package/lib/AWING/HOC/Wrapper.d.ts +6 -0
- package/lib/AWING/HOC/Wrapper.js +10 -0
- package/lib/translate/en/translation.json +27 -1
- package/lib/translate/vi/translation.json +27 -1
- package/package.json +1 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.test.d.ts +0 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/TabFile/index.test.js +0 -326
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.templatePropsContext = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var react_2 = require("react");
|
|
6
|
+
exports.templatePropsContext = (0, react_1.createContext)({});
|
|
7
|
+
var useTemplateProps = function () {
|
|
8
|
+
var props = (0, react_2.useContext)(exports.templatePropsContext);
|
|
9
|
+
return (0, react_2.useMemo)(function () {
|
|
10
|
+
return props;
|
|
11
|
+
}, [props]);
|
|
12
|
+
};
|
|
13
|
+
exports.default = useTemplateProps;
|
|
@@ -0,0 +1,123 @@
|
|
|
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 ClassicDrawer_1 = __importDefault(require("../../Commons/Components/ClassicDrawer"));
|
|
19
|
+
var AWING_1 = require("../../AWING");
|
|
20
|
+
var lodash_1 = require("lodash");
|
|
21
|
+
var react_1 = require("react");
|
|
22
|
+
var react_i18next_1 = require("react-i18next");
|
|
23
|
+
var Enum_1 = require("../../ACM-AXN/Campaign/Enum");
|
|
24
|
+
var UploadButton_1 = __importDefault(require("./UploadButton"));
|
|
25
|
+
var Hooks_1 = __importDefault(require("./Hooks"));
|
|
26
|
+
var ImportTemplate = function () {
|
|
27
|
+
var t = (0, react_i18next_1.useTranslation)().t;
|
|
28
|
+
var service = (0, Hooks_1.default)().service;
|
|
29
|
+
var _a = (0, react_1.useState)(), tempFile = _a[0], setTempFile = _a[1];
|
|
30
|
+
var _b = (0, react_1.useState)([]), directories = _b[0], setDirectories = _b[1];
|
|
31
|
+
var _c = (0, react_1.useState)({ directoryId: '', id: '', name: '' }), bussinessData = _c[0], setBussinessData = _c[1];
|
|
32
|
+
var rootDirectoryId = (0, react_1.useMemo)(function () { var _a; return (_a = (0, lodash_1.minBy)(directories, 'level')) === null || _a === void 0 ? void 0 : _a.directoryId; }, [directories]);
|
|
33
|
+
var hiddenTemplateImport = (0, react_1.useRef)();
|
|
34
|
+
(0, react_1.useEffect)(function () {
|
|
35
|
+
fetchDirectories();
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
+
}, []);
|
|
38
|
+
var handleChooseFileClicked = function () {
|
|
39
|
+
hiddenTemplateImport.current && hiddenTemplateImport.current.click();
|
|
40
|
+
};
|
|
41
|
+
var handleImportTemplate = function (e) {
|
|
42
|
+
if (e.target.files.length > 0) {
|
|
43
|
+
setTempFile(e.target.files[0]);
|
|
44
|
+
e.target.value = null;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var fetchDirectories = function () {
|
|
48
|
+
service
|
|
49
|
+
.directoriesGetByObjectTypeCode(Enum_1.DirectoryRoot.Template)
|
|
50
|
+
.then(setDirectories);
|
|
51
|
+
};
|
|
52
|
+
var handleSubmit = function () {
|
|
53
|
+
var directoryId = bussinessData.directoryId, id = bussinessData.id, name = bussinessData.name;
|
|
54
|
+
return service.templatesImport(directoryId, id, name, {
|
|
55
|
+
data: tempFile,
|
|
56
|
+
fileName: tempFile === null || tempFile === void 0 ? void 0 : tempFile.name,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
var handleChangeFormData = (0, react_1.useCallback)(function (obj) {
|
|
60
|
+
setBussinessData(function (prev) { return (__assign(__assign(__assign(__assign({}, prev), { id: prev.id || '0' }), obj), { directoryId: (obj === null || obj === void 0 ? void 0 : obj.directoryId) || rootDirectoryId })); });
|
|
61
|
+
}, [rootDirectoryId]);
|
|
62
|
+
return ((0, jsx_runtime_1.jsxs)(ClassicDrawer_1.default, { title: t('TemplateManagement.ImportTemplate'), onSubmit: handleSubmit, disableButtonSubmit: !(tempFile === null || tempFile === void 0 ? void 0 : tempFile.name), confirmExit: true, childrenWrapperStyle: { padding: 0 }, children: [(0, jsx_runtime_1.jsx)(AWING_1.DataForm, { fields: [
|
|
63
|
+
{
|
|
64
|
+
fieldName: 'directoryId',
|
|
65
|
+
type: 'select',
|
|
66
|
+
label: t('Common.Directory'),
|
|
67
|
+
required: true,
|
|
68
|
+
options: directories.map(function (directory) { return ({
|
|
69
|
+
value: directory.directoryId,
|
|
70
|
+
text: directory.name,
|
|
71
|
+
level: directory.level,
|
|
72
|
+
}); }),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
fieldName: 'name',
|
|
76
|
+
type: 'text',
|
|
77
|
+
label: t('Common.Name'),
|
|
78
|
+
onValidate: function () { return true; },
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
fieldName: 'id',
|
|
82
|
+
type: 'text',
|
|
83
|
+
label: t('TemplateManagement.TemplateId'),
|
|
84
|
+
onValidate: function () { return true; },
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
fieldName: 'fileName',
|
|
88
|
+
type: 'text',
|
|
89
|
+
disabled: !(tempFile === null || tempFile === void 0 ? void 0 : tempFile.name),
|
|
90
|
+
label: t('Common.File'),
|
|
91
|
+
inputProps: {
|
|
92
|
+
value: tempFile === null || tempFile === void 0 ? void 0 : tempFile.name,
|
|
93
|
+
},
|
|
94
|
+
required: true,
|
|
95
|
+
onValidate: function () { return true; },
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
fieldName: '',
|
|
99
|
+
type: 'text',
|
|
100
|
+
InputProps: {
|
|
101
|
+
onClick: handleChooseFileClicked,
|
|
102
|
+
sx: {
|
|
103
|
+
':before': {
|
|
104
|
+
border: 'none',
|
|
105
|
+
},
|
|
106
|
+
':hover': {
|
|
107
|
+
':before': {
|
|
108
|
+
border: 'none!important',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
width: 'fit-content',
|
|
112
|
+
},
|
|
113
|
+
inputComponent: (0, react_1.forwardRef)(UploadButton_1.default),
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
], oldValue: {
|
|
117
|
+
directoryId: rootDirectoryId,
|
|
118
|
+
id: '',
|
|
119
|
+
name: '',
|
|
120
|
+
fileName: '',
|
|
121
|
+
}, onUpdate: handleChangeFormData }), (0, jsx_runtime_1.jsx)("input", { style: { display: 'none' }, name: "fileupload", ref: hiddenTemplateImport, accept: ".zip", type: "file", onChange: handleImportTemplate })] }));
|
|
122
|
+
};
|
|
123
|
+
exports.default = ImportTemplate;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/extend-expect';
|
|
@@ -0,0 +1,188 @@
|
|
|
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 Import_1 = __importDefault(require("./Import"));
|
|
58
|
+
var user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
59
|
+
// Mock Axios client
|
|
60
|
+
var directories = [
|
|
61
|
+
{
|
|
62
|
+
directoryId: '5202880755274023966',
|
|
63
|
+
name: 'template',
|
|
64
|
+
parentDirectoryId: '4913100144472996590',
|
|
65
|
+
objectTypeCode: 'template',
|
|
66
|
+
level: 3,
|
|
67
|
+
isFile: false,
|
|
68
|
+
isSystem: true,
|
|
69
|
+
order: 0,
|
|
70
|
+
description: null,
|
|
71
|
+
directoryPath: '.0.90.4913100144472996590.5202880755274023966.',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
directoryId: '4736019141892318583',
|
|
75
|
+
name: 'Beta template',
|
|
76
|
+
parentDirectoryId: '5202880755274023966',
|
|
77
|
+
objectTypeCode: 'template',
|
|
78
|
+
level: 4,
|
|
79
|
+
isFile: false,
|
|
80
|
+
isSystem: false,
|
|
81
|
+
order: 0,
|
|
82
|
+
description: '',
|
|
83
|
+
directoryPath: '.0.90.4913100144472996590.5202880755274023966.4736019141892318583.',
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
var clientMethod = {
|
|
87
|
+
directoriesGetByObjectTypeCode: function (id) {
|
|
88
|
+
return Promise.resolve(directories);
|
|
89
|
+
},
|
|
90
|
+
templatesImport: function () { return Promise.resolve(); },
|
|
91
|
+
};
|
|
92
|
+
jest.mock('./Hooks', function () { return ({
|
|
93
|
+
__esModule: true,
|
|
94
|
+
default: function () { return ({
|
|
95
|
+
service: {
|
|
96
|
+
directoriesGetByObjectTypeCode: jest.fn(function (id) {
|
|
97
|
+
return Promise.resolve(clientMethod.directoriesGetByObjectTypeCode(id));
|
|
98
|
+
}),
|
|
99
|
+
templatesImport: jest.fn(function (_id) {
|
|
100
|
+
return Promise.resolve(clientMethod.templatesImport());
|
|
101
|
+
}),
|
|
102
|
+
},
|
|
103
|
+
}); },
|
|
104
|
+
}); });
|
|
105
|
+
jest.mock('Commons/Client', function () { return ({
|
|
106
|
+
__esModule: true,
|
|
107
|
+
DirectoryRoot: {
|
|
108
|
+
template: 'template',
|
|
109
|
+
},
|
|
110
|
+
// IDirectory: ,
|
|
111
|
+
}); });
|
|
112
|
+
// Mock i18next
|
|
113
|
+
jest.mock('react-i18next', function () { return (__assign(__assign({}, jest.requireActual('react-i18next')), { useTranslation: function () { return ({ t: jest.fn(function (key) { return key; }) }); } })); });
|
|
114
|
+
// Mock React
|
|
115
|
+
jest.mock('react', function () { return (__assign(__assign({}, jest.requireActual('react')), { forwardRef: jest.fn(function (arg) { return arg; }), useRef: function () { return ({ current: { click: function () { } } }); } })); });
|
|
116
|
+
// Mock Drawer
|
|
117
|
+
jest.mock('awing-library/lib/Commons/Components/ClassicDrawer', function () { return function (props) {
|
|
118
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("button", { "data-testid": "onSubmit", onClick: props.onSubmit, children: "submit" }), props.children] }));
|
|
119
|
+
}; });
|
|
120
|
+
// Mock DataForm
|
|
121
|
+
jest.mock('awing-library/lib/AWING', function () { return ({
|
|
122
|
+
DataForm: function (props) {
|
|
123
|
+
var _a, _b, _c;
|
|
124
|
+
props.fields.forEach(function (element) {
|
|
125
|
+
if (element === null || element === void 0 ? void 0 : element.onValidate) {
|
|
126
|
+
element === null || element === void 0 ? void 0 : element.onValidate();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
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.find(function (item) { return item.options; })) === null || _b === void 0 ? void 0 : _b.options) }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "upload-btn", onClick: (_c = props.fields.find(function (item) { return item.InputProps; })) === null || _c === void 0 ? void 0 : _c.InputProps.onClick }), (0, jsx_runtime_1.jsx)("button", { "data-testid": "onUpdate", onClick: function () {
|
|
130
|
+
props.onUpdate({
|
|
131
|
+
id: 'id',
|
|
132
|
+
name: 'name',
|
|
133
|
+
});
|
|
134
|
+
} })] }));
|
|
135
|
+
},
|
|
136
|
+
}); });
|
|
137
|
+
describe('Import Template component', function () {
|
|
138
|
+
var renderUi = function () { return (0, react_1.render)((0, jsx_runtime_1.jsx)(Import_1.default, {})); };
|
|
139
|
+
it('render without crash', function () {
|
|
140
|
+
renderUi();
|
|
141
|
+
});
|
|
142
|
+
it('render template directory select option', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
143
|
+
return __generator(this, function (_a) {
|
|
144
|
+
switch (_a.label) {
|
|
145
|
+
case 0:
|
|
146
|
+
renderUi();
|
|
147
|
+
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
148
|
+
expect(react_1.screen.getByText(JSON.stringify(directories.map(function (directory) { return ({
|
|
149
|
+
value: directory.directoryId,
|
|
150
|
+
text: directory.name,
|
|
151
|
+
level: directory.level,
|
|
152
|
+
}); })))).toBeInTheDocument();
|
|
153
|
+
})];
|
|
154
|
+
case 1:
|
|
155
|
+
_a.sent();
|
|
156
|
+
return [2 /*return*/];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}); });
|
|
160
|
+
it('trigger upload button', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
+
var file, container, input;
|
|
162
|
+
return __generator(this, function (_a) {
|
|
163
|
+
switch (_a.label) {
|
|
164
|
+
case 0:
|
|
165
|
+
file = new File(['abc'], 'test.zip', {
|
|
166
|
+
type: 'application/x-zip-compressed',
|
|
167
|
+
});
|
|
168
|
+
container = renderUi().container;
|
|
169
|
+
input = container.querySelector("input[name=\"fileupload\"]");
|
|
170
|
+
react_1.fireEvent.click(react_1.screen.getByTestId('upload-btn'));
|
|
171
|
+
react_1.fireEvent.change(input, { target: { files: undefined } });
|
|
172
|
+
user_event_1.default.upload(input, file);
|
|
173
|
+
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
174
|
+
expect(react_1.screen.getByText('test.zip')).toBeInTheDocument();
|
|
175
|
+
})];
|
|
176
|
+
case 1:
|
|
177
|
+
_a.sent();
|
|
178
|
+
return [2 /*return*/];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}); });
|
|
182
|
+
it('handle submit', function () {
|
|
183
|
+
renderUi();
|
|
184
|
+
react_1.fireEvent.click(react_1.screen.getByTestId('onUpdate'));
|
|
185
|
+
react_1.fireEvent.click(react_1.screen.getByTestId('onSubmit'));
|
|
186
|
+
// TODO: test client.templatesImport with arguments
|
|
187
|
+
});
|
|
188
|
+
});
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { DirectoryRoot } from '../../ACM-AXN/Campaign/Enum';
|
|
2
|
+
import { Directory } from '../../ACM-AXN/Campaign/Types';
|
|
3
|
+
import { IDirectory } from '../../ACM-AXN/Directory/interface';
|
|
4
|
+
import { FileParameter, PhysicalFolder, Template } from '../../ACM-AXN/Page/Types';
|
|
5
|
+
import { PageCode } from '../../ACM-AXN/Page/enums';
|
|
6
|
+
import { FileResponse } from '../../Commons/Types';
|
|
7
|
+
export interface ITemplateType {
|
|
8
|
+
id?: number;
|
|
9
|
+
name?: string;
|
|
10
|
+
templateTypeCode?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ITemplateParameter {
|
|
13
|
+
id?: string;
|
|
14
|
+
templateId?: string;
|
|
15
|
+
fieldName?: string;
|
|
16
|
+
fieldType?: string;
|
|
17
|
+
defaultValue?: string;
|
|
18
|
+
labelName?: string;
|
|
19
|
+
isRequired?: boolean;
|
|
20
|
+
childrens?: ITemplateParameter[];
|
|
21
|
+
isAdvanced?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface ITemplateEvent {
|
|
24
|
+
id?: number;
|
|
25
|
+
templateId?: string;
|
|
26
|
+
event?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ITemplateModel {
|
|
29
|
+
template: ITemplate;
|
|
30
|
+
templateParameters: ITemplateParameter[];
|
|
31
|
+
templateEvents: ITemplateEvent[];
|
|
32
|
+
}
|
|
33
|
+
export interface ITemplate {
|
|
34
|
+
id?: string;
|
|
35
|
+
directoryId?: string;
|
|
36
|
+
directoryPath?: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
templateHtml?: string;
|
|
39
|
+
layoutId?: string;
|
|
40
|
+
pageCode?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
templateTypeId?: number;
|
|
43
|
+
validation?: string;
|
|
44
|
+
autoField?: string;
|
|
45
|
+
isDeprecated?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface ITemplatesPaging {
|
|
48
|
+
templates?: ITemplate[];
|
|
49
|
+
total?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface ITemplateFileService {
|
|
52
|
+
templatesGetDirectories: () => Promise<Directory[]>;
|
|
53
|
+
templateTypesGet: () => Promise<ITemplateType[]>;
|
|
54
|
+
templatesGetByDirectoryId: (directoryId: string) => Promise<Template[]>;
|
|
55
|
+
templatesGet: ITemplateService['templatesGet'];
|
|
56
|
+
pageFilesCreateCreateUpload: (parentDirectoryId: string, code: PageCode, objectId: string, path: string, files: FileParameter[]) => Promise<void>;
|
|
57
|
+
pageFilesUpdateUpload: (code: PageCode, objectId: string, path: string, files: FileParameter[]) => Promise<void>;
|
|
58
|
+
pagesGenerateId: () => Promise<string>;
|
|
59
|
+
pageFilesUpdateGetTreeFolder: (code: PageCode, objectId: string) => Promise<PhysicalFolder>;
|
|
60
|
+
pageFilesCreateGetTreeFolder: (parentDirectoryId: string, code: PageCode, objectId: string) => Promise<PhysicalFolder>;
|
|
61
|
+
pageFilesCreateDownload: (parentDirectoryId: string, code: PageCode, objectId: string, pathFile: string) => Promise<FileResponse>;
|
|
62
|
+
pageFilesUpdateDownload: (code: PageCode, objectId: string, pathFile: string) => Promise<FileResponse>;
|
|
63
|
+
pageFilesUpdateDownloadFolder: (code: PageCode, objectId: string, path: string) => Promise<FileResponse>;
|
|
64
|
+
pageFilesCreateDownloadFolder: (parentDirectoryId: string, code: PageCode, objectId: string, path: string) => Promise<FileResponse>;
|
|
65
|
+
pageFilesCreateCreateFolder: (parentDirectoryId: string, code: PageCode, objectId: string, path: string, name: string) => Promise<void>;
|
|
66
|
+
pageFilesUpdateCreateFolder: (code: PageCode, objectId: string, path: string, name: string) => Promise<void>;
|
|
67
|
+
pageFilesCreateDelete: (parentDirectoryId: string, code: PageCode, objectId: string, path: string) => Promise<void>;
|
|
68
|
+
pageFilesUpdateDelete: (code: PageCode, objectId: string, path: string) => Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
export interface ITemplateService extends ITemplateFileService {
|
|
71
|
+
templatesPaging: (searchString: string | undefined, pageSize: number | undefined, pageIndexc: number | undefined) => Promise<ITemplatesPaging>;
|
|
72
|
+
templatesExport(id: string | undefined): Promise<FileResponse>;
|
|
73
|
+
templatesDelete(id: string): Promise<void>;
|
|
74
|
+
directoriesGetByObjectTypeCode(objectTypeCode: DirectoryRoot): Promise<IDirectory[]>;
|
|
75
|
+
templatesImport(newDirectoryId: string | undefined, id: string | undefined, name: string | undefined, file: FileParameter | undefined): Promise<void>;
|
|
76
|
+
templateTypesGet(): Promise<ITemplateType[]>;
|
|
77
|
+
templatesGet(id: string): Promise<ITemplateModel>;
|
|
78
|
+
directoriesGenerateId(): Promise<string>;
|
|
79
|
+
templatesPut(id: string, body: ITemplateModel): Promise<void>;
|
|
80
|
+
templatesPost(body: ITemplateModel): Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
export interface TemplateProps {
|
|
83
|
+
service: ITemplateService;
|
|
84
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
var CloudUpload_1 = __importDefault(require("@mui/icons-material/CloudUpload"));
|
|
8
|
+
var material_1 = require("@mui/material");
|
|
9
|
+
var react_i18next_1 = require("react-i18next");
|
|
10
|
+
var UploadButton = function () {
|
|
11
|
+
var t = (0, react_i18next_1.useTranslation)().t;
|
|
12
|
+
return ((0, jsx_runtime_1.jsx)(material_1.Tooltip, { title: t('Common.Upload'), children: (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", style: { marginTop: '16px' }, children: (0, jsx_runtime_1.jsx)(CloudUpload_1.default, {}) }) }));
|
|
13
|
+
};
|
|
14
|
+
exports.default = UploadButton;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.TemplateFeature = void 0;
|
|
21
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
22
|
+
var Container_1 = __importDefault(require("./Container"));
|
|
23
|
+
var Router_1 = require("../../AWING/Router");
|
|
24
|
+
var react_1 = require("react");
|
|
25
|
+
var Import_1 = __importDefault(require("./Import"));
|
|
26
|
+
var CreateOrEdit_1 = __importDefault(require("./CreateOrEdit"));
|
|
27
|
+
var Constants_1 = require("../../ACM-AXN/GroupUser/Constants");
|
|
28
|
+
var Hooks_1 = require("./Hooks");
|
|
29
|
+
var react_i18next_1 = require("react-i18next");
|
|
30
|
+
var i18n_1 = __importDefault(require("../../i18n"));
|
|
31
|
+
var TemplateFeature = function (props) {
|
|
32
|
+
var paths = [
|
|
33
|
+
{ param: Constants_1.IMPORT_PATH, element: Import_1.default },
|
|
34
|
+
{ param: Constants_1.CREATE_PATH, element: CreateOrEdit_1.default },
|
|
35
|
+
{
|
|
36
|
+
param: Constants_1.EDIT_PATH + '/:templateId',
|
|
37
|
+
element: CreateOrEdit_1.default,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
return ((0, jsx_runtime_1.jsx)(react_i18next_1.I18nextProvider, { i18n: i18n_1.default, children: (0, jsx_runtime_1.jsxs)(Hooks_1.templatePropsContext.Provider, { value: props, children: [(0, jsx_runtime_1.jsx)(Container_1.default, {}), (0, jsx_runtime_1.jsx)(Router_1.Routes, { children: paths.map(function (p) { return ((0, jsx_runtime_1.jsx)(Router_1.Route, { path: p.param, element: (0, react_1.createElement)(p.element) }, p.param)); }) })] }) }));
|
|
41
|
+
};
|
|
42
|
+
exports.TemplateFeature = TemplateFeature;
|
|
43
|
+
__exportStar(require("./Types"), exports);
|
|
44
|
+
exports.default = exports.TemplateFeature;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { ViewTemplateProps } from "./interface";
|
|
2
|
+
export declare function ViewTemplate(props: ViewTemplateProps): import("react/jsx-runtime").JSX.Element;
|
|
2
3
|
export default ViewTemplate;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PageViewEvent } from "../../ACM-AXN/Page/Types";
|
|
1
2
|
export interface Configs {
|
|
2
3
|
TEMPLATE_FILE_PATH?: string;
|
|
3
4
|
FILE_TEMP_PATH?: string;
|
|
@@ -48,6 +49,9 @@ export interface FieldProps {
|
|
|
48
49
|
onNotifyError: (errorMessage: string) => void;
|
|
49
50
|
onUploadFile: (files: any[]) => Promise<string>;
|
|
50
51
|
}
|
|
52
|
+
export interface ViewTemplateEvents extends Omit<PageViewEvent, 'viewNumber'> {
|
|
53
|
+
protected?: boolean;
|
|
54
|
+
}
|
|
51
55
|
export interface ViewTemplateProps {
|
|
52
56
|
templateDatas: FieldInfo[];
|
|
53
57
|
/**
|
|
@@ -90,5 +94,6 @@ export interface ViewTemplateProps {
|
|
|
90
94
|
* Hiển thị thông báo lỗi
|
|
91
95
|
*/
|
|
92
96
|
onNotifyError?: (errorMessage: string) => void;
|
|
93
|
-
onUploadFile: (files: any[]) => Promise<
|
|
97
|
+
onUploadFile: (files: any[]) => Promise<any>;
|
|
98
|
+
viewEvents?: ViewTemplateEvents[];
|
|
94
99
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const Wrapper: <T extends React.FC<any> = () => JSX.Element, W extends React.FC<any> = () => JSX.Element>(Compoent: T, Parrent: {
|
|
3
|
+
component: W;
|
|
4
|
+
props?: React.ComponentProps<W>;
|
|
5
|
+
}) => React.FC<React.ComponentProps<T>>;
|
|
6
|
+
export default Wrapper;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var react_1 = require("react");
|
|
4
|
+
var Wrapper = function (Compoent, Parrent) {
|
|
5
|
+
var wrapped = function (props) {
|
|
6
|
+
return (0, react_1.createElement)(Parrent.component, Parrent.props, (0, react_1.createElement)(Compoent, props));
|
|
7
|
+
};
|
|
8
|
+
return wrapped;
|
|
9
|
+
};
|
|
10
|
+
exports.default = Wrapper;
|
|
@@ -112,7 +112,10 @@
|
|
|
112
112
|
"GroupName": "Group Name",
|
|
113
113
|
"InvalidChars": "Invalid characters",
|
|
114
114
|
"InvalidLength": "Invalid string length",
|
|
115
|
-
"RequestHasApprove": "Your request have approved"
|
|
115
|
+
"RequestHasApprove": "Your request have approved",
|
|
116
|
+
"Advance": "Advance",
|
|
117
|
+
"Default": "Default",
|
|
118
|
+
"Events": "Events"
|
|
116
119
|
},
|
|
117
120
|
"User": {
|
|
118
121
|
"Username": "Username",
|
|
@@ -132,6 +135,29 @@
|
|
|
132
135
|
"All": "All",
|
|
133
136
|
"TotalSelected": "Total selected"
|
|
134
137
|
},
|
|
138
|
+
"TemplateManagement": {
|
|
139
|
+
"Create": "Create template",
|
|
140
|
+
"Edit": "Edit template",
|
|
141
|
+
"title": "Template Management",
|
|
142
|
+
"TemplateName": "Template name",
|
|
143
|
+
"Page_lgn": "Page Login",
|
|
144
|
+
"Page_wlc": "Page Welcome",
|
|
145
|
+
"TemplateId": "Template ID",
|
|
146
|
+
"ImportTemplate": "Import template",
|
|
147
|
+
"Information": "Information",
|
|
148
|
+
"Template": "Template",
|
|
149
|
+
"Advance": "Advance",
|
|
150
|
+
"Script": "Script",
|
|
151
|
+
"TemplateHtml": "Html",
|
|
152
|
+
"TemplateValidation": "Validation",
|
|
153
|
+
"FieldAutoUpdate": "Field Auto Update",
|
|
154
|
+
"Parameter": "Parameter",
|
|
155
|
+
"FieldName": "Name",
|
|
156
|
+
"fieldType": "Type",
|
|
157
|
+
"NamingFieldNotice": "Do not use period characters (\". \") when naming fields",
|
|
158
|
+
"DuplicateFieldName": "Field name duplicated. Please check again",
|
|
159
|
+
"isDeprecate": "Unsupport"
|
|
160
|
+
},
|
|
135
161
|
"InvalidMessage": {
|
|
136
162
|
"InvalidNotExistedUsername": "Username is invalid or not existed",
|
|
137
163
|
"InvalidAccountConnected": "Account has been added to this domain!"
|
|
@@ -117,7 +117,10 @@
|
|
|
117
117
|
"Copied": "Đã sao chép",
|
|
118
118
|
"InvalidChars": "Ký tự không hợp lệ",
|
|
119
119
|
"InvalidLength": "Độ dài chuỗi không hợp lệ",
|
|
120
|
-
"RequestHasApprove": "Yêu cầu đã được thay đổi"
|
|
120
|
+
"RequestHasApprove": "Yêu cầu đã được thay đổi",
|
|
121
|
+
"Advance": "Nâng cao",
|
|
122
|
+
"Default": "Mặc định",
|
|
123
|
+
"Events": "Sự kiện"
|
|
121
124
|
},
|
|
122
125
|
"InvalidMessage": {
|
|
123
126
|
"InvalidNotExistedUsername": "Tài khoản không tồn tại",
|
|
@@ -462,6 +465,29 @@
|
|
|
462
465
|
"CantBeDelete": "Không thể xoá chiến dịch này",
|
|
463
466
|
"Attributes": "Thuộc tính"
|
|
464
467
|
},
|
|
468
|
+
"TemplateManagement": {
|
|
469
|
+
"Create": "Tạo mới template",
|
|
470
|
+
"Edit": "Sửa template",
|
|
471
|
+
"title": "Quản trị template",
|
|
472
|
+
"TemplateName": "Tên Template",
|
|
473
|
+
"Page_lgn": "Trang Login",
|
|
474
|
+
"Page_wlc": "Trang Welcome",
|
|
475
|
+
"TemplateId": "Template ID",
|
|
476
|
+
"ImportTemplate": "Nhập Template",
|
|
477
|
+
"Information": "Thông tin",
|
|
478
|
+
"Template": "Template",
|
|
479
|
+
"Advance": "Nâng cao",
|
|
480
|
+
"Script": "Kịch bản",
|
|
481
|
+
"TemplateHtml": "Html",
|
|
482
|
+
"TemplateValidation": "Validation",
|
|
483
|
+
"FieldAutoUpdate": "Trường tự động cập nhật",
|
|
484
|
+
"Parameter": "Parameter",
|
|
485
|
+
"FieldName": "Tên",
|
|
486
|
+
"fieldType": "Kiểu",
|
|
487
|
+
"NamingFieldNotice": "Không sử dụng ký tự dấu chấm (\".\") khi đặt tên cho trường",
|
|
488
|
+
"DuplicateFieldName": "Tên trường trùng lặp. Vui lòng kiểm tra lại",
|
|
489
|
+
"isDeprecate": "Không hỗ trợ"
|
|
490
|
+
},
|
|
465
491
|
"DirectoryManagement": {
|
|
466
492
|
"DirectoryName": "Tên thư mục",
|
|
467
493
|
"CreateNewFolder": "Điền tên thư mục để tạo.",
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|