awing-library 2.1.226-dev → 2.1.228-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,29 @@ 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");
33
+ var Router_1 = require("../../../../AWING/Router");
34
+ var Hooks_1 = __importDefault(require("../../../../ACM-AXN/Campaign/Hooks"));
35
+ var Context_1 = require("../../../../Context");
38
36
  function TabApprove() {
39
- var t = (0, react_i18next_1.useTranslation)().t;
40
37
  var campaignId = (0, Router_1.useParams)().campaignId;
41
- var _a = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalState), campaignApproval = _a[0], setCampaignApproval = _a[1];
38
+ var t = (0, react_i18next_1.useTranslation)().t;
39
+ var service = (0, Hooks_1.default)().service;
40
+ var snackbar = (0, Context_1.useAwing)().appHelper.snackbar;
42
41
  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
- };
42
+ var _a = (0, react_1.useState)([]), rowSelected = _a[0], setRowSelected = _a[1];
43
+ var _b = (0, recoil_1.useRecoilState)(Recoils_1.campaignApprovalTableState), campaignApprovalTable = _b[0], setCampaignApprovalTable = _b[1];
143
44
  var handleRowSelect = (0, react_1.useCallback)(function (id) {
144
45
  setRowSelected(function (pre) {
145
46
  return pre.includes(id) ? pre.filter(function (x) { return x !== id; }) : __spreadArray(__spreadArray([], pre, true), [id], false);
146
47
  });
147
48
  }, []);
148
49
  var updateRow = (0, react_1.useCallback)(function (dataUpdate, rowId, linkId) {
149
- setDataTable(function (pre) {
50
+ setCampaignApprovalTable(function (pre) {
150
51
  return pre.map(function (item) {
151
52
  if (item.id === rowId) {
152
53
  return __assign(__assign({}, item), { detail: item.detail.map(function (detail) {
@@ -160,8 +61,8 @@ function TabApprove() {
160
61
  });
161
62
  });
162
63
  setConfirmExit(true);
163
- }, [setCampaignApproval, dataTable]);
164
- function flattenData(data) {
64
+ }, [campaignApprovalTable]);
65
+ var flattenData = (0, react_1.useCallback)(function (data) {
165
66
  var flattened = [];
166
67
  var index = 0;
167
68
  data.forEach(function (item) {
@@ -185,133 +86,35 @@ function TabApprove() {
185
86
  });
186
87
  });
187
88
  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
- };
89
+ }, []);
268
90
  var handleSelectAll = (0, react_1.useCallback)(function () {
269
91
  setRowSelected(function (pre) {
270
- return pre.length < dataTable.length
271
- ? dataTable.map(function (item) { return item.id; })
92
+ return pre.length < campaignApprovalTable.length
93
+ ? campaignApprovalTable.map(function (item) { return item.id; })
272
94
  : [];
273
95
  });
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
- };
96
+ }, [campaignApprovalTable]);
97
+ var handleSendMail = (0, react_1.useCallback)(function () {
98
+ var data = campaignApprovalTable.filter(function (item) {
99
+ return rowSelected.includes(item.id);
291
100
  });
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]);
101
+ service.campaignsManualSendMail && service.campaignsManualSendMail(campaignId, flattenData(data)).then(function () {
102
+ setRowSelected([]);
103
+ snackbar('success');
104
+ });
105
+ }, [campaignApprovalTable, rowSelected]);
305
106
  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
107
  margin: '1rem',
307
- }, children: t('Campaign.Approval.SendEmail') }), (0, jsx_runtime_1.jsxs)(material_1.Table, { sx: {
108
+ }, onClick: handleSendMail, children: t('Campaign.Approval.SendEmail') }), (0, jsx_runtime_1.jsxs)(material_1.Table, { sx: {
308
109
  boxShadow: 'none',
309
110
  '.MuiOutlinedInput-notchedOutline': {
310
111
  border: 'none !important',
311
112
  },
312
113
  }, 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) {
114
+ rowSelected.length <
115
+ campaignApprovalTable.length, checked: rowSelected.length > 0 &&
116
+ rowSelected.length ===
117
+ 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
118
  return row.detail.map(function (link, linkIndex) {
316
119
  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
120
  });
@@ -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 });
@@ -280,6 +280,7 @@ interface CampaignService extends PrmissionService {
280
280
  deviceInfoGetAllRuleOsVersions: () => Promise<RuleOsVersion[]>;
281
281
  deviceInfoGetAllRuleDevices: () => Promise<RuleDevice[]>;
282
282
  attributesGetByObjectTypeCode?: (objectTypeCode: string) => Promise<Attribute[]>;
283
+ campaignsManualSendMail?: (campaignId: string, body: CampaignApproval[]) => Promise<void>;
283
284
  }
284
285
  export interface CampaignFeatureProps {
285
286
  service: CampaignService & PageService & CampaignAnalyticService;
@@ -290,4 +291,30 @@ export interface CampaignFeatureProps {
290
291
  isAxn?: boolean;
291
292
  quickWizard?: (p?: any) => JSX.Element;
292
293
  }
294
+ interface ICampaignApprovalItemSubRow {
295
+ id?: number;
296
+ name?: string;
297
+ }
298
+ export interface ICampaignApprovalSubRow {
299
+ subCampaigns: ICampaignApprovalItemSubRow[];
300
+ ads: ICampaignApprovalItemSubRow[];
301
+ }
302
+ export interface ICampaignApprovalTableRow {
303
+ id?: string;
304
+ status: number;
305
+ linkPreview: string;
306
+ subCampaigns?: ICampaignApprovalItemSubRow[];
307
+ loginId?: string;
308
+ welcomeId?: string;
309
+ campaign: ICampaignApprovalSubRow[];
310
+ description: string;
311
+ }
312
+ export interface ICampaignApprovalTable {
313
+ id: string;
314
+ domain: {
315
+ domainName?: string;
316
+ domainId?: string;
317
+ };
318
+ detail: ICampaignApprovalTableRow[];
319
+ }
293
320
  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.228-dev",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",