awing-library 2.1.226-dev → 2.1.227-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.
@@ -1,9 +1,10 @@
1
- import { CampaignModel, Directory, CampaignGroupModel, Attribute } from '../Types';
1
+ import { CampaignModel, Directory, CampaignGroupModel, Attribute, ICampaignApprovalTable } from '../Types';
2
2
  import { WeightContainerProps } from './TabSubCampaign/Weight';
3
3
  import { MenuOption } from '../../../AWING';
4
4
  export declare const directoriesState: import("recoil").RecoilState<Directory[]>;
5
5
  export declare const attributesState: import("recoil").RecoilState<Attribute[]>;
6
6
  export declare const isCreateState: import("recoil").RecoilState<boolean>;
7
+ export declare const campaignApprovalTableState: import("recoil").RecoilState<ICampaignApprovalTable[]>;
7
8
  /**
8
9
  * Đánh dấu việc cần xác nhận lại trước khi đóng (set thành true khi có bất kỳ chỉnh sửa campaign nào)
9
10
  */
@@ -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.campaignApprovalState = 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.campaignApprovalTableState = 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");
@@ -28,6 +28,10 @@ exports.isCreateState = (0, recoil_1.atom)({
28
28
  key: 'isCreateState',
29
29
  default: false,
30
30
  });
