awing-library 2.1.106-beta → 2.1.107-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/Container.js +1 -1
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdList.js +11 -10
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/EditAds.js +11 -9
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.js +2 -2
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignList.js +1 -1
- package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/index.js +0 -1
- package/lib/ACM-AXN/CampaignPlan/Container.js +2 -1
- package/lib/ACM-AXN/CampaignPlan/Detail.js +4 -1
- package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/component.js +1 -1
- package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/container.js +3 -3
- package/lib/ACM-AXN/Notifications/NotificationDetail/index.js +28 -31
- package/lib/ACM-AXN/Notifications/Types.d.ts +1 -1
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +9 -26
- package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.js +3 -3
- package/lib/ACM-AXN/Page/Import/index.js +1 -0
- package/lib/ACM-AXN/ScheduleCompletionRate/Container.js +1 -0
- package/lib/ACM-AXN/Statistics/ControlPanel.d.ts +1 -1
- package/lib/ACM-AXN/Statistics/ControlPanel.js +12 -8
- package/lib/ACM-AXN/Statistics/container.d.ts +1 -1
- package/lib/ACM-AXN/Statistics/container.js +2 -2
- package/lib/ACM-AXN/Statistics/interface.d.ts +1 -0
- package/lib/ACM-AXN/StatisticsAudienceDemographic/container.d.ts +1 -1
- package/lib/ACM-AXN/StatisticsAudienceDemographic/container.js +2 -2
- package/lib/ACM-AXN/StatisticsAudienceDemographic/interfaces.d.ts +1 -0
- package/lib/ACM-AXN/StatisticsByProvince/container.d.ts +1 -1
- package/lib/ACM-AXN/StatisticsByProvince/container.js +2 -2
- package/lib/ACM-AXN/StatisticsByProvince/interfaces.d.ts +1 -0
- package/lib/ACM-AXN/TransactionLog/Detail.js +1 -1
- package/lib/ACM-AXN/ViewTemplate/container.js +2 -3
- package/lib/ACM-AXN/ViewTemplate/interface.d.ts +1 -1
- package/lib/AWING/Chart/BarLineComponent.js +86 -8
- package/lib/AWING/Chart/PieComponent.js +2 -2
- package/lib/AWING/DataForm/DataInput.js +1 -1
- package/lib/AWING/DataGrid/interface.d.ts +39 -1
- package/lib/AWING/GroupTable/GroupTable.js +2 -1
- package/lib/translate/en/translation.json +1 -1
- package/lib/translate/vi/translation.json +1 -1
- package/package.json +1 -1
|
@@ -241,7 +241,7 @@ var CampaignContainer = function () {
|
|
|
241
241
|
color: '#000',
|
|
242
242
|
fontSize: '1.1rem',
|
|
243
243
|
marginLeft: '8px',
|
|
244
|
-
fontFamily: '"Segoe UI Symbol", "Apple Symbols", "Noto Sans Symbols 2"',
|
|
244
|
+
fontFamily: '"Segoe UI Symbol", "Apple Symbols", "Noto Sans Symbols 2" !important',
|
|
245
245
|
}, children: (0, Utils_1.getCampaignPriority)(row === null || row === void 0 ? void 0 : row.campaignGroup.priority) }),
|
|
246
246
|
//Check trong ads có bất kỳ ad nào isReverved
|
|
247
247
|
(row === null || row === void 0 ? void 0 : row.campaignGroup.isReserved) && ((0, jsx_runtime_1.jsx)(material_1.Chip, { sx: {
|
|
@@ -67,24 +67,24 @@ function AdList(props) {
|
|
|
67
67
|
var onCreate = props.onCreate, onChange = props.onChange, onDelete = props.onDelete, onAdsValidChange = props.onAdsValidChange;
|
|
68
68
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
69
69
|
var _a = (0, Context_1.useAwing)().appHelper, confirm = _a.confirm, alert = _a.alert;
|
|
70
|
-
var
|
|
70
|
+
var _b = (0, Hooks_1.default)(), service = _b.service, defaultDomainId = _b.domainId;
|
|
71
71
|
var ads = (0, recoil_1.useRecoilValue)(atoms_1.adListState);
|
|
72
|
-
var
|
|
73
|
-
var
|
|
72
|
+
var _c = (0, recoil_1.useRecoilState)(atoms_1.adSelectedState), adSelected = _c[0], setAdSelected = _c[1];
|
|
73
|
+
var _d = (0, recoil_1.useRecoilState)(atoms_1.adOpenState), adOpen = _d[0], setAdOpen = _d[1];
|
|
74
74
|
var copiedAd = (0, recoil_1.useRecoilValue)(atoms_1.copiedAdState);
|
|
75
75
|
var hasClassC = (0, recoil_1.useRecoilValue)((0, atoms_1.checkGroupsClassCState)(adSelected.map(function (x) { return x.subCampaignId; })));
|
|
76
|
-
var
|
|
76
|
+
var _e = (0, react_1.useState)({
|
|
77
77
|
welcomeId: '',
|
|
78
78
|
loginId: '',
|
|
79
79
|
domainIds: [],
|
|
80
|
-
}), previewId =
|
|
81
|
-
var
|
|
80
|
+
}), previewId = _e[0], setPreviewId = _e[1];
|
|
81
|
+
var _f = react_1.default.useState(), anchorEl = _f[0], setAnchorEl = _f[1];
|
|
82
82
|
var open = Boolean(anchorEl);
|
|
83
83
|
// valid theo cấu trúc { [campaignGroupId]: { [adId]: boolean } }
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
var
|
|
87
|
-
var
|
|
84
|
+
var _g = (0, react_1.useState)({}), adsValid = _g[0], setAdsValid = _g[1];
|
|
85
|
+
var _h = (0, react_1.useState)(false), isAdvancedDrawerOpen = _h[0], setIsAdvancedDrawerOpen = _h[1];
|
|
86
|
+
var _j = (0, recoil_1.useRecoilState)(Recoils_1.weightState), weightProps = _j[0], setWeightState = _j[1];
|
|
87
|
+
var _k = (0, react_1.useState)(false), isMultiEditDrawerOpen = _k[0], setIsMultiEditDrawerOpen = _k[1];
|
|
88
88
|
(0, react_1.useEffect)(function () {
|
|
89
89
|
var newAdValid = {};
|
|
90
90
|
ads.forEach(function (ad) {
|
|
@@ -233,6 +233,7 @@ function AdList(props) {
|
|
|
233
233
|
* Hàm khi xem preview
|
|
234
234
|
*/
|
|
235
235
|
var handlePreview = function (e, ad, domainId) {
|
|
236
|
+
if (domainId === void 0) { domainId = defaultDomainId; }
|
|
236
237
|
e.stopPropagation();
|
|
237
238
|
var url = "".concat(Constant_1.Constants.CAPTIVE_DOMAIN, "/").concat(Constant_1.Constants.PAGE_LOGIN_PREVIEW, "?loginId=").concat(ad.loginId, "&isNetworkCampaign=").concat(Boolean(service.domainsGetAll).toString());
|
|
238
239
|
if (ad.welcomeId.length)
|
|
@@ -15,6 +15,7 @@ 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"));
|
|
18
19
|
function EditAds(props) {
|
|
19
20
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
20
21
|
var PlaceFilterField = (0, Hooks_1.default)().placeMultiSelectComponent;
|
|
@@ -76,6 +77,7 @@ function EditAds(props) {
|
|
|
76
77
|
type: 'date-range',
|
|
77
78
|
label: t('Campaign.Ad.Time'),
|
|
78
79
|
required: true,
|
|
80
|
+
isDayBlocked: function (day) { return (0, moment_1.default)().startOf('day').valueOf() > day.valueOf(); }
|
|
79
81
|
},
|
|
80
82
|
{
|
|
81
83
|
fieldName: 'isReserved',
|
|
@@ -113,28 +115,28 @@ function EditAds(props) {
|
|
|
113
115
|
var convertAd = function (inputObj) {
|
|
114
116
|
var result = {};
|
|
115
117
|
selectedFields.forEach(function (f) {
|
|
116
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
118
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
117
119
|
switch (f) {
|
|
118
120
|
case 'time':
|
|
119
|
-
result.startDate = (0, Helpers_1.convertDateTimeToTimestamp)((
|
|
120
|
-
result.endDate = (0, Helpers_1.convertDateTimeToTimestamp)((
|
|
121
|
+
result.startDate = (0, Helpers_1.convertDateTimeToTimestamp)((_a = inputObj === null || inputObj === void 0 ? void 0 : inputObj.time[0]) === null || _a === void 0 ? void 0 : _a.toDate());
|
|
122
|
+
result.endDate = (0, Helpers_1.convertDateTimeToTimestamp)((_b = inputObj === null || inputObj === void 0 ? void 0 : inputObj.time[1]) === null || _b === void 0 ? void 0 : _b.toDate());
|
|
121
123
|
break;
|
|
122
124
|
case 'placeFilter':
|
|
123
125
|
result.placeFilter = placeFilterValue;
|
|
124
126
|
result.places = selectedPlaces;
|
|
125
127
|
break;
|
|
126
128
|
case 'loginId':
|
|
127
|
-
result.loginId = (
|
|
129
|
+
result.loginId = (_c = inputObj[f]) === null || _c === void 0 ? void 0 : _c.value;
|
|
128
130
|
result.loginPage = {
|
|
129
|
-
pageId: (
|
|
130
|
-
title: (
|
|
131
|
+
pageId: (_d = inputObj[f]) === null || _d === void 0 ? void 0 : _d.value,
|
|
132
|
+
title: (_e = inputObj[f]) === null || _e === void 0 ? void 0 : _e.text,
|
|
131
133
|
};
|
|
132
134
|
break;
|
|
133
135
|
case 'welcomeId':
|
|
134
|
-
result.welcomeId = (
|
|
136
|
+
result.welcomeId = (_f = inputObj[f]) === null || _f === void 0 ? void 0 : _f.value;
|
|
135
137
|
result.welcomePage = {
|
|
136
|
-
pageId: (
|
|
137
|
-
title: (
|
|
138
|
+
pageId: (_g = inputObj[f]) === null || _g === void 0 ? void 0 : _g.value,
|
|
139
|
+
title: (_h = inputObj[f]) === null || _h === void 0 ? void 0 : _h.text,
|
|
138
140
|
};
|
|
139
141
|
break;
|
|
140
142
|
default:
|
|
@@ -76,7 +76,7 @@ function SubCampaignDetail(props) {
|
|
|
76
76
|
}, disabled: isCreate, children: [(0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: Types_1.CampaignTicket.ACTIVE, children: t('Campaign.Active') }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: Types_1.CampaignTicket.INACTIVE, children: t('Campaign.InActive') })] }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: true, style: { padding: 8 }, children: (0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { checked: subCampaign.isReserved, onChange: function (e) {
|
|
77
77
|
e.persist();
|
|
78
78
|
onSubCampaignChange(function (pre) { return (__assign(__assign({}, pre), { isReserved: e.target.checked })); });
|
|
79
|
-
}, name: "isReserved", color: "primary" }), label: translationText.reserved, style: { marginTop: 6 } }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, style: { padding: 8, paddingTop: 0 }, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: true, style: { padding: 8 }, children: (0, jsx_runtime_1.
|
|
79
|
+
}, name: "isReserved", color: "primary" }), label: translationText.reserved, style: { marginTop: 6 } }) })] }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, style: { padding: 8, paddingTop: 0 }, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: true, style: { padding: 8 }, children: (0, jsx_runtime_1.jsx)(material_1.TextField, { id: "priority", select: true, required: true, variant: "standard", fullWidth: true, label: translationText.priority, value: isNaN(Number(subCampaign.priority))
|
|
80
80
|
? subCampaign.priority
|
|
81
81
|
: Object.values(Types_1.CampaignPriority)[subCampaign.priority], onChange: function (e) {
|
|
82
82
|
var newPriority = Object.values(Types_1.CampaignPriority).indexOf(e.target.value);
|
|
@@ -87,7 +87,7 @@ function SubCampaignDetail(props) {
|
|
|
87
87
|
setSubValid(function (pre) { return (__assign(__assign({}, pre), { bookingAmount: true, bonusAmount: true })); });
|
|
88
88
|
return newSubCamp;
|
|
89
89
|
});
|
|
90
|
-
}, children:
|
|
90
|
+
}, children: Object.values(Types_1.CampaignPriority).map(function (priority) { return ((0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: priority, children: t("Campaign.".concat(priority)) }, priority)); }) }) }), (0, Utils_1.checkPriority)(subCampaign.priority, Types_1.CampaignPriority.ClassB) && ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: true, style: { padding: 8 }, children: (0, jsx_runtime_1.jsx)(material_1.TextField, { id: "bookingAmount", required: true, fullWidth: true, variant: "standard", type: "number", label: translationText.booking, value: subCampaign.bookingAmount, onChange: function (e) {
|
|
91
91
|
var value = Number(e.target.value);
|
|
92
92
|
handleChangeStatus('bookingAmount', (0, Utils_1.bookingValid)(value));
|
|
93
93
|
onSubCampaignChange(function (pre) { return (__assign(__assign({}, pre), { bookingAmount: value })); });
|
|
@@ -109,7 +109,7 @@ function SubCampaignPreview(_a) {
|
|
|
109
109
|
fontSize: '14px',
|
|
110
110
|
color: isActive ? '#008000' : '#8D8D8D',
|
|
111
111
|
} })) : ((0, jsx_runtime_1.jsx)(RemoveCircle_1.default, { fontSize: "small", style: { fontSize: '14px' }, color: "primary" })), (0, jsx_runtime_1.jsx)(material_1.Typography, { component: 'span', sx: {
|
|
112
|
-
fontFamily: '"Segoe UI Symbol", "Apple Symbols", "Noto Sans Symbols 2"',
|
|
112
|
+
fontFamily: '"Segoe UI Symbol", "Apple Symbols", "Noto Sans Symbols 2" !important',
|
|
113
113
|
fontSize: 18,
|
|
114
114
|
}, children: (0, Utils_1.getCampaignPriority)(subCampaign.campaignGroup.priority) })] }) }), action: (0, jsx_runtime_1.jsx)(AWING_1.Actions, { menus: __spreadArray([
|
|
115
115
|
{
|
|
@@ -151,7 +151,6 @@ function TabSubCampaign() {
|
|
|
151
151
|
changeList.forEach(function (adChange) {
|
|
152
152
|
var _a;
|
|
153
153
|
var subCampIdx = result.findIndex(function (x) { var _a; return ((_a = x.campaignGroup) === null || _a === void 0 ? void 0 : _a.id) === adChange.subCampaignId; });
|
|
154
|
-
// console.log('subCampIdx', subCampIdx)
|
|
155
154
|
if (subCampIdx >= 0) {
|
|
156
155
|
var adIdx = ((_a = result[subCampIdx].ads) === null || _a === void 0 ? void 0 : _a.findIndex(function (x) { return x.id === adChange.adId; })) || 0;
|
|
157
156
|
if (adIdx >= 0) {
|
|
@@ -56,7 +56,8 @@ function Container() {
|
|
|
56
56
|
.finally(function () {
|
|
57
57
|
setLoading(false);
|
|
58
58
|
});
|
|
59
|
-
|
|
59
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
60
|
+
}, [filterBy, queryInput]);
|
|
60
61
|
var handleUpdateFilterBy = function (name, value) {
|
|
61
62
|
if (filterBy[name] !== value) {
|
|
62
63
|
setFilterBy(function (oldData) {
|
|
@@ -70,7 +70,10 @@ function CampaignPlanDetail() {
|
|
|
70
70
|
field: 'name',
|
|
71
71
|
headerName: t('CampaignPlan.Group'),
|
|
72
72
|
valueGetter: function (row) {
|
|
73
|
-
return
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [row.name, ' ', (0, jsx_runtime_1.jsx)(material_1.Typography, { component: 'span', sx: {
|
|
74
|
+
fontFamily: '"Segoe UI Symbol", "Apple Symbols", "Noto Sans Symbols 2" !important',
|
|
75
|
+
fontSize: 18,
|
|
76
|
+
}, children: getCampaignPriority(row.priority) })] }));
|
|
74
77
|
},
|
|
75
78
|
},
|
|
76
79
|
{
|
|
@@ -170,7 +170,7 @@ var RowAdvanceComponent = function (_a) {
|
|
|
170
170
|
case Enum_1.HEAD_CELL_NAMES.TOTAL:
|
|
171
171
|
return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: totalView }, item.id));
|
|
172
172
|
case Enum_1.HEAD_CELL_NAMES.IMPRESSION:
|
|
173
|
-
return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "
|
|
173
|
+
return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: row === null || row === void 0 ? void 0 : row.view }, item.id));
|
|
174
174
|
case Enum_1.HEAD_CELL_NAMES.FINAL_CLICK:
|
|
175
175
|
return ((0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: row === null || row === void 0 ? void 0 : row.click }, item.id));
|
|
176
176
|
case Enum_1.HEAD_CELL_NAMES.CTR:
|
|
@@ -129,9 +129,9 @@ var RowAdvanceContainer = function (_a) {
|
|
|
129
129
|
switch (_b.label) {
|
|
130
130
|
case 0:
|
|
131
131
|
groupByMapping = (_a = {},
|
|
132
|
-
_a[Enum_1.HEAD_CELL_NAMES.CAMPAIGN_CAMPAIGN] =
|
|
133
|
-
_a[Enum_1.HEAD_CELL_NAMES.PLACE_CAMPAIGN] =
|
|
134
|
-
_a[Enum_1.HEAD_CELL_NAMES.DOMAIN_CAMPAIGN] =
|
|
132
|
+
_a[Enum_1.HEAD_CELL_NAMES.CAMPAIGN_CAMPAIGN] = "campaignId",
|
|
133
|
+
_a[Enum_1.HEAD_CELL_NAMES.PLACE_CAMPAIGN] = "placeId",
|
|
134
|
+
_a[Enum_1.HEAD_CELL_NAMES.DOMAIN_CAMPAIGN] = "domainId",
|
|
135
135
|
_a);
|
|
136
136
|
groupBy = groupByMapping[groupBy] || groupBy;
|
|
137
137
|
params = __assign(__assign({}, filterBy), { groupBy: groupBy, pageIndex: pageIndex, pageSize: pageSize });
|
|
@@ -70,11 +70,14 @@ var NotificationDetail = function (props) {
|
|
|
70
70
|
status: Constant_1.Constants.ALL_STATUS,
|
|
71
71
|
}), valueFilter = _a[0], setValueFilter = _a[1];
|
|
72
72
|
var _b = react_1.default.useState(false), isLoading = _b[0], setIsLoading = _b[1];
|
|
73
|
-
var _c = react_1.default.useState(
|
|
74
|
-
var _d =
|
|
73
|
+
var _c = react_1.default.useState(0), count = _c[0], setCount = _c[1];
|
|
74
|
+
var _d = react_1.default.useState(true), isInViewPort = _d[0], setIsInViewPort = _d[1];
|
|
75
|
+
var _e = (0, react_1.useState)([]), notificationMessage = _e[0], setNotificationMessage = _e[1];
|
|
75
76
|
var totalItemCount = (0, react_1.useRef)(0);
|
|
76
77
|
(0, react_1.useEffect)(function () {
|
|
77
|
-
var observer = new IntersectionObserver(
|
|
78
|
+
var observer = new IntersectionObserver(function (entries) {
|
|
79
|
+
entries.map(function (entry) { return entry.isIntersecting; }).forEach(setIsInViewPort);
|
|
80
|
+
});
|
|
78
81
|
var lastItem = document.getElementById('last-Item');
|
|
79
82
|
if (observer && lastItem) {
|
|
80
83
|
setIsLoading(true);
|
|
@@ -83,46 +86,40 @@ var NotificationDetail = function (props) {
|
|
|
83
86
|
return function () {
|
|
84
87
|
if (observer) {
|
|
85
88
|
observer.disconnect();
|
|
89
|
+
observer = null;
|
|
86
90
|
}
|
|
87
91
|
};
|
|
92
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
93
|
}, []);
|
|
89
94
|
(0, react_1.useEffect)(function () {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
notificationMessage.length === 0)) {
|
|
98
|
-
console.log("run");
|
|
99
|
-
setIsLoading(true);
|
|
100
|
-
service
|
|
101
|
-
.notificationsPaging(count, Constant_1.Constants.PAGE_SIZE_DEFAULT, valueFilter.textSearch, valueFilter.status, [])
|
|
102
|
-
.then(function (res) {
|
|
103
|
-
setNotificationMessage(function (prevMessages) {
|
|
104
|
-
var newItems = res.items.filter(function (newItem) {
|
|
105
|
-
return !prevMessages.some(function (prevItem) { return prevItem.id === newItem.id; });
|
|
106
|
-
});
|
|
107
|
-
return __spreadArray(__spreadArray([], prevMessages, true), newItems, true);
|
|
95
|
+
setIsLoading(true);
|
|
96
|
+
service
|
|
97
|
+
.notificationsPaging(count, Constant_1.Constants.PAGE_SIZE_DEFAULT, valueFilter.textSearch, valueFilter.status, [])
|
|
98
|
+
.then(function (res) {
|
|
99
|
+
setNotificationMessage(function (prevMessages) {
|
|
100
|
+
var newItems = res.items.filter(function (newItem) {
|
|
101
|
+
return !prevMessages.some(function (prevItem) { return prevItem.id === newItem.id; });
|
|
108
102
|
});
|
|
109
|
-
|
|
110
|
-
})
|
|
111
|
-
.finally(function () {
|
|
112
|
-
setIsLoading(false);
|
|
103
|
+
return __spreadArray(__spreadArray([], prevMessages, true), newItems, true);
|
|
113
104
|
});
|
|
114
|
-
|
|
105
|
+
totalItemCount.current = res.totalItemCount;
|
|
106
|
+
})
|
|
107
|
+
.finally(function () {
|
|
108
|
+
setIsLoading(false);
|
|
109
|
+
});
|
|
115
110
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
116
111
|
}, [count, valueFilter.textSearch, valueFilter.status]);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
112
|
+
(0, react_1.useEffect)(function () {
|
|
113
|
+
if (isInViewPort &&
|
|
114
|
+
notificationMessage.length < totalItemCount.current &&
|
|
115
|
+
!isLoading) {
|
|
120
116
|
setCount(function (old) { return old + 1; });
|
|
121
117
|
}
|
|
122
|
-
|
|
118
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
119
|
+
}, [isInViewPort]);
|
|
123
120
|
var handleValueFilter = function (textSearch, tabs) {
|
|
124
|
-
textSearch.length === 0 ? setCount(0) : setCount(-1);
|
|
125
121
|
setNotificationMessage([]);
|
|
122
|
+
setCount(0);
|
|
126
123
|
totalItemCount.current = 0;
|
|
127
124
|
setValueFilter({
|
|
128
125
|
textSearch: textSearch,
|
|
@@ -76,7 +76,7 @@ export interface NotificationMessageField {
|
|
|
76
76
|
export interface PagedList_1OfNotificationMessage {
|
|
77
77
|
items?: NotificationMessage[] | undefined;
|
|
78
78
|
pageCount?: number;
|
|
79
|
-
totalItemCount
|
|
79
|
+
totalItemCount: number;
|
|
80
80
|
pageNumber?: number;
|
|
81
81
|
pageSize?: number;
|
|
82
82
|
hasPreviousPage?: boolean;
|
|
@@ -1,15 +1,4 @@
|
|
|
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
|
-
};
|
|
13
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -73,16 +62,16 @@ var Recoil_1 = require("../Recoil");
|
|
|
73
62
|
var Utils_1 = require("../Utils");
|
|
74
63
|
var Styles_1 = require("./Styles");
|
|
75
64
|
var ViewContent = function (_a) {
|
|
76
|
-
var _b, _c, _d, _e;
|
|
65
|
+
var _b, _c, _d, _e, _f;
|
|
77
66
|
var viewInfoData = _a.viewInfoData, pageId = _a.pageId, viewNumber = _a.viewNumber, onChange = _a.onChange, isCreate = _a.isCreate;
|
|
78
|
-
var
|
|
67
|
+
var _g = (0, Context_2.default)(), service = _g.service, pageCode = _g.pageCode, domainId = _g.domainId, CONFIGS = _g.configs;
|
|
79
68
|
var appHelper = (0, Context_1.useAwing)().appHelper;
|
|
80
|
-
var
|
|
81
|
-
var
|
|
82
|
-
var
|
|
69
|
+
var _h = react_1.default.useState(''), scriptValidationTemplate = _h[0], setScriptValidationTemplate = _h[1];
|
|
70
|
+
var _j = react_1.default.useState(''), scriptAutoField = _j[0], setScriptAutoField = _j[1];
|
|
71
|
+
var _k = react_1.default.useState(false), loading = _k[0], setLoading = _k[1];
|
|
83
72
|
var isUniq = react_1.default.useRef(false);
|
|
84
73
|
var rootDirectory = (0, recoil_1.useRecoilValue)(Recoil_1.pageRootDeirectory);
|
|
85
|
-
var
|
|
74
|
+
var _l = (0, recoil_1.useRecoilState)(Recoil_1.pageEventState), events = _l[0], setEvent = _l[1];
|
|
86
75
|
react_1.default.useEffect(function () {
|
|
87
76
|
if (viewInfoData === null || viewInfoData === void 0 ? void 0 : viewInfoData.templateId) {
|
|
88
77
|
setLoading(true);
|
|
@@ -100,7 +89,6 @@ var ViewContent = function (_a) {
|
|
|
100
89
|
}, [viewInfoData.templateId, viewInfoData.viewDatas.length]);
|
|
101
90
|
react_1.default.useEffect(function () {
|
|
102
91
|
if (!isUniq.current) {
|
|
103
|
-
console.log("uniq...");
|
|
104
92
|
setEvent(function (prev) {
|
|
105
93
|
return (0, lodash_1.uniqBy)(prev, function (a) {
|
|
106
94
|
return JSON.stringify({
|
|
@@ -116,7 +104,7 @@ var ViewContent = function (_a) {
|
|
|
116
104
|
}, [events]);
|
|
117
105
|
var handleResData = function (res) {
|
|
118
106
|
onChange(['viewDatas'], (0, Utils_1.getTemplateDatas)(res.templateParameters, viewInfoData, pageId, viewNumber));
|
|
119
|
-
setEvent(function (prev) { return __spreadArray(__spreadArray([], res.templateEvents.map(function (item) { return ({ id: item.id, event: item.event, viewNumber: viewNumber + 1, pageId: pageId, protected: true }); }), true), prev, true); });
|
|
107
|
+
setEvent(function (prev) { var _a; return __spreadArray(__spreadArray([], (_a = res === null || res === void 0 ? void 0 : res.templateEvents) === null || _a === void 0 ? void 0 : _a.map(function (item) { return ({ id: item.id, event: item.event, viewNumber: viewNumber + 1, pageId: pageId, protected: true }); }), true), prev, true); });
|
|
120
108
|
isUniq.current = false;
|
|
121
109
|
onChange(['templateValidation'], res.template.validation);
|
|
122
110
|
onChange(['templateHandleEvent'], res.template.autoField);
|
|
@@ -174,7 +162,7 @@ var ViewContent = function (_a) {
|
|
|
174
162
|
? CONFIGS.FILE_TEMP_PATH
|
|
175
163
|
: CONFIGS.FILE_STATIC_PATH, "/").concat(pageCode === enums_1.PageCode.Lgn
|
|
176
164
|
? 'lgn'
|
|
177
|
-
: 'wlc', "/").concat((_d = (_c = viewInfoData.viewDatas) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.pageId), enablePreview: pageCode === enums_1.PageCode.Lgn, advanceFields: (_e = viewInfoData.viewDatas) === null || _e === void 0 ? void 0 : _e.filter(function (item) { return item === null || item === void 0 ? void 0 : item.isAdvanced; }).map(function (field) { return field.fieldName; }), scriptValidate: scriptValidationTemplate, scriptAutoField: scriptAutoField, domainId: domainId, configs: CONFIGS,
|
|
165
|
+
: 'wlc', "/").concat((_d = (_c = viewInfoData.viewDatas) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.pageId), enablePreview: pageCode === enums_1.PageCode.Lgn, advanceFields: (_f = (_e = viewInfoData.viewDatas) === null || _e === void 0 ? void 0 : _e.filter(function (item) { return item === null || item === void 0 ? void 0 : item.isAdvanced; })) === null || _f === void 0 ? void 0 : _f.map(function (field) { return field.fieldName; }), scriptValidate: scriptValidationTemplate, scriptAutoField: scriptAutoField, domainId: domainId, configs: CONFIGS,
|
|
178
166
|
// validStatus={validStatus}
|
|
179
167
|
validStatus: viewInfoData.validStatus, viewEvents: events === null || events === void 0 ? void 0 : events.filter(function (item) { return item.viewNumber === viewNumber + 1; }), onChange: handleOnChange, onChangeViewValid: function (status) {
|
|
180
168
|
onChange(['isValidationFields'], [status]);
|
|
@@ -182,11 +170,6 @@ var ViewContent = function (_a) {
|
|
|
182
170
|
onChange(['validProcessStatus'], processValue);
|
|
183
171
|
}, onNotifyError: function (errorMessage) {
|
|
184
172
|
appHelper.snackbar('error', errorMessage);
|
|
185
|
-
}, onUploadFile: onUploadFile
|
|
186
|
-
setEvent(function (prev) {
|
|
187
|
-
return prev.filter(function (item) { return item.viewNumber !== viewNumber + 1; }).concat(values.map(function (value) { return (__assign(__assign({}, value), { viewNumber: viewNumber + 1, pageId: pageId })); }));
|
|
188
|
-
});
|
|
189
|
-
isUniq.current = false;
|
|
190
|
-
} }) }) })) })) }));
|
|
173
|
+
}, onUploadFile: onUploadFile }) }) })) })) }));
|
|
191
174
|
};
|
|
192
175
|
exports.default = ViewContent;
|
|
@@ -69,7 +69,7 @@ var ViewInfo = function (_a) {
|
|
|
69
69
|
}, []);
|
|
70
70
|
var handleChangeForm = react_1.default.useCallback(function (obj, _valid, keyUpdate) {
|
|
71
71
|
var _a;
|
|
72
|
-
if (
|
|
72
|
+
if (!keyUpdate)
|
|
73
73
|
return;
|
|
74
74
|
if (['templateTypeId', 'directoryId'].includes(keyUpdate)) {
|
|
75
75
|
if (keyUpdate === 'directoryId') {
|
|
@@ -118,7 +118,7 @@ var ViewInfo = function (_a) {
|
|
|
118
118
|
};
|
|
119
119
|
var templateOptions = react_1.default.useMemo(function () {
|
|
120
120
|
var result = [];
|
|
121
|
-
if (
|
|
121
|
+
if (viewInfoData.templateTypeId) {
|
|
122
122
|
templates
|
|
123
123
|
.filter(function (x) {
|
|
124
124
|
return x.pageCode ===
|
|
@@ -135,7 +135,7 @@ var ViewInfo = function (_a) {
|
|
|
135
135
|
})
|
|
136
136
|
.forEach(function (template) { return result.push(template); });
|
|
137
137
|
}
|
|
138
|
-
return result;
|
|
138
|
+
return result.sort(function (a, b) { return a.description.localeCompare(b.description); });
|
|
139
139
|
}, [viewInfoData, templates, pageCode]);
|
|
140
140
|
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(AWING_1.DataForm, { fields: [
|
|
141
141
|
{
|
|
@@ -173,6 +173,7 @@ function Container() {
|
|
|
173
173
|
align: 'right',
|
|
174
174
|
};
|
|
175
175
|
},
|
|
176
|
+
valueGetter: function (row) { return row.rate.toFixed(2); },
|
|
176
177
|
},
|
|
177
178
|
], rows: (0, Helpers_1.offlinePaginate)(schedules, queryInput.pageIndex, queryInput.pageSize), sortModel: sortModels, onSortModelChange: setSortModels, getRowId: function (row) {
|
|
178
179
|
return [(0, Helpers_1.generateUUID)(), row.campaignId, row.groupId].join('.');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { BaseStatistics } from './interface';
|
|
2
|
-
export default function ControlPanel<F>({ onChangeQueryInput, onChangeExportInput, initialFilters, isLoadings,
|
|
2
|
+
export default function ControlPanel<F>({ onChangeQueryInput, onChangeExportInput, initialFilters, isLoadings, disableView, }: BaseStatistics<F>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -55,13 +55,13 @@ var useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
55
55
|
},
|
|
56
56
|
}); });
|
|
57
57
|
function ControlPanel(_a) {
|
|
58
|
-
var _b;
|
|
59
|
-
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, initialFilters = _a.initialFilters, isLoadings = _a.isLoadings,
|
|
58
|
+
var _b, _c, _d;
|
|
59
|
+
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, initialFilters = _a.initialFilters, isLoadings = _a.isLoadings, _e = _a.disableView, disableView = _e === void 0 ? false : _e;
|
|
60
60
|
var classes = useStyles();
|
|
61
61
|
var t = (0, react_i18next_1.useTranslation)().t;
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var
|
|
62
|
+
var _f = (0, react_1.useState)(), queryInput = _f[0], setQueryInput = _f[1];
|
|
63
|
+
var _g = (0, react_1.useState)([]), elementInputs = _g[0], setElementInputs = _g[1];
|
|
64
|
+
var _h = (0, react_1.useState)(false), isShowFilterEnhanced = _h[0], setIsHideFieldAdvanced = _h[1];
|
|
65
65
|
var flagRef = (0, react_1.useRef)('-1');
|
|
66
66
|
var getView = function () {
|
|
67
67
|
var _a;
|
|
@@ -226,7 +226,12 @@ function ControlPanel(_a) {
|
|
|
226
226
|
}
|
|
227
227
|
: {}), { children: fieldFilterEnhanced === null || fieldFilterEnhanced === void 0 ? void 0 : fieldFilterEnhanced.component }), idx) }));
|
|
228
228
|
}), (0, jsx_runtime_1.jsxs)(material_1.Grid, { item: true, sx: { paddingTop: '24px !important' }, children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", onClick: getView, style: { height: '40px' }, disabled: (isLoadings === null || isLoadings === void 0 ? void 0 : isLoadings.chartLoading) ||
|
|
229
|
-
(
|
|
229
|
+
(disableView &&
|
|
230
|
+
(queryInput === null || queryInput === void 0 ? void 0 : queryInput.placeIds) &&
|
|
231
|
+
((_c = queryInput === null || queryInput === void 0 ? void 0 : queryInput.placeIds) === null || _c === void 0 ? void 0 : _c.length) === 0) ||
|
|
232
|
+
(disableView &&
|
|
233
|
+
(queryInput === null || queryInput === void 0 ? void 0 : queryInput.domainId) && ((queryInput === null || queryInput === void 0 ? void 0 : queryInput.domainId) === '0' ||
|
|
234
|
+
(queryInput === null || queryInput === void 0 ? void 0 : queryInput.domainId) === undefined)), children: t('Common.View') }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", title: t('Common.Download'), onClick: function () { return onChangeExportInput(queryInput); }, color: "inherit", disabled: (isLoadings === null || isLoadings === void 0 ? void 0 : isLoadings.exportLoading) ||
|
|
230
235
|
(queryInput === null || queryInput === void 0 ? void 0 : queryInput.domainId) === '0', style: {
|
|
231
236
|
marginLeft: '16px',
|
|
232
237
|
height: '40px',
|
|
@@ -236,8 +241,7 @@ function ControlPanel(_a) {
|
|
|
236
241
|
}, styleIcon: {
|
|
237
242
|
width: '25px !important',
|
|
238
243
|
height: '25px !important',
|
|
239
|
-
} })) : ((0, jsx_runtime_1.jsx)(GetApp_1.default, {})) }), elementInputs.filter(function (item) { return item.isEnhanced === true; })
|
|
240
|
-
.length > 0 && ((0, jsx_runtime_1.jsx)(material_1.IconButton, { sx: { marginLeft: '10px' }, onClick: onShowFilterEnhanced, children: isShowFilterEnhanced ? ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandMore, {})) : ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandLess, {})) }))] })] }), isShowFilterEnhanced && ((0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, justifyContent: "flex-end", spacing: 2, sx: { paddingRight: '3rem' }, children: elementInputs
|
|
244
|
+
} })) : ((0, jsx_runtime_1.jsx)(GetApp_1.default, {})) }), ((_d = elementInputs.filter(function (item) { return item.isEnhanced === true; })) === null || _d === void 0 ? void 0 : _d.length) > 0 && ((0, jsx_runtime_1.jsx)(material_1.IconButton, { sx: { marginLeft: '10px' }, onClick: onShowFilterEnhanced, children: isShowFilterEnhanced ? ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandMore, {})) : ((0, jsx_runtime_1.jsx)(icons_material_1.ExpandLess, {})) }))] })] }), isShowFilterEnhanced && ((0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, justifyContent: "flex-end", spacing: 2, sx: { paddingRight: '3rem' }, children: elementInputs
|
|
241
245
|
.filter(function (item) { return item.isEnhanced === true; })
|
|
242
246
|
.map(function (fieldFilterEnhanced, idx) {
|
|
243
247
|
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: (fieldFilterEnhanced === null || fieldFilterEnhanced === void 0 ? void 0 : fieldFilterEnhanced.col)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IStatisticsProps } from './interface';
|
|
2
|
-
export default function StatisticsContainer<F>({ dataChart, onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, configChart, title, timeline, chart, children, infoSX, }: IStatisticsProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function StatisticsContainer<F>({ dataChart, onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, configChart, title, timeline, chart, children, infoSX, disableView }: IStatisticsProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -13,8 +13,8 @@ var BarLineComponent_1 = __importDefault(require("../../AWING/Chart/BarLineCompo
|
|
|
13
13
|
var PieComponent_1 = __importDefault(require("../../AWING/Chart/PieComponent"));
|
|
14
14
|
var react_helmet_async_1 = require("react-helmet-async");
|
|
15
15
|
function StatisticsContainer(_a) {
|
|
16
|
-
var dataChart = _a.dataChart, onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, configChart = _a.configChart, title = _a.title, timeline = _a.timeline, chart = _a.chart, children = _a.children, infoSX = _a.infoSX;
|
|
17
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [title && ((0, jsx_runtime_1.jsx)(react_helmet_async_1.HelmetProvider, { children: (0, jsx_runtime_1.jsx)(react_helmet_async_1.Helmet, { children: (0, jsx_runtime_1.jsx)("title", { children: title }) }) })), (0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
16
|
+
var dataChart = _a.dataChart, onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, configChart = _a.configChart, title = _a.title, timeline = _a.timeline, chart = _a.chart, children = _a.children, infoSX = _a.infoSX, disableView = _a.disableView;
|
|
17
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [title && ((0, jsx_runtime_1.jsx)(react_helmet_async_1.HelmetProvider, { children: (0, jsx_runtime_1.jsx)(react_helmet_async_1.Helmet, { children: (0, jsx_runtime_1.jsx)("title", { children: title }) }) })), (0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX, disableView: disableView }), (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
18
18
|
marginTop: '1.5rem',
|
|
19
19
|
width: '100%',
|
|
20
20
|
}, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 12, className: 'chart-region', children: (dataChart === null || dataChart === void 0 ? void 0 : dataChart.length) > 0 &&
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IStatisticsAudienceDemographicContainerProps } from './interfaces';
|
|
2
|
-
export default function StatisticsAudienceDemographicContainer<F>({ onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, title, dataDisplay, chart, infoSX, children, }: IStatisticsAudienceDemographicContainerProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function StatisticsAudienceDemographicContainer<F>({ onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, title, dataDisplay, chart, infoSX, children, disableView }: IStatisticsAudienceDemographicContainerProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -9,8 +9,8 @@ var ControlPanel_1 = __importDefault(require("../../ACM-AXN/Statistics/ControlPa
|
|
|
9
9
|
var ContentHeader_1 = __importDefault(require("../CampaignSchedule/Components/ContentHeader"));
|
|
10
10
|
var Tabs_1 = __importDefault(require("./Tabs"));
|
|
11
11
|
function StatisticsAudienceDemographicContainer(_a) {
|
|
12
|
-
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, title = _a.title, dataDisplay = _a.dataDisplay, chart = _a.chart, infoSX = _a.infoSX, children = _a.children;
|
|
13
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX }), (0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
12
|
+
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, title = _a.title, dataDisplay = _a.dataDisplay, chart = _a.chart, infoSX = _a.infoSX, children = _a.children, disableView = _a.disableView;
|
|
13
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX, disableView: disableView }), (0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
14
14
|
width: '100%',
|
|
15
15
|
}, children: dataDisplay === null ? (children) : ((0, jsx_runtime_1.jsx)(Tabs_1.default, { data: dataDisplay, isLoading: isLoadings === null || isLoadings === void 0 ? void 0 : isLoadings.chartLoading, chart: chart })) })] }) })] }));
|
|
16
16
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IStatisticsByProvinceContainerProps } from './interfaces';
|
|
2
|
-
export default function StatisticsByProvinceContainer<F>({ onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, title, dataTable, headCells, infoSX, children, }: IStatisticsByProvinceContainerProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function StatisticsByProvinceContainer<F>({ onChangeQueryInput, onChangeExportInput, isLoadings, initialFilters, title, dataTable, headCells, infoSX, children, disableView }: IStatisticsByProvinceContainerProps<F>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -10,8 +10,8 @@ var AWING_1 = require("../../AWING");
|
|
|
10
10
|
var ContentHeader_1 = __importDefault(require("../CampaignSchedule/Components/ContentHeader"));
|
|
11
11
|
var DataTable_1 = __importDefault(require("./DataTable"));
|
|
12
12
|
function StatisticsByProvinceContainer(_a) {
|
|
13
|
-
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, title = _a.title, dataTable = _a.dataTable, headCells = _a.headCells, infoSX = _a.infoSX, children = _a.children;
|
|
14
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX }), (0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
13
|
+
var onChangeQueryInput = _a.onChangeQueryInput, onChangeExportInput = _a.onChangeExportInput, isLoadings = _a.isLoadings, initialFilters = _a.initialFilters, title = _a.title, dataTable = _a.dataTable, headCells = _a.headCells, infoSX = _a.infoSX, children = _a.children, disableView = _a.disableView;
|
|
14
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ContentHeader_1.default, { title: title }), (0, jsx_runtime_1.jsx)(material_1.Paper, { children: (0, jsx_runtime_1.jsxs)("div", { style: { padding: '1rem' }, children: [(0, jsx_runtime_1.jsx)(ControlPanel_1.default, { onChangeQueryInput: onChangeQueryInput, onChangeExportInput: onChangeExportInput, initialFilters: initialFilters, isLoadings: isLoadings, infoSX: infoSX, disableView: disableView }), (0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, item: true, xs: 12, justifyContent: "center", sx: {
|
|
15
15
|
marginTop: '1.5rem',
|
|
16
16
|
width: '100%',
|
|
17
17
|
}, children: dataTable === null ? (children) : ((0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 12, children: (isLoadings === null || isLoadings === void 0 ? void 0 : isLoadings.chartLoading) === false ? ((0, jsx_runtime_1.jsx)(DataTable_1.default, { headCells: headCells, rowsData: dataTable, isPagination: true, isLoading: false })) : ((0, jsx_runtime_1.jsx)(AWING_1.CircularProgress, {})) })) })] }) })] }));
|
|
@@ -37,7 +37,6 @@ 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"));
|
|
41
40
|
function ViewTemplate(_a) {
|
|
42
41
|
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) {
|
|
43
42
|
console.log(status);
|
|
@@ -89,7 +88,7 @@ function ViewTemplate(_a) {
|
|
|
89
88
|
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: {
|
|
90
89
|
fontWeight: "bold",
|
|
91
90
|
textTransform: "uppercase",
|
|
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: {
|
|
91
|
+
}, children: templateLabelName })), fields && renderFields(fields, false), fields && advanceFields.length > 0 && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { id: "advance-option", style: {
|
|
93
92
|
display: "flex",
|
|
94
93
|
flexDirection: "row",
|
|
95
94
|
justifyContent: "space-between",
|
|
@@ -97,7 +96,7 @@ function ViewTemplate(_a) {
|
|
|
97
96
|
cursor: "pointer",
|
|
98
97
|
}, onClick: function () {
|
|
99
98
|
setAdvanceOptionExpand(!advanceOptionExpand);
|
|
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.
|
|
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.jsx)(material_1.Grid, { container: true, children: renderFields(fields, true) }))] }))] }), 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") })] }))] }));
|
|
101
100
|
}
|
|
102
101
|
exports.default = ViewTemplate;
|
|
103
102
|
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 EventsProps {
|
|
52
|
+
export interface ViewTemplateProps extends Partial<EventsProps> {
|
|
53
53
|
templateDatas: FieldInfo[];
|
|
54
54
|
/**
|
|
55
55
|
* Đường dẫn tuyệt đối các file của page
|
|
@@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
18
|
+
var material_1 = require("@mui/material");
|
|
18
19
|
var Helpers_1 = require("../../Utils/Helpers");
|
|
19
20
|
require("chartjs-adapter-moment");
|
|
20
21
|
var moment_1 = __importDefault(require("moment"));
|
|
@@ -69,10 +70,14 @@ var BarLineComponent = function (props) {
|
|
|
69
70
|
titleColor: '#212121',
|
|
70
71
|
bodyFont: {
|
|
71
72
|
size: 14,
|
|
72
|
-
family: "'AW-Roboto',
|
|
73
|
+
family: "'AW-Roboto', sans-serif",
|
|
73
74
|
lineHeight: 1.5,
|
|
74
75
|
},
|
|
75
76
|
},
|
|
77
|
+
htmlLegend: {
|
|
78
|
+
// ID of the container to put the legend in
|
|
79
|
+
containerID: 'legend-container',
|
|
80
|
+
},
|
|
76
81
|
legend: {
|
|
77
82
|
position: 'bottom',
|
|
78
83
|
labels: {
|
|
@@ -84,11 +89,11 @@ var BarLineComponent = function (props) {
|
|
|
84
89
|
boxPadding: 50,
|
|
85
90
|
font: {
|
|
86
91
|
size: 15,
|
|
87
|
-
family: "'AW-Roboto',
|
|
92
|
+
family: "'AW-Roboto', sans-serif",
|
|
88
93
|
lineHeight: 1.5,
|
|
89
94
|
},
|
|
90
95
|
},
|
|
91
|
-
display:
|
|
96
|
+
display: false,
|
|
92
97
|
},
|
|
93
98
|
},
|
|
94
99
|
scales: {
|
|
@@ -119,7 +124,7 @@ var BarLineComponent = function (props) {
|
|
|
119
124
|
title: {
|
|
120
125
|
font: {
|
|
121
126
|
size: 14,
|
|
122
|
-
family: "'AW-Roboto',
|
|
127
|
+
family: "'AW-Roboto', sans-serif",
|
|
123
128
|
},
|
|
124
129
|
},
|
|
125
130
|
},
|
|
@@ -142,7 +147,7 @@ var BarLineComponent = function (props) {
|
|
|
142
147
|
font: {
|
|
143
148
|
size: 14,
|
|
144
149
|
weight: 'bold',
|
|
145
|
-
family: "'AW-Roboto',
|
|
150
|
+
family: "'AW-Roboto', sans-serif",
|
|
146
151
|
},
|
|
147
152
|
},
|
|
148
153
|
},
|
|
@@ -161,7 +166,7 @@ var BarLineComponent = function (props) {
|
|
|
161
166
|
font: {
|
|
162
167
|
size: 14,
|
|
163
168
|
weight: 'bold',
|
|
164
|
-
family: "'AW-Roboto',
|
|
169
|
+
family: "'AW-Roboto', sans-serif",
|
|
165
170
|
},
|
|
166
171
|
},
|
|
167
172
|
},
|
|
@@ -182,10 +187,83 @@ var BarLineComponent = function (props) {
|
|
|
182
187
|
}),
|
|
183
188
|
};
|
|
184
189
|
var Chart = chart;
|
|
185
|
-
|
|
190
|
+
var getOrCreateLegendList = function (chart, id) {
|
|
191
|
+
var legendContainer = document.getElementById(id);
|
|
192
|
+
var listContainer = legendContainer === null || legendContainer === void 0 ? void 0 : legendContainer.querySelector('ul');
|
|
193
|
+
if (!listContainer) {
|
|
194
|
+
listContainer = document.createElement('ul');
|
|
195
|
+
listContainer.style.display = 'flex';
|
|
196
|
+
listContainer.style.flexDirection = 'row';
|
|
197
|
+
listContainer.style.margin = '0';
|
|
198
|
+
listContainer.style.padding = '0';
|
|
199
|
+
legendContainer === null || legendContainer === void 0 ? void 0 : legendContainer.appendChild(listContainer);
|
|
200
|
+
}
|
|
201
|
+
return listContainer;
|
|
202
|
+
};
|
|
203
|
+
var htmlLegendPlugin = {
|
|
204
|
+
id: 'htmlLegend',
|
|
205
|
+
afterUpdate: function (chart, args, options) {
|
|
206
|
+
var ul = getOrCreateLegendList(chart, options.containerID);
|
|
207
|
+
// Remove old legend items
|
|
208
|
+
while (ul.firstChild) {
|
|
209
|
+
ul.firstChild.remove();
|
|
210
|
+
}
|
|
211
|
+
// Reuse the built-in legendItems generator
|
|
212
|
+
var items = chart.options.plugins.legend.labels.generateLabels(chart);
|
|
213
|
+
items.forEach(function (item) {
|
|
214
|
+
var li = document.createElement('li');
|
|
215
|
+
li.style.alignItems = 'center';
|
|
216
|
+
li.style.cursor = 'pointer';
|
|
217
|
+
li.style.display = 'flex';
|
|
218
|
+
li.style.flexDirection = 'row';
|
|
219
|
+
li.style.marginLeft = '10px';
|
|
220
|
+
li.onclick = function () {
|
|
221
|
+
var type = chart.config.type;
|
|
222
|
+
if (type === 'pie' || type === 'doughnut') {
|
|
223
|
+
// Pie and doughnut charts only have a single dataset and visibility is per item
|
|
224
|
+
chart.toggleDataVisibility(item.index);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
chart.setDatasetVisibility(item.datasetIndex, !chart.isDatasetVisible(item.datasetIndex));
|
|
228
|
+
}
|
|
229
|
+
chart.update();
|
|
230
|
+
};
|
|
231
|
+
// Color box
|
|
232
|
+
var boxSpan = document.createElement('span');
|
|
233
|
+
boxSpan.style.background = item.fillStyle;
|
|
234
|
+
boxSpan.style.borderColor = item.strokeStyle;
|
|
235
|
+
boxSpan.style.borderWidth = item.lineWidth + 'px';
|
|
236
|
+
boxSpan.style.display = 'inline-block';
|
|
237
|
+
boxSpan.style.flexShrink = '0';
|
|
238
|
+
boxSpan.style.height = '20px';
|
|
239
|
+
boxSpan.style.marginRight = '10px';
|
|
240
|
+
boxSpan.style.width = '20px';
|
|
241
|
+
boxSpan.style.borderRadius = '20px';
|
|
242
|
+
// Text
|
|
243
|
+
var textContainer = document.createElement('p');
|
|
244
|
+
textContainer.style.color = item.fontColor;
|
|
245
|
+
textContainer.style.margin = '0';
|
|
246
|
+
textContainer.style.padding = '0';
|
|
247
|
+
textContainer.style.textDecoration = item.hidden
|
|
248
|
+
? 'line-through'
|
|
249
|
+
: '';
|
|
250
|
+
var text = document.createTextNode(item.text);
|
|
251
|
+
textContainer.appendChild(text);
|
|
252
|
+
li.appendChild(boxSpan);
|
|
253
|
+
li.appendChild(textContainer);
|
|
254
|
+
ul.appendChild(li);
|
|
255
|
+
});
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
return ((0, jsx_runtime_1.jsxs)(material_1.Box, { sx: {
|
|
186
259
|
width: width,
|
|
187
260
|
height: height,
|
|
188
261
|
position: 'relative',
|
|
189
|
-
|
|
262
|
+
marginBottom: '80px',
|
|
263
|
+
}, children: [(0, jsx_runtime_1.jsx)(Chart, { data: chartData, type: type, options: (0, Helpers_1.updateObjectFields)(options, optionCustom), plugins: [htmlLegendPlugin] }), (0, jsx_runtime_1.jsx)(material_1.Box, { id: "legend-container", sx: {
|
|
264
|
+
marginTop: '35px',
|
|
265
|
+
display: 'flex',
|
|
266
|
+
justifyContent: 'center',
|
|
267
|
+
} })] }));
|
|
190
268
|
};
|
|
191
269
|
exports.default = BarLineComponent;
|
|
@@ -38,7 +38,7 @@ var PieComponent = function (_a) {
|
|
|
38
38
|
pointStyle: 'circle',
|
|
39
39
|
font: {
|
|
40
40
|
size: 14,
|
|
41
|
-
family: "'AW-Roboto',
|
|
41
|
+
family: "'AW-Roboto', sans-serif",
|
|
42
42
|
lineHeight: 1.5,
|
|
43
43
|
},
|
|
44
44
|
},
|
|
@@ -54,7 +54,7 @@ var PieComponent = function (_a) {
|
|
|
54
54
|
bodySpacing: 8,
|
|
55
55
|
bodyFont: {
|
|
56
56
|
size: 14,
|
|
57
|
-
family: "'AW-Roboto',
|
|
57
|
+
family: "'AW-Roboto', sans-serif",
|
|
58
58
|
lineHeight: 1.5,
|
|
59
59
|
},
|
|
60
60
|
callbacks: {
|
|
@@ -110,7 +110,7 @@ function DataInput(props) {
|
|
|
110
110
|
case 'autocomplete': {
|
|
111
111
|
return ((0, jsx_runtime_1.jsx)(material_1.Autocomplete, { multiple: fieldDefinition.multiple, options: fieldDefinition.options, getOptionLabel: function (option) { var _a, _b; return (_b = (_a = option.label) !== null && _a !== void 0 ? _a : option.text) !== null && _b !== void 0 ? _b : ''; }, isOptionEqualToValue: function (option, value) {
|
|
112
112
|
return (option === null || option === void 0 ? void 0 : option.value) === (value === null || value === void 0 ? void 0 : value.value);
|
|
113
|
-
}, disableclearable: fieldDefinition.disableClearable, getOptionDisabled: function (option) { return option === null || option === void 0 ? void 0 : option.disabled; }, onChange: function (e, value) {
|
|
113
|
+
}, getOptionKey: function (option) { return option.value; }, disableclearable: fieldDefinition.disableClearable, getOptionDisabled: function (option) { return option === null || option === void 0 ? void 0 : option.disabled; }, onChange: function (e, value) {
|
|
114
114
|
var newValue = fieldDefinition.multiple
|
|
115
115
|
? value.map(function (x) { return x === null || x === void 0 ? void 0 : x.value; })
|
|
116
116
|
: value === null || value === void 0 ? void 0 : value.value;
|
|
@@ -7,7 +7,45 @@ export interface GridSortModel {
|
|
|
7
7
|
field: string;
|
|
8
8
|
sort: GridSortDirection;
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
interface DataGridColumnDefinitionBase {
|
|
11
|
+
/**
|
|
12
|
+
* Tên trường
|
|
13
|
+
*/
|
|
14
|
+
field: string;
|
|
15
|
+
/**
|
|
16
|
+
* Nội dung hiển thị ở header
|
|
17
|
+
*/
|
|
18
|
+
headerName: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* Nếu bằng true thì sẽ cho phép sort theo trường này
|
|
21
|
+
*/
|
|
22
|
+
sortable?: boolean;
|
|
23
|
+
options?: any[];
|
|
24
|
+
/**
|
|
25
|
+
* Hàm kiểm tra giá trị điền khi sửa trực tiếp trường này
|
|
26
|
+
*
|
|
27
|
+
* @param value Giá trị
|
|
28
|
+
*/
|
|
29
|
+
checkValid?(value: any): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Kiểu dữ liệu của trường
|
|
32
|
+
*/
|
|
33
|
+
type?: 'text' | 'number';
|
|
34
|
+
/**
|
|
35
|
+
* Cách lấy nội dung hiển thị khác, nếu có
|
|
36
|
+
*
|
|
37
|
+
* @param row Một đối tượng trong danh sách hiển thị
|
|
38
|
+
* @param idx Số thứ tự của đối tượng trong danh sách
|
|
39
|
+
*/
|
|
40
|
+
valueGetter?(row: any, idx: number, stt: number): ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Độ rộng của cột
|
|
43
|
+
*/
|
|
44
|
+
width?: string | number;
|
|
45
|
+
TableCellProps?: TableCellProps;
|
|
46
|
+
dynamicTableCellProps?: (row: any) => TableCellProps;
|
|
47
|
+
}
|
|
48
|
+
export interface DataGridColumnDefinition extends DataGridColumnDefinitionBase {
|
|
11
49
|
/**
|
|
12
50
|
* Tên trường
|
|
13
51
|
*/
|
|
@@ -50,7 +50,8 @@ function GroupTable(props) {
|
|
|
50
50
|
}, [headCells]);
|
|
51
51
|
(0, react_1.useEffect)(function () {
|
|
52
52
|
handleGetGroupData();
|
|
53
|
-
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
}, [groupPageSize, groupPageIndex]);
|
|
54
55
|
var handleGetGroupData = function () {
|
|
55
56
|
setLoading(true);
|
|
56
57
|
onGetData(filters, groupPageIndex, groupPageSize).then(function (result) {
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
},
|
|
162
162
|
"InvalidMessage": {
|
|
163
163
|
"InvalidNotExistedUsername": "Username is invalid or not existed",
|
|
164
|
-
"InvalidAccountConnected": "Account
|
|
164
|
+
"InvalidAccountConnected": "Account is already existed!"
|
|
165
165
|
},
|
|
166
166
|
"ViewTemplate": {
|
|
167
167
|
"Value": "Value",
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
},
|
|
126
126
|
"InvalidMessage": {
|
|
127
127
|
"InvalidNotExistedUsername": "Tài khoản không tồn tại",
|
|
128
|
-
"InvalidAccountConnected": "Tài khoản đã
|
|
128
|
+
"InvalidAccountConnected": "Tài khoản đã tồn tại!"
|
|
129
129
|
},
|
|
130
130
|
"User": {
|
|
131
131
|
"Username": "Tài khoản",
|