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.
Files changed (38) hide show
  1. package/lib/ACM-AXN/Campaign/Container.js +1 -1
  2. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdList.js +11 -10
  3. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/EditAds.js +11 -9
  4. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.js +2 -2
  5. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignList.js +1 -1
  6. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/index.js +0 -1
  7. package/lib/ACM-AXN/CampaignPlan/Container.js +2 -1
  8. package/lib/ACM-AXN/CampaignPlan/Detail.js +4 -1
  9. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/component.js +1 -1
  10. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/container.js +3 -3
  11. package/lib/ACM-AXN/Notifications/NotificationDetail/index.js +28 -31
  12. package/lib/ACM-AXN/Notifications/Types.d.ts +1 -1
  13. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +9 -26
  14. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.js +3 -3
  15. package/lib/ACM-AXN/Page/Import/index.js +1 -0
  16. package/lib/ACM-AXN/ScheduleCompletionRate/Container.js +1 -0
  17. package/lib/ACM-AXN/Statistics/ControlPanel.d.ts +1 -1
  18. package/lib/ACM-AXN/Statistics/ControlPanel.js +12 -8
  19. package/lib/ACM-AXN/Statistics/container.d.ts +1 -1
  20. package/lib/ACM-AXN/Statistics/container.js +2 -2
  21. package/lib/ACM-AXN/Statistics/interface.d.ts +1 -0
  22. package/lib/ACM-AXN/StatisticsAudienceDemographic/container.d.ts +1 -1
  23. package/lib/ACM-AXN/StatisticsAudienceDemographic/container.js +2 -2
  24. package/lib/ACM-AXN/StatisticsAudienceDemographic/interfaces.d.ts +1 -0
  25. package/lib/ACM-AXN/StatisticsByProvince/container.d.ts +1 -1
  26. package/lib/ACM-AXN/StatisticsByProvince/container.js +2 -2
  27. package/lib/ACM-AXN/StatisticsByProvince/interfaces.d.ts +1 -0
  28. package/lib/ACM-AXN/TransactionLog/Detail.js +1 -1
  29. package/lib/ACM-AXN/ViewTemplate/container.js +2 -3
  30. package/lib/ACM-AXN/ViewTemplate/interface.d.ts +1 -1
  31. package/lib/AWING/Chart/BarLineComponent.js +86 -8
  32. package/lib/AWING/Chart/PieComponent.js +2 -2
  33. package/lib/AWING/DataForm/DataInput.js +1 -1
  34. package/lib/AWING/DataGrid/interface.d.ts +39 -1
  35. package/lib/AWING/GroupTable/GroupTable.js +2 -1
  36. package/lib/translate/en/translation.json +1 -1
  37. package/lib/translate/vi/translation.json +1 -1
  38. 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 service = (0, Hooks_1.default)().service;
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 _b = (0, recoil_1.useRecoilState)(atoms_1.adSelectedState), adSelected = _b[0], setAdSelected = _b[1];
73
- var _c = (0, recoil_1.useRecoilState)(atoms_1.adOpenState), adOpen = _c[0], setAdOpen = _c[1];
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 _d = (0, react_1.useState)({
76
+ var _e = (0, react_1.useState)({
77
77
  welcomeId: '',
78
78
  loginId: '',
79
79
  domainIds: [],
80
- }), previewId = _d[0], setPreviewId = _d[1];
81
- var _e = react_1.default.useState(), anchorEl = _e[0], setAnchorEl = _e[1];
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 _f = (0, react_1.useState)({}), adsValid = _f[0], setAdsValid = _f[1];
85
- var _g = (0, react_1.useState)(false), isAdvancedDrawerOpen = _g[0], setIsAdvancedDrawerOpen = _g[1];
86
- var _h = (0, recoil_1.useRecoilState)(Recoils_1.weightState), weightProps = _h[0], setWeightState = _h[1];
87
- var _j = (0, react_1.useState)(false), isMultiEditDrawerOpen = _j[0], setIsMultiEditDrawerOpen = _j[1];
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, _j, _k;
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)((_b = (_a = inputObj === null || inputObj === void 0 ? void 0 : inputObj.time) === null || _a === void 0 ? void 0 : _a.startDate) === null || _b === void 0 ? void 0 : _b.toDate());
120
- result.endDate = (0, Helpers_1.convertDateTimeToTimestamp)((_d = (_c = inputObj === null || inputObj === void 0 ? void 0 : inputObj.time) === null || _c === void 0 ? void 0 : _c.endDate) === null || _d === void 0 ? void 0 : _d.toDate());
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 = (_e = inputObj[f]) === null || _e === void 0 ? void 0 : _e.value;
129
+ result.loginId = (_c = inputObj[f]) === null || _c === void 0 ? void 0 : _c.value;
128
130
  result.loginPage = {
129
- pageId: (_f = inputObj[f]) === null || _f === void 0 ? void 0 : _f.value,
130
- title: (_g = inputObj[f]) === null || _g === void 0 ? void 0 : _g.text,
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 = (_h = inputObj[f]) === null || _h === void 0 ? void 0 : _h.value;
136
+ result.welcomeId = (_f = inputObj[f]) === null || _f === void 0 ? void 0 : _f.value;
135
137
  result.welcomePage = {
136
- pageId: (_j = inputObj[f]) === null || _j === void 0 ? void 0 : _j.value,
137
- title: (_k = inputObj[f]) === null || _k === void 0 ? void 0 : _k.text,
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.jsxs)(material_1.TextField, { id: "priority", select: true, required: true, variant: "standard", fullWidth: true, label: translationText.priority, value: isNaN(Number(subCampaign.priority))
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: [(0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: Types_1.CampaignPriority.ClassA, children: t('Campaign.ClassA') }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: Types_1.CampaignPriority.ClassB, children: t('Campaign.ClassB') }), (0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: Types_1.CampaignPriority.ClassC, children: t('Campaign.ClassC') })] }) }), (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) {
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
- }, [service, filterBy, queryInput]);
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 "".concat(row.name, " ").concat(getCampaignPriority(row.priority));
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: "center", children: row === null || row === void 0 ? void 0 : row.view }, item.id));
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] = Enum_1.HEAD_CELL_NAMES.CAMPAIGN,
133
- _a[Enum_1.HEAD_CELL_NAMES.PLACE_CAMPAIGN] = Enum_1.HEAD_CELL_NAMES.PLACE,
134
- _a[Enum_1.HEAD_CELL_NAMES.DOMAIN_CAMPAIGN] = Enum_1.HEAD_CELL_NAMES.DOMAIN,
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(-1), count = _c[0], setCount = _c[1];
74
- var _d = (0, react_1.useState)([]), notificationMessage = _d[0], setNotificationMessage = _d[1];
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(handleIntersection);
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
- console.log({
91
- count: count,
92
- totalItemCount: totalItemCount,
93
- notificationMessage: notificationMessage
94
- });
95
- if (count >= 0 &&
96
- (totalItemCount.current > notificationMessage.length ||
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
- totalItemCount.current = res.totalItemCount;
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
- var handleIntersection = (0, react_1.useCallback)(function (entries) {
118
- var firsEntry = entries[0];
119
- if (firsEntry.isIntersecting) {
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?: number;
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 _f = (0, Context_2.default)(), service = _f.service, pageCode = _f.pageCode, domainId = _f.domainId, CONFIGS = _f.configs;
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 _g = react_1.default.useState(''), scriptValidationTemplate = _g[0], setScriptValidationTemplate = _g[1];
81
- var _h = react_1.default.useState(''), scriptAutoField = _h[0], setScriptAutoField = _h[1];
82
- var _j = react_1.default.useState(false), loading = _j[0], setLoading = _j[1];
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 _k = (0, recoil_1.useRecoilState)(Recoil_1.pageEventState), events = _k[0], setEvent = _k[1];
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, onChangeEvent: function (values) {
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 ((0, lodash_1.isEmpty)(obj))
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 (Boolean(viewInfoData.templateTypeId)) {
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
  {
@@ -90,6 +90,7 @@ var ImportPage = function () {
90
90
  label: 'File',
91
91
  inputProps: {
92
92
  value: tempFile === null || tempFile === void 0 ? void 0 : tempFile.name,
93
+ readOnly: true,
93
94
  },
94
95
  required: true,
95
96
  },
@@ -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, infoSX, }: BaseStatistics<F>): import("react/jsx-runtime").JSX.Element;
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, infoSX = _a.infoSX;
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 _c = (0, react_1.useState)(), queryInput = _c[0], setQueryInput = _c[1];
63
- var _d = (0, react_1.useState)([]), elementInputs = _d[0], setElementInputs = _d[1];
64
- var _e = (0, react_1.useState)(false), isShowFilterEnhanced = _e[0], setIsHideFieldAdvanced = _e[1];
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
- (queryInput === null || queryInput === void 0 ? void 0 : queryInput.domainId) === '0', 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) ||
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 &&
@@ -7,6 +7,7 @@ export interface BaseStatistics<F> {
7
7
  isLoadings: ILoadings;
8
8
  timeline?: number;
9
9
  infoSX?: InfoSX;
10
+ disableView?: boolean;
10
11
  }
11
12
  export interface InfoSX {
12
13
  dateRangePicker?: number;
@@ -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
  }
@@ -12,4 +12,5 @@ export interface IStatisticsAudienceDemographicContainerProps<F> {
12
12
  barChart: any;
13
13
  pieChart: any;
14
14
  };
15
+ disableView?: boolean;
15
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, {})) })) })] }) })] }));
@@ -9,6 +9,7 @@ export interface IStatisticsByProvinceContainerProps<F> {
9
9
  headCells: any;
10
10
  infoSX?: any;
11
11
  children?: any;
12
+ disableView?: boolean;
12
13
  }
