awing-library 2.1.219-dev → 2.1.221-dev
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/Campaign/CreateOrEdit/Recoils.d.ts +4 -0
- package/lib/ACM-AXN/Campaign/CreateOrEdit/Recoils.js +18 -1
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.d.ts +2 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.js +15 -10
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.test.js +13 -7
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.d.ts +3 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.js +118 -35
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.test.js +191 -14
- package/lib/ACM-AXN/Campaign/CreateOrEdit/index.js +4 -4
- package/lib/ACM-AXN/Campaign/Enum.d.ts +5 -0
- package/lib/ACM-AXN/Campaign/Enum.js +7 -1
- package/lib/ACM-AXN/Campaign/Types.d.ts +10 -0
- package/lib/translate/en/translation.json +4 -1
- package/lib/translate/id/translation.json +14 -1
- package/lib/translate/vi/translation.json +6 -3
- package/package.json +1 -1
|
@@ -20,6 +20,10 @@ export declare const campaignState: import("recoil").RecoilState<import("../Type
|
|
|
20
20
|
* State lưu thông tin của CampaignAttributes
|
|
21
21
|
*/
|
|
22
22
|
export declare const campaignAttributesState: import("recoil").RecoilState<import("../Types").CampaignAttribute[]>;
|
|
23
|
+
/**
|
|
24
|
+
* State lưu thông tin của CampaignApproval
|
|
25
|
+
*/
|
|
26
|
+
export declare const campaignApprovalState: import("recoil").RecoilState<import("../Types").CampaignApproval[] | undefined>;
|
|
23
27
|
/**
|
|
24
28
|
* State lưu thông tin của chiến dịch con
|
|
25
29
|
*/
|
|
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.cacheSearchPageState = exports.weightState = exports.readyForSubmitState = exports.tabPartnerValidState = exports.tabSubCampaignValidState = exports.tabInfomationValidState = exports.campaignPartnerState = exports.campaignGroupsState = exports.campaignAttributesState = exports.campaignState = exports.campaignModelState = exports.confirmExitState = exports.isCreateState = exports.attributesState = exports.directoriesState = void 0;
|
|
14
|
+
exports.cacheSearchPageState = exports.weightState = exports.readyForSubmitState = exports.tabPartnerValidState = exports.tabSubCampaignValidState = exports.tabInfomationValidState = exports.campaignPartnerState = exports.campaignGroupsState = exports.campaignApprovalState = exports.campaignAttributesState = exports.campaignState = exports.campaignModelState = exports.confirmExitState = exports.isCreateState = exports.attributesState = exports.directoriesState = void 0;
|
|
15
15
|
var recoil_1 = require("recoil");
|
|
16
16
|
var Utils_1 = require("../Utils");
|
|
17
17
|
var atoms_1 = require("./TabSubCampaign/atoms");
|
|
@@ -103,6 +103,23 @@ exports.campaignAttributesState = (0, recoil_1.selector)({
|
|
|
103
103
|
set(exports.confirmExitState, true);
|
|
104
104
|
}
|
|
105
105
|
});
|
|
106
|
+
/**
|
|
107
|
+
* State lưu thông tin của CampaignApproval
|
|
108
|
+
*/
|
|
109
|
+
exports.campaignApprovalState = (0, recoil_1.selector)({
|
|
110
|
+
key: 'campaignApproval',
|
|
111
|
+
get: function (_a) {
|
|
112
|
+
var get = _a.get;
|
|
113
|
+
var campaignModel = get(exports.campaignModelState);
|
|
114
|
+
return campaignModel.campaignApprovals;
|
|
115
|
+
},
|
|
116
|
+
set: function (_a, campaignApprovals) {
|
|
117
|
+
var set = _a.set, get = _a.get;
|
|
118
|
+
var campaignModel = get(exports.campaignModelState);
|
|
119
|
+
set(exports.campaignModelState, campaignApprovals instanceof recoil_1.DefaultValue ?
|
|
120
|
+
campaignApprovals : __assign(__assign({}, campaignModel), { campaignApprovals: campaignApprovals }));
|
|
121
|
+
}
|
|
122
|
+
});
|
|
106
123
|
/**
|
|
107
124
|
* State lưu thông tin của chiến dịch con
|
|
108
125
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IDetail } from '.';
|
|
2
2
|
interface RowTableProps {
|
|
3
3
|
row: IDetail;
|
|
4
|
-
updateRow: (updatedRow:
|
|
5
|
-
id:
|
|
4
|
+
updateRow: (updatedRow: IDetail, id: number) => void;
|
|
5
|
+
id: number;
|
|
6
6
|
}
|
|
7
7
|
export declare function RowTable(props: RowTableProps): import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -15,11 +15,8 @@ exports.RowTable = void 0;
|
|
|
15
15
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
16
|
var material_1 = require("@mui/material");
|
|
17
17
|
var react_1 = require("react");
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
{ value: 1, label: 'Duyệt' },
|
|
21
|
-
{ value: 2, label: 'Hủy' },
|
|
22
|
-
];
|
|
18
|
+
var Enum_1 = require("../../../../ACM-AXN/Campaign/Enum");
|
|
19
|
+
var react_i18next_1 = require("react-i18next");
|
|
23
20
|
var ITEM_HEIGHT = 48;
|
|
24
21
|
var ITEM_PADDING_TOP = 8;
|
|
25
22
|
var MenuProps = {
|
|
@@ -33,8 +30,16 @@ var MenuProps = {
|
|
|
33
30
|
function RowTable(props) {
|
|
34
31
|
var _a, _b;
|
|
35
32
|
var row = props.row, updateRow = props.updateRow, id = props.id;
|
|
36
|
-
var
|
|
37
|
-
var
|
|
33
|
+
var t = (0, react_i18next_1.useTranslation)().t;
|
|
34
|
+
var _c = (0, react_1.useState)((_a = row === null || row === void 0 ? void 0 : row.status) !== null && _a !== void 0 ? _a : Enum_1.CampaignApprovalStatus.PendingApproval), selectStatus = _c[0], setSelectStatus = _c[1];
|
|
35
|
+
var _d = (0, react_1.useState)((_b = row === null || row === void 0 ? void 0 : row.description) !== null && _b !== void 0 ? _b : ''), valueInput = _d[0], setValueInput = _d[1];
|
|
36
|
+
var optionsStatus = (0, react_1.useMemo)(function () {
|
|
37
|
+
return [
|
|
38
|
+
{ value: Enum_1.CampaignApprovalStatus.PendingApproval, label: t('Campaign.Approval.PendingApproval') },
|
|
39
|
+
{ value: Enum_1.CampaignApprovalStatus.Approval, label: t('Campaign.Approval.Approval') },
|
|
40
|
+
{ value: Enum_1.CampaignApprovalStatus.Rejected, label: t('Campaign.Approval.Rejected') },
|
|
41
|
+
];
|
|
42
|
+
}, []);
|
|
38
43
|
var handleStatusChange = (0, react_1.useCallback)(function (value) {
|
|
39
44
|
var newStatus = value;
|
|
40
45
|
setSelectStatus(newStatus);
|
|
@@ -43,7 +48,7 @@ function RowTable(props) {
|
|
|
43
48
|
var handleInputChange = (0, react_1.useCallback)(function (event) {
|
|
44
49
|
var newValue = event.target.value;
|
|
45
50
|
setValueInput(newValue);
|
|
46
|
-
updateRow(__assign(__assign({}, row), {
|
|
51
|
+
updateRow(__assign(__assign({}, row), { description: newValue }), id);
|
|
47
52
|
}, [row, id, updateRow]);
|
|
48
53
|
var linkComponent = (0, react_1.useMemo)(function () { return ((0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
|
|
49
54
|
display: '-webkit-box',
|
|
@@ -51,12 +56,12 @@ function RowTable(props) {
|
|
|
51
56
|
WebkitBoxOrient: 'vertical',
|
|
52
57
|
overflow: 'hidden',
|
|
53
58
|
textOverflow: 'ellipsis',
|
|
54
|
-
}, children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: row.
|
|
59
|
+
}, children: (0, jsx_runtime_1.jsx)(material_1.Link, { href: row.linkPreview, sx: {
|
|
55
60
|
wordWrap: 'break-word',
|
|
56
61
|
wordBreak: 'break-all',
|
|
57
62
|
color: 'blue',
|
|
58
63
|
textDecorationColor: 'unset',
|
|
59
|
-
}, underline: "hover", target: "_blank", children: row.
|
|
64
|
+
}, underline: "hover", target: "_blank", children: row.linkPreview }) })); }, [row.linkPreview]);
|
|
60
65
|
return ((0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { style: { maxWidth: 400 }, children: linkComponent }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: (0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
|
|
61
66
|
display: 'flex',
|
|
62
67
|
flexWrap: 'wrap',
|
|
@@ -14,6 +14,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
15
15
|
var react_1 = require("@testing-library/react");
|
|
16
16
|
var RowTable_1 = require("./RowTable");
|
|
17
|
+
jest.mock('react-i18next', function () { return ({
|
|
18
|
+
useTranslation: function () { return ({ t: function (key) { return key; } }); },
|
|
19
|
+
}); });
|
|
17
20
|
// Mock the MUI components
|
|
18
21
|
jest.mock('@mui/material', function () { return (__assign(__assign({}, jest.requireActual('@mui/material')), { TableRow: function (_a) {
|
|
19
22
|
var children = _a.children;
|
|
@@ -38,21 +41,24 @@ jest.mock('@mui/material', function () { return (__assign(__assign({}, jest.requ
|
|
|
38
41
|
return ((0, jsx_runtime_1.jsx)("select", { value: value, onChange: onChange, children: children }));
|
|
39
42
|
}, MenuItem: function (_a) {
|
|
40
43
|
var children = _a.children, value = _a.value;
|
|
41
|
-
return (0, jsx_runtime_1.jsx)("option", { value: value, children: children });
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)("option", { value: value, children: children }));
|
|
42
45
|
}, TextField: function (_a) {
|
|
43
46
|
var value = _a.value, onChange = _a.onChange;
|
|
44
47
|
return ((0, jsx_runtime_1.jsx)("input", { type: "text", value: value, onChange: onChange }));
|
|
45
48
|
} })); });
|
|
46
49
|
var mockRow = {
|
|
47
|
-
|
|
50
|
+
id: 1,
|
|
51
|
+
linkPreview: 'https://example.com',
|
|
48
52
|
subCampaigns: [
|
|
49
53
|
{ id: '1', name: 'Campaign 1' },
|
|
50
54
|
{ id: '2', name: 'Campaign 2' },
|
|
51
55
|
],
|
|
52
|
-
|
|
56
|
+
description: 'Initial note',
|
|
53
57
|
status: 0,
|
|
54
58
|
};
|
|
55
|
-
var renderUi = function () {
|
|
59
|
+
var renderUi = function () {
|
|
60
|
+
return (0, react_1.render)((0, jsx_runtime_1.jsx)(RowTable_1.RowTable, { row: mockRow, id: 1, updateRow: function () { } }));
|
|
61
|
+
};
|
|
56
62
|
describe('RowTable', function () {
|
|
57
63
|
it('renders the link correctly', function () {
|
|
58
64
|
renderUi();
|
|
@@ -68,13 +74,13 @@ describe('RowTable', function () {
|
|
|
68
74
|
it('renders the select with correct initial value', function () {
|
|
69
75
|
renderUi();
|
|
70
76
|
var select = react_1.screen.getByRole('combobox');
|
|
71
|
-
expect(select).toHaveValue('
|
|
77
|
+
expect(select).toHaveValue('0');
|
|
72
78
|
});
|
|
73
79
|
it('changes the select value when a new option is chosen', function () {
|
|
74
80
|
renderUi();
|
|
75
81
|
var select = react_1.screen.getByRole('combobox');
|
|
76
|
-
react_1.fireEvent.change(select, { target: { value:
|
|
77
|
-
expect(select).toHaveValue('
|
|
82
|
+
react_1.fireEvent.change(select, { target: { value: 0 } });
|
|
83
|
+
expect(select).toHaveValue('0');
|
|
78
84
|
});
|
|
79
85
|
it('renders the text field with the initial note', function () {
|
|
80
86
|
renderUi();
|
|
@@ -3,10 +3,11 @@ interface ISubCampaign {
|
|
|
3
3
|
name: string;
|
|
4
4
|
}
|
|
5
5
|
export interface IDetail {
|
|
6
|
+
id?: number;
|
|
6
7
|
status: number;
|
|
7
|
-
|
|
8
|
+
linkPreview: string;
|
|
8
9
|
subCampaigns: ISubCampaign[];
|
|
9
|
-
|
|
10
|
+
description: string;
|
|
10
11
|
}
|
|
11
12
|
export default function TabApprove(): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -1,4 +1,15 @@
|
|
|
1
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
|
+
};
|
|
2
13
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
14
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
15
|
if (ar || !(i in from)) {
|
|
@@ -14,8 +25,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
26
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
27
|
var material_1 = require("@mui/material");
|
|
28
|
+
var Enum_1 = require("../../../../ACM-AXN/Campaign/Enum");
|
|
17
29
|
var Hooks_1 = __importDefault(require("../../../../ACM-AXN/Campaign/Hooks"));
|
|
18
30
|
var Constant_1 = require("../../../../ACM-AXN/Common/Constant");
|
|
31
|
+
var Router_1 = require("../../../../AWING/Router");
|
|
19
32
|
var lodash_1 = __importDefault(require("lodash"));
|
|
20
33
|
var react_1 = require("react");
|
|
21
34
|
var react_i18next_1 = require("react-i18next");
|
|
@@ -23,14 +36,16 @@ var recoil_1 = require("recoil");
|
|
|
23
36
|
var Recoils_1 = require("../Recoils");
|
|
24
37
|
var atoms_1 = require("../TabSubCampaign/atoms");
|
|
25
38
|
var RowTable_1 = require("./RowTable");
|
|
26
|
-
var Utils_1 = require("../../../../AWING/Form/Utils");
|
|
27
39
|
function TabApprove() {
|
|
28
40
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
29
|
-
var
|
|
30
|
-
var
|
|
41
|
+
var campaignId = (0, Router_1.useParams)().campaignId;
|
|
42
|
+
var _a = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalState), campaignApproval = _a[0], setCampaignApproval = _a[1];
|
|
43
|
+
var setConfirmExit = (0, recoil_1.useSetRecoilState)(Recoils_1.confirmExitState);
|
|
44
|
+
var _b = (0, react_1.useState)([]), rowSelected = _b[0], setRowSelected = _b[1];
|
|
45
|
+
var _c = (0, react_1.useState)([]), domains = _c[0], setDomains = _c[1];
|
|
31
46
|
var ads = (0, recoil_1.useRecoilValue)(atoms_1.adListState);
|
|
32
47
|
var subCampaigns = (0, recoil_1.useRecoilValue)(Recoils_1.campaignGroupsState);
|
|
33
|
-
var
|
|
48
|
+
var _d = (0, Hooks_1.default)(), service = _d.service, defaultDomainId = _d.domainId;
|
|
34
49
|
var domainIds = (0, react_1.useMemo)(function () {
|
|
35
50
|
return lodash_1.default.uniq(ads
|
|
36
51
|
.filter(function (ad) { return ad.places; })
|
|
@@ -38,6 +53,9 @@ function TabApprove() {
|
|
|
38
53
|
.flat()
|
|
39
54
|
.filter(Boolean));
|
|
40
55
|
}, [ads]);
|
|
56
|
+
var generateRandomId = function () {
|
|
57
|
+
return Math.floor(Math.random() * 1000000000); // Số ngẫu nhiên từ 0 đến 999,999,999
|
|
58
|
+
};
|
|
41
59
|
var renderLinkPreview = function (ad, domainId) {
|
|
42
60
|
if (domainId === void 0) { domainId = defaultDomainId; }
|
|
43
61
|
var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId, "&isNetworkCampaign=").concat(Boolean(service.domainsGetAll).toString());
|
|
@@ -49,7 +67,7 @@ function TabApprove() {
|
|
|
49
67
|
};
|
|
50
68
|
var mergedData = function (data) {
|
|
51
69
|
return data.reduce(function (acc, curr) {
|
|
52
|
-
var found = acc.find(function (item) { return item.
|
|
70
|
+
var found = acc.find(function (item) { return item.linkPreview === curr.linkPreview; });
|
|
53
71
|
if (found) {
|
|
54
72
|
// Nếu link đã tồn tại, gộp subCampaign
|
|
55
73
|
found.subCampaigns.push(curr.subCampaigns[0]);
|
|
@@ -57,8 +75,9 @@ function TabApprove() {
|
|
|
57
75
|
else {
|
|
58
76
|
// Nếu link chưa tồn tại, thêm vào acc với subCampaign là mảng
|
|
59
77
|
acc.push({
|
|
60
|
-
|
|
61
|
-
|
|
78
|
+
id: generateRandomId(),
|
|
79
|
+
linkPreview: curr.linkPreview,
|
|
80
|
+
description: curr.description,
|
|
62
81
|
status: curr.status,
|
|
63
82
|
subCampaigns: [curr.subCampaigns[0]],
|
|
64
83
|
});
|
|
@@ -84,8 +103,8 @@ function TabApprove() {
|
|
|
84
103
|
.name,
|
|
85
104
|
},
|
|
86
105
|
],
|
|
87
|
-
|
|
88
|
-
|
|
106
|
+
linkPreview: renderLinkPreview(ad, domainId),
|
|
107
|
+
description: '',
|
|
89
108
|
status: 0,
|
|
90
109
|
};
|
|
91
110
|
}
|
|
@@ -95,16 +114,94 @@ function TabApprove() {
|
|
|
95
114
|
.flat()
|
|
96
115
|
.filter(Boolean));
|
|
97
116
|
};
|
|
117
|
+
var handleRowSelect = (0, react_1.useCallback)(function (id) {
|
|
118
|
+
setRowSelected(function (pre) {
|
|
119
|
+
return pre.includes(id) ? pre.filter(function (x) { return x !== id; }) : __spreadArray(__spreadArray([], pre, true), [id], false);
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
var updateRow = (0, react_1.useCallback)(function (row, id) {
|
|
123
|
+
setConfirmExit(true);
|
|
124
|
+
setCampaignApproval(function (prevState) {
|
|
125
|
+
if (!prevState)
|
|
126
|
+
return [];
|
|
127
|
+
// Tìm index của campaign cần update trong mảng
|
|
128
|
+
var campaignIndex = prevState === null || prevState === void 0 ? void 0 : prevState.findIndex(function (campaign) { return campaign.id === id; });
|
|
129
|
+
if (campaignIndex === -1)
|
|
130
|
+
return prevState; // Nếu không tìm thấy, trả về state cũ
|
|
131
|
+
// Tạo bản sao của state
|
|
132
|
+
var newState = __spreadArray([], prevState, true);
|
|
133
|
+
// Update thông tin của campaign
|
|
134
|
+
newState[campaignIndex] = __assign(__assign({}, newState[campaignIndex]), { status: Enum_1.CampaignApprovalStatus[row.status], description: row.description, linkPreview: row.linkPreview, subCampaignId: row.subCampaigns
|
|
135
|
+
.map(function (sub) { return sub.id; })
|
|
136
|
+
.join(',') });
|
|
137
|
+
return newState;
|
|
138
|
+
});
|
|
139
|
+
}, [setCampaignApproval]);
|
|
140
|
+
var transformedData = function (originalData) {
|
|
141
|
+
return originalData
|
|
142
|
+
.map(function (campaign) {
|
|
143
|
+
return campaign.detail.map(function (detailItem) {
|
|
144
|
+
var _a;
|
|
145
|
+
return ({
|
|
146
|
+
id: detailItem.id,
|
|
147
|
+
campaignId: campaignId,
|
|
148
|
+
domainId: campaign.domain.domainId,
|
|
149
|
+
subCampaignId: ((_a = detailItem.subCampaigns) === null || _a === void 0 ? void 0 : _a.map(function (sub) { return sub.id; }).join(',')) || undefined,
|
|
150
|
+
linkPreview: detailItem.linkPreview,
|
|
151
|
+
status: Enum_1.CampaignApprovalStatus[detailItem.status],
|
|
152
|
+
description: detailItem.description,
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
})
|
|
156
|
+
.flat();
|
|
157
|
+
};
|
|
98
158
|
var dataTable = (0, react_1.useMemo)(function () {
|
|
99
159
|
if (!domains.length)
|
|
100
160
|
return [];
|
|
101
|
-
|
|
161
|
+
var data;
|
|
162
|
+
if (campaignApproval === null || campaignApproval === void 0 ? void 0 : campaignApproval.length) {
|
|
163
|
+
// Nếu campaignApproval đã có sẵn dữ liệu, chuyển đổi ngược lại thành dạng IDataTable
|
|
164
|
+
var groupedData = lodash_1.default.groupBy(campaignApproval, 'domainId');
|
|
165
|
+
data = Object.entries(groupedData).map(function (_a) {
|
|
166
|
+
var _b;
|
|
167
|
+
var domainId = _a[0], items = _a[1];
|
|
168
|
+
return ({
|
|
169
|
+
id: generateRandomId(),
|
|
170
|
+
domain: {
|
|
171
|
+
domainName: ((_b = domains.find(function (d) { return d.domainId === domainId; })) === null || _b === void 0 ? void 0 : _b.name) || 'Unknown',
|
|
172
|
+
domainId: domainId,
|
|
173
|
+
},
|
|
174
|
+
detail: items.map(function (item) {
|
|
175
|
+
var _a;
|
|
176
|
+
return ({
|
|
177
|
+
id: generateRandomId(),
|
|
178
|
+
status: Enum_1.CampaignApprovalStatus[item.status],
|
|
179
|
+
linkPreview: item.linkPreview,
|
|
180
|
+
subCampaigns: ((_a = item.subCampaignId) === null || _a === void 0 ? void 0 : _a.split(',').map(function (id) {
|
|
181
|
+
var _a;
|
|
182
|
+
return ({
|
|
183
|
+
id: id,
|
|
184
|
+
name: ((_a = subCampaigns.find(function (sc) { return sc.campaignGroup.id.toString() === id; })) === null || _a === void 0 ? void 0 : _a.campaignGroup.name) || "".concat(id)
|
|
185
|
+
});
|
|
186
|
+
})) || [],
|
|
187
|
+
description: item.description,
|
|
188
|
+
});
|
|
189
|
+
}),
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
return data;
|
|
193
|
+
}
|
|
194
|
+
data = domains.map(function (domain) {
|
|
102
195
|
return {
|
|
103
|
-
id: (
|
|
104
|
-
|
|
196
|
+
id: generateRandomId(),
|
|
197
|
+
domain: {
|
|
198
|
+
domainName: domain.name,
|
|
199
|
+
domainId: domain.domainId,
|
|
200
|
+
},
|
|
105
201
|
detail: renderDataDetail(domain.domainId),
|
|
106
202
|
};
|
|
107
203
|
});
|
|
204
|
+
return data;
|
|
108
205
|
}, [domains]);
|
|
109
206
|
var handleSelectAll = (0, react_1.useCallback)(function () {
|
|
110
207
|
setRowSelected(function (pre) {
|
|
@@ -113,34 +210,17 @@ function TabApprove() {
|
|
|
113
210
|
: [];
|
|
114
211
|
});
|
|
115
212
|
}, [dataTable]);
|
|
116
|
-
var handleRowSelect = (0, react_1.useCallback)(function (id) {
|
|
117
|
-
setRowSelected(function (pre) {
|
|
118
|
-
return pre.includes(id) ? pre.filter(function (x) { return x !== id; }) : __spreadArray(__spreadArray([], pre, true), [id], false);
|
|
119
|
-
});
|
|
120
|
-
}, []);
|
|
121
|
-
var updateRow = (0, react_1.useCallback)(function (row, id) {
|
|
122
|
-
// setData((prevData) =>
|
|
123
|
-
// prevData.map((item) => {
|
|
124
|
-
// if (id === item.id) {
|
|
125
|
-
// return {
|
|
126
|
-
// ...item,
|
|
127
|
-
// detail: item.detail.map((detailItem) => ({
|
|
128
|
-
// ...detailItem,
|
|
129
|
-
// ghichu: row.ghichu,
|
|
130
|
-
// status: row.status,
|
|
131
|
-
// })),
|
|
132
|
-
// }
|
|
133
|
-
// }
|
|
134
|
-
// return item
|
|
135
|
-
// })
|
|
136
|
-
// )
|
|
137
|
-
}, []);
|
|
138
213
|
(0, react_1.useEffect)(function () {
|
|
139
214
|
if (domainIds.length > 0) {
|
|
140
215
|
service.domainsGetByIds &&
|
|
141
216
|
service.domainsGetByIds(domainIds).then(setDomains);
|
|
142
217
|
}
|
|
143
218
|
}, [domainIds]);
|
|
219
|
+
(0, react_1.useEffect)(function () {
|
|
220
|
+
if (dataTable.length > 0) {
|
|
221
|
+
setCampaignApproval(transformedData(dataTable));
|
|
222
|
+
}
|
|
223
|
+
}, [dataTable]);
|
|
144
224
|
return ((0, jsx_runtime_1.jsxs)(material_1.TableContainer, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", sx: {
|
|
145
225
|
margin: '1rem',
|
|
146
226
|
}, children: t('Campaign.Approval.GetApprovalInformation') }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", color: "primary", disabled: !rowSelected.length, children: t('Campaign.Approval.SendEmail') }), (0, jsx_runtime_1.jsxs)(material_1.Table, { sx: {
|
|
@@ -152,6 +232,9 @@ function TabApprove() {
|
|
|
152
232
|
rowSelected.length < dataTable.length, checked: rowSelected.length > 0 &&
|
|
153
233
|
rowSelected.length === dataTable.length, onChange: handleSelectAll, inputProps: { 'aria-label': 'select all ad' }, color: "primary" }) }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: t('Campaign.Approval.Domain') }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { style: { maxWidth: 400 }, children: t('Campaign.Approval.LinkPreview') }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: t('Campaign.Approval.SubCampaign') }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: t('Campaign.Approval.Status') }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: t('Campaign.Approval.Note') })] }) }), (0, jsx_runtime_1.jsx)(material_1.TableBody, { children: dataTable.map(function (item, index) { return ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: item.detail.length + 1, style: { width: 60, padding: '0 0 0 4px' }, children: (0, jsx_runtime_1.jsx)(material_1.Box, { display: 'flex', children: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { checked: rowSelected.some(function (x) { return x === item.id; }), color: "primary", onChange: function () {
|
|
154
234
|
return handleRowSelect(item.id);
|
|
155
|
-
} }) }) }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: item.detail.length + 1, children: item.domainName })] }), item.detail.map(function (detail, index2) {
|
|
235
|
+
} }) }) }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: item.detail.length + 1, children: item.domain.domainName })] }), item.detail.map(function (detail, index2) {
|
|
236
|
+
var _a;
|
|
237
|
+
return ((0, jsx_runtime_1.jsx)(RowTable_1.RowTable, { row: detail, id: (_a = detail === null || detail === void 0 ? void 0 : detail.id) !== null && _a !== void 0 ? _a : -1, updateRow: updateRow }, index2));
|
|
238
|
+
})] }, index)); }) })] })] }));
|
|
156
239
|
}
|
|
157
240
|
exports.default = TabApprove;
|
|
@@ -61,6 +61,12 @@ jest.mock('ACM-AXN/Campaign/Hooks');
|
|
|
61
61
|
jest.mock('react-i18next', function () { return ({
|
|
62
62
|
useTranslation: function () { return ({ t: function (key) { return key; } }); },
|
|
63
63
|
}); });
|
|
64
|
+
// Mock PageManagement
|
|
65
|
+
jest.mock('./RowTable', function () { return ({
|
|
66
|
+
RowTable: function (props) {
|
|
67
|
+
return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("button", { "data-testid": "update-row", onClick: props.updateRow }) }));
|
|
68
|
+
},
|
|
69
|
+
}); });
|
|
64
70
|
// Mock các component MUI
|
|
65
71
|
jest.mock('@mui/material', function () { return (__assign(__assign({}, jest.requireActual('@mui/material')), { TableContainer: function (_a) {
|
|
66
72
|
var children = _a.children;
|
|
@@ -99,11 +105,6 @@ var domainByIds = [
|
|
|
99
105
|
shareType: 0,
|
|
100
106
|
},
|
|
101
107
|
];
|
|
102
|
-
var clientMethod = {
|
|
103
|
-
domainsGetByIds: function () { return function (_id) {
|
|
104
|
-
Promise.resolve(domainByIds);
|
|
105
|
-
}; },
|
|
106
|
-
};
|
|
107
108
|
// Mock Hooks
|
|
108
109
|
jest.mock('ACM-AXN/Campaign/Hooks', function () { return ({
|
|
109
110
|
__esModule: true,
|
|
@@ -2649,10 +2650,141 @@ var initCampaignData = {
|
|
|
2649
2650
|
},
|
|
2650
2651
|
],
|
|
2651
2652
|
};
|
|
2652
|
-
var
|
|
2653
|
+
var initCampaignDataFetch = {
|
|
2654
|
+
campaign: {
|
|
2655
|
+
id: '4992385398844444137',
|
|
2656
|
+
directoryId: '5',
|
|
2657
|
+
directoryPath: '.0.5.4992385398844444137.',
|
|
2658
|
+
name: 'Long Test k ',
|
|
2659
|
+
createdDate: {
|
|
2660
|
+
seconds: '1727683388',
|
|
2661
|
+
nanos: 0,
|
|
2662
|
+
},
|
|
2663
|
+
},
|
|
2664
|
+
campaignGroups: [
|
|
2665
|
+
{
|
|
2666
|
+
campaignGroup: {
|
|
2667
|
+
numberHasRun: 0,
|
|
2668
|
+
id: 1,
|
|
2669
|
+
campaignId: '4992385398844444137',
|
|
2670
|
+
name: 'Sub-Campaign 1',
|
|
2671
|
+
ticket: 1,
|
|
2672
|
+
priority: 1,
|
|
2673
|
+
bookingAmount: 10,
|
|
2674
|
+
bonusAmount: 0,
|
|
2675
|
+
isReserved: false,
|
|
2676
|
+
billingUnit: 1,
|
|
2677
|
+
},
|
|
2678
|
+
ads: [
|
|
2679
|
+
{
|
|
2680
|
+
loginPage: {
|
|
2681
|
+
pageId: '5710972432387459630',
|
|
2682
|
+
directoryId: '12',
|
|
2683
|
+
pageCode: 'lgn',
|
|
2684
|
+
title: 'Sacombank_Sacombank Pay_T7/24_Banner Mall',
|
|
2685
|
+
layoutId: '0',
|
|
2686
|
+
transitionId: 0,
|
|
2687
|
+
commonHtml: '',
|
|
2688
|
+
directoryPath: '.0.6.12.5710972432387459630.',
|
|
2689
|
+
createdDate: {
|
|
2690
|
+
seconds: '1720943408',
|
|
2691
|
+
nanos: 0,
|
|
2692
|
+
},
|
|
2693
|
+
},
|
|
2694
|
+
welcomePage: {
|
|
2695
|
+
pageId: '5112329371092484686',
|
|
2696
|
+
directoryId: '11',
|
|
2697
|
+
pageCode: 'wlc',
|
|
2698
|
+
title: 'Sacombank_Sacombank Pay_T7/24',
|
|
2699
|
+
layoutId: '0',
|
|
2700
|
+
transitionId: 0,
|
|
2701
|
+
commonHtml: '',
|
|
2702
|
+
directoryPath: '.0.6.11.5112329371092484686.',
|
|
2703
|
+
createdDate: {
|
|
2704
|
+
seconds: '1720760590',
|
|
2705
|
+
nanos: 0,
|
|
2706
|
+
},
|
|
2707
|
+
},
|
|
2708
|
+
places: [
|
|
2709
|
+
{
|
|
2710
|
+
placeId: '5476424383102671899',
|
|
2711
|
+
domainId: '5462480518993333800',
|
|
2712
|
+
name: 'WMP_F209_FWMP Hào Nam',
|
|
2713
|
+
address: 'số 40 Hào Nam, Phường Ô Chợ Dừa, Q. Đống Đa, Thành phố Hà Nội',
|
|
2714
|
+
description: null,
|
|
2715
|
+
longitude: 105.8269428,
|
|
2716
|
+
latitude: 21.0230709,
|
|
2717
|
+
communeCode: '00190',
|
|
2718
|
+
districtCode: '006',
|
|
2719
|
+
provinceCode: '01',
|
|
2720
|
+
status: 0,
|
|
2721
|
+
joinedDate: {
|
|
2722
|
+
seconds: '1709885253',
|
|
2723
|
+
nanos: 0,
|
|
2724
|
+
},
|
|
2725
|
+
},
|
|
2726
|
+
],
|
|
2727
|
+
deletedPlaces: null,
|
|
2728
|
+
id: 1,
|
|
2729
|
+
campaignId: '4992385398844444137',
|
|
2730
|
+
campaignGroupId: 1,
|
|
2731
|
+
name: 'Ad 1',
|
|
2732
|
+
status: true,
|
|
2733
|
+
type: 1,
|
|
2734
|
+
loginId: '5710972432387459630',
|
|
2735
|
+
welcomeId: '5112329371092484686',
|
|
2736
|
+
startDate: {
|
|
2737
|
+
seconds: '1727629200',
|
|
2738
|
+
nanos: 0,
|
|
2739
|
+
},
|
|
2740
|
+
endDate: {
|
|
2741
|
+
seconds: '1727629200',
|
|
2742
|
+
nanos: 0,
|
|
2743
|
+
},
|
|
2744
|
+
placeFilter: {
|
|
2745
|
+
operandGroups: [
|
|
2746
|
+
{
|
|
2747
|
+
operands: [
|
|
2748
|
+
{
|
|
2749
|
+
type: 0,
|
|
2750
|
+
operator: 7,
|
|
2751
|
+
value: '["5476424383102671899"]',
|
|
2752
|
+
},
|
|
2753
|
+
],
|
|
2754
|
+
},
|
|
2755
|
+
],
|
|
2756
|
+
},
|
|
2757
|
+
weights: [],
|
|
2758
|
+
advanced: null,
|
|
2759
|
+
},
|
|
2760
|
+
],
|
|
2761
|
+
},
|
|
2762
|
+
],
|
|
2763
|
+
campaignAttributes: [
|
|
2764
|
+
{
|
|
2765
|
+
campaignId: '4992385398844444137',
|
|
2766
|
+
attributeId: 9,
|
|
2767
|
+
},
|
|
2768
|
+
],
|
|
2769
|
+
campaignPartner: null,
|
|
2770
|
+
campaignWizard: null,
|
|
2771
|
+
campaignApprovals: [
|
|
2772
|
+
{
|
|
2773
|
+
id: 5,
|
|
2774
|
+
campaignId: '4992385398844444137',
|
|
2775
|
+
domainId: '5462480518993333800',
|
|
2776
|
+
subCampaignId: '1',
|
|
2777
|
+
linkPreview: 'http://connect.awifi.com.vn/Preview/Page?loginId=5710972432387459630&isNetworkCampaign=true&welcomeId=5112329371092484686&domainId=5462480518993333800',
|
|
2778
|
+
status: 'Approval',
|
|
2779
|
+
description: 'ANhLong',
|
|
2780
|
+
},
|
|
2781
|
+
],
|
|
2782
|
+
};
|
|
2783
|
+
var renderUi = function (initData) {
|
|
2784
|
+
if (initData === void 0) { initData = true; }
|
|
2653
2785
|
var initializeState = function (_a) {
|
|
2654
2786
|
var set = _a.set;
|
|
2655
|
-
set(Recoils_1.campaignModelState, initCampaignData);
|
|
2787
|
+
set(Recoils_1.campaignModelState, initData ? initCampaignData : initCampaignDataFetch);
|
|
2656
2788
|
};
|
|
2657
2789
|
return (0, react_1.render)((0, jsx_runtime_1.jsx)(recoil_1.RecoilRoot, { initializeState: initializeState, children: (0, jsx_runtime_1.jsx)(Router_1.BrowserRouter, { children: (0, jsx_runtime_1.jsx)(_1.default, {}) }) }));
|
|
2658
2790
|
};
|
|
@@ -2666,7 +2798,23 @@ describe('TabApprove', function () {
|
|
|
2666
2798
|
return [2 /*return*/];
|
|
2667
2799
|
});
|
|
2668
2800
|
}); });
|
|
2669
|
-
it('handles
|
|
2801
|
+
it('handles row selection correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2802
|
+
return __generator(this, function (_a) {
|
|
2803
|
+
switch (_a.label) {
|
|
2804
|
+
case 0:
|
|
2805
|
+
renderUi();
|
|
2806
|
+
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
2807
|
+
var checkboxes = react_1.screen.getAllByRole('checkbox');
|
|
2808
|
+
react_1.fireEvent.click(checkboxes[1]); // Selecting the first domain
|
|
2809
|
+
expect(checkboxes[1]).toBeChecked();
|
|
2810
|
+
})];
|
|
2811
|
+
case 1:
|
|
2812
|
+
_a.sent();
|
|
2813
|
+
return [2 /*return*/];
|
|
2814
|
+
}
|
|
2815
|
+
});
|
|
2816
|
+
}); });
|
|
2817
|
+
it('handles "Select All" correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2670
2818
|
return __generator(this, function (_a) {
|
|
2671
2819
|
switch (_a.label) {
|
|
2672
2820
|
case 0:
|
|
@@ -2674,7 +2822,10 @@ describe('TabApprove', function () {
|
|
|
2674
2822
|
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
2675
2823
|
var selectAllCheckbox = react_1.screen.getAllByRole('checkbox')[0];
|
|
2676
2824
|
react_1.fireEvent.click(selectAllCheckbox);
|
|
2677
|
-
|
|
2825
|
+
var checkboxes = react_1.screen.getAllByRole('checkbox');
|
|
2826
|
+
checkboxes.slice(1).forEach(function (checkbox) {
|
|
2827
|
+
expect(checkbox).toBeChecked();
|
|
2828
|
+
});
|
|
2678
2829
|
})];
|
|
2679
2830
|
case 1:
|
|
2680
2831
|
_a.sent();
|
|
@@ -2682,17 +2833,43 @@ describe('TabApprove', function () {
|
|
|
2682
2833
|
}
|
|
2683
2834
|
});
|
|
2684
2835
|
}); });
|
|
2685
|
-
it('
|
|
2836
|
+
it('disables "Send Email" button when no rows are selected', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2686
2837
|
return __generator(this, function (_a) {
|
|
2687
2838
|
switch (_a.label) {
|
|
2688
2839
|
case 0:
|
|
2689
2840
|
renderUi();
|
|
2690
2841
|
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
2691
|
-
var firstRowCheckbox = react_1.screen.getAllByRole('checkbox')[1];
|
|
2692
|
-
react_1.fireEvent.click(firstRowCheckbox);
|
|
2693
2842
|
expect(react_1.screen.getByText('Campaign.Approval.SendEmail')).toBeInTheDocument();
|
|
2694
|
-
|
|
2695
|
-
|
|
2843
|
+
})];
|
|
2844
|
+
case 1:
|
|
2845
|
+
_a.sent();
|
|
2846
|
+
return [2 /*return*/];
|
|
2847
|
+
}
|
|
2848
|
+
});
|
|
2849
|
+
}); });
|
|
2850
|
+
it('update row', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2851
|
+
return __generator(this, function (_a) {
|
|
2852
|
+
switch (_a.label) {
|
|
2853
|
+
case 0:
|
|
2854
|
+
renderUi();
|
|
2855
|
+
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
2856
|
+
var buttonUpdateRow = react_1.screen.getByTestId('update-row');
|
|
2857
|
+
buttonUpdateRow.click();
|
|
2858
|
+
})];
|
|
2859
|
+
case 1:
|
|
2860
|
+
_a.sent();
|
|
2861
|
+
return [2 /*return*/];
|
|
2862
|
+
}
|
|
2863
|
+
});
|
|
2864
|
+
}); });
|
|
2865
|
+
it('fetch api data', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
2866
|
+
return __generator(this, function (_a) {
|
|
2867
|
+
switch (_a.label) {
|
|
2868
|
+
case 0:
|
|
2869
|
+
renderUi(false);
|
|
2870
|
+
return [4 /*yield*/, (0, react_1.waitFor)(function () {
|
|
2871
|
+
var buttonUpdateRow = react_1.screen.getByTestId('update-row');
|
|
2872
|
+
buttonUpdateRow.click();
|
|
2696
2873
|
})];
|
|
2697
2874
|
case 1:
|
|
2698
2875
|
_a.sent();
|
|
@@ -159,7 +159,7 @@ var CreateOrEdit = function (props) {
|
|
|
159
159
|
return __spreadArray(__spreadArray([], baseTabs, true), [
|
|
160
160
|
{
|
|
161
161
|
label: t('Campaign.Approval.Title'),
|
|
162
|
-
isShow: Boolean(service.attributesGetByObjectTypeCode),
|
|
162
|
+
isShow: Boolean(service.attributesGetByObjectTypeCode) && componentStatus === Constant_1.Constants.CAMPAIGN_DETAIL,
|
|
163
163
|
component: (0, jsx_runtime_1.jsx)(TabApprove_1.default, {}),
|
|
164
164
|
route: Constant_1.Constants.CAMPAIGN_APPROVE,
|
|
165
165
|
},
|
|
@@ -267,7 +267,7 @@ var CreateOrEdit = function (props) {
|
|
|
267
267
|
});
|
|
268
268
|
};
|
|
269
269
|
var handleSubmit = function () {
|
|
270
|
-
var _a;
|
|
270
|
+
var _a, _b;
|
|
271
271
|
if (campaignData.campaignWizard && !editModeWizard && (props === null || props === void 0 ? void 0 : props.quickWizard)) {
|
|
272
272
|
if (childRefWizard.current) {
|
|
273
273
|
return childRefWizard.current.onSubmit({
|
|
@@ -283,8 +283,8 @@ var CreateOrEdit = function (props) {
|
|
|
283
283
|
.flatMap(function (x) { return x.ads; }))) {
|
|
284
284
|
return Promise.reject(t('Campaign.CClassDuplicatePlace'));
|
|
285
285
|
}
|
|
286
|
-
var dataSubmit = __assign(__assign({}, campaignData), { campaignAttributes: campaignData.campaignAttributes.filter(Boolean), campaignWizard: undefined });
|
|
287
|
-
if (!((
|
|
286
|
+
var dataSubmit = __assign(__assign({}, campaignData), { campaignAttributes: campaignData.campaignAttributes.filter(Boolean), campaignWizard: undefined, campaignApprovals: (_a = campaignData.campaignApprovals) !== null && _a !== void 0 ? _a : [] });
|
|
287
|
+
if (!((_b = dataSubmit.campaignPartner) === null || _b === void 0 ? void 0 : _b.isSendApi)) {
|
|
288
288
|
delete dataSubmit.campaignPartner;
|
|
289
289
|
}
|
|
290
290
|
if (componentStatus === Constant_1.Constants.CAMPAIGN_DETAIL) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Operator = exports.CampaignRuleType = exports.AdType = exports.CampaignTicket = exports.BaseEvent = exports.CampaignPriority = exports.DATE_FORMAT = exports.PlaceFilterOperandType = exports.DirectoryRoot = exports.CAMPAIGN_ANALYTIC_TYPE = exports.CAMPAIGN_STATUS = exports.EnumOperator = exports.ACTIVE_CAMPAIGN_TICKET = void 0;
|
|
4
|
+
exports.CampaignApprovalStatus = exports.Operator = exports.CampaignRuleType = exports.AdType = exports.CampaignTicket = exports.BaseEvent = exports.CampaignPriority = exports.DATE_FORMAT = exports.PlaceFilterOperandType = exports.DirectoryRoot = exports.CAMPAIGN_ANALYTIC_TYPE = exports.CAMPAIGN_STATUS = exports.EnumOperator = exports.ACTIVE_CAMPAIGN_TICKET = void 0;
|
|
5
5
|
var Enum_1 = require("../../ACM-AXN/Common/Enum");
|
|
6
6
|
exports.ACTIVE_CAMPAIGN_TICKET = 0;
|
|
7
7
|
exports.EnumOperator = {
|
|
@@ -164,3 +164,9 @@ var Operator;
|
|
|
164
164
|
*/
|
|
165
165
|
Operator[Operator["In"] = 7] = "In";
|
|
166
166
|
})(Operator || (exports.Operator = Operator = {}));
|
|
167
|
+
var CampaignApprovalStatus;
|
|
168
|
+
(function (CampaignApprovalStatus) {
|
|
169
|
+
CampaignApprovalStatus[CampaignApprovalStatus["PendingApproval"] = 0] = "PendingApproval";
|
|
170
|
+
CampaignApprovalStatus[CampaignApprovalStatus["Approval"] = 1] = "Approval";
|
|
171
|
+
CampaignApprovalStatus[CampaignApprovalStatus["Rejected"] = 2] = "Rejected";
|
|
172
|
+
})(CampaignApprovalStatus || (exports.CampaignApprovalStatus = CampaignApprovalStatus = {}));
|
|
@@ -49,6 +49,7 @@ export type CampaignModel = {
|
|
|
49
49
|
wizardGroupId?: number;
|
|
50
50
|
wizardId?: string;
|
|
51
51
|
};
|
|
52
|
+
campaignApprovals?: CampaignApproval[];
|
|
52
53
|
};
|
|
53
54
|
export type Campaign = {
|
|
54
55
|
id: string;
|
|
@@ -212,6 +213,15 @@ export type CampaignPartner = {
|
|
|
212
213
|
email?: string;
|
|
213
214
|
emailInterval: number;
|
|
214
215
|
};
|
|
216
|
+
export type CampaignApproval = {
|
|
217
|
+
id?: number;
|
|
218
|
+
campaignId?: string;
|
|
219
|
+
domainId?: string;
|
|
220
|
+
subCampaignId?: string | undefined;
|
|
221
|
+
linkPreview?: string | undefined;
|
|
222
|
+
status?: string | undefined;
|
|
223
|
+
description?: string | undefined;
|
|
224
|
+
};
|
|
215
225
|
export type DateRange = {
|
|
216
226
|
startDate: Date;
|
|
217
227
|
endDate: Date;
|
|
@@ -523,7 +523,10 @@
|
|
|
523
523
|
"LinkPreview": "Link Preview",
|
|
524
524
|
"SubCampaign": "Sub Campaign",
|
|
525
525
|
"Status": "Status",
|
|
526
|
-
"Note": "Note"
|
|
526
|
+
"Note": "Note",
|
|
527
|
+
"PendingApproval": "Pending Approval",
|
|
528
|
+
"Approval": "Approval",
|
|
529
|
+
"Rejected": "Rejected"
|
|
527
530
|
}
|
|
528
531
|
},
|
|
529
532
|
"DirectoryManagement": {
|
|
@@ -514,7 +514,20 @@
|
|
|
514
514
|
"Click": "Klik"
|
|
515
515
|
},
|
|
516
516
|
"Wizard": "Wizard",
|
|
517
|
-
"SwitchToProfessionalEditMode": "Anda sedang beralih ke antarmuka Pengaturan Lanjutan untuk melanjutkan pengeditan kampanye Anda.\nPenting: Memilih \"Setuju\" akan mencegah Anda kembali ke antarmuka Kampanye Cepat. Apakah Anda ingin melanjutkan?"
|
|
517
|
+
"SwitchToProfessionalEditMode": "Anda sedang beralih ke antarmuka Pengaturan Lanjutan untuk melanjutkan pengeditan kampanye Anda.\nPenting: Memilih \"Setuju\" akan mencegah Anda kembali ke antarmuka Kampanye Cepat. Apakah Anda ingin melanjutkan?",
|
|
518
|
+
"Approval": {
|
|
519
|
+
"Title": "Persetujuan",
|
|
520
|
+
"GetApprovalInformation": "Dapatkan Informasi Persetujuan",
|
|
521
|
+
"SendEmail": "Kirim Email",
|
|
522
|
+
"Domain": "Domain",
|
|
523
|
+
"LinkPreview": "Pratinjau Tautan",
|
|
524
|
+
"SubCampaign": "Sub Kampanye",
|
|
525
|
+
"Status": "Status",
|
|
526
|
+
"Note": "Catatan",
|
|
527
|
+
"PendingApproval": "Menunggu Persetujuan",
|
|
528
|
+
"Approval": "Persetujuan",
|
|
529
|
+
"Rejected": "Ditolak"
|
|
530
|
+
}
|
|
518
531
|
},
|
|
519
532
|
"DirectoryManagement": {
|
|
520
533
|
"DirectoryName": "Nama Direktori",
|
|
@@ -504,10 +504,13 @@
|
|
|
504
504
|
"GetApprovalInformation": "Lấy thông tin phê duyệt",
|
|
505
505
|
"SendEmail": "Gửi Email",
|
|
506
506
|
"Domain": "Domain",
|
|
507
|
-
"LinkPreview": "
|
|
508
|
-
"SubCampaign": "
|
|
507
|
+
"LinkPreview": "Liên kết Xem trước",
|
|
508
|
+
"SubCampaign": "Chiến dịch con",
|
|
509
509
|
"Status": "Trạng thái",
|
|
510
|
-
"Note": "Ghi chú"
|
|
510
|
+
"Note": "Ghi chú",
|
|
511
|
+
"PendingApproval": "Chờ duyệt",
|
|
512
|
+
"Approval": "Duyệt",
|
|
513
|
+
"Rejected": "Hủy"
|
|
511
514
|
}
|
|
512
515
|
},
|
|
513
516
|
"TemplateManagement": {
|