awing-library 2.1.147-beta → 2.1.147

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 (212) hide show
  1. package/lib/ACM-AXN/AuthenticationProfile/Container.js +4 -4
  2. package/lib/ACM-AXN/AuthenticationProfile/CreateOrEdit/index.js +2 -2
  3. package/lib/ACM-AXN/Campaign/Container.js +52 -54
  4. package/lib/ACM-AXN/Campaign/Container.test.js +1 -3
  5. package/lib/ACM-AXN/Campaign/CreateOrEdit/Recoils.d.ts +8 -1
  6. package/lib/ACM-AXN/Campaign/CreateOrEdit/Recoils.js +27 -3
  7. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.d.ts +17 -0
  8. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.js +121 -0
  9. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.test.d.ts +1 -0
  10. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RowTable.test.js +219 -0
  11. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RunInBackground.d.ts +2 -0
  12. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RunInBackground.js +306 -0
  13. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RunInBackground.test.d.ts +1 -0
  14. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/RunInBackground.test.js +230 -0
  15. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.d.ts +1 -0
  16. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.js +123 -0
  17. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.test.d.ts +1 -0
  18. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabApprove/index.test.js +253 -0
  19. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabInfomation.js +21 -5
  20. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabPartner.d.ts +1 -1
  21. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabPartner.js +47 -78
  22. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.d.ts +2 -1
  23. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.js +2 -2
  24. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/ControlPanel.js +2 -1
  25. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/index.js +2 -1
  26. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Utils.d.ts +19 -42
  27. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Utils.js +298 -96
  28. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/container.d.ts +3 -0
  29. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/container.js +119 -54
  30. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.d.ts +1 -1
  31. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.js +46 -8
  32. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/component.js +6 -4
  33. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/container.js +1 -1
  34. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/PasswordDialog.d.ts +9 -0
  35. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/PasswordDialog.js +56 -0
  36. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Table.js +5 -1
  37. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Util.d.ts +12 -0
  38. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Util.js +22 -7
  39. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/container.js +63 -12
  40. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.d.ts +1 -0
  41. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.js +17 -4
  42. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Types.d.ts +10 -0
  43. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Utils.js +4 -1
  44. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/common.d.ts +1 -0
  45. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/common.js +3 -2
  46. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/component.js +6 -2
  47. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/container.js +31 -29
  48. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdList.js +1 -1
  49. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdRow.js +1 -1
  50. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/TargetOS/container.js +2 -2
  51. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/Advanced.js +1 -1
  52. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/EditAds.js +5 -5
  53. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.js +44 -33
  54. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.test.js +3 -13
  55. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignList.js +45 -20
  56. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/atoms.js +3 -2
  57. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/index.js +3 -2
  58. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/useSearchPage.js +33 -8
  59. package/lib/ACM-AXN/Campaign/CreateOrEdit/index.d.ts +5 -1
  60. package/lib/ACM-AXN/Campaign/CreateOrEdit/index.js +172 -59
  61. package/lib/ACM-AXN/Campaign/Enum.d.ts +24 -6
  62. package/lib/ACM-AXN/Campaign/Enum.js +30 -11
  63. package/lib/ACM-AXN/Campaign/Types.d.ts +53 -5
  64. package/lib/ACM-AXN/Campaign/Utils.d.ts +6 -1
  65. package/lib/ACM-AXN/Campaign/Utils.js +50 -3
  66. package/lib/ACM-AXN/Campaign/index.js +2 -2
  67. package/lib/ACM-AXN/CampaignPlan/Container.js +4 -6
  68. package/lib/ACM-AXN/CampaignPlan/Detail.js +3 -3
  69. package/lib/ACM-AXN/CampaignPlan/Filter.js +3 -3
  70. package/lib/ACM-AXN/CampaignSchedule/Components/ControlPanel/Filter.js +14 -10
  71. package/lib/ACM-AXN/CampaignSchedule/Components/EnhancedPagination/index.js +3 -2
  72. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/component.js +5 -7
  73. package/lib/ACM-AXN/CampaignSchedule/DataConfig.js +4 -4
  74. package/lib/ACM-AXN/CampaignSchedule/DataConfigAXN.js +5 -4
  75. package/lib/ACM-AXN/CampaignSchedule/Recoil/Atom.d.ts +1 -2
  76. package/lib/ACM-AXN/CampaignSchedule/Recoil/Atom.js +1 -5
  77. package/lib/ACM-AXN/Common/Constant.d.ts +3 -0
  78. package/lib/ACM-AXN/Common/Constant.js +2 -0
  79. package/lib/ACM-AXN/Common/Enum.d.ts +8 -3
  80. package/lib/ACM-AXN/Common/Enum.js +19 -4
  81. package/lib/ACM-AXN/Common/Types.d.ts +5 -0
  82. package/lib/ACM-AXN/GeoFencing/GoongMap/index.d.ts +8 -9
  83. package/lib/ACM-AXN/GeoFencing/component.js +7 -7
  84. package/lib/ACM-AXN/GeoFencing/interface.d.ts +1 -2
  85. package/lib/ACM-AXN/Holiday/FormHoliday.js +1 -0
  86. package/lib/ACM-AXN/Notifications/NotificationPopover/Container.d.ts +0 -5
  87. package/lib/ACM-AXN/Notifications/NotificationPopover/Container.js +7 -90
  88. package/lib/ACM-AXN/Notifications/NotificationPopover/index.d.ts +0 -5
  89. package/lib/ACM-AXN/Notifications/Types.d.ts +2 -0
  90. package/lib/ACM-AXN/Page/Constant.js +2 -0
  91. package/lib/ACM-AXN/Page/Container.js +3 -3
  92. package/lib/ACM-AXN/Page/CreateOrEdit/ListenTemplate.d.ts +6 -0
  93. package/lib/ACM-AXN/Page/CreateOrEdit/ListenTemplate.js +63 -0
  94. package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.d.ts +11 -2
  95. package/lib/ACM-AXN/Page/CreateOrEdit/Recoil.js +16 -12
  96. package/lib/ACM-AXN/Page/CreateOrEdit/TabInfo/TrackingCode.js +1 -1
  97. package/lib/ACM-AXN/Page/CreateOrEdit/TabInfo/Utils.js +1 -1
  98. package/lib/ACM-AXN/Page/CreateOrEdit/TabInfo/index.js +1 -0
  99. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/Components/Panel.d.ts +1 -9
  100. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/Components/Panel.js +0 -9
  101. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewContent.js +11 -44
  102. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.d.ts +2 -3
  103. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/ViewInfo.js +39 -61
  104. package/lib/ACM-AXN/Page/CreateOrEdit/Tabview/index.js +29 -32
  105. package/lib/ACM-AXN/Page/CreateOrEdit/Utils.js +6 -6
  106. package/lib/ACM-AXN/Page/CreateOrEdit/index.js +19 -4
  107. package/lib/ACM-AXN/Page/Import/index.js +2 -2
  108. package/lib/ACM-AXN/Page/Types.d.ts +3 -0
  109. package/lib/ACM-AXN/Page/enums.d.ts +5 -0
  110. package/lib/ACM-AXN/Page/enums.js +7 -1
  111. package/lib/ACM-AXN/Permission/Components/Styles.d.ts +1 -2
  112. package/lib/ACM-AXN/PlaceFilter/DataTable/component/index.js +2 -5
  113. package/lib/ACM-AXN/PlaceFilter/Input/component/index.js +1 -2
  114. package/lib/ACM-AXN/PlaceFilter/Tag/component/TagChip.js +1 -1
  115. package/lib/ACM-AXN/PlaceFilter/interface.d.ts +1 -0
  116. package/lib/ACM-AXN/ScheduleCompletionRate/Container.js +16 -16
  117. package/lib/ACM-AXN/ScheduleCompletionRate/DataSetConfig.d.ts +14 -9
  118. package/lib/ACM-AXN/ScheduleCompletionRate/DataSetConfig.js +19 -18
  119. package/lib/ACM-AXN/ScheduleCompletionRate/Detail/CompletionRate.js +16 -6
  120. package/lib/ACM-AXN/ScheduleCompletionRate/Detail/CompletionRateDate.js +17 -10
  121. package/lib/ACM-AXN/ScheduleCompletionRate/Filter.d.ts +2 -1
  122. package/lib/ACM-AXN/ScheduleCompletionRate/Filter.js +30 -51
  123. package/lib/ACM-AXN/ScheduleCompletionRate/Filter.test.js +1 -1
  124. package/lib/ACM-AXN/ScheduleCompletionRate/SearchCampaign.d.ts +2 -2
  125. package/lib/ACM-AXN/ScheduleCompletionRate/SearchCampaign.js +3 -9
  126. package/lib/ACM-AXN/ScheduleCompletionRate/Types.d.ts +16 -36
  127. package/lib/ACM-AXN/ScheduleCompletionRate/Utils.d.ts +5 -5
  128. package/lib/ACM-AXN/ScheduleCompletionRate/Utils.js +13 -10
  129. package/lib/ACM-AXN/Statistics/ControlPanel.js +17 -5
  130. package/lib/ACM-AXN/Statistics/Enums.d.ts +2 -1
  131. package/lib/ACM-AXN/Statistics/Enums.js +1 -0
  132. package/lib/ACM-AXN/StatisticsAudienceDemographic/Tabs/AgeRange.js +1 -0
  133. package/lib/ACM-AXN/StatisticsByProvince/DataTable.js +1 -1
  134. package/lib/ACM-AXN/TaskScheduler/CreateOrEdit.js +4 -4
  135. package/lib/ACM-AXN/Template/Container.js +2 -2
  136. package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.d.ts +1 -0
  137. package/lib/ACM-AXN/Template/CreateOrEdit/Recoils.js +5 -1
  138. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.d.ts +2 -2
  139. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.js +56 -37
  140. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.d.ts +1 -1
  141. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.test.js +62 -51
  142. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.d.ts +28 -4
  143. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Utils.js +43 -15
  144. package/lib/ACM-AXN/Template/CreateOrEdit/index.js +8 -4
  145. package/lib/ACM-AXN/Template/Import.js +2 -2
  146. package/lib/ACM-AXN/Template/Types.d.ts +9 -9
  147. package/lib/ACM-AXN/TransactionLog/Detail.js +1 -1
  148. package/lib/ACM-AXN/ViewTemplate/Preview.js +5 -6
  149. package/lib/ACM-AXN/ViewTemplate/TemplateField/Event.js +23 -11
  150. package/lib/ACM-AXN/ViewTemplate/TemplateField/Fields/BasicField/Utils.d.ts +18 -0
  151. package/lib/ACM-AXN/ViewTemplate/TemplateField/Fields/BasicField/Utils.js +170 -0
  152. package/lib/ACM-AXN/ViewTemplate/TemplateField/Fields/BasicField/index.js +42 -129
  153. package/lib/ACM-AXN/ViewTemplate/common.d.ts +2 -1
  154. package/lib/ACM-AXN/ViewTemplate/common.js +47 -7
  155. package/lib/ACM-AXN/ViewTemplate/container.js +8 -2
  156. package/lib/ACM-AXN/Wizard/CreateOrEdit/PageTemplate.d.ts +3 -1
  157. package/lib/ACM-AXN/Wizard/CreateOrEdit/PageTemplate.js +18 -28
  158. package/lib/ACM-AXN/Wizard/CreateOrEdit/PageTemplate.test.js +2 -0
  159. package/lib/ACM-AXN/Wizard/CreateOrEdit/RowTemplate.js +1 -1
  160. package/lib/ACM-AXN/Wizard/CreateOrEdit/index.js +17 -1
  161. package/lib/ACM-AXN/index.d.ts +1 -0
  162. package/lib/ACM-AXN/index.js +1 -0
  163. package/lib/AWING/AsyncAutocomplete/index.js +2 -2
  164. package/lib/AWING/BasicDataForm/BasicDataForm.js +9 -6
  165. package/lib/AWING/BasicDataForm/interface.d.ts +3 -0
  166. package/lib/AWING/Chart/BarLineComponent.js +20 -24
  167. package/lib/AWING/Chart/PieComponent.d.ts +3 -4
  168. package/lib/AWING/Chart/PieComponent.js +16 -16
  169. package/lib/AWING/Chart/Styles.js +51 -16
  170. package/lib/AWING/DataForm/DataInput.js +105 -23
  171. package/lib/AWING/DataForm/interface.d.ts +2 -0
  172. package/lib/AWING/DataGrid/index.js +8 -13
  173. package/lib/AWING/DateRangePicker/component.js +81 -33
  174. package/lib/AWING/DateRangePicker/configDate.d.ts +1 -2
  175. package/lib/AWING/DateRangePicker/configDate.js +12 -12
  176. package/lib/AWING/DateRangePicker/interface.d.ts +1 -0
  177. package/lib/AWING/Form/useForm.js +3 -2
  178. package/lib/AWING/GoogleMap/GGMap.d.ts +3 -0
  179. package/lib/AWING/GoogleMap/GGMap.js +256 -0
  180. package/lib/AWING/GoogleMap/index.d.ts +4 -0
  181. package/lib/AWING/GoogleMap/index.js +41 -0
  182. package/lib/AWING/GoogleMap/interface.d.ts +21 -0
  183. package/lib/AWING/GoogleMap/interface.js +2 -0
  184. package/lib/AWING/GoogleMap/utils.d.ts +25 -0
  185. package/lib/AWING/GoogleMap/utils.js +135 -0
  186. package/lib/AWING/GroupTable/GroupTable.js +2 -2
  187. package/lib/AWING/GroupTable/component.d.ts +1 -0
  188. package/lib/AWING/GroupTable/component.js +2 -2
  189. package/lib/AWING/NumberFormat/index.d.ts +3 -1
  190. package/lib/AWING/NumberFormat/index.js +2 -2
  191. package/lib/AWING/PageManagement/PageManagement.js +4 -3
  192. package/lib/AWING/Pagination/index.js +11 -3
  193. package/lib/AWING/index.d.ts +1 -0
  194. package/lib/AWING/index.js +1 -0
  195. package/lib/AWING/ultis/validation.d.ts +1 -0
  196. package/lib/AWING/ultis/validation.js +25 -6
  197. package/lib/Commons/Components/ClassicDrawer.js +5 -4
  198. package/lib/Commons/Components/HighlightedCode/MarkdownElement.js +6 -1
  199. package/lib/Commons/Hooks/usePath.js +3 -3
  200. package/lib/Utils/Helpers.d.ts +4 -3
  201. package/lib/Utils/Helpers.js +54 -23
  202. package/lib/i18n.js +31 -2
  203. package/lib/translate/en/translation.json +131 -71
  204. package/lib/translate/id/translation.json +893 -0
  205. package/lib/translate/ind/translation.json +893 -0
  206. package/lib/translate/ja/translation.json +893 -0
  207. package/lib/translate/lao/translation.json +893 -0
  208. package/lib/translate/mys/translation.json +893 -0
  209. package/lib/translate/phl/translation.json +893 -0
  210. package/lib/translate/th/translation.json +893 -0
  211. package/lib/translate/vi/translation.json +91 -31
  212. package/package.json +9 -4
