awing-library 2.1.125-beta → 2.1.126-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 (127) hide show
  1. package/lib/ACM-AXN/Campaign/Container.js +2 -3
  2. package/lib/ACM-AXN/Campaign/CreateOrEdit/Recoils.js +3 -3
  3. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/AnalyticComponent.test.d.ts +1 -0
  4. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/AnalyticComponent.test.js +80 -0
  5. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/AnalyticContainer.test.d.ts +1 -0
  6. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/AnalyticContainer.test.js +49 -0
  7. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.d.ts +13 -0
  8. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.js +131 -0
  9. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.test.d.ts +1 -0
  10. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/ChartWithType.test.js +67 -0
  11. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/ControlPanel.d.ts +2 -0
  12. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/ControlPanel.js +113 -0
  13. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/ControlPanel.test.d.ts +1 -0
  14. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/ControlPanel.test.js +27 -0
  15. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/DetailGroupBy.test.d.ts +1 -0
  16. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/DetailGroupBy.test.js +55 -0
  17. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/RowDetail.d.ts +7 -0
  18. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/RowDetail.js +28 -0
  19. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/RowDetail.test.d.ts +1 -0
  20. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/RowDetail.test.js +49 -0
  21. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/index.d.ts +2 -0
  22. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Detail/index.js +183 -0
  23. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Utils.d.ts +51 -0
  24. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/Utils.js +378 -0
  25. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/component.d.ts +14 -0
  26. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/component.js +77 -0
  27. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/container.d.ts +15 -0
  28. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/container.js +129 -0
  29. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/index.d.ts +1 -0
  30. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Analytic/index.js +8 -0
  31. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.d.ts +12 -0
  32. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.js +237 -0
  33. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.test.d.ts +1 -0
  34. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/ChartFilter.test.js +84 -0
  35. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Context.d.ts +5 -0
  36. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Context.js +13 -0
  37. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/CustomerComponent.test.d.ts +1 -0
  38. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/CustomerComponent.test.js +53 -0
  39. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/CustomerContainer.test.d.ts +1 -0
  40. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/CustomerContainer.test.js +124 -0
  41. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/component.d.ts +14 -0
  42. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/component.js +127 -0
  43. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/container.d.ts +7 -0
  44. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/container.js +82 -0
  45. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/index.d.ts +1 -0
  46. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Customer/index.js +8 -0
  47. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/EventComponent.test.d.ts +1 -0
  48. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/EventComponent.test.js +91 -0
  49. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/EventContainer.test.d.ts +1 -0
  50. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/EventContainer.test.js +48 -0
  51. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Table.d.ts +5 -0
  52. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Table.js +29 -0
  53. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Table.test.d.ts +1 -0
  54. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/Table.test.js +30 -0
  55. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/component.d.ts +13 -0
  56. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/component.js +166 -0
  57. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/container.d.ts +10 -0
  58. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/container.js +123 -0
  59. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/index.d.ts +1 -0
  60. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Event/index.js +8 -0
  61. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.d.ts +6 -0
  62. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.js +64 -0
  63. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.test.d.ts +1 -0
  64. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/SplitButtonExportType.test.js +26 -0
  65. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Types.d.ts +91 -0
  66. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Types.js +2 -0
  67. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Utils.d.ts +6 -0
  68. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/Utils.js +33 -0
  69. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/common.d.ts +6 -0
  70. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/common.js +9 -0
  71. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/component.d.ts +9 -0
  72. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/component.js +32 -0
  73. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/container.d.ts +8 -0
  74. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/container.js +94 -0
  75. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/fakeCampaignData.json +397 -0
  76. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/index.d.ts +1 -0
  77. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabStatistic/index.js +8 -0
  78. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdDetail.test.js +3 -3
  79. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AdList.js +2 -2
  80. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/AddOrEditRule.test.js +12 -12
  81. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/Create.js +2 -3
  82. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/Create.test.js +3 -3
  83. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/Edit.test.js +2 -2
  84. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/EditExpression.test.js +9 -9
  85. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/LimitClick.test.js +1 -2
  86. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/LimitEvent.test.js +1 -2
  87. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/LimitView.test.js +1 -2
  88. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/TargetAge.test.js +3 -3
  89. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/AddOrEditRule/RuleForm/TargetGender.test.js +2 -2
  90. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.js +11 -10
  91. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignDetail.test.js +6 -6
  92. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/SubCampaignList.js +5 -5
  93. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/atoms.js +2 -2
  94. package/lib/ACM-AXN/Campaign/CreateOrEdit/TabSubCampaign/index.js +5 -5
  95. package/lib/ACM-AXN/Campaign/CreateOrEdit/index.js +22 -12
  96. package/lib/ACM-AXN/Campaign/Enum.d.ts +72 -0
  97. package/lib/ACM-AXN/Campaign/Enum.js +81 -1
  98. package/lib/ACM-AXN/Campaign/Types.d.ts +7 -126
  99. package/lib/ACM-AXN/Campaign/Types.js +0 -80
  100. package/lib/ACM-AXN/Campaign/Utils.d.ts +7 -1
  101. package/lib/ACM-AXN/Campaign/Utils.js +14 -10
  102. package/lib/ACM-AXN/Campaign/index.d.ts +2 -0
  103. package/lib/ACM-AXN/Campaign/index.js +16 -0
  104. package/lib/ACM-AXN/CampaignSchedule/Components/RowAdvance/component.js +4 -0
  105. package/lib/ACM-AXN/CampaignSchedule/Components/TableHeaderDragable.js +4 -0
  106. package/lib/ACM-AXN/CampaignSchedule/Enum.d.ts +4 -0
  107. package/lib/ACM-AXN/CampaignSchedule/Enum.js +4 -0
  108. package/lib/ACM-AXN/Common/Enum.d.ts +22 -0
  109. package/lib/ACM-AXN/Common/Enum.js +26 -1
  110. package/lib/ACM-AXN/Common/Types.d.ts +16 -0
  111. package/lib/ACM-AXN/Common/Types.js +2 -0
  112. package/lib/ACM-AXN/Notifications/Types.d.ts +1 -1
  113. package/lib/ACM-AXN/Page/Types.d.ts +2 -1
  114. package/lib/ACM-AXN/Template/Container.test.js +1 -1
  115. package/lib/ACM-AXN/Template/CreateOrEdit/CreateOrEdit.test.js +1 -1
  116. package/lib/ACM-AXN/Template/CreateOrEdit/Infomation.test.js +1 -1
  117. package/lib/ACM-AXN/Template/CreateOrEdit/Template/Parameter.js +13 -5
  118. package/lib/ACM-AXN/Template/Import.test.js +2 -2
  119. package/lib/AWING/Hooks/index.d.ts +1 -0
  120. package/lib/AWING/Hooks/index.js +17 -0
  121. package/lib/AWING/Hooks/useGetData.d.ts +9 -0
  122. package/lib/AWING/Hooks/useGetData.js +26 -0
  123. package/lib/Utils/Helpers.d.ts +2 -1
  124. package/lib/Utils/Helpers.js +17 -1
  125. package/lib/translate/en/translation.json +5 -1
  126. package/lib/translate/vi/translation.json +7 -1
  127. package/package.json +1 -1