13
14
  export type Order = 'asc' | 'desc';
14
15
  export type HeadCell = {
@@ -92,7 +92,7 @@ var newStyles = {
92
92
  removedGutterBackground: '#ececec',
93
93
  },
94
94
  titleBlock: {
95
- fontFamily: 'Roboto',
95
+ fontFamily: "'AW-Roboto', sans-serif",
96
96
  fontSize: '12px',
97
97
  fontWeight: 'bold',
98
98
  },
@@ -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.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") })] }))] }));
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', Helvetica, Arial, sans-serif",
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', Helvetica, Arial, sans-serif",
92
+ family: "'AW-Roboto', sans-serif",
88
93
  lineHeight: 1.5,
89
94
  },
90
95
  },
91
- display: true,
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', Helvetica, Arial, sans-serif",
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', Helvetica, Arial, sans-serif",
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', Helvetica, Arial, sans-serif",
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
- return ((0, jsx_runtime_1.jsx)("div", { style: {
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
- }, children: (0, jsx_runtime_1.jsx)(Chart, { data: chartData, type: type, options: (0, Helpers_1.updateObjectFields)(options, optionCustom) }) }));
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', Helvetica, Arial, sans-serif",
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', Helvetica, Arial, sans-serif",
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
- export interface DataGridColumnDefinition {
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
- }, [headCells, groupPageSize, groupPageIndex]);
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 has been added to this domain!"
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 đã được gắn vào domain này rồi!"
128
+ "InvalidAccountConnected": "Tài khoản đã tồn tại!"
129
129
  },
130
130
  "User": {
131
131
  "Username": "Tài khoản",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awing-library",
3
- "version": "2.1.106-beta",
3
+ "version": "2.1.107-beta",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",