awing-library 2.1.225-dev → 2.1.226-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/TabApprove/RowTable.d.ts +4 -4
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.js +2 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.test.d.ts +1 -0
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.test.js +218 -73
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.d.ts +4 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.js +76 -54
- package/lib/ACM-AXN/Campaign/Types.d.ts +4 -2
- package/package.json +1 -1
|
@@ -6,12 +6,12 @@ interface TableRowProps {
|
|
|
6
6
|
sub: ICammpaignItem;
|
|
7
7
|
linkIndex: number;
|
|
8
8
|
subIndex: number;
|
|
9
|
-
rowSelected:
|
|
10
|
-
handleRowSelect: (id:
|
|
11
|
-
updateRow: (
|
|
9
|
+
rowSelected: string[];
|
|
10
|
+
handleRowSelect: (id: string) => void;
|
|
11
|
+
updateRow: (dataTableUpdate: {
|
|
12
12
|
status: number;
|
|
13
13
|
description: string;
|
|
14
|
-
},
|
|
14
|
+
}, rowId: string, linkId: string) => void;
|
|
15
15
|
}
|
|
16
16
|
declare const TableRowMemo: React.FC<TableRowProps>;
|
|
17
17
|
export default TableRowMemo;
|
|
@@ -56,7 +56,7 @@ var TableRowMemo = react_1.default.memo(function (_a) {
|
|
|
56
56
|
updateRow({
|
|
57
57
|
status: newStatus,
|
|
58
58
|
description: valueInput
|
|
59
|
-
}, row.id);
|
|
59
|
+
}, row.id, link.id);
|
|
60
60
|
}, [row, link]);
|
|
61
61
|
var handleInputChange = (0, react_1.useCallback)(function (event) {
|
|
62
62
|
var newValue = event.target.value;
|
|
@@ -64,7 +64,7 @@ var TableRowMemo = react_1.default.memo(function (_a) {
|
|
|
64
64
|
updateRow({
|
|
65
65
|
status: selectStatus,
|
|
66
66
|
description: newValue
|
|
67
|
-
}, row.id);
|
|
67
|
+
}, row.id, link.id);
|
|
68
68
|
}, [row, link]);
|
|
69
69
|
return ((0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [linkIndex === 0 && subIndex === 0 && ((0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: row.detail.reduce(function (acc, curr) { return acc + curr.campaign.length; }, 0), 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 === row.id; }), color: "primary", onChange: function () { return handleRowSelect(row.id); } }) }) })), linkIndex === 0 && subIndex === 0 && ((0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: row.detail.reduce(function (acc, curr) { return acc + curr.campaign.length; }, 0), children: row.domain.domainName })), subIndex === 0 && ((0, jsx_runtime_1.jsx)(material_1.TableCell, { rowSpan: link.campaign.length, style: { maxWidth: 400 }, children: (0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
|
|
70
70
|
display: '-webkit-box',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,74 +1,219 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
+
var react_1 = require("@testing-library/react");
|
|
55
|
+
var Enum_1 = require("../../../../ACM-AXN/Campaign/Enum");
|
|
56
|
+
var RowTable_1 = __importDefault(require("./RowTable"));
|
|
57
|
+
var user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
58
|
+
// Mock the useTranslation hook
|
|
59
|
+
jest.mock('react-i18next', function () { return ({
|
|
60
|
+
useTranslation: function () { return ({ t: function (key) { return key; } }); },
|
|
61
|
+
}); });
|
|
62
|
+
var mockProps = {
|
|
63
|
+
row: {
|
|
64
|
+
id: '100',
|
|
65
|
+
domain: {
|
|
66
|
+
domainName: 'Vincom',
|
|
67
|
+
domainId: '100',
|
|
68
|
+
},
|
|
69
|
+
detail: [
|
|
70
|
+
{
|
|
71
|
+
id: '10c77e54-8aff-4e36-8334-70eca26d5a75',
|
|
72
|
+
linkPreview: 'http://connect.awifi.com.vn/Preview/Page?loginId=5122170857262705548&welcomeId=4841207366749869113&isNetworkCampaign=true&domainId=100',
|
|
73
|
+
campaign: [
|
|
74
|
+
{
|
|
75
|
+
subCampaigns: [
|
|
76
|
+
{
|
|
77
|
+
id: 1,
|
|
78
|
+
name: 'Sub-Campaign 1',
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
ads: [
|
|
82
|
+
{
|
|
83
|
+
id: 1,
|
|
84
|
+
name: 'Ad 1',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 2,
|
|
88
|
+
name: 'Ad 2',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
status: 0,
|
|
94
|
+
description: '',
|
|
95
|
+
loginId: '5122170857262705548',
|
|
96
|
+
welcomeId: '4841207366749869113',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
link: {
|
|
101
|
+
id: '10c77e54-8aff-4e36-8334-70eca26d5a75',
|
|
102
|
+
linkPreview: 'http://connect.awifi.com.vn/Preview/Page?loginId=5122170857262705548&welcomeId=4841207366749869113&isNetworkCampaign=true&domainId=100',
|
|
103
|
+
campaign: [
|
|
104
|
+
{
|
|
105
|
+
subCampaigns: [
|
|
106
|
+
{
|
|
107
|
+
id: 1,
|
|
108
|
+
name: 'Sub-Campaign 1',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
ads: [
|
|
112
|
+
{
|
|
113
|
+
id: 1,
|
|
114
|
+
name: 'Ad 1',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 2,
|
|
118
|
+
name: 'Ad 2',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
status: 0,
|
|
124
|
+
description: '',
|
|
125
|
+
loginId: '5122170857262705548',
|
|
126
|
+
welcomeId: '4841207366749869113',
|
|
127
|
+
},
|
|
128
|
+
sub: {
|
|
129
|
+
subCampaigns: [
|
|
130
|
+
{
|
|
131
|
+
id: 1,
|
|
132
|
+
name: 'Sub-Campaign 1',
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
ads: [
|
|
136
|
+
{
|
|
137
|
+
id: 1,
|
|
138
|
+
name: 'Ad 1',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: 2,
|
|
142
|
+
name: 'Ad 2',
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
linkIndex: 0,
|
|
147
|
+
subIndex: 0,
|
|
148
|
+
rowSelected: [],
|
|
149
|
+
handleRowSelect: jest.fn(),
|
|
150
|
+
updateRow: jest.fn(),
|
|
151
|
+
};
|
|
152
|
+
// Mock cho các component MUI
|
|
153
|
+
jest.mock('@mui/material', function () { return (__assign(__assign({}, jest.requireActual('@mui/material')), { TableCell: function (_a) {
|
|
154
|
+
var children = _a.children;
|
|
155
|
+
return (0, jsx_runtime_1.jsx)("td", { children: children });
|
|
156
|
+
}, Chip: function (_a) {
|
|
157
|
+
var label = _a.label;
|
|
158
|
+
return (0, jsx_runtime_1.jsx)("span", { children: label });
|
|
159
|
+
}, FormControl: function (_a) {
|
|
160
|
+
var children = _a.children;
|
|
161
|
+
return (0, jsx_runtime_1.jsx)("div", { children: children });
|
|
162
|
+
}, Select: function (_a) {
|
|
163
|
+
var children = _a.children, value = _a.value, onChange = _a.onChange;
|
|
164
|
+
return ((0, jsx_runtime_1.jsx)("select", { value: value, onChange: onChange, children: children }));
|
|
165
|
+
}, MenuItem: function (_a) {
|
|
166
|
+
var children = _a.children, value = _a.value;
|
|
167
|
+
return ((0, jsx_runtime_1.jsx)("option", { value: value, children: children }));
|
|
168
|
+
}, TextField: function (_a) {
|
|
169
|
+
var value = _a.value, onChange = _a.onChange;
|
|
170
|
+
return ((0, jsx_runtime_1.jsx)("input", { type: "text", value: value, onChange: onChange }));
|
|
171
|
+
}, Link: function (_a) {
|
|
172
|
+
var children = _a.children, href = _a.href, target = _a.target;
|
|
173
|
+
return ((0, jsx_runtime_1.jsx)("a", { href: href, target: target, children: children }));
|
|
174
|
+
} })); });
|
|
175
|
+
var renderUi = function () {
|
|
176
|
+
return (0, react_1.render)((0, jsx_runtime_1.jsx)("table", { children: (0, jsx_runtime_1.jsx)("tbody", { children: (0, jsx_runtime_1.jsx)(RowTable_1.default, __assign({}, mockProps)) }) }));
|
|
177
|
+
};
|
|
178
|
+
describe('TableRowMemo', function () {
|
|
179
|
+
it('renders correctly', function () {
|
|
180
|
+
renderUi();
|
|
181
|
+
expect(react_1.screen.getByText('Vincom')).toBeInTheDocument();
|
|
182
|
+
expect(react_1.screen.getByText('http://connect.awifi.com.vn/Preview/Page?loginId=5122170857262705548&welcomeId=4841207366749869113&isNetworkCampaign=true&domainId=100')).toBeInTheDocument();
|
|
183
|
+
expect(react_1.screen.getByText('Sub-Campaign 1')).toBeInTheDocument();
|
|
184
|
+
expect(react_1.screen.getByText('Ad 1')).toBeInTheDocument();
|
|
185
|
+
});
|
|
186
|
+
it('handles checkbox change', function () {
|
|
187
|
+
renderUi();
|
|
188
|
+
var checkbox = react_1.screen.getByRole('checkbox');
|
|
189
|
+
react_1.fireEvent.click(checkbox);
|
|
190
|
+
expect(mockProps.handleRowSelect).toHaveBeenCalledWith('100');
|
|
191
|
+
});
|
|
192
|
+
it('handles status change', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
193
|
+
var select;
|
|
194
|
+
return __generator(this, function (_a) {
|
|
195
|
+
switch (_a.label) {
|
|
196
|
+
case 0:
|
|
197
|
+
renderUi();
|
|
198
|
+
select = react_1.screen.getByRole('combobox');
|
|
199
|
+
return [4 /*yield*/, user_event_1.default.selectOptions(select, Enum_1.CampaignApprovalStatus.Rejected.toString())];
|
|
200
|
+
case 1:
|
|
201
|
+
_a.sent();
|
|
202
|
+
expect(mockProps.updateRow).toHaveBeenCalledWith({
|
|
203
|
+
status: Enum_1.CampaignApprovalStatus.Rejected.toString(),
|
|
204
|
+
description: '',
|
|
205
|
+
}, '100', '10c77e54-8aff-4e36-8334-70eca26d5a75');
|
|
206
|
+
return [2 /*return*/];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}); });
|
|
210
|
+
it('handles description change', function () {
|
|
211
|
+
renderUi();
|
|
212
|
+
var input = react_1.screen.getByRole('textbox');
|
|
213
|
+
react_1.fireEvent.change(input, { target: { value: 'New description' } });
|
|
214
|
+
expect(mockProps.updateRow).toHaveBeenCalledWith({
|
|
215
|
+
status: Enum_1.CampaignApprovalStatus.PendingApproval,
|
|
216
|
+
description: 'New description',
|
|
217
|
+
}, '100', '10c77e54-8aff-4e36-8334-70eca26d5a75');
|
|
218
|
+
});
|
|
219
|
+
});
|
|
@@ -7,15 +7,17 @@ export interface ICammpaignItem {
|
|
|
7
7
|
ads: IItem[];
|
|
8
8
|
}
|
|
9
9
|
export interface IDetail {
|
|
10
|
-
id?:
|
|
10
|
+
id?: string;
|
|
11
11
|
status: number;
|
|
12
12
|
linkPreview: string;
|
|
13
13
|
subCampaigns?: IItem[];
|
|
14
|
+
loginId?: string;
|
|
15
|
+
welcomeId?: string;
|
|
14
16
|
campaign: ICammpaignItem[];
|
|
15
17
|
description: string;
|
|
16
18
|
}
|
|
17
19
|
export interface IDataTable {
|
|
18
|
-
id:
|
|
20
|
+
id: string;
|
|
19
21
|
domain: {
|
|
20
22
|
domainName?: string;
|
|
21
23
|
domainId?: string;
|
|
@@ -33,8 +33,8 @@ var react_1 = require("react");
|
|
|
33
33
|
var react_i18next_1 = require("react-i18next");
|
|
34
34
|
var recoil_1 = require("recoil");
|
|
35
35
|
var Recoils_1 = require("../Recoils");
|
|
36
|
-
var atoms_1 = require("../TabSubCampaign/atoms");
|
|
37
36
|
var RowTable_1 = __importDefault(require("./RowTable"));
|
|
37
|
+
var Helpers_1 = require("../../../../Utils/Helpers");
|
|
38
38
|
function TabApprove() {
|
|
39
39
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
40
40
|
var campaignId = (0, Router_1.useParams)().campaignId;
|
|
@@ -42,24 +42,22 @@ function TabApprove() {
|
|
|
42
42
|
var setConfirmExit = (0, recoil_1.useSetRecoilState)(Recoils_1.confirmExitState);
|
|
43
43
|
var _b = (0, react_1.useState)([]), rowSelected = _b[0], setRowSelected = _b[1];
|
|
44
44
|
var _c = (0, react_1.useState)([]), domains = _c[0], setDomains = _c[1];
|
|
45
|
-
var ads = (0, recoil_1.useRecoilValue)(atoms_1.adListState);
|
|
46
45
|
var subCampaigns = (0, recoil_1.useRecoilValue)(Recoils_1.campaignGroupsState);
|
|
47
46
|
var _d = (0, Hooks_1.default)(), service = _d.service, defaultDomainId = _d.domainId;
|
|
47
|
+
var _e = (0, react_1.useState)([]), dataTable = _e[0], setDataTable = _e[1];
|
|
48
48
|
var domainIds = (0, react_1.useMemo)(function () {
|
|
49
|
+
var ads = subCampaigns.flatMap(function (sub) { return sub.ads; });
|
|
49
50
|
return lodash_1.default.uniq(ads
|
|
50
51
|
.filter(function (ad) { return ad.places; })
|
|
51
52
|
.map(function (ad) { return ad.places.map(function (x) { return x.domainId; }); })
|
|
52
53
|
.flat()
|
|
53
54
|
.filter(Boolean));
|
|
54
|
-
}, [
|
|
55
|
-
var generateRandomId = function () {
|
|
56
|
-
return Math.floor(Math.random() * 1000000000); // Số ngẫu nhiên từ 0 đến 999,999,999
|
|
57
|
-
};
|
|
55
|
+
}, [subCampaigns]);
|
|
58
56
|
var renderLinkPreview = function (ad, domainId) {
|
|
59
57
|
if (domainId === void 0) { domainId = defaultDomainId; }
|
|
60
|
-
var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId
|
|
58
|
+
var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId);
|
|
61
59
|
if (ad.welcomeId)
|
|
62
|
-
url += "&welcomeId=".concat(ad.welcomeId);
|
|
60
|
+
url += "&welcomeId=".concat(ad.welcomeId, "&isNetworkCampaign=").concat(Boolean(service.domainsGetAll).toString());
|
|
63
61
|
if (domainId)
|
|
64
62
|
url += "&domainId=".concat(domainId);
|
|
65
63
|
return url;
|
|
@@ -88,11 +86,13 @@ function TabApprove() {
|
|
|
88
86
|
}
|
|
89
87
|
else {
|
|
90
88
|
acc.push({
|
|
91
|
-
id:
|
|
89
|
+
id: (0, Helpers_1.generateUUID)(),
|
|
92
90
|
linkPreview: detail.linkPreview,
|
|
93
91
|
campaign: detail.campaign,
|
|
94
92
|
status: detail.status,
|
|
95
93
|
description: detail.description,
|
|
94
|
+
loginId: detail.loginId,
|
|
95
|
+
welcomeId: detail.welcomeId,
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
return acc;
|
|
@@ -128,6 +128,8 @@ function TabApprove() {
|
|
|
128
128
|
],
|
|
129
129
|
},
|
|
130
130
|
],
|
|
131
|
+
loginId: ad.loginId,
|
|
132
|
+
welcomeId: ad.welcomeId,
|
|
131
133
|
description: '',
|
|
132
134
|
status: 0,
|
|
133
135
|
};
|
|
@@ -143,35 +145,40 @@ function TabApprove() {
|
|
|
143
145
|
return pre.includes(id) ? pre.filter(function (x) { return x !== id; }) : __spreadArray(__spreadArray([], pre, true), [id], false);
|
|
144
146
|
});
|
|
145
147
|
}, []);
|
|
146
|
-
var updateRow = (0, react_1.useCallback)(function (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
148
|
+
var updateRow = (0, react_1.useCallback)(function (dataUpdate, rowId, linkId) {
|
|
149
|
+
setDataTable(function (pre) {
|
|
150
|
+
return pre.map(function (item) {
|
|
151
|
+
if (item.id === rowId) {
|
|
152
|
+
return __assign(__assign({}, item), { detail: item.detail.map(function (detail) {
|
|
153
|
+
if (detail.id === linkId) {
|
|
154
|
+
return __assign(__assign({}, detail), { status: dataUpdate.status, description: dataUpdate.description });
|
|
155
|
+
}
|
|
156
|
+
return detail;
|
|
157
|
+
}) });
|
|
154
158
|
}
|
|
155
159
|
return item;
|
|
156
160
|
});
|
|
157
|
-
return newState;
|
|
158
161
|
});
|
|
159
|
-
|
|
162
|
+
setConfirmExit(true);
|
|
163
|
+
}, [setCampaignApproval, dataTable]);
|
|
160
164
|
function flattenData(data) {
|
|
161
165
|
var flattened = [];
|
|
166
|
+
var index = 0;
|
|
162
167
|
data.forEach(function (item) {
|
|
163
168
|
item.detail.forEach(function (detail) {
|
|
164
169
|
detail.campaign.forEach(function (campaign) {
|
|
165
170
|
campaign.ads.forEach(function (ad) {
|
|
166
171
|
var _a;
|
|
167
172
|
flattened.push({
|
|
168
|
-
id:
|
|
173
|
+
id: index++,
|
|
169
174
|
campaignId: campaignId,
|
|
170
175
|
domainId: item.domain.domainId,
|
|
171
176
|
status: detail.status,
|
|
177
|
+
loginId: detail.loginId,
|
|
178
|
+
welcomeId: detail.welcomeId,
|
|
172
179
|
description: detail.description,
|
|
173
|
-
|
|
174
|
-
|
|
180
|
+
campaignGroupId: (_a = campaign.subCampaigns[0]) === null || _a === void 0 ? void 0 : _a.id,
|
|
181
|
+
campaignAdId: ad === null || ad === void 0 ? void 0 : ad.id,
|
|
175
182
|
});
|
|
176
183
|
});
|
|
177
184
|
});
|
|
@@ -198,31 +205,46 @@ function TabApprove() {
|
|
|
198
205
|
};
|
|
199
206
|
var groupedData = inputData.reduce(function (acc, item) {
|
|
200
207
|
var _a, _b, _c;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
208
|
+
var domainId = item.domainId;
|
|
209
|
+
if (!acc[domainId]) {
|
|
210
|
+
var domain = domains.find(function (d) { return d.domainId === domainId; });
|
|
211
|
+
acc[domainId] = {
|
|
212
|
+
id: domainId,
|
|
205
213
|
domain: {
|
|
206
214
|
domainName: domain === null || domain === void 0 ? void 0 : domain.name,
|
|
207
215
|
domainId: domain === null || domain === void 0 ? void 0 : domain.domainId,
|
|
208
216
|
},
|
|
209
|
-
detail: [
|
|
210
|
-
{
|
|
211
|
-
id: generateRandomId(),
|
|
212
|
-
linkPreview: renderLinkPreview((_a = findAd(item.subId, item.adId)) !== null && _a !== void 0 ? _a : {}, item.domainId),
|
|
213
|
-
campaign: [],
|
|
214
|
-
status: item.status,
|
|
215
|
-
description: item.description,
|
|
216
|
-
},
|
|
217
|
-
],
|
|
217
|
+
detail: [],
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
220
|
+
// Tạo linkPreview chỉ nếu chưa tồn tại
|
|
221
|
+
var existingDetail = acc[domainId].detail.find(function (detail) {
|
|
222
|
+
return detail.loginId === item.loginId &&
|
|
223
|
+
detail.welcomeId === item.welcomeId;
|
|
224
|
+
});
|
|
225
|
+
if (!existingDetail) {
|
|
226
|
+
acc[domainId].detail.push({
|
|
227
|
+
id: (0, Helpers_1.generateUUID)(),
|
|
228
|
+
linkPreview: renderLinkPreview({
|
|
229
|
+
loginId: item.loginId,
|
|
230
|
+
welcomeId: item.welcomeId,
|
|
231
|
+
}, domainId),
|
|
232
|
+
campaign: [],
|
|
233
|
+
status: item.status,
|
|
234
|
+
description: item.description,
|
|
235
|
+
loginId: item.loginId,
|
|
236
|
+
welcomeId: item.welcomeId,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
var campaign = (_a = acc[domainId].detail.find(function (detail) {
|
|
240
|
+
return detail.loginId === item.loginId &&
|
|
241
|
+
detail.welcomeId === item.welcomeId;
|
|
242
|
+
})) === null || _a === void 0 ? void 0 : _a.campaign;
|
|
243
|
+
var subCampaign = campaign.find(function (c) { return c.subCampaigns[0].id === item.campaignGroupId; });
|
|
223
244
|
if (!subCampaign) {
|
|
224
245
|
var sub = subCampaigns.find(function (subCampaign) {
|
|
225
|
-
return subCampaign.campaignGroup.id ===
|
|
246
|
+
return subCampaign.campaignGroup.id ===
|
|
247
|
+
item.campaignGroupId;
|
|
226
248
|
});
|
|
227
249
|
subCampaign = {
|
|
228
250
|
subCampaigns: [
|
|
@@ -236,23 +258,30 @@ function TabApprove() {
|
|
|
236
258
|
campaign.push(subCampaign);
|
|
237
259
|
}
|
|
238
260
|
subCampaign.ads.push({
|
|
239
|
-
id: item.
|
|
240
|
-
name: (_c = (_b = findAd(subCampaign.subCampaigns[0].id, item.
|
|
261
|
+
id: item.campaignAdId,
|
|
262
|
+
name: (_c = (_b = findAd(subCampaign.subCampaigns[0].id, item.campaignAdId)) === null || _b === void 0 ? void 0 : _b.adName) !== null && _c !== void 0 ? _c : '',
|
|
241
263
|
});
|
|
242
264
|
return acc;
|
|
243
265
|
}, {});
|
|
244
266
|
return Object.values(groupedData);
|
|
245
267
|
};
|
|
246
|
-
var
|
|
268
|
+
var handleSelectAll = (0, react_1.useCallback)(function () {
|
|
269
|
+
setRowSelected(function (pre) {
|
|
270
|
+
return pre.length < dataTable.length
|
|
271
|
+
? dataTable.map(function (item) { return item.id; })
|
|
272
|
+
: [];
|
|
273
|
+
});
|
|
274
|
+
}, [dataTable]);
|
|
275
|
+
(0, react_1.useEffect)(function () {
|
|
247
276
|
if (!domains.length)
|
|
248
|
-
return [];
|
|
277
|
+
return setDataTable([]);
|
|
249
278
|
var data;
|
|
250
279
|
if (campaignApproval === null || campaignApproval === void 0 ? void 0 : campaignApproval.length) {
|
|
251
|
-
return unflattenData(campaignApproval);
|
|
280
|
+
return setDataTable(unflattenData(campaignApproval));
|
|
252
281
|
}
|
|
253
282
|
data = domains.map(function (domain) {
|
|
254
283
|
return {
|
|
255
|
-
id:
|
|
284
|
+
id: domain.domainId,
|
|
256
285
|
domain: {
|
|
257
286
|
domainName: domain.name,
|
|
258
287
|
domainId: domain.domainId,
|
|
@@ -260,15 +289,8 @@ function TabApprove() {
|
|
|
260
289
|
detail: renderDataDetail(domain.domainId),
|
|
261
290
|
};
|
|
262
291
|
});
|
|
263
|
-
return data;
|
|
292
|
+
return setDataTable(data);
|
|
264
293
|
}, [domains]);
|
|
265
|
-
var handleSelectAll = (0, react_1.useCallback)(function () {
|
|
266
|
-
setRowSelected(function (pre) {
|
|
267
|
-
return pre.length < dataTable.length
|
|
268
|
-
? dataTable.map(function (item) { return item.id; })
|
|
269
|
-
: [];
|
|
270
|
-
});
|
|
271
|
-
}, [dataTable]);
|
|
272
294
|
(0, react_1.useEffect)(function () {
|
|
273
295
|
if (domainIds.length > 0) {
|
|
274
296
|
service.domainsGetByIds &&
|
|
@@ -281,7 +303,7 @@ function TabApprove() {
|
|
|
281
303
|
}
|
|
282
304
|
}, [dataTable]);
|
|
283
305
|
return ((0, jsx_runtime_1.jsxs)(material_1.TableContainer, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", color: "primary", disabled: !rowSelected.length, sx: {
|
|
284
|
-
margin: '1rem'
|
|
306
|
+
margin: '1rem',
|
|
285
307
|
}, children: t('Campaign.Approval.SendEmail') }), (0, jsx_runtime_1.jsxs)(material_1.Table, { sx: {
|
|
286
308
|
boxShadow: 'none',
|
|
287
309
|
'.MuiOutlinedInput-notchedOutline': {
|
|
@@ -216,10 +216,12 @@ export type CampaignApproval = {
|
|
|
216
216
|
id?: number;
|
|
217
217
|
campaignId?: string;
|
|
218
218
|
domainId?: string;
|
|
219
|
-
|
|
220
|
-
|
|
219
|
+
campaignGroupId?: number;
|
|
220
|
+
campaignAdId?: number;
|
|
221
221
|
status: number;
|
|
222
222
|
description: string;
|
|
223
|
+
loginId?: string;
|
|
224
|
+
welcomeId?: string;
|
|
223
225
|
};
|
|
224
226
|
export type DateRange = {
|
|
225
227
|
startDate: Date;
|