@@ -10,26 +10,36 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
13
22
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
24
  };
16
25
  Object.defineProperty(exports, "__esModule", { value: true });
17
26
  var jsx_runtime_1 = require("react/jsx-runtime");
27
+ var Enum_1 = require("../../../../../ACM-AXN/Campaign/Enum");
28
+ var exportFile_1 = require("../../../../../ACM-AXN/CampaignSchedule/exportFile");
29
+ var Enum_2 = require("../../../../../ACM-AXN/Common/Enum");
30
+ var Helpers_1 = require("../../../../../Utils/Helpers");
31
+ var lodash_1 = require("lodash");
32
+ var moment_1 = __importDefault(require("moment"));
18
33
  var react_1 = require("react");
34
+ var Context_1 = __importDefault(require("../Context"));
19
35
  var common_1 = require("../common");
20
36
  var Utils_1 = require("./Utils");
21
37
  var component_1 = __importDefault(require("./component"));
22
- var moment_1 = __importDefault(require("moment"));
23
- var Enum_1 = require("../../../../../ACM-AXN/Campaign/Enum");
24
- var lodash_1 = require("lodash");
25
- var Context_1 = __importDefault(require("../Context"));
26
- var exportFile_1 = require("../../../../../ACM-AXN/CampaignSchedule/exportFile");
27
38
  var AnalyticContainer = function (props) {
28
- var campaignId = props.campaignId, startDate = props.startDate, endDate = props.endDate, subCampaigns = props.subCampaigns, domains = props.domains;
39
+ var campaignId = props.campaignId, startDate = props.startDate, endDate = props.endDate, subCampaigns = props.subCampaigns, domains = props.domains, campaignName = props.campaignName, fullPlaces = props.fullPlaces;
29
40
  var client = (0, Context_1.default)().services;
30
41
  var _a = (0, react_1.useState)(true), isLoading = _a[0], setIsLoading = _a[1];
31
42
  var _b = (0, react_1.useState)([]), statisticalChartData = _b[0], setStatisticalChartData = _b[1];
32
- var _c = (0, react_1.useState)([]), statisticalData = _c[0], setStatisticalData = _c[1];
33
43
  var placesOfCampaign = (0, react_1.useMemo)(function () {
34
44
  var result = [];
35
45
  subCampaigns.forEach(function (sub) {
@@ -51,7 +61,11 @@ var AnalyticContainer = function (props) {
51
61
  var _a;
52
62
  (_a = sub === null || sub === void 0 ? void 0 : sub.ads) === null || _a === void 0 ? void 0 : _a.forEach(function (ad) {
53
63
  var _a;
54
- if (ids.find(function (id) { var _a; return id.campaignGroupId == ((_a = sub === null || sub === void 0 ? void 0 : sub.campaignGroup) === null || _a === void 0 ? void 0 : _a.id) && (!id.campaignAdId || id.campaignAdId == (ad === null || ad === void 0 ? void 0 : ad.id)); })) {
64
+ if (ids.find(function (id) {
65
+ var _a;
66
+ return id.campaignGroupId == ((_a = sub === null || sub === void 0 ? void 0 : sub.campaignGroup) === null || _a === void 0 ? void 0 : _a.id) &&
67
+ (!id.campaignAdId || id.campaignAdId == (ad === null || ad === void 0 ? void 0 : ad.id));
68
+ })) {
55
69
  (_a = ad === null || ad === void 0 ? void 0 : ad.places) === null || _a === void 0 ? void 0 : _a.forEach(function (place) {
56
70
  if (!result.find(function (r) { return r.placeId == place.placeId; })) {
57
71
  result.push(place);
@@ -70,65 +84,116 @@ var AnalyticContainer = function (props) {
70
84
  : selectedPlaces;
71
85
  var selectedDomains = (0, Utils_1.placesToDomains)(selectedPlaces, domains);
72
86
  setIsLoading(true);
73
- client.campaignStatisticGet({
87
+ client
88
+ .campaignStatisticGet({
74
89
  startDate: (0, moment_1.default)(time.startDate).format(Enum_1.DATE_FORMAT),
75
90
  endDate: (0, moment_1.default)(time.endDate).format(Enum_1.DATE_FORMAT),
76
91
  timelineType: timelineType,
77
- campaignAdGroups: ids.length ? ids.map(function (id) { return (__assign(__assign({}, id), { campaignId: campaignId })); }) : [{ campaignId: campaignId }],
92
+ campaignAdGroups: ids.length
93
+ ? ids.map(function (id) { return (__assign(__assign({}, id), { campaignId: campaignId })); })
94
+ : [{ campaignId: campaignId }],
95
+ analyticGroupBies: __spreadArray([
96
+ Enum_2.AnalyticGroupBy.GbEventLabel,
97
+ Enum_2.AnalyticGroupBy.GbTimeline,
98
+ Enum_2.AnalyticGroupBy.GbCampaignGroupId,
99
+ Enum_2.AnalyticGroupBy.GbCampaignAdId
100
+ ], statisticType ? [Enum_2.AnalyticGroupBy.GbPlaceId] : [], true),
78
101
  placeIds: placeIds,
79
- includedEventLabels: Object.values(Enum_1.BaseEvent)
80
- }).then(function (res) {
81
- setStatisticalData((0, Utils_1.markBillingType)(subCampaigns, res));
82
- setStatisticalChartData(statisticType ? (0, Utils_1.convertToShowDetail)(subCampaigns, res, selectedDomains, selectedPlaces) : res);
83
- }).finally(function () { return setIsLoading(false); });
102
+ includedEventLabels: Object.values(Enum_1.BaseEvent),
103
+ })
104
+ .then(function (res) {
105
+ setStatisticalChartData(statisticType
106
+ ? (0, Utils_1.convertToShowDetail)(subCampaigns, res, selectedDomains, selectedPlaces)
107
+ : res);
108
+ })
109
+ .finally(function () { return setIsLoading(false); });
84
110
  };
85
111
  var exportData = function (time, placeIds, timelineType, exportType, ids) {
86
112
  var selectedPlaces = placeIds.length > 0
87
113
  ? placesOfCampaign.filter(function (p) { return placeIds.includes(p.placeId); })
88
114
  : placesOfCampaign;
89
- // downloadWithDataSet
90
115
  var selectedDomains = (0, Utils_1.placesToDomains)(selectedPlaces, domains);
91
- var exportObj = {
92
- name: "export_statistic_campaign_".concat(campaignId),
93
- data: []
94
- };
95
- switch (exportType) {
96
- case common_1.EXPORT_TYPES.Domain: {
97
- var newObjects = (0, lodash_1.chain)(selectedDomains)
98
- .groupBy('domainId')
99
- .map(function (value) {
100
- var currentPlaces = value
101
- .map(function (x) { return x.places; })
102
- .reduce(function (a, b) { return a.concat(b); }, []);
103
- return {
104
- objectId: value[0].domainId,
105
- objectName: value[0].domainName,
106
- places: currentPlaces,
107
- };
108
- })
109
- .value();
110
- exportObj.data = (0, Utils_1.convertToExportDataGroupBy)(statisticalData, newObjects, timelineType, 'Domain');
111
- exportObj.name += '_groupby_domain';
112
- break;
113
- }
114
- case common_1.EXPORT_TYPES.Export: {
115
- exportObj.data = (0, Utils_1.convertToExport)(subCampaigns, statisticalData, timelineType, selectedPlaces);
116
- exportObj.name += '_total';
117
- break;
116
+ var analyticInfo = (0, Utils_1.campaignAnalyticInfo)(ids.length ? subCampaigns.filter(function (s) { return ids.map(function (i) { return String(i.campaignGroupId); }).includes(String(s.campaignGroup.id)); }) : subCampaigns);
117
+ return client
118
+ .campaignStatisticGet({
119
+ startDate: (0, moment_1.default)(time.startDate).format(Enum_1.DATE_FORMAT),
120
+ endDate: (0, moment_1.default)(time.endDate).format(Enum_1.DATE_FORMAT),
121
+ timelineType: timelineType,
122
+ campaignAdGroups: ids.length
123
+ ? ids.map(function (id) { return (__assign(__assign({}, id), { campaignId: campaignId })); })
124
+ : [{ campaignId: campaignId }],
125
+ analyticGroupBies: [
126
+ Enum_2.AnalyticGroupBy.GbEventLabel,
127
+ Enum_2.AnalyticGroupBy.GbTimeline,
128
+ Enum_2.AnalyticGroupBy.GbCampaignGroupId,
129
+ Enum_2.AnalyticGroupBy.GbCampaignAdId,
130
+ Enum_2.AnalyticGroupBy.GbPlaceId,
131
+ ],
132
+ placeIds: placeIds,
133
+ includedEventLabels: Object.values(Enum_1.BaseEvent),
134
+ })
135
+ .then(function (res) {
136
+ var statisticalData = (0, Utils_1.markBillingType)(subCampaigns, res);
137
+ var exportObj = {
138
+ name: '',
139
+ data: [],
140
+ };
141
+ switch (exportType) {
142
+ case common_1.EXPORT_TYPES.Domain: {
143
+ var domainObj = (0, lodash_1.chain)(selectedDomains)
144
+ .groupBy('domainId')
145
+ .map(function (value) {
146
+ var currentPlaces = value
147
+ .map(function (x) { return x.places; })
148
+ .reduce(function (a, b) { return a.concat(b); }, []);
149
+ return {
150
+ objectId: value[0].domainId,
151
+ objectName: value[0].domainName,
152
+ places: currentPlaces,
153
+ };
154
+ })
155
+ .value();
156
+ exportObj.data = (0, Utils_1.convertToExportDataGroupBy)(statisticalData, domainObj, timelineType, 'Domain', campaignName !== null && campaignName !== void 0 ? campaignName : '');
157
+ exportObj.name += (0, Helpers_1.nameExportStandard)('Campaign', campaignName, 'groupby_domain');
158
+ break;
159
+ }
160
+ case common_1.EXPORT_TYPES.Export: {
161
+ exportObj.data = (0, Utils_1.convertToExport)(subCampaigns, statisticalData, timelineType, selectedPlaces, campaignName !== null && campaignName !== void 0 ? campaignName : '', fullPlaces);
162
+ exportObj.name += (0, Helpers_1.nameExportStandard)('Campaign', campaignName, 'total');
163
+ break;
164
+ }
165
+ case common_1.EXPORT_TYPES.LocationGroup: {
166
+ exportObj.data = (0, Utils_1.convertToExportDataGroupBy)(statisticalData, (0, Utils_1.dataGroupByPlace)(subCampaigns, ids), timelineType, 'Sub Campaign', campaignName !== null && campaignName !== void 0 ? campaignName : '');
167
+ exportObj.name += (0, Helpers_1.nameExportStandard)('Campaign', campaignName, 'groupby_subcampaign');
168
+ break;
169
+ }
170
+ case common_1.EXPORT_TYPES.Ad: {
171
+ exportObj.data = (0, Utils_1.convertToExportByAd)(subCampaigns, statisticalData, timelineType, campaignName !== null && campaignName !== void 0 ? campaignName : '');
172
+ exportObj.name += (0, Helpers_1.nameExportStandard)('Campaign', campaignName, 'ad');
173
+ break;
174
+ }
175
+ default: {
176
+ exportObj.data = (0, Utils_1.convertToExportData)(statisticalData, selectedPlaces, timelineType, campaignName !== null && campaignName !== void 0 ? campaignName : '', fullPlaces);
177
+ exportObj.name += (0, Helpers_1.nameExportStandard)('Campaign', campaignName, 'groupby_place');
178
+ break;
179
+ }
118
180
  }
119
- case common_1.EXPORT_TYPES.LocationGroup: {
120
- exportObj.data = (0, Utils_1.convertToExportDataGroupBy)(statisticalData, (0, Utils_1.dataGroupByPlace)(subCampaigns, ids), timelineType, 'Sub Campaign');
121
- exportObj.name += '_groupby_subcampaign';
122
- break;
181
+ if (analyticInfo === null || analyticInfo === void 0 ? void 0 : analyticInfo.isAllReLabel) {
182
+ exportObj.data.forEach(function (data, index) {
183
+ exportObj.data[index].columns = data.columns.filter(function (_, index) { return index !== data.columns.length - 2; });
184
+ exportObj.data[index].data = data.data.map(function (col) { return col.filter(function (_, index) { return index !== col.length - 2; }); });
185
+ });
123
186
  }
124
- default: {
125
- exportObj.data = (0, Utils_1.convertToExportData)(statisticalData, selectedPlaces, timelineType);
126
- exportObj.name += '_groupby_place';
127
- break;
187
+ if (!(analyticInfo === null || analyticInfo === void 0 ? void 0 : analyticInfo.hasClick)) {
188
+ exportObj.data.forEach(function (data, index) {
189
+ exportObj.data[index].columns = data.columns.filter(function (_, index) { return index !== data.columns.length - 1; });
190
+ exportObj.data[index].data = data.data.map(function (col) { return col.filter(function (_, index) { return index !== col.length - 1; }); });
191
+ });
128
192
  }
129
- }
130
- (0, exportFile_1.downloadWithDataSet)(String(exportObj.name).toUpperCase(), exportObj.data);
131
- return;
193
+ (0, Utils_1.addHeaderExcel)(exportObj.data, campaignName !== null && campaignName !== void 0 ? campaignName : '');
194
+ (0, exportFile_1.downloadWithDataSet)(String(exportObj.name).toUpperCase(), exportObj.data);
195
+ return;
196
+ });
132
197
  };
133
198
  return ((0, jsx_runtime_1.jsx)(component_1.default, { domains: domains, startDate: startDate, endDate: endDate, subCampaigns: subCampaigns, isLoading: isLoading, statisticalData: statisticalChartData, getStatisticalData: getStatisticalData, exportData: exportData }));
134
199
  };
@@ -5,7 +5,7 @@ interface Props {
5
5
  isExportType: boolean;
6
6
  onChangeQueryInput: (changeType: string, newValue: any) => void;
7
7
  onQueryData: () => void;
8
- onExportData: (exportType?: string) => void;
8
+ onExportData: (exportType?: string) => void | Promise<void>;
9
9
  domains: any[];
10
10
  }
11
11
  declare const ChartFilterBox: (props: Props) => import("react/jsx-runtime").JSX.Element;
@@ -10,6 +10,29 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
13
36
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
37
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
38
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -53,7 +76,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
53
76
  var jsx_runtime_1 = require("react/jsx-runtime");
54
77
  var GetApp_1 = __importDefault(require("@mui/icons-material/GetApp"));
55
78
  var material_1 = require("@mui/material");
56
- var react_1 = require("react");
79
+ var react_1 = __importStar(require("react"));
57
80
  var react_i18next_1 = require("react-i18next");
58
81
  // import { EnhancedDateRangePicker } from 'Components/DateRangePicker'
59
82
  var Helpers_1 = require("../../../../Utils/Helpers");
@@ -65,6 +88,7 @@ var SplitButtonExportType_1 = __importDefault(require("./SplitButtonExportType")
65
88
  var Enum_1 = require("../../../../ACM-AXN/Campaign/Enum");
66
89
  var i18n_1 = __importDefault(require("../../../../i18n"));
67
90
  var Context_1 = __importDefault(require("./Context"));
91
+ var lab_1 = require("@mui/lab");
68
92
  var textFieldStyle = {
69
93
  '& .MuiOutlinedInput-input': {
70
94
  padding: '10.5px !important',
@@ -89,7 +113,8 @@ var ChartFilterBox = function (props) {
89
113
  var
90
114
  // startDate, endDate,
91
115
  subCampaigns = props.subCampaigns, queryInput = props.queryInput, isExportType = props.isExportType, onChangeQueryInput = props.onChangeQueryInput, onQueryData = props.onQueryData, onExportData = props.onExportData, domains = props.domains;
92
- var _a = (0, Context_1.default)(), client = _a.services, PlaceMultiSelect = _a.placeMultiSelectComponent;
116
+ var _a = react_1.default.useState(false), loading = _a[0], setLoading = _a[1];
117
+ var _b = (0, Context_1.default)(), client = _b.services, PlaceMultiSelect = _b.placeMultiSelectComponent;
93
118
  var placeGroups = (0, react_1.useMemo)(function () {
94
119
  return subCampaigns.map(function (x) { return ({
95
120
  groupId: x.campaignGroup.id,
@@ -209,6 +234,23 @@ var ChartFilterBox = function (props) {
209
234
  MONTH: t('Common.Month'),
210
235
  },
211
236
  };
237
+ var handleExport = react_1.default.useCallback(function (type) {
238
+ if (type === void 0) { type = ''; }
239
+ setLoading(true);
240
+ var result = onExportData(typeof type === 'string' ? type : '');
241
+ if (result instanceof Promise) {
242
+ result
243
+ .then(function () {
244
+ setLoading(false);
245
+ })
246
+ .catch(function () {
247
+ setLoading(false);
248
+ });
249
+ }
250
+ else {
251
+ setLoading(false);
252
+ }
253
+ }, [onExportData]);
212
254
  return ((0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, spacing: 2, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1 }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 3, children: (0, jsx_runtime_1.jsx)(AWING_1.DateRangePicker
213
255
  // noBorder
214
256
  , {
@@ -225,13 +267,9 @@ var ChartFilterBox = function (props) {
225
267
  variant: "outlined", textFieldProps: {
226
268
  fullWidth: true,
227
269
  sx: textFieldStyle,
228
- } }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 4, children: (0, jsx_runtime_1.jsx)(PlaceMultiSelect
229
- // disableCheckPermission={true}
230
- , {
231
- // disableCheckPermission={true}
232
- onChange: placeMultiSelectSubmit, initialOption: {
270
+ } }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 4, children: (0, jsx_runtime_1.jsx)(PlaceMultiSelect, { disableCheckPermission: !client.domainsGetAll, onChange: placeMultiSelectSubmit, initialOption: {
233
271
  placeGroups: placeGroups,
234
272
  domains: domains.map(function (d) { return (__assign(__assign({}, d), { name: d.domainName })); }),
235
- }, isDisplayTextField: true, TextFieldProps: { sx: textFieldStyle }, onGetPlacesByFilter: handleGetPlacesByFilter }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1, children: (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { color: "primary", variant: "contained", fullWidth: true, onClick: function () { return onQueryData(); }, children: translationText.view }) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 3, children: (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: !isExportType ? ((0, jsx_runtime_1.jsx)(material_1.Button, { variant: "outlined", onClick: function () { return onExportData(); }, children: (0, jsx_runtime_1.jsx)(GetApp_1.default, {}) })) : ((0, jsx_runtime_1.jsx)(SplitButtonExportType_1.default, { onSubmit: function (exportType) { return onExportData(exportType); } })) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1 })] }));
273
+ }, isDisplayTextField: true, TextFieldProps: { sx: textFieldStyle }, onGetPlacesByFilter: handleGetPlacesByFilter }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1, children: (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: (0, jsx_runtime_1.jsx)(material_1.Button, { color: "primary", variant: "contained", fullWidth: true, onClick: function () { return onQueryData(); }, children: translationText.view }) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 3, children: (0, jsx_runtime_1.jsx)(material_1.FormControl, { children: !isExportType ? ((0, jsx_runtime_1.jsx)(lab_1.LoadingButton, { variant: "outlined", onClick: handleExport, loading: loading, children: (0, jsx_runtime_1.jsx)(GetApp_1.default, {}) })) : ((0, jsx_runtime_1.jsx)(SplitButtonExportType_1.default, { loading: loading, onSubmit: onExportData })) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1 })] }));
236
274
  };
237
275
  exports.default = ChartFilterBox;
@@ -53,10 +53,11 @@ var Customer = function (props) {
53
53
  // noBorder
54
54
  label: t('Common.View'), callback: function (value) {
55
55
  var _a, _b;
56
- return changeQueryInput('time', {
57
- startDate: (0, Helpers_1.getStartOfDay)((_a = value === null || value === void 0 ? void 0 : value.startDate) === null || _a === void 0 ? void 0 : _a.toDate()),
58
- endDate: (0, Helpers_1.getStartOfDay)((_b = value === null || value === void 0 ? void 0 : value.endDate) === null || _b === void 0 ? void 0 : _b.toDate()),
59
- });
56
+ Object.values(value).filter(Boolean).length > 1 &&
57
+ changeQueryInput('time', {
58
+ startDate: (0, Helpers_1.getStartOfDay)((_a = value === null || value === void 0 ? void 0 : value.startDate) === null || _a === void 0 ? void 0 : _a.toDate()),
59
+ endDate: (0, Helpers_1.getStartOfDay)((_b = value === null || value === void 0 ? void 0 : value.endDate) === null || _b === void 0 ? void 0 : _b.toDate()),
60
+ });
60
61
  }, initialStartDate: (0, moment_1.default)(queryInput.time.startDate), initialEndDate: (0, moment_1.default)(queryInput.time.endDate), isShowCalendarInfo: true, variant: "outlined", textFieldProps: {
61
62
  fullWidth: true,
62
63
  sx: {
@@ -118,6 +119,7 @@ var Customer = function (props) {
118
119
  title: {
119
120
  text: t('Statistics.View'),
120
121
  },
122
+ beginAtZero: true,
121
123
  },
122
124
  yAxis: {
123
125
  display: false,
@@ -41,7 +41,7 @@ var CustomerContainer = function (props) {
41
41
  var getCustomerData = function (time) {
42
42
  setIsLoading(true);
43
43
  client
44
- .campaignStatisticGetCustomer((0, moment_1.default)(startDate).format(Enum_1.DATE_FORMAT), (0, moment_1.default)(endDate).format(Enum_1.DATE_FORMAT), campaignId)
44
+ .campaignStatisticGetCustomer((0, moment_1.default)(time.startDate).format(Enum_1.DATE_FORMAT), (0, moment_1.default)(time.endDate).format(Enum_1.DATE_FORMAT), campaignId)
45
45
  .then(function (res) {
46
46
  var tmp_audienceOverviews = filteredData(res.audienceObjects, lodash_1.default.cloneDeep(time.startDate), lodash_1.default.cloneDeep(time.endDate));
47
47
  setCustomerData({
@@ -0,0 +1,9 @@
1
+ export interface PasswordDialogProps {
2
+ open: boolean;
3
+ onConfirm: (password: string) => void;
4
+ onCancel: () => void;
5
+ errorExport?: string;
6
+ resetErrorExport?: () => void;
7
+ }
8
+ declare const PasswordDialog: (props: PasswordDialogProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default PasswordDialog;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var jsx_runtime_1 = require("react/jsx-runtime");
7
+ var react_1 = require("react");
8
+ var material_1 = require("@mui/material");
9
+ var react_i18next_1 = require("react-i18next");
10
+ var i18n_1 = __importDefault(require("../../../../../i18n"));
11
+ var Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
12
+ var VisibilityOff_1 = __importDefault(require("@mui/icons-material/VisibilityOff"));
13
+ // Component dialog nhập mật khẩu sử dụng MUI
14
+ var PasswordDialog = function (props) {
15
+ var open = props.open, onConfirm = props.onConfirm, onCancel = props.onCancel, errorExport = props.errorExport, resetErrorExport = props.resetErrorExport;
16
+ var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
17
+ var _a = (0, react_1.useState)(''), password = _a[0], setPassword = _a[1];
18
+ var _b = (0, react_1.useState)(false), showPassword = _b[0], setShowPassword = _b[1];
19
+ var handleConfirm = function () {
20
+ onConfirm(password);
21
+ };
22
+ var handleCancel = function () {
23
+ onCancel();
24
+ setPassword('');
25
+ if (resetErrorExport)
26
+ resetErrorExport();
27
+ };
28
+ var handleKeyDown = function (e) {
29
+ if (e.key === 'Enter') {
30
+ handleConfirm();
31
+ }
32
+ };
33
+ var handlePasswordChange = function (e) {
34
+ setPassword(e.target.value);
35
+ if (resetErrorExport)
36
+ resetErrorExport();
37
+ };
38
+ var handleClickShowPassword = function () {
39
+ setShowPassword(!showPassword);
40
+ };
41
+ var handleMouseDownPassword = function (event) {
42
+ event.preventDefault();
43
+ };
44
+ (0, react_1.useEffect)(function () {
45
+ // Reset password when dialog opens
46
+ if (open) {
47
+ setPassword('');
48
+ if (resetErrorExport)
49
+ resetErrorExport();
50
+ }
51
+ }, [open]);
52
+ return ((0, jsx_runtime_1.jsxs)(material_1.Dialog, { open: open, onClose: handleCancel, "aria-labelledby": "password-dialog-title", children: [(0, jsx_runtime_1.jsx)(material_1.DialogTitle, { id: "password-dialog-title", children: t('Campaign.Password.DialogTitle') }), (0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsx)(material_1.DialogContentText, { children: t('Campaign.Password.DialogMessage') }), (0, jsx_runtime_1.jsx)(material_1.TextField, { autoFocus: true, margin: "dense", type: showPassword ? 'text' : 'password', fullWidth: true, variant: "outlined", value: password, onChange: handlePasswordChange, onKeyDown: handleKeyDown, error: !!errorExport, helperText: errorExport || '', autoComplete: "new-password", InputProps: {
53
+ endAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, { position: "end", children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { "aria-label": "toggle password visibility", onClick: handleClickShowPassword, onMouseDown: handleMouseDownPassword, edge: "end", children: showPassword ? ((0, jsx_runtime_1.jsx)(VisibilityOff_1.default, {})) : ((0, jsx_runtime_1.jsx)(Visibility_1.default, {})) }) })),
54
+ } })] }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { onClick: handleCancel, color: "secondary", children: t('Common.Cancel') }), (0, jsx_runtime_1.jsx)(material_1.Button, { onClick: handleConfirm, color: "primary", variant: "contained", children: t('Common.Confirm') })] })] }));
55
+ };
56
+ exports.default = PasswordDialog;
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  var jsx_runtime_1 = require("react/jsx-runtime");
4
7
  var styles_1 = require("@mui/styles");
5
8
  var material_1 = require("@mui/material");
6
9
  var react_i18next_1 = require("react-i18next");
7
10
  var Helpers_1 = require("../../../../../Utils/Helpers");
11
+ var i18n_1 = __importDefault(require("../../../../../i18n"));
8
12
  var useStyles = (0, styles_1.makeStyles)({
9
13
  table: {
10
14
  minWidth: 400,
@@ -19,7 +23,7 @@ var useStyles = (0, styles_1.makeStyles)({
19
23
  var EventTable = function (props) {
20
24
  var classes = useStyles();
21
25
  var eventDetails = props.data;
22
- var t = (0, react_i18next_1.useTranslation)().t;
26
+ var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
23
27
  var translationText = {
24
28
  eventLabel: t('Campaign.Detail.EventLabel'),
25
29
  number: t('Campaign.Detail.TotalEvents'),
@@ -5,3 +5,15 @@ export declare function convertToExportData(data: AnalyticEvent[], places: NonNu
5
5
  columns: string[];
6
6
  data: string[][];
7
7
  }[];
8
+ /**
9
+ * Mã hóa password sang định dạng Base64
10
+ * @param password Chuỗi password cần mã hóa
11
+ * @returns Chuỗi Base64 đã mã hóa
12
+ */
13
+ export declare function encodePassword(password: string): string;
14
+ /**
15
+ * Giải mã password từ định dạng Base64
16
+ * @param encodedPassword Chuỗi Base64 cần giải mã
17
+ * @returns Chuỗi password gốc
18
+ */
19
+ export declare function decodePassword(encodedPassword: string): string;
@@ -43,22 +43,19 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
43
43
  return to.concat(ar || Array.prototype.slice.call(from));
44
44
  };
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
- exports.convertToExportData = exports.convertEventData = void 0;
46
+ exports.decodePassword = exports.encodePassword = exports.convertToExportData = exports.convertEventData = void 0;
47
47
  var Helpers_1 = require("../../../../../Utils/Helpers");
48
48
  var lodash_1 = __importStar(require("lodash"));
49
49
  var Utils_1 = require("../Utils");
50
- var convertEventData = function (data) { return (0, lodash_1.uniqBy)(data.map(function (el) {
50
+ var convertEventData = function (data) { return data.map(function (el) {
51
51
  return el.analyticEventSummaries.map(function (x, index, events) { return ({
52
52
  timeline: el.timeline,
53
53
  eventLabel: (0, Utils_1.extractEvent)(x.eventLabel).eventName,
54
54
  total: events
55
- .filter(function (e) {
56
- return (0, Utils_1.extractEvent)(e.eventLabel).eventName ===
57
- (0, Utils_1.extractEvent)(x.eventLabel).eventName;
58
- })
55
+ .filter(function (e) { return (0, lodash_1.isEqual)((0, Utils_1.extractEvent)(e.eventLabel), (0, Utils_1.extractEvent)(x.eventLabel)); })
59
56
  .reduce(function (total, e) { return total + e.total; }, 0),
60
57
  }); });
61
- }).flat(), "eventLabel"); };
58
+ }).flat(); };
62
59
  exports.convertEventData = convertEventData;
63
60
  function convertToExportData(data, places) {
64
61
  var headCell = new Set(['Place', 'Mac Address', 'Created date', 'View Number', 'Event label']);
@@ -99,3 +96,21 @@ function convertToExportData(data, places) {
99
96
  ];
100
97
  }
101
98
  exports.convertToExportData = convertToExportData;
99
+ /**
100
+ * Mã hóa password sang định dạng Base64
101
+ * @param password Chuỗi password cần mã hóa
102
+ * @returns Chuỗi Base64 đã mã hóa
103
+ */
104
+ function encodePassword(password) {
105
+ return Buffer.from(password).toString('base64');
106
+ }
107
+ exports.encodePassword = encodePassword;
108
+ /**
109
+ * Giải mã password từ định dạng Base64
110
+ * @param encodedPassword Chuỗi Base64 cần giải mã
111
+ * @returns Chuỗi password gốc
112
+ */
113
+ function decodePassword(encodedPassword) {
114
+ return Buffer.from(encodedPassword, 'base64').toString('utf8');
115
+ }
116
+ exports.decodePassword = decodePassword;
@@ -46,11 +46,21 @@ var react_1 = __importStar(require("react"));
46
46
  var Context_1 = __importDefault(require("../Context"));
47
47
  var Util_1 = require("./Util");
48
48
  var component_1 = __importDefault(require("./component"));
49
+ var recoil_1 = require("recoil");
50
+ var Recoils_1 = require("../../Recoils");
51
+ var PasswordDialog_1 = __importDefault(require("./PasswordDialog"));
52
+ var react_i18next_1 = require("react-i18next");
53
+ var i18n_1 = __importDefault(require("../../../../../i18n"));
49
54
  var EventContainer = function (props) {
50
55
  var campaignId = props.campaignId, startDate = props.startDate, endDate = props.endDate, subCampaigns = props.subCampaigns, domains = props.domains;
51
56
  var client = (0, Context_1.default)().services;
52
57
  var _a = react_1.default.useState(true), isLoading = _a[0], setIsLoading = _a[1];
53
58
  var _b = react_1.default.useState([]), eventData = _b[0], setEventData = _b[1];
59
+ var _c = react_1.default.useState(false), openPasswordDialog = _c[0], setOpenPasswordDialog = _c[1];
60
+ var _d = react_1.default.useState(null), currentExportParams = _d[0], setCurrentExportParams = _d[1];
61
+ var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
62
+ var _e = react_1.default.useState(undefined), errrorExport = _e[0], setErrorExport = _e[1];
63
+ var campaignInfo = (0, recoil_1.useRecoilValue)(Recoils_1.campaignState);
54
64
  var placesOfCampaign = (0, react_1.useMemo)(function () {
55
65
  var result = [];
56
66
  subCampaigns.forEach(function (sub) {
@@ -73,9 +83,7 @@ var EventContainer = function (props) {
73
83
  startDate: (0, moment_1.default)(time.startDate).format(Enum_1.DATE_FORMAT),
74
84
  endDate: (0, moment_1.default)(time.endDate).format(Enum_1.DATE_FORMAT),
75
85
  timelineType: Enum_2.TimelineType.Day,
76
- campaignAdGroups: [
77
- __assign({ campaignId: campaignId }, ids),
78
- ],
86
+ campaignAdGroups: [__assign({ campaignId: campaignId }, ids)],
79
87
  analyticGroupBies: [
80
88
  Enum_2.AnalyticGroupBy.GbEventLabel,
81
89
  Enum_2.AnalyticGroupBy.GbTimeline,
@@ -86,26 +94,69 @@ var EventContainer = function (props) {
86
94
  .then(function (res) { return setEventData((0, Util_1.convertEventData)(res)); })
87
95
  .finally(function () { return setIsLoading(false); });
88
96
  };
89
- var exportData = function (time, placeIds, ids) {
90
- var places = placeIds.length ? placesOfCampaign.filter(function (p) {
91
- return placeIds.includes(p.placeId);
92
- }) : placesOfCampaign;
93
- client
97
+ // Hàm này được tách riêng để có thể gọi từ callback của PasswordDialog
98
+ var handleExportWithParams = function (time, placeIds, ids, campaignPassword) {
99
+ var places = placeIds.length
100
+ ? placesOfCampaign.filter(function (p) { return placeIds.includes(p.placeId); })
101
+ : placesOfCampaign;
102
+ return client
94
103
  .campaignStatisticGetEvents({
95
104
  startDate: (0, moment_1.default)(time.startDate).format(Enum_1.DATE_FORMAT),
96
105
  endDate: (0, moment_1.default)(time.endDate).format(Enum_1.DATE_FORMAT),
97
106
  timelineType: Enum_2.TimelineType.Day,
98
- campaignAdGroups: [
99
- __assign({ campaignId: campaignId }, ids),
100
- ],
107
+ campaignAdGroups: [__assign({ campaignId: campaignId }, ids)],
101
108
  analyticGroupBies: Object.values(Enum_2.AnalyticGroupBy).filter(function (g) { return !isNaN(Number(g)); }),
102
109
  ignoredEventLabels: Object.values(Enum_1.BaseEvent),
103
110
  placeIds: placeIds,
111
+ campaignPasswords: [
112
+ {
113
+ campaignId: campaignId,
114
+ password: campaignPassword,
115
+ },
116
+ ],
104
117
  })
105
118
  .then(function (res) {
119
+ setOpenPasswordDialog(false);
120
+ setErrorExport(undefined); // Reset error message on successful export
106
121
  (0, exportFile_1.downloadWithDataSet)("export_analytic_event_campaign_".concat(campaignId), (0, Util_1.convertToExportData)(res, places));
122
+ })
123
+ .catch(function (error) {
124
+ var _a;
125
+ if ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data.includes('Invalid password')) {
126
+ setErrorExport(t('Campaign.Password.ErrorMessage'));
127
+ }
107
128
  });
108
129
  };
109
- return ((0, jsx_runtime_1.jsx)(component_1.default, { startDate: startDate, endDate: endDate, subCampaigns: subCampaigns, isLoading: isLoading, eventData: eventData, getEventData: getEventData, exportData: exportData, domains: domains }));
130
+ var exportData = function (time, placeIds, ids) {
131
+ // Lưu lại các tham số xuất dữ liệu để sử dụng sau khi xác thực mật khẩu
132
+ setCurrentExportParams({ time: time, placeIds: placeIds, ids: ids });
133
+ // Check if campaign has password protection
134
+ if ((campaignInfo === null || campaignInfo === void 0 ? void 0 : campaignInfo.password) && campaignInfo.hasPassword) {
135
+ setOpenPasswordDialog(true);
136
+ // Return a promise that will be resolved by the dialog callbacks
137
+ return new Promise(function (resolve) {
138
+ // This promise will be handled by the dialog callbacks
139
+ // The actual export will happen in the onConfirm callback if password is correct
140
+ resolve(true);
141
+ });
142
+ }
143
+ else {
144
+ // No password required
145
+ return handleExportWithParams(time, placeIds, ids);
146
+ }
147
+ };
148
+ // Xử lý khi xác nhận mật khẩu thành công
149
+ var handlePasswordConfirm = function (password) {
150
+ // setOpenPasswordDialog(false)
151
+ if (password && currentExportParams) {
152
+ var time = currentExportParams.time, placeIds = currentExportParams.placeIds, ids = currentExportParams.ids;
153
+ handleExportWithParams(time, placeIds, ids, password);
154
+ }
155
+ };
156
+ var resetErrorExport = function () {
157
+ if (errrorExport) // Only reset if there is an error
158
+ setErrorExport(undefined);
159
+ };
160
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(component_1.default, { startDate: startDate, endDate: endDate, subCampaigns: subCampaigns, isLoading: isLoading, eventData: eventData, getEventData: getEventData, exportData: exportData, domains: domains }), (0, jsx_runtime_1.jsx)(PasswordDialog_1.default, { open: openPasswordDialog, onConfirm: handlePasswordConfirm, onCancel: function () { return setOpenPasswordDialog(false); }, errorExport: errrorExport, resetErrorExport: resetErrorExport })] }));
110
161
  };
111
162
  exports.default = EventContainer;