@@ -0,0 +1,53 @@
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 = __importDefault(require("react"));
8
+ var enzyme_1 = require("enzyme");
9
+ var component_1 = __importDefault(require("./component"));
10
+ var DateRangePicker_1 = require("Components/DateRangePicker");
11
+ var core_1 = require("@material-ui/core");
12
+ var GetApp_1 = __importDefault(require("@mui/icons-material/GetApp"));
13
+ var ChartAdvance_1 = require("Components/ChartAdvance");
14
+ describe('<CustomerComponent />', function () {
15
+ it('renders without crashing', function () {
16
+ (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, { isLoading: false, startDate: new Date(), endDate: new Date(), customerData: {
17
+ audienceOverviews: [],
18
+ totalUser: 0,
19
+ }, getCustomerData: jest.fn(), exportData: jest.fn() }));
20
+ });
21
+ it('renders date range picker', function () {
22
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, { isLoading: false, startDate: new Date(), endDate: new Date(), customerData: {
23
+ audienceOverviews: [],
24
+ totalUser: 0,
25
+ }, getCustomerData: function () { return null; }, exportData: function () { return null; } }));
26
+ expect(wrapper.find(DateRangePicker_1.EnhancedDateRangePicker)).toHaveLength(1);
27
+ });
28
+ it("renders the 'View' button", function () {
29
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, { isLoading: false, startDate: new Date(), endDate: new Date(), customerData: {
30
+ audienceOverviews: [],
31
+ totalUser: 0,
32
+ }, getCustomerData: function () { return null; }, exportData: function () { return null; } }));
33
+ var button = wrapper.find(core_1.Button).first();
34
+ expect(button.text()).toEqual('Common.View');
35
+ });
36
+ it("renders the 'Export' button", function () {
37
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, { isLoading: false, startDate: new Date(), endDate: new Date(), customerData: {
38
+ audienceOverviews: [],
39
+ totalUser: 0,
40
+ }, getCustomerData: function () { return null; }, exportData: function () { return null; } }));
41
+ var button = wrapper.find(core_1.Button).last();
42
+ expect(button.prop('variant')).toEqual('outlined');
43
+ expect(button.find(GetApp_1.default)).toHaveLength(1);
44
+ });
45
+ it('renders chart', function () {
46
+ var customerData = {
47
+ audienceOverviews: [{ timeline: '2022-05-01', totalUser: 10 }],
48
+ totalUser: 10,
49
+ };
50
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, { isLoading: false, startDate: new Date(), endDate: new Date(), customerData: customerData, getCustomerData: function () { return null; }, exportData: function () { return null; } }));
51
+ expect(wrapper.find(ChartAdvance_1.BarLineChart)).toHaveLength(1);
52
+ });
53
+ });
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var react_1 = __importDefault(require("react"));
19
+ var react_2 = require("@testing-library/react");
20
+ var container_1 = __importDefault(require("./container"));
21
+ var component_1 = __importDefault(require("./component"));
22
+ var StatisticCampaign_1 = __importDefault(require("Services/StatisticCampaign"));
23
+ var Snackbar_1 = require("Utilities/Snackbar");
24
+ var Enum_1 = require("Commons/Enum");
25
+ jest.mock('Services/StatisticCampaign');
26
+ jest.mock('Utilities/Snackbar');
27
+ describe('CustomerContainer', function () {
28
+ var mockCustomerData = {
29
+ audienceOverviews: [
30
+ {
31
+ timeline: 20230601,
32
+ totalUser: 100,
33
+ },
34
+ {
35
+ timeline: 20230602,
36
+ totalUser: 150,
37
+ },
38
+ {
39
+ timeline: 20230603,
40
+ totalUser: 200,
41
+ },
42
+ ],
43
+ totalUser: 450,
44
+ };
45
+ var mockProps = {
46
+ campaignId: '1',
47
+ startDate: new Date('2023-06-01'),
48
+ endDate: new Date('2023-06-03'),
49
+ };
50
+ beforeEach(function () {
51
+ // Define a mock implementation of the StatisticCampaignService
52
+ StatisticCampaign_1.default.getAnalyticCustomer.mockResolvedValue({
53
+ data: {
54
+ status: Enum_1.STATUS_CODE_ENUMS.OK,
55
+ data: mockCustomerData,
56
+ },
57
+ });
58
+ });
59
+ it('should render without error', function () {
60
+ (0, react_2.render)((0, jsx_runtime_1.jsx)(container_1.default, __assign({}, mockProps)));
61
+ });
62
+ // it("should start with isLoading state set to true", () => {
63
+ // render(<CustomerContainer {...mockProps} />);
64
+ // expect(screen.getByRole("progressbar").length).toEqual(1);
65
+ // });
66
+ // it("should call getAnalyticCustomer API when getCustomerData function is called", async () => {
67
+ // render(<CustomerContainer {...mockProps} />);
68
+ // const startDateField = screen.getByLabelText(/start date/i);
69
+ // const endDateField = screen.getByLabelText(/end date/i);
70
+ // const searchButton = screen.getByRole("button", { name: /search/i });
71
+ // fireEvent.change(startDateField, { target: { value: "2023-06-01" } });
72
+ // fireEvent.change(endDateField, { target: { value: "2023-06-03" } });
73
+ // fireEvent.click(searchButton);
74
+ // await waitFor(() => {
75
+ // expect(
76
+ // StatisticCampaignService.getAnalyticCustomer
77
+ // ).toHaveBeenCalledWith("Tue Jun 01 2023", "Thu Jun 03 2023", "1");
78
+ // });
79
+ // });
80
+ // it("should set isLoading state to false after getAnalyticCustomer API is resolved", async () => {
81
+ // render(<CustomerContainer {...mockProps} />);
82
+ // const searchButton = screen.getByRole("button", { name: /search/i });
83
+ // fireEvent.click(searchButton);
84
+ // await waitFor(() => {
85
+ // expect(
86
+ // screen.queryByTestId("customer-loading")
87
+ // ).not.toBeInTheDocument();
88
+ // });
89
+ // });
90
+ // it("should set customerData state when getAnalyticCustomer API is resolved", async () => {
91
+ // render(<CustomerContainer {...mockProps} />);
92
+ // const searchButton = screen.getByRole("button", { name: /search/i });
93
+ // fireEvent.click(searchButton);
94
+ // await waitFor(() => {
95
+ // expect(screen.queryByTestId("total-users")).toHaveTextContent(
96
+ // "450"
97
+ // );
98
+ // });
99
+ // });
100
+ // it("should call Snackbar function with error message when getAnalyticCustomer API is rejected", async () => {
101
+ // // Change the mock implementation of the StatisticCampaignService to reject the promise
102
+ // StatisticCampaignService.getAnalyticCustomer.mockRejectedValue(
103
+ // new Error("API failed")
104
+ // );
105
+ // render(<CustomerContainer {...mockProps} />);
106
+ // const searchButton = screen.getByRole("button", { name: /search/i });
107
+ // fireEvent.click(searchButton);
108
+ // await waitFor(() => {
109
+ // expect(Snackbar).toHaveBeenCalledWith(SNACKBAR_TYPES.ERROR);
110
+ // });
111
+ // });
112
+ // it("should call dowloadWithDataSet function on exportData function call", async () => {
113
+ // const mockExportData = [{ columns: [], data: [] }];
114
+ // render(<CustomerContainer {...mockProps} />);
115
+ // const downloadButton = screen.getByRole("button", { name: /export/i });
116
+ // fireEvent.click(downloadButton);
117
+ // await waitFor(() => {
118
+ // expect(dowloadWithDataSet).toHaveBeenCalledWith(
119
+ // "export_analytic_customer_campaign_1",
120
+ // mockExportData
121
+ // );
122
+ // });
123
+ // });
124
+ });
@@ -0,0 +1,14 @@
1
+ import { IAudienceObjectReply } from '../Types';
2
+ interface Props {
3
+ isLoading: boolean;
4
+ startDate: Date;
5
+ endDate: Date;
6
+ customerData: IAudienceObjectReply;
7
+ getCustomerData: (time: {
8
+ startDate: Date;
9
+ endDate: Date;
10
+ }) => void;
11
+ exportData: () => void;
12
+ }
13
+ declare const Customer: (props: Props) => import("react/jsx-runtime").JSX.Element;
14
+ export default Customer;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var react_1 = __importDefault(require("react"));
19
+ var GetApp_1 = __importDefault(require("@mui/icons-material/GetApp"));
20
+ var material_1 = require("@mui/material");
21
+ var react_i18next_1 = require("react-i18next");
22
+ var i18n_1 = __importDefault(require("../../../../../i18n"));
23
+ var Helpers_1 = require("../../../../../Utils/Helpers");
24
+ var AWING_1 = require("../../../../../AWING");
25
+ var moment_1 = __importDefault(require("moment"));
26
+ var Context_1 = __importDefault(require("../Context"));
27
+ var Customer = function (props) {
28
+ var t = (0, react_i18next_1.useTranslation)(undefined, { i18n: i18n_1.default }).t;
29
+ var chart = (0, Context_1.default)().chart;
30
+ var isLoading = props.isLoading, startDate = props.startDate, endDate = props.endDate, customerData = props.customerData, getCustomerData = props.getCustomerData, exportData = props.exportData;
31
+ var _a = react_1.default.useState({
32
+ time: {
33
+ startDate: startDate,
34
+ endDate: endDate,
35
+ },
36
+ placeIds: [],
37
+ }), queryInput = _a[0], setQueryInput = _a[1];
38
+ var changeQueryInput = function (fieldName, fieldValue) {
39
+ var _a;
40
+ var newInput = __assign(__assign({}, queryInput), (_a = {}, _a[fieldName] = fieldValue, _a));
41
+ setQueryInput(newInput);
42
+ getCustomerData(newInput.time);
43
+ };
44
+ var queryData = function () {
45
+ getCustomerData(queryInput.time);
46
+ };
47
+ react_1.default.useEffect(function () {
48
+ queryData();
49
+ }, []);
50
+ 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: 12, children: (0, jsx_runtime_1.jsxs)(material_1.Grid, { container: true, spacing: 2, children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 3 }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 4, children: (0, jsx_runtime_1.jsx)(AWING_1.DateRangePicker
51
+ // noBorder
52
+ , {
53
+ // noBorder
54
+ label: t('Common.View'), callback: function (value) {
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
+ });
60
+ }, initialStartDate: (0, moment_1.default)(queryInput.time.startDate), initialEndDate: (0, moment_1.default)(queryInput.time.endDate), isShowCalendarInfo: true, variant: "outlined", textFieldProps: {
61
+ fullWidth: true,
62
+ sx: {
63
+ '& .MuiOutlinedInput-input': {
64
+ padding: '10.5px !important',
65
+ },
66
+ '& .MuiFormControl-marginNormal': {
67
+ margin: function (theme) {
68
+ return theme.spacing(0);
69
+ },
70
+ },
71
+ '& .MuiOutlinedInput-adornedEnd': {
72
+ paddingRight: function (theme) {
73
+ return theme.spacing(0.5);
74
+ },
75
+ },
76
+ '& .MuiIconButton-root': {
77
+ padding: function (theme) {
78
+ return theme.spacing(1);
79
+ },
80
+ },
81
+ '& .MuiAutocomplete-inputRoot': {
82
+ padding: function (theme) {
83
+ return theme.spacing(0.25);
84
+ },
85
+ },
86
+ '& .MuiAutocomplete-endAdornment': {
87
+ top: 'calc(50% - 19px)',
88
+ },
89
+ },
90
+ } }) }), (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", onClick: function () { return queryData(); }, fullWidth: true, children: t('Common.View') }) }) }), (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, { variant: "outlined", onClick: function () { return exportData(); }, children: (0, jsx_runtime_1.jsx)(GetApp_1.default, {}) }) }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 3 })] }) }), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 12, children: isLoading ? ((0, jsx_runtime_1.jsx)(AWING_1.CircularProgress, {})) : ((0, jsx_runtime_1.jsx)(material_1.Grid, { container: true, spacing: 2, sx: {
91
+ border: '1px solid #ccc',
92
+ paddingTop: function (theme) { return theme.spacing(4); },
93
+ marginTop: function (theme) { return theme.spacing(2.5); },
94
+ }, children: (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 12, children: (0, jsx_runtime_1.jsx)(material_1.Box, { sx: {
95
+ padding: function (theme) { return theme.spacing(1); },
96
+ paddingLeft: function (theme) { return theme.spacing(16); },
97
+ paddingRight: function (theme) { return theme.spacing(16); },
98
+ height: '435px',
99
+ }, children: (0, jsx_runtime_1.jsx)(AWING_1.BarLineComponent, { chart: chart, dataChart: [
100
+ {
101
+ label: t('Campaign.TotalCustomer') +
102
+ ' ' +
103
+ (0, Helpers_1.roundDecimalNumber)(customerData.totalUser),
104
+ type: 'line',
105
+ data: customerData === null || customerData === void 0 ? void 0 : customerData.audienceObjects.map(function (item) { return ({
106
+ x: String(item.timeline),
107
+ y: item.totalUser,
108
+ }); }).sort(function (a, b) { return Number(a.x) - Number(b.x); }),
109
+ fill: false,
110
+ pointStyle: 'rect',
111
+ yAxisID: 'y',
112
+ variant: "primary",
113
+ }
114
+ ], type: 'line', optionCustom: {
115
+ scales: {
116
+ y: {
117
+ title: {
118
+ text: t('Statistics.View'),
119
+ },
120
+ },
121
+ yAxis: {
122
+ display: false,
123
+ },
124
+ },
125
+ }, data: [] }) }) }) })) })] }));
126
+ };
127
+ exports.default = Customer;
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ campaignId: string;
3
+ startDate: Date;
4
+ endDate: Date;
5
+ }
6
+ declare const CustomerContainer: (props: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export default CustomerContainer;
@@ -0,0 +1,82 @@
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 = __importDefault(require("react"));
8
+ var component_1 = __importDefault(require("./component"));
9
+ var moment_1 = __importDefault(require("moment"));
10
+ var Helpers_1 = require("../../../../../Utils/Helpers");
11
+ var Context_1 = __importDefault(require("../Context"));
12
+ var exportFile_1 = require("../../../../../ACM-AXN/CampaignSchedule/exportFile");
13
+ var CustomerContainer = function (props) {
14
+ var campaignId = props.campaignId, startDate = props.startDate, endDate = props.endDate;
15
+ var client = (0, Context_1.default)().services;
16
+ var _a = react_1.default.useState(true), isLoading = _a[0], setIsLoading = _a[1];
17
+ var _b = react_1.default.useState({
18
+ audienceObjects: [],
19
+ totalUser: 0,
20
+ }), customerData = _b[0], setCustomerData = _b[1];
21
+ // Filter and fill missing dates with 0 total
22
+ var filteredData = function (data, start, end) {
23
+ var filteredDates = [];
24
+ var _loop_1 = function (date) {
25
+ var formattedDate = (0, moment_1.default)(date).startOf('D').format('YYYYMMDD');
26
+ var existingData = data.find(function (item) { return String(item.timeline) === formattedDate; });
27
+ if (existingData) {
28
+ filteredDates.push(existingData);
29
+ }
30
+ else {
31
+ filteredDates.push({ timeline: formattedDate, totalUser: 0 });
32
+ }
33
+ };
34
+ for (var date = start; date <= end; date.setDate(date.getDate() + 1)) {
35
+ _loop_1(date);
36
+ }
37
+ return filteredDates;
38
+ };
39
+ var getCustomerData = function (time) {
40
+ setIsLoading(true);
41
+ // client
42
+ // .statisticCampaignGetAnalyticCustomer(
43
+ // moment(startDate).format(DATE_FORMAT),
44
+ // moment(endDate).format(DATE_FORMAT),
45
+ // campaignId
46
+ // )
47
+ // .then((res) => {
48
+ // let tmp_audienceOverviews = filteredData(
49
+ // res.audienceObjects,
50
+ // _.cloneDeep(time.startDate),
51
+ // _.cloneDeep(time.endDate)
52
+ // )
53
+ // setCustomerData({
54
+ // audienceObjects: res.audienceObjects,
55
+ // audienceOverviews: tmp_audienceOverviews as [],
56
+ // totalUser: res.totalUser!,
57
+ // })
58
+ // })
59
+ // .finally(() => setIsLoading(false))
60
+ };
61
+ var exportData = function () {
62
+ (0, exportFile_1.downloadWithDataSet)("export_analytic_customer_campaign_".concat(campaignId), convertToExportData(customerData));
63
+ };
64
+ function convertToExportData(customerData) {
65
+ var columns = ['Date', 'Total'];
66
+ var exportData = [];
67
+ customerData.audienceOverviews.forEach(function (el) {
68
+ exportData.push([
69
+ (0, Helpers_1.dateTimeToString)((0, Helpers_1.convertTimelineToDateTime)(el.timeline, Helpers_1.TIMELINE_TYPE.DAY), 'DD/MM/YYYY'),
70
+ el.totalUser,
71
+ ]);
72
+ });
73
+ return [
74
+ {
75
+ columns: columns,
76
+ data: exportData,
77
+ },
78
+ ];
79
+ }
80
+ return ((0, jsx_runtime_1.jsx)(component_1.default, { startDate: startDate, endDate: endDate, isLoading: isLoading, customerData: customerData, getCustomerData: getCustomerData, exportData: exportData }));
81
+ };
82
+ exports.default = CustomerContainer;
@@ -0,0 +1 @@
1
+ export { default } from "./container";
@@ -0,0 +1,8 @@
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
+ exports.default = void 0;
7
+ var container_1 = require("./container");
8
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(container_1).default; } });
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var react_1 = __importDefault(require("react"));
19
+ var enzyme_1 = require("enzyme");
20
+ var component_1 = __importDefault(require("./component"));
21
+ var Progress_1 = require("Components/Progress");
22
+ var ChartFilter_1 = __importDefault(require("../ChartFilter"));
23
+ var AWING_1 = require("../../../../../AWING");
24
+ var ChartAdvance_1 = require("Components/ChartAdvance");
25
+ var Table_1 = __importDefault(require("./Table"));
26
+ describe("EventComponent component", function () {
27
+ var mockData = {
28
+ isLoading: false,
29
+ startDate: new Date(2023, 5, 7),
30
+ endDate: new Date(2023, 5, 8),
31
+ subCampaigns: [],
32
+ eventData: [],
33
+ getEventData: jest.fn(),
34
+ exportData: jest.fn(),
35
+ domains: [],
36
+ };
37
+ it("renders without crashing", function () {
38
+ (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
39
+ });
40
+ it("displays a loading component when loading data", function () {
41
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData, { isLoading: true })));
42
+ expect(wrapper.find(Progress_1.CircularProgress)).toHaveLength(1);
43
+ });
44
+ it("displays a ChartFilter component with correct props", function () {
45
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
46
+ var chartFilter = wrapper.find(ChartFilter_1.default);
47
+ expect(chartFilter).toHaveLength(1);
48
+ expect(chartFilter.prop("subCampaigns")).toEqual([]);
49
+ expect(chartFilter.prop("domains")).toEqual([]);
50
+ });
51
+ it("displays a MultipleHierarchicalChoice component with correct props", function () {
52
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
53
+ var multiChoice = wrapper.find(AWING_1.MultipleHierarchicalChoice);
54
+ expect(multiChoice).toHaveLength(1);
55
+ expect(multiChoice.prop("options")).toEqual([]);
56
+ });
57
+ it("displays a BarLineChart component with correct props", function () {
58
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
59
+ var chart = wrapper.find(ChartAdvance_1.BarLineChart);
60
+ expect(chart).toHaveLength(1);
61
+ expect(chart.prop("data")).toEqual([]);
62
+ expect(chart.prop("height")).toEqual(320);
63
+ expect(chart.prop("yAxeRightConfigs")).toEqual({
64
+ display: false,
65
+ scaleLabelDisplay: false,
66
+ labelString: "CTR(%)",
67
+ ticks: { min: 0, max: 100, maxTicksLimit: 6 },
68
+ gridLines: { display: false },
69
+ });
70
+ });
71
+ it("displays an EventComponentTable component with correct props", function () {
72
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
73
+ var table = wrapper.find(Table_1.default);
74
+ expect(table).toHaveLength(1);
75
+ expect(table.prop("data")).toEqual([]);
76
+ });
77
+ it("invokes getEventData when ChartFilter component is queried", function () {
78
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
79
+ var chartFilter = wrapper.find(ChartFilter_1.default);
80
+ var queryData = chartFilter.prop("onQueryData");
81
+ queryData();
82
+ expect(mockData.getEventData).toHaveBeenCalled();
83
+ });
84
+ it("invokes exportData when ChartFilter component is exported", function () {
85
+ var wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(component_1.default, __assign({}, mockData)));
86
+ var chartFilter = wrapper.find(ChartFilter_1.default);
87
+ var exportData = chartFilter.prop("onExportData");
88
+ exportData();
89
+ expect(mockData.exportData).toHaveBeenCalled();
90
+ });
91
+ });
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var react_1 = __importDefault(require("react"));
19
+ var enzyme_1 = require("enzyme");
20
+ var container_1 = __importDefault(require("./container"));
21
+ var component_1 = __importDefault(require("./component"));
22
+ describe("EventContainer", function () {
23
+ var wrapper;
24
+ var props = {
25
+ campaignId: "abc",
26
+ startDate: new Date(),
27
+ endDate: new Date(),
28
+ subCampaigns: [],
29
+ domains: [],
30
+ };
31
+ beforeEach(function () {
32
+ wrapper = (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(container_1.default, __assign({}, props)));
33
+ });
34
+ it("should render without errors, should render an EventComponent", function () {
35
+ expect(wrapper.exists()).toBe(true);
36
+ expect(wrapper.find(component_1.default)).toHaveLength(1);
37
+ });
38
+ it("should render an EventComponent with correct props", function () {
39
+ expect(wrapper.find(component_1.default).props()).toMatchObject({
40
+ startDate: props.startDate,
41
+ endDate: props.endDate,
42
+ subCampaigns: props.subCampaigns,
43
+ isLoading: true,
44
+ eventData: [],
45
+ domains: props.domains,
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,5 @@
1
+ interface Props {
2
+ data: any;
3
+ }
4
+ declare const EventTable: (props: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export default EventTable;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var jsx_runtime_1 = require("react/jsx-runtime");
4
+ var styles_1 = require("@mui/styles");
5
+ var material_1 = require("@mui/material");
6
+ var react_i18next_1 = require("react-i18next");
7
+ var Helpers_1 = require("../../../../../Utils/Helpers");
8
+ var useStyles = (0, styles_1.makeStyles)({
9
+ table: {
10
+ minWidth: 400,
11
+ '& > thead > tr > th': {
12
+ borderBottom: '1px solid #fafafa',
13
+ },
14
+ '& > tbody > tr > td': {
15
+ borderBottom: '1px solid #fafafa',
16
+ },
17
+ },
18
+ });
19
+ var EventTable = function (props) {
20
+ var classes = useStyles();
21
+ var eventDetails = props.data;
22
+ var t = (0, react_i18next_1.useTranslation)().t;
23
+ var translationText = {
24
+ eventLabel: t('Campaign.Detail.EventLabel'),
25
+ number: t('Campaign.Detail.TotalEvents'),
26
+ };
27
+ return ((0, jsx_runtime_1.jsx)(material_1.TableContainer, { component: material_1.Paper, children: (0, jsx_runtime_1.jsxs)(material_1.Table, { className: classes.table, children: [(0, jsx_runtime_1.jsx)(material_1.TableHead, { children: (0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { children: translationText.eventLabel }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: translationText.number })] }) }), (0, jsx_runtime_1.jsx)(material_1.TableBody, { children: eventDetails.map(function (row) { return ((0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { children: row.eventLabel }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { children: (0, Helpers_1.roundDecimalNumber)(row.total) })] }, row.eventLabel)); }) })] }) }));
28
+ };
29
+ exports.default = EventTable;
@@ -0,0 +1,30 @@
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 = __importDefault(require("react"));
8
+ var enzyme_1 = require("enzyme");
9
+ var Table_1 = __importDefault(require("./Table"));
10
+ var Helper_1 = require("Utilities/Helper");
11
+ describe("Table", function () {
12
+ var mockData = [
13
+ { eventLabel: "Contact Form", total: 100 },
14
+ { eventLabel: "Purchase", total: 50 },
15
+ ];
16
+ it("renders without crashing", function () {
17
+ (0, enzyme_1.shallow)((0, jsx_runtime_1.jsx)(Table_1.default, { data: mockData }));
18
+ });
19
+ it("renders the correct number of rows", function () {
20
+ var wrapper = (0, enzyme_1.mount)((0, jsx_runtime_1.jsx)(Table_1.default, { data: mockData }));
21
+ expect(wrapper.find(".MuiTableRow-root")).toHaveLength(mockData.length + 1);
22
+ });
23
+ it("renders the correct event labels and totals", function () {
24
+ var wrapper = (0, enzyme_1.mount)((0, jsx_runtime_1.jsx)(Table_1.default, { data: mockData }));
25
+ mockData.forEach(function (row) {
26
+ expect(wrapper.contains(row.eventLabel)).toEqual(true);
27
+ expect(wrapper.contains((0, Helper_1.roundDecimalNumber)(row.total))).toEqual(true);
28
+ });
29
+ });
30
+ });