31
+ exports.campaignApprovalTableState = (0, recoil_1.atom)({
32
+ key: 'campaignApprovalTableState',
33
+ default: [],
34
+ });
31
35
  /**
32
36
  * Đánh dấu việc cần xác nhận lại trước khi đóng (set thành true khi có bất kỳ chỉnh sửa campaign nào)
33
37
  */
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { ICammpaignItem, IDataTable, IDetail } from '.';
2
+ import { ICampaignApprovalSubRow, ICampaignApprovalTable, ICampaignApprovalTableRow } from '../../../../ACM-AXN/Campaign/Types';
3
3
  interface TableRowProps {
4
- row: IDataTable;
5
- link: IDetail;
6
- sub: ICammpaignItem;
4
+ row: ICampaignApprovalTable;
5
+ link: ICampaignApprovalTableRow;
6
+ sub: ICampaignApprovalSubRow;
7
7
  linkIndex: number;
8
8
  subIndex: number;
9
9
  rowSelected: string[];
@@ -0,0 +1,2 @@
1
+ declare const RunInBackground: () => import("react/jsx-runtime").JSX.Element;
2
+ export default RunInBackground;
@@ -0,0 +1,322 @@
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 recoil_1 = require("recoil");
19
+ var Recoils_1 = require("../Recoils");
20
+ var react_1 = require("react");
21
+ var Hooks_1 = __importDefault(require("../../../../ACM-AXN/Campaign/Hooks"));
22
+ var Constant_1 = require("../../../../ACM-AXN/Common/Constant");
23
+ var lodash_1 = __importDefault(require("lodash"));
24
+ var Helpers_1 = require("../../../../Utils/Helpers");
25
+ var Router_1 = require("../../../../AWING/Router");
26
+ var atoms_1 = require("../TabSubCampaign/atoms");
27
+ var icons_material_1 = require("@mui/icons-material");
28
+ var RunInBackground = function () {
29
+ var campaignId = (0, Router_1.useParams)().campaignId;
30
+ var subCampaigns = (0, recoil_1.useRecoilValue)(Recoils_1.campaignGroupsState);
31
+ var subCampaignDetailValid = (0, recoil_1.useRecoilValue)(atoms_1.subCampaignDetailValidState);
32
+ var subCampaignAdsValid = (0, recoil_1.useRecoilValue)(atoms_1.subCampaignAdsValidState);
33
+ var _a = (0, Hooks_1.default)(), service = _a.service, defaultDomainId = _a.domainId;
34
+ var _b = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalState), campaignApproval = _b[0], setCampaignApproval = _b[1];
35
+ var _c = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalTableState), campaignApprovalTable = _c[0], setCampaignApprovalTable = _c[1];
36
+ var _d = (0, react_1.useState)([]), domains = _d[0], setDomains = _d[1];
37
+ var _e = (0, react_1.useState)(true), isInit = _e[0], setIsInit = _e[1];
38
+ var oldCampaignApproval = (0, react_1.useRef)([]);
39
+ var prevDomainIds = (0, react_1.useRef)([]);
40
+ var domainIds = (0, react_1.useMemo)(function () {
41
+ var ads = subCampaigns.flatMap(function (sub) { return sub.ads; });
42
+ return lodash_1.default.uniq(ads
43
+ .filter(function (ad) { return ad.places; })
44
+ .map(function (ad) { return ad.places.map(function (x) { return x.domainId; }); })
45
+ .flat()
46
+ .filter(Boolean));
47
+ }, [subCampaigns]);
48
+ var areAllTrue = function (data) {
49
+ return Object.values(data).every(function (value) { return value === true; });
50
+ };
51
+ var renderLinkPreview = function (ad, domainId) {
52
+ if (domainId === void 0) { domainId = defaultDomainId; }
53
+ var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId);
54
+ if (ad.welcomeId)
55
+ url += "&welcomeId=".concat(ad.welcomeId, "&isNetworkCampaign=").concat(Boolean(service.domainsGetAll).toString());
56
+ if (domainId)
57
+ url += "&domainId=".concat(domainId);
58
+ return url;
59
+ };
60
+ var mergedData = function (data) {
61
+ return data.reduce(function (acc, detail) {
62
+ var existingLink = acc.find(function (l) { return l.linkPreview === detail.linkPreview; });
63
+ if (existingLink) {
64
+ var existingCampaign = existingLink.campaign.find(function (item) {
65
+ return item.subCampaigns.find(function (subCampaign) {
66
+ return subCampaign.id ===
67
+ detail.campaign[0].subCampaigns[0].id;
68
+ });
69
+ });
70
+ if (existingCampaign) {
71
+ existingCampaign.ads.push({
72
+ id: detail.campaign[0].ads[0].id,
73
+ name: detail.campaign[0].ads[0].name,
74
+ });
75
+ }
76
+ else {
77
+ detail.campaign.forEach(function (item) {
78
+ existingLink.campaign.push(item);
79
+ });
80
+ }
81
+ }
82
+ else {
83
+ acc.push({
84
+ id: (0, Helpers_1.generateUUID)(),
85
+ linkPreview: detail.linkPreview,
86
+ campaign: detail.campaign,
87
+ status: detail.status,
88
+ description: detail.description,
89
+ loginId: detail.loginId,
90
+ welcomeId: detail.welcomeId,
91
+ });
92
+ }
93
+ return acc;
94
+ }, []);
95
+ };
96
+ var renderDataDetail = function (domainId) {
97
+ return mergedData(subCampaigns
98
+ .map(function (subCampaign) {
99
+ return subCampaign.ads
100
+ .map(function (ad) {
101
+ var _a;
102
+ var isDomain = (_a = ad === null || ad === void 0 ? void 0 : ad.places) === null || _a === void 0 ? void 0 : _a.find(function (place) {
103
+ return place.domainId === domainId;
104
+ });
105
+ if (isDomain) {
106
+ return {
107
+ linkPreview: renderLinkPreview(ad, domainId),
108
+ campaign: [
109
+ {
110
+ subCampaigns: [
111
+ {
112
+ id: subCampaign
113
+ .campaignGroup.id,
114
+ name: subCampaign
115
+ .campaignGroup.name,
116
+ },
117
+ ],
118
+ ads: [
119
+ {
120
+ id: ad.id,
121
+ name: ad.name,
122
+ },
123
+ ],
124
+ },
125
+ ],
126
+ loginId: ad.loginId,
127
+ welcomeId: ad.welcomeId,
128
+ description: '',
129
+ status: 0,
130
+ };
131
+ }
132
+ })
133
+ .filter(Boolean);
134
+ })
135
+ .flat()
136
+ .filter(Boolean));
137
+ };
138
+ var flattenData = function (data) {
139
+ var flattened = [];
140
+ var index = 0;
141
+ data.forEach(function (item) {
142
+ item.detail.forEach(function (detail) {
143
+ detail.campaign.forEach(function (campaign) {
144
+ campaign.ads.forEach(function (ad) {
145
+ var _a;
146
+ flattened.push({
147
+ id: index++,
148
+ campaignId: campaignId,
149
+ domainId: item.domain.domainId,
150
+ status: detail.status,
151
+ loginId: detail.loginId,
152
+ welcomeId: detail.welcomeId,
153
+ description: detail.description,
154
+ campaignGroupId: (_a = campaign.subCampaigns[0]) === null || _a === void 0 ? void 0 : _a.id,
155
+ campaignAdId: ad === null || ad === void 0 ? void 0 : ad.id,
156
+ });
157
+ });
158
+ });
159
+ });
160
+ });
161
+ return flattened;
162
+ };
163
+ var unflattenData = function (inputData) {
164
+ var subCampaignsFlat = subCampaigns.flatMap(function (item) {
165
+ var subCampaignId = item.campaignGroup.id;
166
+ var subCampaignName = item.campaignGroup.name;
167
+ return item.ads.map(function (ad) { return ({
168
+ subCampaignId: subCampaignId,
169
+ subCampaignName: subCampaignName,
170
+ adId: ad.id,
171
+ adName: ad.name,
172
+ loginId: ad.loginId,
173
+ welcomeId: ad.welcomeId,
174
+ }); });
175
+ });
176
+ var findAd = function (subId, adId) {
177
+ var ad = subCampaignsFlat.find(function (item) { return item.adId === adId && item.subCampaignId === subId; });
178
+ return ad;
179
+ };
180
+ var groupedData = inputData.reduce(function (acc, item) {
181
+ var _a, _b, _c;
182
+ var domainId = item.domainId;
183
+ if (!acc[domainId]) {
184
+ var domain = domains.find(function (d) { return d.domainId === domainId; });
185
+ acc[domainId] = {
186
+ id: domainId,
187
+ domain: {
188
+ domainName: domain === null || domain === void 0 ? void 0 : domain.name,
189
+ domainId: domain === null || domain === void 0 ? void 0 : domain.domainId,
190
+ },
191
+ detail: [],
192
+ };
193
+ }
194
+ // Tạo linkPreview chỉ nếu chưa tồn tại
195
+ var existingDetail = acc[domainId].detail.find(function (detail) {
196
+ return detail.loginId === item.loginId &&
197
+ detail.welcomeId === item.welcomeId;
198
+ });
199
+ if (!existingDetail) {
200
+ acc[domainId].detail.push({
201
+ id: (0, Helpers_1.generateUUID)(),
202
+ linkPreview: renderLinkPreview({
203
+ loginId: item.loginId,
204
+ welcomeId: item.welcomeId,
205
+ }, domainId),
206
+ campaign: [],
207
+ status: item.status,
208
+ description: item.description,
209
+ loginId: item.loginId,
210
+ welcomeId: item.welcomeId,
211
+ });
212
+ }
213
+ var campaign = (_a = acc[domainId].detail.find(function (detail) {
214
+ return detail.loginId === item.loginId &&
215
+ detail.welcomeId === item.welcomeId;
216
+ })) === null || _a === void 0 ? void 0 : _a.campaign;
217
+ var subCampaign = campaign.find(function (c) { return c.subCampaigns[0].id === item.campaignGroupId; });
218
+ if (!subCampaign) {
219
+ var sub = subCampaigns.find(function (subCampaign) {
220
+ return subCampaign.campaignGroup.id ===
221
+ item.campaignGroupId;
222
+ });
223
+ subCampaign = {
224
+ subCampaigns: [
225
+ {
226
+ id: sub.campaignGroup.id,
227
+ name: sub.campaignGroup.name,
228
+ },
229
+ ],
230
+ ads: [],
231
+ };
232
+ campaign.push(subCampaign);
233
+ }
234
+ subCampaign.ads.push({
235
+ id: item.campaignAdId,
236
+ name: (_c = (_b = findAd(subCampaign.subCampaigns[0].id, item.campaignAdId)) === null || _b === void 0 ? void 0 : _b.adName) !== null && _c !== void 0 ? _c : '',
237
+ });
238
+ return acc;
239
+ }, {});
240
+ return Object.values(groupedData);
241
+ };
242
+ var fetchDomains = (0, react_1.useCallback)(function (ids) {
243
+ if (ids.length > 0 && service.domainsGetByIds) {
244
+ service.domainsGetByIds(ids).then(setDomains);
245
+ }
246
+ }, [service.domainsGetByIds, setDomains]);
247
+ var dataDiff = function (apiData, currentData) {
248
+ var mergedData = currentData.map(function (currentItem) {
249
+ var matchingApiItem = apiData.find(function (apiItem) {
250
+ return apiItem.domainId === currentItem.domainId &&
251
+ apiItem.campaignGroupId === currentItem.campaignGroupId &&
252
+ apiItem.campaignAdId === currentItem.campaignAdId;
253
+ });
254
+ if (matchingApiItem) {
255
+ return __assign(__assign({}, currentItem), { status: matchingApiItem.status });
256
+ }
257
+ return currentItem;
258
+ });
259
+ return mergedData;
260
+ };
261
+ var campaignApprovalMerged = function (oldData, newData) {
262
+ return newData.map(function (newItem) {
263
+ var newDomainId = newItem.domain.domainId;
264
+ newItem.detail = newItem.detail.map(function (newDetail) {
265
+ var oldItem = oldData.find(function (item) { return item.domain.domainId === newDomainId; });
266
+ if (oldItem) {
267
+ var oldDetail = oldItem.detail.find(function (detail) {
268
+ return detail.welcomeId === newDetail.welcomeId &&
269
+ detail.loginId === newDetail.loginId;
270
+ });
271
+ if (oldDetail) {
272
+ return __assign(__assign({}, newDetail), { status: oldDetail.status });
273
+ }
274
+ }
275
+ return newDetail;
276
+ });
277
+ return newItem;
278
+ });
279
+ };
280
+ (0, react_1.useEffect)(function () {
281
+ if (!Boolean(service.attributesGetByObjectTypeCode))
282
+ icons_material_1.KeyboardReturn;
283
+ if (!domains.length)
284
+ return setCampaignApprovalTable([]);
285
+ // if (campaignApproval?.length) {
286
+ // return setCampaignApprovalTable(unflattenData(campaignApproval))
287
+ // }
288
+ if (areAllTrue(subCampaignDetailValid) &&
289
+ areAllTrue(subCampaignAdsValid)) {
290
+ var data = domains.map(function (domain) {
291
+ return {
292
+ id: domain.domainId,
293
+ domain: {
294
+ domainName: domain.name,
295
+ domainId: domain.domainId,
296
+ },
297
+ detail: renderDataDetail(domain.domainId),
298
+ };
299
+ });
300
+ return setCampaignApprovalTable(campaignApprovalMerged(unflattenData(oldCampaignApproval.current), data));
301
+ }
302
+ }, [domains, subCampaigns]);
303
+ (0, react_1.useEffect)(function () {
304
+ if (!lodash_1.default.isEqual(prevDomainIds.current, domainIds)) {
305
+ fetchDomains(domainIds);
306
+ prevDomainIds.current = domainIds;
307
+ }
308
+ }, [domainIds]);
309
+ (0, react_1.useEffect)(function () {
310
+ if (campaignApprovalTable.length > 0) {
311
+ setCampaignApproval(flattenData(campaignApprovalTable));
312
+ }
313
+ }, [campaignApprovalTable]);
314
+ (0, react_1.useEffect)(function () {
315
+ if (!oldCampaignApproval.current.length && isInit) {
316
+ oldCampaignApproval.current = campaignApproval !== null && campaignApproval !== void 0 ? campaignApproval : [];
317
+ setIsInit(true);
318
+ }
319
+ }, [campaignApproval]);
320
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
321
+ };
322
+ exports.default = RunInBackground;
@@ -1,28 +1 @@
1
- interface IItem {
2
- id?: number;
3
- name?: string;
4
- }
5
- export interface ICammpaignItem {
6
- subCampaigns: IItem[];
7
- ads: IItem[];
8
- }
9
- export interface IDetail {
10
- id?: string;
11
- status: number;
12
- linkPreview: string;
13
- subCampaigns?: IItem[];
14
- loginId?: string;
15
- welcomeId?: string;
16
- campaign: ICammpaignItem[];
17
- description: string;
18
- }
19
- export interface IDataTable {
20
- id: string;
21
- domain: {
22
- domainName?: string;
23
- domainId?: string;
24
- };
25
- detail: IDetail[];
26
- }
27
1
  export default function TabApprove(): import("react/jsx-runtime").JSX.Element;
