awing-library 2.1.108-beta → 2.1.110-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ACM-AXN/Campaign/CreateOrEdit/Recoils.js +1 -0
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdDetail.js +1 -1
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/EditAds.js +0 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.js +152 -61
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.test.js +1 -0
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/index.js +4 -2
- package/lib/ACM-AXN/Campaign/Types.d.ts +6 -4
- package/lib/ACM-AXN/Campaign/Types.js +7 -6
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +17 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/index.js +3 -4
- package/lib/ACM-AXN/Page/CreateOrEdit/Utils.js +1 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/index.js +66 -2
- package/lib/ACM-AXN/ViewTemplate/container.js +3 -2
- package/lib/ACM-AXN/ViewTemplate/interface.d.ts +1 -1
- package/lib/AWING/DataForm/DataInput.js +1 -1
- package/lib/translate/en/translation.json +10 -2
- package/lib/translate/vi/translation.json +10 -2
- package/package.json +1 -1
|
@@ -174,7 +174,7 @@ function AdDetail(props) {
|
|
|
174
174
|
});
|
|
175
175
|
}, handleValid: function (valid) {
|
|
176
176
|
return setAdValid(function (pre) { return (__assign(__assign({}, pre), { dateRange: valid })); });
|
|
177
|
-
}, textFieldProps: { fullWidth: true, required: true }
|
|
177
|
+
}, textFieldProps: { fullWidth: true, required: true } }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: true, style: { padding: 8 }, children: (0, jsx_runtime_1.jsx)(PlaceMultiSelect, { isCreateCampaign: true, defaultValue: ad.placeFilter, onDetailSubmit: function (places, placeFilter) {
|
|
178
178
|
handleChangeStatus('placeFilter', (0, Utils_1.placeFilterValid)(placeFilter, places));
|
|
179
179
|
onChange(function (pre) { return (__assign(__assign({}, pre), { placeFilter: placeFilter, places: places })); });
|
|
180
180
|
}, TextFieldProps: {
|
|
@@ -15,7 +15,6 @@ var Utils_1 = require("../../Utils");
|
|
|
15
15
|
var Helpers_1 = require("../../../../Utils/Helpers");
|
|
16
16
|
var ClassicBaseDrawer_1 = __importDefault(require("../../../../Commons/Components/ClassicBaseDrawer"));
|
|
17
17
|
var Context_1 = require("../../../../Context");
|
|
18
|
-
var moment_1 = __importDefault(require("moment"));
|
|
19
18
|
function EditAds(props) {
|
|
20
19
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
21
20
|
var PlaceFilterField = (0, Hooks_1.default)().placeMultiSelectComponent;
|
|
@@ -77,7 +76,6 @@ function EditAds(props) {
|
|
|
77
76
|
type: 'date-range',
|
|
78
77
|
label: t('Campaign.Ad.Time'),
|
|
79
78
|
required: true,
|
|
80
|
-
isDayBlocked: function (day) { return (0, moment_1.default)().startOf('day').valueOf() > day.valueOf(); }
|
|
81
79
|
},
|
|
82
80
|
{
|
|
83
81
|
fieldName: 'isReserved',
|
|
@@ -10,99 +10,190 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
13
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
37
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
15
|
-
var react_1 = require("react");
|
|
38
|
+
var react_1 = __importStar(require("react"));
|
|
16
39
|
var recoil_1 = require("recoil");
|
|
17
40
|
var react_i18next_1 = require("react-i18next");
|
|
18
|
-
var material_1 = require("@mui/material");
|
|
19
41
|
// import { CampaignGroup, CampaignTicket } from '../../types'
|
|
20
42
|
var lodash_1 = require("lodash");
|
|
21
43
|
var Types_1 = require("../../Types");
|
|
22
44
|
var Utils_1 = require("../../Utils");
|
|
23
45
|
var Recoils_1 = require("../Recoils");
|
|
46
|
+
var AWING_1 = require("../../../../AWING");
|
|
24
47
|
function SubCampaignDetail(props) {
|
|
25
48
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
26
49
|
var subCampaign = props.subCampaign, onSubCampaignChange = props.onSubCampaignChange, onChangeSubCampaignStatus = props.onChangeSubCampaignStatus;
|
|
27
|
-
var getFormValid = function () { return (
|
|
28
|
-
name:
|
|
29
|
-
|
|
30
|
-
(0, Utils_1.
|
|
31
|
-
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
50
|
+
var getFormValid = function () { return ({
|
|
51
|
+
name: (0, Utils_1.nameValid)(subCampaign.name),
|
|
52
|
+
bookingAmount: !(0, Utils_1.checkPriority)(subCampaign.priority, Types_1.CampaignPriority.ClassB) || (0, Utils_1.bookingValid)(subCampaign.bookingAmount),
|
|
53
|
+
bonusAmount: (0, Utils_1.bonusValid)(subCampaign.bonusAmount),
|
|
54
|
+
billingUnit: subCampaign.billingUnit !== null,
|
|
55
|
+
}); };
|
|
56
|
+
var cacheSubId = react_1.default.useRef();
|
|
57
|
+
(0, react_1.useEffect)(function () {
|
|
58
|
+
cacheSubId.current = subCampaign.id;
|
|
59
|
+
return function () {
|
|
60
|
+
cacheSubId.current = undefined;
|
|
61
|
+
};
|
|
62
|
+
}, [subCampaign.id]);
|
|
36
63
|
var isCreate = (0, recoil_1.useRecoilValue)(Recoils_1.isCreateState);
|
|
37
64
|
(0, react_1.useEffect)(function () {
|
|
38
|
-
setSubValid(getFormValid());
|
|
39
65
|
onSubCampaignChange(function (prev) { return (0, lodash_1.cloneDeep)(prev); });
|
|
40
66
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
-
}, [subCampaign.id]);
|
|
67
|
+
}, [subCampaign.id, onSubCampaignChange]);
|
|
42
68
|
(0, react_1.useEffect)(function () {
|
|
43
|
-
onChangeSubCampaignStatus(
|
|
69
|
+
onChangeSubCampaignStatus(Object.values(getFormValid()).every(Boolean));
|
|
44
70
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
-
}, [
|
|
71
|
+
}, [subCampaign]);
|
|
46
72
|
/**
|
|
47
73
|
* Hàm cập nhật trạng thái các trường của chiến dịch con
|
|
48
74
|
* @param fieldName Tên trường cần cập nhật
|
|
49
75
|
* @param status Trạng thái mới
|
|
50
76
|
*/
|
|
51
|
-
var handleChangeStatus = function (fieldName, status) {
|
|
52
|
-
if (subValid[fieldName] !== status)
|
|
53
|
-
setSubValid(function (pre) {
|
|
54
|
-
var _a;
|
|
55
|
-
return (__assign(__assign({}, pre), (_a = {}, _a[fieldName] = status, _a)));
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
77
|
var translationText = {
|
|
59
78
|
name: t('Campaign.Name'),
|
|
60
79
|
ticket: t('Campaign.Ticket'),
|
|
80
|
+
BillingUnit: t('Campaign.BillingUnit.Title'),
|
|
61
81
|
priority: t('Campaign.Detail.Priority'),
|
|
62
82
|
booking: t('Campaign.BookingText'),
|
|
63
83
|
bonus: t('Campaign.BonusText'),
|
|
64
84
|
reserved: t('Campaign.Reserved'),
|
|
65
85
|
none: t('Common.None'),
|
|
66
86
|
helperText: t('Common.Required'),
|
|
87
|
+
notNegative: t('Common.NotNegative'),
|
|
67
88
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
89
|
+
var fields = react_1.default.useMemo(function () {
|
|
90
|
+
var tempField = [
|
|
91
|
+
{
|
|
92
|
+
fieldName: 'name',
|
|
93
|
+
type: 'text',
|
|
94
|
+
label: translationText.name,
|
|
95
|
+
required: true,
|
|
96
|
+
gridSize: 4,
|
|
97
|
+
pattern: false,
|
|
98
|
+
length: 500,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
fieldName: 'ticket',
|
|
102
|
+
type: 'select',
|
|
103
|
+
label: translationText.ticket,
|
|
104
|
+
required: true,
|
|
105
|
+
gridSize: 4,
|
|
106
|
+
disabled: isCreate,
|
|
107
|
+
options: [
|
|
108
|
+
{
|
|
109
|
+
text: t('Campaign.Active'),
|
|
110
|
+
value: Types_1.CampaignTicket.ACTIVE,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
text: t('Campaign.InActive'),
|
|
114
|
+
value: Types_1.CampaignTicket.INACTIVE,
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
fieldName: 'priority',
|
|
120
|
+
type: 'select',
|
|
121
|
+
gridSize: 4,
|
|
122
|
+
label: translationText.priority,
|
|
123
|
+
required: true,
|
|
124
|
+
options: Object.values(Types_1.CampaignPriority).map(function (priority) { return ({
|
|
125
|
+
text: t("Campaign.".concat(priority)),
|
|
126
|
+
value: priority,
|
|
127
|
+
}); }),
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
if ((0, Utils_1.checkPriority)(subCampaign.priority, Types_1.CampaignPriority.ClassB)) {
|
|
131
|
+
tempField.push({
|
|
132
|
+
fieldName: 'bookingAmount',
|
|
133
|
+
type: 'number',
|
|
134
|
+
gridSize: 4,
|
|
135
|
+
required: true,
|
|
136
|
+
label: translationText.booking,
|
|
137
|
+
InputProps: {
|
|
138
|
+
type: 'number',
|
|
139
|
+
},
|
|
140
|
+
onValidate: function (value) { return (0, Utils_1.bookingValid)(Number(value)); },
|
|
141
|
+
}, {
|
|
142
|
+
fieldName: 'bonusAmount',
|
|
143
|
+
type: 'number',
|
|
144
|
+
gridSize: 4,
|
|
145
|
+
required: true,
|
|
146
|
+
label: translationText.booking,
|
|
147
|
+
InputProps: {
|
|
148
|
+
type: 'number',
|
|
149
|
+
},
|
|
150
|
+
onValidate: function (value) { return (0, Utils_1.bonusValid)(Number(value)); },
|
|
151
|
+
}, {
|
|
152
|
+
fieldName: 'billingUnit',
|
|
153
|
+
type: 'select',
|
|
154
|
+
gridSize: 4,
|
|
155
|
+
label: translationText.BillingUnit,
|
|
156
|
+
required: true,
|
|
157
|
+
value: String(subCampaign.billingUnit),
|
|
158
|
+
onValidate: function (value) { return value !== null; },
|
|
159
|
+
options: Object.values(Types_1.AnalyticType)
|
|
160
|
+
.filter(function (item) { return !isNaN(Number(item)); })
|
|
161
|
+
.map(function (item) { return ({
|
|
162
|
+
text: t("Campaign.BillingUnit.".concat((0, lodash_1.capitalize)((0, lodash_1.camelCase)(Types_1.AnalyticType[item])))),
|
|
163
|
+
value: item,
|
|
164
|
+
}); }),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
tempField.push({
|
|
168
|
+
fieldName: 'isReserved',
|
|
169
|
+
type: 'checkbox',
|
|
170
|
+
gridSize: 4,
|
|
171
|
+
label: translationText.reserved,
|
|
172
|
+
});
|
|
173
|
+
return tempField;
|
|
174
|
+
},
|
|
175
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
176
|
+
[subCampaign]);
|
|
177
|
+
var handleUpdate = react_1.default.useCallback(function (data, valid, fieldName) {
|
|
178
|
+
if (!fieldName || cacheSubId.current !== subCampaign.id)
|
|
179
|
+
return;
|
|
180
|
+
onSubCampaignChange(function (pre) {
|
|
181
|
+
var _a;
|
|
182
|
+
return fieldName === 'priority'
|
|
183
|
+
? __assign(__assign(__assign(__assign({}, pre), { priority: data[fieldName] }), ((0, Utils_1.checkPriority)(data[fieldName], Types_1.CampaignPriority.ClassB)
|
|
184
|
+
? {
|
|
185
|
+
bookingAmount: 10,
|
|
186
|
+
billingUnit: null,
|
|
187
|
+
}
|
|
188
|
+
: {
|
|
189
|
+
bookingAmount: 0,
|
|
190
|
+
billingUnit: 0,
|
|
191
|
+
})), { bonusAmount: 0 }) : __assign(__assign({}, pre), (_a = {}, _a[fieldName] = data[fieldName], _a));
|
|
192
|
+
});
|
|
193
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
194
|
+
}, [subCampaign.id, onSubCampaignChange]);
|
|
195
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(AWING_1.DataForm, { padding: "none", fields: fields, oldValue: __assign(__assign({}, subCampaign), { priority: isNaN(Number(subCampaign.priority))
|
|
196
|
+
? subCampaign.priority
|
|
197
|
+
: Object.values(Types_1.CampaignPriority)[subCampaign.priority] }), onUpdate: handleUpdate }) }));
|
|
107
198
|
}
|
|
108
199
|
exports.default = SubCampaignDetail;
|
|
@@ -26,6 +26,7 @@ var subCampaignMock = {
|
|
|
26
26
|
ticket: Types_1.CampaignTicket.INACTIVE,
|
|
27
27
|
priority: Types_1.CampaignPriority.ClassB,
|
|
28
28
|
isReserved: false,
|
|
29
|
+
billingUnit: 1,
|
|
29
30
|
};
|
|
30
31
|
describe('<SubCampaignDetail />', function () {
|
|
31
32
|
it('should render with correct information classB', function () {
|
|
@@ -26,6 +26,7 @@ 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
28
|
var lodash_1 = __importDefault(require("lodash"));
|
|
29
|
+
var react_1 = __importDefault(require("react"));
|
|
29
30
|
var recoil_1 = require("recoil");
|
|
30
31
|
var Recoils_1 = require("../Recoils");
|
|
31
32
|
var Types_1 = require("../../Types");
|
|
@@ -103,7 +104,7 @@ function TabSubCampaign() {
|
|
|
103
104
|
* Cập nhật chiến dịch con
|
|
104
105
|
* @param subCampaignSetStateAction Thông tin thay đổi của chiến dịch con
|
|
105
106
|
*/
|
|
106
|
-
var handleUpdateSubCampaign = function (subCampaignSetStateAction) {
|
|
107
|
+
var handleUpdateSubCampaign = react_1.default.useCallback(function (subCampaignSetStateAction) {
|
|
107
108
|
setSubCampaigns(function (preSubCampains) {
|
|
108
109
|
var newSubCampaigns = lodash_1.default.cloneDeep(preSubCampains);
|
|
109
110
|
var selectedSubCampaignIndex = newSubCampaigns.findIndex(function (x) { return x.campaignGroup.id === selectedSubCampaignId[0]; });
|
|
@@ -120,7 +121,8 @@ function TabSubCampaign() {
|
|
|
120
121
|
}
|
|
121
122
|
return newSubCampaigns;
|
|
122
123
|
});
|
|
123
|
-
|
|
124
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
125
|
+
}, [selectedSubCampaignId]);
|
|
124
126
|
/**
|
|
125
127
|
* Tạo quảng cáo mới
|
|
126
128
|
* @param newAd Thông tin của quảng cáo mới
|
|
@@ -79,6 +79,7 @@ export type CampaignGroup = {
|
|
|
79
79
|
* Đánh dấu nhóm chiến dịch không được xoá
|
|
80
80
|
*/
|
|
81
81
|
cantBeDelete?: boolean;
|
|
82
|
+
billingUnit: AnalyticType;
|
|
82
83
|
};
|
|
83
84
|
export type CampaignAd = {
|
|
84
85
|
id: number;
|
|
@@ -215,6 +216,11 @@ export declare enum CampaignPriority {
|
|
|
215
216
|
ClassB = "ClassB",
|
|
216
217
|
ClassC = "ClassC"
|
|
217
218
|
}
|
|
219
|
+
export declare enum AnalyticType {
|
|
220
|
+
VIEW = 0,// Impression
|
|
221
|
+
AUTHENTICATION = 1,// Engagement / Spot
|
|
222
|
+
CLICK = 2
|
|
223
|
+
}
|
|
218
224
|
export declare enum CampaignTicket {
|
|
219
225
|
ACTIVE = 0,
|
|
220
226
|
INACTIVE = 1
|
|
@@ -277,10 +283,6 @@ export declare enum Operator {
|
|
|
277
283
|
*/
|
|
278
284
|
In = 7
|
|
279
285
|
}
|
|
280
|
-
export declare enum AnalyticType {
|
|
281
|
-
AnalyticView = 1,
|
|
282
|
-
AnalyticEvent = 2
|
|
283
|
-
}
|
|
284
286
|
export interface IPagedListOfCampaignModel {
|
|
285
287
|
items: CampaignModel[];
|
|
286
288
|
pageCount: number;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Operator = exports.CampaignRuleType = exports.AdType = exports.CampaignTicket = exports.AnalyticType = exports.CampaignPriority = void 0;
|
|
4
4
|
var CampaignPriority;
|
|
5
5
|
(function (CampaignPriority) {
|
|
6
6
|
CampaignPriority["ClassA"] = "ClassA";
|
|
7
7
|
CampaignPriority["ClassB"] = "ClassB";
|
|
8
8
|
CampaignPriority["ClassC"] = "ClassC";
|
|
9
9
|
})(CampaignPriority || (exports.CampaignPriority = CampaignPriority = {}));
|
|
10
|
+
var AnalyticType;
|
|
11
|
+
(function (AnalyticType) {
|
|
12
|
+
AnalyticType[AnalyticType["VIEW"] = 0] = "VIEW";
|
|
13
|
+
AnalyticType[AnalyticType["AUTHENTICATION"] = 1] = "AUTHENTICATION";
|
|
14
|
+
AnalyticType[AnalyticType["CLICK"] = 2] = "CLICK";
|
|
15
|
+
})(AnalyticType || (exports.AnalyticType = AnalyticType = {}));
|
|
10
16
|
var CampaignTicket;
|
|
11
17
|
(function (CampaignTicket) {
|
|
12
18
|
CampaignTicket[CampaignTicket["ACTIVE"] = 0] = "ACTIVE";
|
|
@@ -74,8 +80,3 @@ var Operator;
|
|
|
74
80
|
*/
|
|
75
81
|
Operator[Operator["In"] = 7] = "In";
|
|
76
82
|
})(Operator || (exports.Operator = Operator = {}));
|
|
77
|
-
var AnalyticType;
|
|
78
|
-
(function (AnalyticType) {
|
|
79
|
-
AnalyticType[AnalyticType["AnalyticView"] = 1] = "AnalyticView";
|
|
80
|
-
AnalyticType[AnalyticType["AnalyticEvent"] = 2] = "AnalyticEvent";
|
|
81
|
-
})(AnalyticType || (exports.AnalyticType = AnalyticType = {}));
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -170,6 +181,11 @@ var ViewContent = function (_a) {
|
|
|
170
181
|
onChange(['validProcessStatus'], processValue);
|
|
171
182
|
}, onNotifyError: function (errorMessage) {
|
|
172
183
|
appHelper.snackbar('error', errorMessage);
|
|
173
|
-
}, onUploadFile: onUploadFile
|
|
184
|
+
}, onUploadFile: onUploadFile, onChangeEvent: function (values) {
|
|
185
|
+
setEvent(function (prev) {
|
|
186
|
+
return prev.filter(function (item) { return item.viewNumber !== viewNumber + 1; }).concat(values.map(function (value) { return (__assign(__assign({}, value), { viewNumber: viewNumber + 1, pageId: pageId })); }));
|
|
187
|
+
});
|
|
188
|
+
isUniq.current = false;
|
|
189
|
+
} }) }) })) })) }));
|
|
174
190
|
};
|
|
175
191
|
exports.default = ViewContent;
|
|
@@ -57,10 +57,9 @@ var TabView = function (_a) {
|
|
|
57
57
|
var isCreate = _a.isCreate;
|
|
58
58
|
var _b = (0, recoil_1.useRecoilState)((0, Recoil_1.pageState)('views')), _c = _b[0], views = _c.views, page = _c.page, setView = _b[1];
|
|
59
59
|
var _d = react_1.default.useState(0), activeViewIndex = _d[0], setActiveViewIndex = _d[1];
|
|
60
|
-
var _e = react_1.default.useState(
|
|
61
|
-
var _f = react_1.default.useState([]),
|
|
62
|
-
var _g =
|
|
63
|
-
var _h = (0, Context_1.default)(), service = _h.service, pageCode = _h.pageCode;
|
|
60
|
+
var _e = react_1.default.useState([]), directories = _e[0], setDirectories = _e[1];
|
|
61
|
+
var _f = react_1.default.useState([]), templateTypes = _f[0], setTemplateTypes = _f[1];
|
|
62
|
+
var _g = (0, Context_1.default)(), service = _g.service, pageCode = _g.pageCode;
|
|
64
63
|
var appHelper = (0, Context_2.useAwing)().appHelper;
|
|
65
64
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
66
65
|
react_1.default.useEffect(function () {
|
|
@@ -218,7 +218,7 @@ function updateStateByPageModel(pageModel) {
|
|
|
218
218
|
fieldsRequireStatus: false,
|
|
219
219
|
isChanged: false,
|
|
220
220
|
verifiedStatus: enums_1.VERIFIED_STATUS.NOT_VERIFIED,
|
|
221
|
-
}); });
|
|
221
|
+
}); }).sort(function (view1, view2) { return view1.viewDatas.at(-1).viewNumber - view2.viewDatas.at(-1).viewNumber; });
|
|
222
222
|
draft.page = page;
|
|
223
223
|
draft.commonHtml = commonHtml;
|
|
224
224
|
draft.viewEvents = viewEvents;
|
|
@@ -22,6 +22,42 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
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;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
25
61
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
62
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
63
|
};
|
|
@@ -44,16 +80,20 @@ var Utils_1 = require("./Utils");
|
|
|
44
80
|
var Helpers_1 = require("../../../Utils/Helpers");
|
|
45
81
|
var lodash_1 = require("lodash");
|
|
46
82
|
var Wrapper_1 = __importDefault(require("../../../AWING/HOC/Wrapper"));
|
|
83
|
+
var Context_2 = require("../../../Context");
|
|
47
84
|
var CreateOrEdit = function (_a) {
|
|
48
85
|
var type = _a.type;
|
|
49
86
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
50
87
|
var pageId = (0, react_router_dom_1.useParams)().pageId;
|
|
88
|
+
var na = (0, react_router_dom_1.useNavigate)();
|
|
89
|
+
var appHelper = (0, Context_2.useAwing)().appHelper;
|
|
51
90
|
var _b = (0, Context_1.default)(), service = _b.service, pageCode = _b.pageCode;
|
|
52
91
|
var _c = react_1.default.useState(false), loading = _c[0], setLoading = _c[1];
|
|
92
|
+
var _d = react_1.default.useState(true), isDeprecated = _d[0], setDeprecated = _d[1];
|
|
53
93
|
var setDirectories = (0, recoil_1.useSetRecoilState)(Recoil_1.pageDirectoriesState);
|
|
54
94
|
var formValid = (0, recoil_1.useRecoilValue)(Recoil_1.validForm);
|
|
55
95
|
var pageChangedForm = (0, recoil_1.useRecoilValue)(Recoil_1.pageChangedFormState);
|
|
56
|
-
var
|
|
96
|
+
var _e = (0, recoil_1.useRecoilState)(Recoil_1.pageRootState), pageRoot = _e[0], setPageRoot = _e[1];
|
|
57
97
|
(0, react_1.useEffect)(function () {
|
|
58
98
|
fetchDirectories();
|
|
59
99
|
setPageRoot((0, immer_1.default)(function (draf) {
|
|
@@ -71,11 +111,31 @@ var CreateOrEdit = function (_a) {
|
|
|
71
111
|
else {
|
|
72
112
|
setLoading(true);
|
|
73
113
|
service[type === enums_1.PathType.CLONE ? 'pagesClone' : 'pagesGet'](pageId)
|
|
74
|
-
.then(
|
|
114
|
+
.then(function (res) { return __awaiter(void 0, void 0, void 0, function () {
|
|
115
|
+
var isDeprecated;
|
|
116
|
+
return __generator(this, function (_a) {
|
|
117
|
+
switch (_a.label) {
|
|
118
|
+
case 0: return [4 /*yield*/, checkDeprecated(res.views.map(function (x) { return x.templateId; }))];
|
|
119
|
+
case 1:
|
|
120
|
+
isDeprecated = _a.sent();
|
|
121
|
+
setDeprecated(isDeprecated);
|
|
122
|
+
if (isDeprecated && type === enums_1.PathType.CLONE) {
|
|
123
|
+
na('..', { replace: true });
|
|
124
|
+
appHelper.snackbar('error', t('Page.DeprecatedTemplate'));
|
|
125
|
+
throw new Error(t('Page.DeprecatedTemplate'));
|
|
126
|
+
}
|
|
127
|
+
Utils_1.updateStateByPageModel.call({ setPageRoot: setPageRoot }, res);
|
|
128
|
+
return [2 /*return*/];
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}); })
|
|
75
132
|
.finally(function () { return setLoading(false); });
|
|
76
133
|
}
|
|
77
134
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
135
|
}, []);
|
|
136
|
+
var checkDeprecated = function (templateIds) {
|
|
137
|
+
return Promise.all(templateIds.map(function (id) { return service.templatesGet(id); })).then(function (res) { return res.some(function (x) { return x.template.isDeprecated; }); });
|
|
138
|
+
};
|
|
79
139
|
var fetchDirectories = function () {
|
|
80
140
|
service
|
|
81
141
|
.directoriesGetByObjectTypeCode(Enum_1.DirectoryRoot[pageCode === enums_1.PageCode.Lgn ? 'PageLogin' : 'PageWelcome'])
|
|
@@ -89,6 +149,10 @@ var CreateOrEdit = function (_a) {
|
|
|
89
149
|
});
|
|
90
150
|
};
|
|
91
151
|
var handleSubmit = function () {
|
|
152
|
+
if (isDeprecated) {
|
|
153
|
+
appHelper.snackbar('error', t('Page.DeprecatedTemplate'));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
92
156
|
var params = [pageRoot];
|
|
93
157
|
if (type === enums_1.PathType.EDIT)
|
|
94
158
|
params.unshift(pageId);
|
|
@@ -37,6 +37,7 @@ var react_1 = require("react");
|
|
|
37
37
|
var react_i18next_1 = require("react-i18next");
|
|
38
38
|
var i18n_1 = __importDefault(require("../../i18n"));
|
|
39
39
|
var Form_1 = require("../../AWING/Form");
|
|
40
|
+
var Event_1 = __importDefault(require("./TemplateField/Event"));
|
|
40
41
|
function ViewTemplate(_a) {
|
|
41
42
|
var _b = _a.templateDatas, templateDatas = _b === void 0 ? [] : _b, pagePath = _a.pagePath, _c = _a.enablePreview, enablePreview = _c === void 0 ? true : _c, _d = _a.advanceFields, advanceFields = _d === void 0 ? [] : _d, _e = _a.templateLabelName, templateLabelName = _e === void 0 ? "" : _e, _f = _a.domainId, domainId = _f === void 0 ? "" : _f, _g = _a.validStatus, validStatus = _g === void 0 ? true : _g, _h = _a.scriptAutoField, scriptAutoField = _h === void 0 ? "" : _h, _j = _a.scriptValidate, scriptValidate = _j === void 0 ? "" : _j, configs = _a.configs, onChange = _a.onChange, _k = _a.onChangeViewValid, onChangeViewValid = _k === void 0 ? function (status) {
|
|
42
43
|
console.log(status);
|
|
@@ -88,7 +89,7 @@ function ViewTemplate(_a) {
|
|
|
88
89
|
return ((0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, spacing: 4, children: [(0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, xs: enablePreview ? 8 : 12, children: [templateLabelName && ((0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "body1", style: {
|
|
89
90
|
fontWeight: "bold",
|
|
90
91
|
textTransform: "uppercase",
|
|
91
|
-
}, children: templateLabelName })), fields && renderFields(fields, false),
|
|
92
|
+
}, children: templateLabelName })), fields && renderFields(fields, false), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { id: "advance-option", style: {
|
|
92
93
|
display: "flex",
|
|
93
94
|
flexDirection: "row",
|
|
94
95
|
justifyContent: "space-between",
|
|
@@ -96,7 +97,7 @@ function ViewTemplate(_a) {
|
|
|
96
97
|
cursor: "pointer",
|
|
97
98
|
}, onClick: function () {
|
|
98
99
|
setAdvanceOptionExpand(!advanceOptionExpand);
|
|
99
|
-
}, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { style: { fontWeight: "bold" }, children: t("ViewTemplate.AdvanceOption") }), (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: advanceOptionExpand ? ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandLess, {})) : ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandMore, {})) })] }), advanceOptionExpand && ((0, jsx_runtime_1.
|
|
100
|
+
}, children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { style: { fontWeight: "bold" }, children: t("ViewTemplate.AdvanceOption") }), (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: advanceOptionExpand ? ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandLess, {})) : ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandMore, {})) })] }), advanceOptionExpand && ((0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, children: [fields && advanceFields.length > 0 && renderFields(fields, true), (0, jsx_runtime_1.jsx)(Event_1.default, __assign({}, props))] }))] })] }), enablePreview && ((0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, xs: 4, children: [(0, jsx_runtime_1.jsx)(Preview_1.default, { domainId: domainId || "", validStatus: validStatus, configs: CONFIGS, pagePath: pagePath, templateDatas: templateDatas }), (0, jsx_runtime_1.jsx)(material_1.Typography, { variant: "caption", children: t("ViewTemplate.PreviewLoadingNote") })] }))] }));
|
|
100
101
|
}
|
|
101
102
|
exports.default = ViewTemplate;
|
|
102
103
|
var getChilds = function (fields, fieldInfo) {
|
|
@@ -49,7 +49,7 @@ export interface FieldProps {
|
|
|
49
49
|
onNotifyError: (errorMessage: string) => void;
|
|
50
50
|
onUploadFile: (files: any[]) => Promise<string>;
|
|
51
51
|
}
|
|
52
|
-
export interface ViewTemplateProps extends
|
|
52
|
+
export interface ViewTemplateProps extends EventsProps {
|
|
53
53
|
templateDatas: FieldInfo[];
|
|
54
54
|
/**
|
|
55
55
|
* Đường dẫn tuyệt đối các file của page
|
|
@@ -46,7 +46,7 @@ function DataInput(props) {
|
|
|
46
46
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
47
47
|
var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
|
|
48
48
|
var fieldDefinition = props.fieldDefinition, onChange = props.onChange, value = props.value, error = props.error, disableHelperText = props.disableHelperText;
|
|
49
|
-
var fieldName = fieldDefinition.fieldName, type = fieldDefinition.type, onValidate = fieldDefinition.onValidate, min = fieldDefinition.min, max = fieldDefinition.max, other = __rest(fieldDefinition, ["fieldName", "type", "onValidate", "min", "max"]);
|
|
49
|
+
var fieldName = fieldDefinition.fieldName, type = fieldDefinition.type, onValidate = fieldDefinition.onValidate, min = fieldDefinition.min, max = fieldDefinition.max, pattern = fieldDefinition.pattern, other = __rest(fieldDefinition, ["fieldName", "type", "onValidate", "min", "max", "pattern"]);
|
|
50
50
|
var _k = react_2.default.useState(t('Common.InvalidData')), errorText = _k[0], setErrorText = _k[1];
|
|
51
51
|
var checkValidationValue = function (fieldDefinition, val) {
|
|
52
52
|
if (!fieldDefinition.required &&
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"Common": {
|
|
3
|
+
"NotNegative": "Not negative value!",
|
|
3
4
|
"Existed": "{0} is already existed!",
|
|
4
5
|
"lg": "en",
|
|
5
6
|
"InvalidData": "Invalid data",
|
|
@@ -482,7 +483,13 @@
|
|
|
482
483
|
"CampaignName": "Campaign Name"
|
|
483
484
|
},
|
|
484
485
|
"CantBeDelete": "Can not delete this campaign",
|
|
485
|
-
"Attributes": "Attributes"
|
|
486
|
+
"Attributes": "Attributes",
|
|
487
|
+
"BillingUnit": {
|
|
488
|
+
"Title": "Billing unit",
|
|
489
|
+
"View": "Impression",
|
|
490
|
+
"Authentication": "Engagement / Spot",
|
|
491
|
+
"Click": "Click"
|
|
492
|
+
}
|
|
486
493
|
},
|
|
487
494
|
"DirectoryManagement": {
|
|
488
495
|
"DirectoryName": "Directory Name",
|
|
@@ -540,7 +547,8 @@
|
|
|
540
547
|
"ErrorValidField": "View have fields that does not satisfy the validation code",
|
|
541
548
|
"AdvanceOption": "Advance option",
|
|
542
549
|
"PreviewTitle": "Preview (on mobile)",
|
|
543
|
-
"PreviewLoadingNote": "Your preview is being generated and might take few minutes"
|
|
550
|
+
"PreviewLoadingNote": "Your preview is being generated and might take few minutes",
|
|
551
|
+
"DeprecatedTemplate": "This Page is using deprecated template!"
|
|
544
552
|
},
|
|
545
553
|
"Statistic": {
|
|
546
554
|
"View": "View",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"Common": {
|
|
3
|
+
"NotNegative": "Không được nhập số âm!",
|
|
3
4
|
"Existed": "{0} đã tồn tại!",
|
|
4
5
|
"lg": "vn",
|
|
5
6
|
"InvalidData": "Dữ liệu không hợp lệ",
|
|
@@ -464,7 +465,13 @@
|
|
|
464
465
|
"CampaignName": "Tên chiến dịch"
|
|
465
466
|
},
|
|
466
467
|
"CantBeDelete": "Không thể xoá chiến dịch này",
|
|
467
|
-
"Attributes": "Thuộc tính"
|
|
468
|
+
"Attributes": "Thuộc tính",
|
|
469
|
+
"BillingUnit": {
|
|
470
|
+
"Title": "Đơn vị",
|
|
471
|
+
"View": "Impression",
|
|
472
|
+
"Authentication": "Engagement / Spot",
|
|
473
|
+
"Click": "Click"
|
|
474
|
+
}
|
|
468
475
|
},
|
|
469
476
|
"TemplateManagement": {
|
|
470
477
|
"Create": "Tạo mới template",
|
|
@@ -544,7 +551,8 @@
|
|
|
544
551
|
"ErrorValidField": "View có trường không thỏa mãn validation code",
|
|
545
552
|
"AdvanceOption": "Tùy chọn nâng cao",
|
|
546
553
|
"PreviewTitle": "Bản xem thử (Giao diện mobile)",
|
|
547
|
-
"PreviewLoadingNote": "Hệ thống đang xử lý bản xem thử, vui lòng đợi trong giây lát..."
|
|
554
|
+
"PreviewLoadingNote": "Hệ thống đang xử lý bản xem thử, vui lòng đợi trong giây lát...",
|
|
555
|
+
"DeprecatedTemplate": "Page sử dụng Template đã bị xóa hoặc không còn hỗ trợ"
|
|
548
556
|
},
|
|
549
557
|
"Statistic": {
|
|
550
558
|
"View": "Số lượt",
|