28
- export {};
@@ -25,128 +25,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  var jsx_runtime_1 = require("react/jsx-runtime");
27
27
  var material_1 = require("@mui/material");
28
- var Hooks_1 = __importDefault(require("../../../../ACM-AXN/Campaign/Hooks"));
29
- var Constant_1 = require("../../../../ACM-AXN/Common/Constant");
30
- var Router_1 = require("../../../../AWING/Router");
31
- var lodash_1 = __importDefault(require("lodash"));
32
28
  var react_1 = require("react");
33
29
  var react_i18next_1 = require("react-i18next");
34
30
  var recoil_1 = require("recoil");
35
31
  var Recoils_1 = require("../Recoils");
36
32
  var RowTable_1 = __importDefault(require("./RowTable"));
37
- var Helpers_1 = require("../../../../Utils/Helpers");
38
33
  function TabApprove() {
39
34
  var t = (0, react_i18next_1.useTranslation)().t;
40
- var campaignId = (0, Router_1.useParams)().campaignId;
41
- var _a = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalState), campaignApproval = _a[0], setCampaignApproval = _a[1];
42
35
  var setConfirmExit = (0, recoil_1.useSetRecoilState)(Recoils_1.confirmExitState);
43
- var _b = (0, react_1.useState)([]), rowSelected = _b[0], setRowSelected = _b[1];
44
- var _c = (0, react_1.useState)([]), domains = _c[0], setDomains = _c[1];
45
- var subCampaigns = (0, recoil_1.useRecoilValue)(Recoils_1.campaignGroupsState);
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
- var domainIds = (0, react_1.useMemo)(function () {
49
- var ads = subCampaigns.flatMap(function (sub) { return sub.ads; });
50
- return lodash_1.default.uniq(ads
51
- .filter(function (ad) { return ad.places; })
52
- .map(function (ad) { return ad.places.map(function (x) { return x.domainId; }); })
53
- .flat()
54
- .filter(Boolean));
55
- }, [subCampaigns]);
56
- var renderLinkPreview = function (ad, domainId) {
57
- if (domainId === void 0) { domainId = defaultDomainId; }
58
- var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId);
59
- if (ad.welcomeId)
60
- url += "&welcomeId=".concat(ad.welcomeId, "&isNetworkCampaign=").concat(Boolean(service.domainsGetAll).toString());
61
- if (domainId)
62
- url += "&domainId=".concat(domainId);
63
- return url;
64
- };
65
- var mergedData = function (data) {
66
- return data.reduce(function (acc, detail) {
67
- var existingLink = acc.find(function (l) { return l.linkPreview === detail.linkPreview; });
68
- if (existingLink) {
69
- var existingCampaign = existingLink.campaign.find(function (item) {
70
- return item.subCampaigns.find(function (subCampaign) {
71
- return subCampaign.id ===
72
- detail.campaign[0].subCampaigns[0].id;
73
- });
74
- });
75
- if (existingCampaign) {
76
- existingCampaign.ads.push({
77
- id: detail.campaign[0].ads[0].id,
78
- name: detail.campaign[0].ads[0].name,
79
- });
80
- }
81
- else {
82
- detail.campaign.forEach(function (item) {
83
- existingLink.campaign.push(item);
84
- });
85
- }
86
- }
87
- else {
88
- acc.push({
89
- id: (0, Helpers_1.generateUUID)(),
90
- linkPreview: detail.linkPreview,
91
- campaign: detail.campaign,
92
- status: detail.status,
93
- description: detail.description,
94
- loginId: detail.loginId,
95
- welcomeId: detail.welcomeId,
96
- });
97
- }
98
- return acc;
99
- }, []);
100
- };
101
- var renderDataDetail = function (domainId) {
102
- return mergedData(subCampaigns
103
- .map(function (subCampaign) {
104
- return subCampaign.ads
105
- .map(function (ad) {
106
- var _a;
107
- var isDomain = (_a = ad === null || ad === void 0 ? void 0 : ad.places) === null || _a === void 0 ? void 0 : _a.find(function (place) {
108
- return place.domainId === domainId;
109
- });
110
- if (isDomain) {
111
- return {
112
- linkPreview: renderLinkPreview(ad, domainId),
113
- campaign: [
114
- {
115
- subCampaigns: [
116
- {
117
- id: subCampaign
118
- .campaignGroup.id,
119
- name: subCampaign
120
- .campaignGroup.name,
121
- },
122
- ],
123
- ads: [
124
- {
125
- id: ad.id,
126
- name: ad.name,
127
- },
128
- ],
129
- },
130
- ],
131
- loginId: ad.loginId,
132
- welcomeId: ad.welcomeId,
133
- description: '',
134
- status: 0,
135
- };
136
- }
137
- })
138
- .filter(Boolean);
139
- })
140
- .flat()
141
- .filter(Boolean));
142
- };
36
+ var _a = (0, react_1.useState)([]), rowSelected = _a[0], setRowSelected = _a[1];
37
+ var _b = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalTableState), campaignApprovalTable = _b[0], setCampaignApprovalTable = _b[1];
143
38
  var handleRowSelect = (0, react_1.useCallback)(function (id) {
144
39
  setRowSelected(function (pre) {
145
40
  return pre.includes(id) ? pre.filter(function (x) { return x !== id; }) : __spreadArray(__spreadArray([], pre, true), [id], false);
146
41
  });
147
42
  }, []);
148
43
  var updateRow = (0, react_1.useCallback)(function (dataUpdate, rowId, linkId) {
149
- setDataTable(function (pre) {
44
+ setCampaignApprovalTable(function (pre) {
150
45
  return pre.map(function (item) {
151
46
  if (item.id === rowId) {
152
47
  return __assign(__assign({}, item), { detail: item.detail.map(function (detail) {
@@ -160,148 +55,14 @@ function TabApprove() {
160
55
  });
161
56
  });
162
57
  setConfirmExit(true);
163
- }, [setCampaignApproval, dataTable]);
164
- function flattenData(data) {
165
- var flattened = [];
166
- var index = 0;
167
- data.forEach(function (item) {
168
- item.detail.forEach(function (detail) {
169
- detail.campaign.forEach(function (campaign) {
170
- campaign.ads.forEach(function (ad) {
171
- var _a;
172
- flattened.push({
173
- id: index++,
174
- campaignId: campaignId,
175
- domainId: item.domain.domainId,
176
- status: detail.status,
177
- loginId: detail.loginId,
178
- welcomeId: detail.welcomeId,
179
- description: detail.description,
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,
182
- });
183
- });
184
- });
185
- });
186
- });
187
- return flattened;
188
- }
189
- var unflattenData = function (inputData) {
190
- var subCampaignsFlat = subCampaigns.flatMap(function (item) {
191
- var subCampaignId = item.campaignGroup.id;
192
- var subCampaignName = item.campaignGroup.name;
193
- return item.ads.map(function (ad) { return ({
194
- subCampaignId: subCampaignId,
195
- subCampaignName: subCampaignName,
196
- adId: ad.id,
197
- adName: ad.name,
198
- loginId: ad.loginId,
199
- welcomeId: ad.welcomeId,
200
- }); });
201
- });
202
- var findAd = function (subId, adId) {
203
- var ad = subCampaignsFlat.find(function (item) { return item.adId === adId && item.subCampaignId === subId; });
204
- return ad;
205
- };
206
- var groupedData = inputData.reduce(function (acc, item) {
207
- var _a, _b, _c;
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,
213
- domain: {
214
- domainName: domain === null || domain === void 0 ? void 0 : domain.name,
215
- domainId: domain === null || domain === void 0 ? void 0 : domain.domainId,
216
- },
217
- detail: [],
218
- };
219
- }
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; });
244
- if (!subCampaign) {
245
- var sub = subCampaigns.find(function (subCampaign) {
246
- return subCampaign.campaignGroup.id ===
247
- item.campaignGroupId;
248
- });
249
- subCampaign = {
250
- subCampaigns: [
251
- {
252
- id: sub.campaignGroup.id,
253
- name: sub.campaignGroup.name,
254
- },
255
- ],
256
- ads: [],
257
- };
258
- campaign.push(subCampaign);
259
- }
260
- subCampaign.ads.push({
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 : '',
263
- });
264
- return acc;
265
- }, {});
266
- return Object.values(groupedData);
267
- };
58
+ }, [campaignApprovalTable]);
268
59
  var handleSelectAll = (0, react_1.useCallback)(function () {
269
60
  setRowSelected(function (pre) {
270
- return pre.length < dataTable.length
271
- ? dataTable.map(function (item) { return item.id; })
61
+ return pre.length < campaignApprovalTable.length
62
+ ? campaignApprovalTable.map(function (item) { return item.id; })
272
63
  : [];
273
64
  });
274
- }, [dataTable]);
275
- (0, react_1.useEffect)(function () {
276
- if (!domains.length)
277
- return setDataTable([]);
278
- var data;
279
- if (campaignApproval === null || campaignApproval === void 0 ? void 0 : campaignApproval.length) {
280
- return setDataTable(unflattenData(campaignApproval));
281
- }
282
- data = domains.map(function (domain) {
283
- return {
284
- id: domain.domainId,
285
- domain: {
286
- domainName: domain.name,
287
- domainId: domain.domainId,
288
- },
289
- detail: renderDataDetail(domain.domainId),
290
- };
291
- });
292
- return setDataTable(data);
293
- }, [domains]);
294
- (0, react_1.useEffect)(function () {
295
- if (domainIds.length > 0) {
296
- service.domainsGetByIds &&
297
- service.domainsGetByIds(domainIds).then(setDomains);
298
- }
299
- }, [domainIds]);
300
- (0, react_1.useEffect)(function () {
301
- if (dataTable.length > 0) {
302
- setCampaignApproval(flattenData(dataTable));
303
- }
304
- }, [dataTable]);
65
+ }, [campaignApprovalTable]);
305
66
  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: {
306
67
  margin: '1rem',
307
68
  }, children: t('Campaign.Approval.SendEmail') }), (0, jsx_runtime_1.jsxs)(material_1.Table, { sx: {
@@ -310,8 +71,10 @@ function TabApprove() {
310
71
  border: 'none !important',
311
72
  },
312
73
  }, children: [(0, jsx_runtime_1.jsx)(material_1.TableHead, { children: (0, jsx_runtime_1.jsxs)(material_1.TableRow, { style: { height: 57 }, children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { style: { width: 60, padding: '0 0 0 4px' }, children: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { indeterminate: rowSelected.length > 0 &&
313
- rowSelected.length < dataTable.length, checked: rowSelected.length > 0 &&
314
- 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.Advertisement') }), (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 (row) {
74
+ rowSelected.length <
75
+ campaignApprovalTable.length, checked: rowSelected.length > 0 &&
76
+ rowSelected.length ===
77
+ campaignApprovalTable.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.Advertisement') }), (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: campaignApprovalTable.map(function (row) {
315
78
  return row.detail.map(function (link, linkIndex) {
316
79
  return link.campaign.map(function (sub, subIndex) { return ((0, jsx_runtime_1.jsx)(RowTable_1.default, { row: row, link: link, sub: sub, linkIndex: linkIndex, subIndex: subIndex, rowSelected: rowSelected, handleRowSelect: handleRowSelect, updateRow: updateRow }, "".concat(row.id, "-").concat(linkIndex, "-").concat(subIndex))); });
317
80
  });
@@ -62,6 +62,7 @@ var TabStatistic_1 = __importDefault(require("./TabStatistic"));
62
62
  var Enum_2 = require("../../../ACM-AXN/Common/Enum");
63
63
  var Context_1 = require("../../../Context");
64
64
  var TabApprove_1 = __importDefault(require("./TabApprove"));
65
+ var RunInBackground_1 = __importDefault(require("./TabApprove/RunInBackground"));
65
66
  var CreateOrEdit = function (props) {
66
67
  var _a;
67
68
  var _b = (0, Router_1.useParams)(), campaignId = _b.campaignId, tabName = _b.tabName;
@@ -320,28 +321,28 @@ var CreateOrEdit = function (props) {
320
321
  flexDirection: 'column',
321
322
  flexGrow: 1,
322
323
  padding: function (theme) { return theme.spacing(3); },
323
- }, children: loading ? ((0, jsx_runtime_1.jsx)(AWING_1.CircularProgress, {})) : ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, component: material_1.Paper, sx: { width: '100%', padding: 0 }, children: (0, jsx_runtime_1.jsxs)(lab_1.TabContext, { value: value, children: [(0, jsx_runtime_1.jsx)(material_1.Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: (0, jsx_runtime_1.jsx)(lab_1.TabList, { variant: "scrollable", onChange: handleChangeTab, "aria-label": "lab API tabs example", children: tabsList.map(function (tab, idx) { return ((0, jsx_runtime_1.jsx)(material_1.Tab, { sx: { minWidth: '160px' }, value: String(idx), label: (0, jsx_runtime_1.jsx)(TabLabel_1.default, { content: (0, jsx_runtime_1.jsx)("div", { style: {
324
- fontWeight: 600,
325
- fontSize: '0.875rem',
326
- }, children: tab.label }), error: (tab === null || tab === void 0 ? void 0 : tab.valid)
327
- ? !tabValid[tab === null || tab === void 0 ? void 0 : tab.valid]
328
- : undefined, errContent: (0, jsx_runtime_1.jsx)("span", { style: {
329
- marginLeft: '-5px',
330
- }, children: "*" }) }) }, idx)); }) }) }), campaignData.campaignWizard && !editModeWizard &&
331
- (props === null || props === void 0 ? void 0 : props.quickWizard) ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [props === null || props === void 0 ? void 0 : props.quickWizard({
332
- ref: childRefWizard,
333
- onSubmitWizard: handleSubmit,
334
- handleValidWizad: setValidWizad,
335
- handleEditMode: setEditModeWizard,
336
- sxEdit: {
337
- display: value === '0'
338
- ? 'block'
339
- : 'none',
340
- },
341
- type: props.type,
342
- }), tabsList.map(function (tab, idx) {
343
- return idx !== 0 && ((0, jsx_runtime_1.jsx)(lab_1.TabPanel, { sx: { padding: '0' }, value: String(idx), children: tab.component }, idx));
344
- })] })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: tabsList.map(function (tab, idx) { return ((0, jsx_runtime_1.jsx)(lab_1.TabPanel, { sx: { padding: '0' }, value: String(idx), children: tab.component }, idx)); }) }))] }) })) }) }));
324
+ }, children: loading ? ((0, jsx_runtime_1.jsx)(AWING_1.CircularProgress, {})) : ((0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, component: material_1.Paper, sx: { width: '100%', padding: 0 }, children: [(0, jsx_runtime_1.jsxs)(lab_1.TabContext, { value: value, children: [(0, jsx_runtime_1.jsx)(material_1.Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: (0, jsx_runtime_1.jsx)(lab_1.TabList, { variant: "scrollable", onChange: handleChangeTab, "aria-label": "lab API tabs example", children: tabsList.map(function (tab, idx) { return ((0, jsx_runtime_1.jsx)(material_1.Tab, { sx: { minWidth: '160px' }, value: String(idx), label: (0, jsx_runtime_1.jsx)(TabLabel_1.default, { content: (0, jsx_runtime_1.jsx)("div", { style: {
325
+ fontWeight: 600,
326
+ fontSize: '0.875rem',
327
+ }, children: tab.label }), error: (tab === null || tab === void 0 ? void 0 : tab.valid)
328
+ ? !tabValid[tab === null || tab === void 0 ? void 0 : tab.valid]
329
+ : undefined, errContent: (0, jsx_runtime_1.jsx)("span", { style: {
330
+ marginLeft: '-5px',
331
+ }, children: "*" }) }) }, idx)); }) }) }), campaignData.campaignWizard && !editModeWizard &&
332
+ (props === null || props === void 0 ? void 0 : props.quickWizard) ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [props === null || props === void 0 ? void 0 : props.quickWizard({
333
+ ref: childRefWizard,
334
+ onSubmitWizard: handleSubmit,
335
+ handleValidWizad: setValidWizad,
336
+ handleEditMode: setEditModeWizard,
337
+ sxEdit: {
338
+ display: value === '0'
339
+ ? 'block'
340
+ : 'none',
341
+ },
342
+ type: props.type,
343
+ }), tabsList.map(function (tab, idx) {
344
+ return idx !== 0 && ((0, jsx_runtime_1.jsx)(lab_1.TabPanel, { sx: { padding: '0' }, value: String(idx), children: tab.component }, idx));
345
+ })] })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: tabsList.map(function (tab, idx) { return ((0, jsx_runtime_1.jsx)(lab_1.TabPanel, { sx: { padding: '0' }, value: String(idx), children: tab.component }, idx)); }) }))] }), (0, jsx_runtime_1.jsx)(RunInBackground_1.default, {})] })) }) }));
345
346
  };
346
347
  // eslint-disable-next-line import/no-anonymous-default-export
347
348
  exports.default = (0, Wrapper_1.default)(CreateOrEdit, { component: recoil_1.RecoilRoot });
@@ -290,4 +290,30 @@ export interface CampaignFeatureProps {
290
290
  isAxn?: boolean;
291
291
  quickWizard?: (p?: any) => JSX.Element;
292
292
  }
293
+ interface ICampaignApprovalItemSubRow {
294
+ id?: number;
295
+ name?: string;
296
+ }
297
+ export interface ICampaignApprovalSubRow {
298
+ subCampaigns: ICampaignApprovalItemSubRow[];
299
+ ads: ICampaignApprovalItemSubRow[];
300
+ }
301
+ export interface ICampaignApprovalTableRow {
302
+ id?: string;
303
+ status: number;
304
+ linkPreview: string;
305
+ subCampaigns?: ICampaignApprovalItemSubRow[];
306
+ loginId?: string;
307
+ welcomeId?: string;
308
+ campaign: ICampaignApprovalSubRow[];
309
+ description: string;
310
+ }
311
+ export interface ICampaignApprovalTable {
312
+ id: string;
313
+ domain: {
314
+ domainName?: string;
315
+ domainId?: string;
316
+ };
317
+ detail: ICampaignApprovalTableRow[];
318
+ }
293
319
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awing-library",
3
- "version": "2.1.226-dev",
3
+ "version": "2.1.227-dev",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",