@bjsdistribution/dms-client-return 0.1.19-dev → 0.1.21-dev

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 (162) hide show
  1. package/dist/components/client-portal/DateFilterStore.d.ts +15 -0
  2. package/dist/components/client-portal/OutstandingTable.d.ts +3 -0
  3. package/dist/components/client-portal/ReturnStatus.d.ts +5 -0
  4. package/dist/components/client-portal/return-confirm/ConfirmedMain.d.ts +3 -0
  5. package/dist/components/client-portal/return-confirm/ReturnConfirmedTable.d.ts +3 -0
  6. package/dist/components/order-view/DynamicTable.d.ts +2 -1
  7. package/dist/components/order-view/general-information/Status.d.ts +1 -1
  8. package/dist/components/order-view/general-information/index.d.ts +1 -1
  9. package/dist/components/order-view/index.d.ts +1 -1
  10. package/dist/components/order-view/notes/AddNote.d.ts +1 -0
  11. package/dist/components/order-view/notes/order-dropdown/NewReturnDropdown.d.ts +3 -0
  12. package/dist/components/order-view/order-actions/actions/clear-booking-status/ClearBookingStatus.d.ts +4 -1
  13. package/dist/components/order-view/order-actions/actions/confirm-order/index.d.ts +4 -1
  14. package/dist/components/order-view/order-actions/actions/force-debrief/BaseChargeConfirmationModal.d.ts +7 -0
  15. package/dist/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.d.ts +11 -0
  16. package/dist/components/order-view/order-actions/actions/force-debrief/Selector.d.ts +11 -0
  17. package/dist/components/order-view/order-actions/actions/force-debrief/charges/adhoc/index.d.ts +3 -0
  18. package/dist/components/order-view/order-actions/actions/force-debrief/charges/base-charge/index.d.ts +8 -0
  19. package/dist/components/order-view/order-actions/actions/force-debrief/charges/collection-add-ons/index.d.ts +7 -0
  20. package/dist/components/order-view/order-actions/actions/force-debrief/charges/delivery-add-ons/index.d.ts +7 -0
  21. package/dist/components/order-view/order-actions/actions/force-debrief/charges/disposal-charges/index.d.ts +7 -0
  22. package/dist/components/order-view/order-actions/actions/force-debrief/charges/order-charges/index.d.ts +7 -0
  23. package/dist/components/order-view/order-actions/actions/force-debrief/escalation/EscalationCategory.d.ts +3 -0
  24. package/dist/components/order-view/order-actions/actions/force-debrief/escalation/EscalationLevel.d.ts +3 -0
  25. package/dist/components/order-view/order-actions/actions/force-debrief/escalation/EscalationReason.d.ts +3 -0
  26. package/dist/components/order-view/order-actions/actions/force-debrief/escalation/index.d.ts +3 -0
  27. package/dist/components/order-view/order-actions/actions/force-debrief/notifications/FlagsTemplate.d.ts +3 -0
  28. package/dist/components/order-view/order-actions/actions/force-debrief/notifications/OrderTemplate.d.ts +3 -0
  29. package/dist/components/order-view/order-actions/actions/force-debrief/notifications/Tabs.d.ts +3 -0
  30. package/dist/components/order-view/order-actions/actions/force-debrief/notifications/index.d.ts +3 -0
  31. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.d.ts +7 -0
  32. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/CancellationReasonDropdown.d.ts +3 -0
  33. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/FailureReasonDropdown.d.ts +3 -0
  34. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/OrderHoldReasonDropdown.d.ts +3 -0
  35. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/StatusDropdown.d.ts +3 -0
  36. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/ZoneDropdown.d.ts +3 -0
  37. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/failure-content/index.d.ts +3 -0
  38. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/index.d.ts +4 -0
  39. package/dist/components/order-view/order-actions/actions/force-debrief/order-info/success-content/index.d.ts +3 -0
  40. package/dist/components/order-view/order-actions/actions/force-debrief/styles.d.ts +8 -0
  41. package/dist/components/order-view/order-actions/actions/hold-order/HoldOrderModal.d.ts +1 -0
  42. package/dist/components/order-view/order-actions/actions/remove-from-route/RemoveFromRoute.d.ts +1 -1
  43. package/dist/components/order-view/order-actions/actions/unhold-order/UnholdOrder.d.ts +1 -0
  44. package/dist/components/order-view/order-actions/types.d.ts +3 -3
  45. package/dist/components/order-view/order-details/expanded-content/index.d.ts +1 -1
  46. package/dist/components/order-view/order-details/index.d.ts +1 -1
  47. package/dist/components/order-view/order-resources/expanded-content/index.d.ts +1 -1
  48. package/dist/components/order-view/products-info/expanded-content/index.d.ts +6 -1
  49. package/dist/components/order-view/products-info/index.d.ts +1 -1
  50. package/dist/components/order-view/return-client-products/ProductTable.d.ts +6 -1
  51. package/dist/components/order-view/return-client-products/product-table/ReturnProductTable.d.ts +6 -1
  52. package/dist/components/order-view/store.d.ts +15 -3
  53. package/dist/components/order-view/system-event-logs/expanded-content/index.d.ts +1 -1
  54. package/dist/components/order-view/types.d.ts +49 -1
  55. package/dist/components/order-view/utils.d.ts +3 -0
  56. package/dist/components/order-view/view-reminder/ViewReminder.d.ts +2 -0
  57. package/dist/components/store.d.ts +5 -1
  58. package/dist/dms-client-return.cjs.development.js +7035 -3476
  59. package/dist/dms-client-return.cjs.development.js.map +1 -1
  60. package/dist/dms-client-return.cjs.production.min.js +1 -1
  61. package/dist/dms-client-return.cjs.production.min.js.map +1 -1
  62. package/dist/dms-client-return.esm.js +7099 -3540
  63. package/dist/dms-client-return.esm.js.map +1 -1
  64. package/package.json +6 -4
  65. package/src/assets/icons/ActionIcon.tsx +1 -1
  66. package/src/assets/icons/ArrowDownIcon.tsx +2 -2
  67. package/src/components/client-portal/DateFilterStore.ts +94 -0
  68. package/src/components/client-portal/OutstandingTable.tsx +355 -0
  69. package/src/components/client-portal/ReturnAfterSearchBar.tsx +76 -17
  70. package/src/components/client-portal/ReturnOverview.tsx +4 -4
  71. package/src/components/client-portal/ReturnRTFilters.tsx +57 -40
  72. package/src/components/client-portal/ReturnSearchBar.tsx +64 -94
  73. package/src/components/client-portal/ReturnStatus.tsx +50 -68
  74. package/src/components/client-portal/return-confirm/ConfirmedMain.tsx +224 -0
  75. package/src/components/client-portal/return-confirm/ReturnConfirmedTable.tsx +327 -0
  76. package/src/components/order-daily-overview/header/route-header/RouterHeader.tsx +11 -18
  77. package/src/components/order-daily-overview/header-filters/SelectionFilter.tsx +43 -15
  78. package/src/components/order-daily-overview/index.tsx +23 -4
  79. package/src/components/order-daily-overview/return-after-table/ReturnAfterTable.tsx +23 -38
  80. package/src/components/order-daily-overview/return-after-table/table/OrderTable.tsx +21 -24
  81. package/src/components/order-daily-overview/return-after-table/table-filters/ReturnFilterStore.ts +36 -36
  82. package/src/components/order-daily-overview/return-after-table/table-filters/ReturnOrderFilter.tsx +12 -2
  83. package/src/components/order-daily-overview/return-order-table/ReturnTable.tsx +16 -0
  84. package/src/components/order-daily-overview/return-order-table/return-orders-filters/ReturnOrderTable.tsx +58 -155
  85. package/src/components/order-daily-overview/table/ReturnTable.tsx +8 -4
  86. package/src/components/order-view/DynamicTable.tsx +21 -8
  87. package/src/components/order-view/details-filters/left-side-filters/dropdowns/DropDowns.tsx +1 -1
  88. package/src/components/order-view/details-filters/left-side-filters/dropdowns/OptionsDropDown.tsx +9 -0
  89. package/src/components/order-view/details-filters/right-side-filters/Details.tsx +28 -3
  90. package/src/components/order-view/flags-action-modal/Dropdowns.tsx +2 -0
  91. package/src/components/order-view/general-information/Status.tsx +92 -18
  92. package/src/components/order-view/general-information/index.tsx +2 -2
  93. package/src/components/order-view/generic-table/AuditLogs.tsx +39 -12
  94. package/src/components/order-view/index.tsx +50 -8
  95. package/src/components/order-view/modalsPopup/ModalManager.tsx +1 -1
  96. package/src/components/order-view/notes/AddNote.tsx +95 -65
  97. package/src/components/order-view/notes/order-dropdown/NewReturnDropdown.tsx +8 -10
  98. package/src/components/order-view/notification/FlagTemplate.tsx +21 -10
  99. package/src/components/order-view/notification/OrderTemplate.tsx +192 -41
  100. package/src/components/order-view/notification/ReminderTemplate.tsx +28 -13
  101. package/src/components/order-view/notification/index.tsx +100 -55
  102. package/src/components/order-view/order-actions/actions/add-resources/DocFileUpload.tsx +92 -72
  103. package/src/components/order-view/order-actions/actions/add-resources/index.tsx +27 -10
  104. package/src/components/order-view/order-actions/actions/cancel-order/ReturnAction.tsx +25 -4
  105. package/src/components/order-view/order-actions/actions/cancel-order/ReturnReason.tsx +24 -4
  106. package/src/components/order-view/order-actions/actions/clear-booking-status/ClearBookingStatus.tsx +9 -2
  107. package/src/components/order-view/order-actions/actions/confirm-order/index.tsx +12 -6
  108. package/src/components/order-view/order-actions/actions/confirm-order/tables/NotesTable.tsx +1 -0
  109. package/src/components/order-view/order-actions/actions/create-task-reminder/CreateReminderModal.tsx +88 -30
  110. package/src/components/order-view/order-actions/actions/create-task-reminder/CreateTaskModal.tsx +5 -3
  111. package/src/components/order-view/order-actions/actions/create-task-reminder/TaskModal.tsx +2 -2
  112. package/src/components/order-view/order-actions/actions/force-debrief/BaseChargeConfirmationModal.tsx +94 -0
  113. package/src/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.tsx +620 -0
  114. package/src/components/order-view/order-actions/actions/force-debrief/Selector.tsx +65 -0
  115. package/src/components/order-view/order-actions/actions/force-debrief/charges/adhoc/index.tsx +94 -0
  116. package/src/components/order-view/order-actions/actions/force-debrief/charges/base-charge/index.tsx +106 -0
  117. package/src/components/order-view/order-actions/actions/force-debrief/charges/collection-add-ons/index.tsx +77 -0
  118. package/src/components/order-view/order-actions/actions/force-debrief/charges/delivery-add-ons/index.tsx +78 -0
  119. package/src/components/order-view/order-actions/actions/force-debrief/charges/disposal-charges/index.tsx +77 -0
  120. package/src/components/order-view/order-actions/actions/force-debrief/charges/order-charges/index.tsx +124 -0
  121. package/src/components/order-view/order-actions/actions/force-debrief/escalation/EscalationCategory.tsx +92 -0
  122. package/src/components/order-view/order-actions/actions/force-debrief/escalation/EscalationLevel.tsx +90 -0
  123. package/src/components/order-view/order-actions/actions/force-debrief/escalation/EscalationReason.tsx +122 -0
  124. package/src/components/order-view/order-actions/actions/force-debrief/escalation/index.tsx +16 -0
  125. package/src/components/order-view/order-actions/actions/force-debrief/notifications/FlagsTemplate.tsx +46 -0
  126. package/src/components/order-view/order-actions/actions/force-debrief/notifications/OrderTemplate.tsx +117 -0
  127. package/src/components/order-view/order-actions/actions/force-debrief/notifications/Tabs.tsx +32 -0
  128. package/src/components/order-view/order-actions/actions/force-debrief/notifications/index.tsx +180 -0
  129. package/src/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.tsx +201 -0
  130. package/src/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/CancellationReasonDropdown.tsx +40 -0
  131. package/src/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/FailureReasonDropdown.tsx +108 -0
  132. package/src/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/OrderHoldReasonDropdown.tsx +37 -0
  133. package/src/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/StatusDropdown.tsx +48 -0
  134. package/src/components/order-view/order-actions/actions/force-debrief/order-info/dropdowns/ZoneDropdown.tsx +27 -0
  135. package/src/components/order-view/order-actions/actions/force-debrief/order-info/failure-content/index.tsx +187 -0
  136. package/src/components/order-view/order-actions/actions/force-debrief/order-info/index.tsx +55 -0
  137. package/src/components/order-view/order-actions/actions/force-debrief/order-info/success-content/index.tsx +221 -0
  138. package/src/components/order-view/order-actions/actions/force-debrief/styles.tsx +51 -0
  139. package/src/components/order-view/order-actions/actions/hold-order/HoldOrderModal.tsx +2 -0
  140. package/src/components/order-view/order-actions/actions/remove-from-route/RemoveFromRoute.tsx +7 -2
  141. package/src/components/order-view/order-actions/actions/unhold-order/UnholdOrder.tsx +2 -0
  142. package/src/components/order-view/order-actions/index.tsx +18 -5
  143. package/src/components/order-view/order-actions/store.ts +1 -1
  144. package/src/components/order-view/order-actions/types.ts +3 -3
  145. package/src/components/order-view/order-details/expanded-content/footer/index.tsx +7 -1
  146. package/src/components/order-view/order-details/expanded-content/index.tsx +37 -16
  147. package/src/components/order-view/order-details/expanded-content/instruction-section/index.tsx +1 -1
  148. package/src/components/order-view/order-details/expanded-content/services-section/ServiceLevel.tsx +3 -4
  149. package/src/components/order-view/order-details/index.tsx +5 -2
  150. package/src/components/order-view/order-resources/expanded-content/index.tsx +2 -2
  151. package/src/components/order-view/products-info/expanded-content/index.tsx +33 -11
  152. package/src/components/order-view/products-info/index.tsx +10 -6
  153. package/src/components/order-view/return-client-products/ProductTable.tsx +12 -2
  154. package/src/components/order-view/return-client-products/product-table/ReturnProductTable.tsx +73 -23
  155. package/src/components/order-view/store.ts +107 -1
  156. package/src/components/order-view/system-event-logs/expanded-content/index.tsx +6 -2
  157. package/src/components/order-view/types.ts +54 -1
  158. package/src/components/order-view/utils.ts +37 -0
  159. package/src/components/order-view/view-reminder/AssigneeDropdown.tsx +85 -26
  160. package/src/components/order-view/view-reminder/ViewReminder.tsx +33 -14
  161. package/src/components/store.ts +24 -1
  162. package/src/index.tsx +6 -3
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.19-dev",
2
+ "version": "0.1.21-dev",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -59,7 +59,7 @@
59
59
  "testEnvironment": "jest-environment-jsdom-sixteen"
60
60
  },
61
61
  "devDependencies": {
62
- "@bjsdistribution/dms-component-library": "0.3.39-staging",
62
+ "@bjsdistribution/dms-component-library": "0.3.50-staging",
63
63
  "@size-limit/preset-small-lib": "^11.0.1",
64
64
  "@tippyjs/react": "^4.2.6",
65
65
  "@types/react": "^18.2.47",
@@ -82,7 +82,8 @@
82
82
  "styled-components": "^6.1.8",
83
83
  "tsdx": "^0.14.1",
84
84
  "tslib": "^2.6.2",
85
- "typescript": "^5.3.3"
85
+ "typescript": "^5.3.3",
86
+ "@types/uuid": "^10.0.0"
86
87
  },
87
88
  "dependencies": {
88
89
  "@emotion/react": "^11.11.3",
@@ -95,6 +96,7 @@
95
96
  "jotai": "^2.6.3",
96
97
  "react-custom-scrollbars-2": "^4.5.0",
97
98
  "react-redux": "^9.2.0",
98
- "react-switch-selector": "^2.2.1"
99
+ "react-switch-selector": "^2.2.1",
100
+ "uuid": "^10.0.0"
99
101
  }
100
102
  }
@@ -11,7 +11,7 @@ const ActionIcon = () => (
11
11
  <path
12
12
  d="M0.5 12.2432C0.5 5.61581 5.87258 0.243225 12.5 0.243225C19.1274 0.243225 24.5 5.61581 24.5 12.2432C24.5 18.8706 19.1274 24.2432 12.5 24.2432C5.87258 24.2432 0.5 18.8706 0.5 12.2432Z"
13
13
  fill="#E95252"
14
- fill-opacity="0.5"
14
+ fillOpacity="0.5"
15
15
  />
16
16
  <path
17
17
  d="M16.566 9.23825C16.6377 9.16909 16.6948 9.08636 16.7342 8.99488C16.7735 8.90339 16.7943 8.80499 16.7952 8.70541C16.7961 8.60582 16.7772 8.50705 16.7395 8.41486C16.7018 8.32267 16.6462 8.23891 16.5758 8.16846C16.5054 8.098 16.4217 8.04228 16.3295 8.00452C16.2374 7.96677 16.1386 7.94774 16.0391 7.94856C15.9395 7.94938 15.841 7.97002 15.7495 8.00929C15.658 8.04855 15.5752 8.10565 15.506 8.17725L12.5 11.1822L9.495 8.17725C9.42634 8.10356 9.34354 8.04446 9.25154 8.00347C9.15954 7.96247 9.06022 7.94043 8.95952 7.93865C8.85882 7.93688 8.75879 7.9554 8.6654 7.99312C8.57201 8.03084 8.48718 8.08699 8.41596 8.15821C8.34474 8.22943 8.2886 8.31426 8.25087 8.40765C8.21315 8.50104 8.19463 8.60107 8.19641 8.70177C8.19818 8.80247 8.22022 8.90178 8.26122 8.99378C8.30221 9.08578 8.36131 9.16858 8.435 9.23725L11.438 12.2432L8.433 15.2482C8.30052 15.3904 8.22839 15.5785 8.23182 15.7728C8.23525 15.9671 8.31396 16.1525 8.45138 16.2899C8.58879 16.4273 8.77417 16.506 8.96847 16.5094C9.16278 16.5128 9.35082 16.4407 9.493 16.3082L12.5 13.3032L15.505 16.3092C15.6472 16.4417 15.8352 16.5139 16.0295 16.5104C16.2238 16.507 16.4092 16.4283 16.5466 16.2909C16.684 16.1535 16.7627 15.9681 16.7662 15.7738C16.7696 15.5795 16.6975 15.3914 16.565 15.2492L13.562 12.2432L16.566 9.23825Z"
@@ -16,8 +16,8 @@ const ArrowDownIcon: React.FC<ArrowDownIconProps> = ({ fill = '#3A3630' }) => {
16
16
  <rect width="24" height="24" fill={fill} />
17
17
  <path
18
18
  opacity="0.4"
19
- fill-rule="evenodd"
20
- clip-rule="evenodd"
19
+ fillRule="evenodd"
20
+ clipRule="evenodd"
21
21
  d="M6.69104 9.8912C6.82604 9.75637 7.00903 9.68063 7.19984 9.68063C7.39064 9.68063 7.57363 9.75637 7.70864 9.8912L11.9998 14.1824L16.291 9.8912C16.4275 9.76402 16.608 9.69478 16.7946 9.69807C16.9811 9.70136 17.1591 9.77693 17.291 9.90884C17.4229 10.0408 17.4985 10.2187 17.5018 10.4053C17.5051 10.5918 17.4358 10.7723 17.3086 10.9088L12.5086 15.7088C12.3736 15.8436 12.1906 15.9194 11.9998 15.9194C11.809 15.9194 11.626 15.8436 11.491 15.7088L6.69104 10.9088C6.5562 10.7738 6.48047 10.5908 6.48047 10.4C6.48047 10.2092 6.5562 10.0262 6.69104 9.8912Z"
22
22
  fill="#3A3630"
23
23
  />
@@ -0,0 +1,94 @@
1
+ import { atom } from 'jotai';
2
+
3
+ interface Filter {
4
+ field: string;
5
+ op: string;
6
+ value: any;
7
+ }
8
+
9
+ interface Pagination {
10
+ page: number;
11
+ per_page: number;
12
+ }
13
+
14
+ interface FilterState {
15
+ 'x-filters': Filter[];
16
+ 'x-pagination': Pagination;
17
+ }
18
+
19
+ const initialState: FilterState = {
20
+ 'x-filters': [],
21
+ 'x-pagination': { page: 1, per_page: 50 },
22
+ };
23
+
24
+ const overviewFilterReducer = (
25
+ state: FilterState,
26
+ action: any
27
+ ): FilterState => {
28
+ switch (action.type) {
29
+ case 'SET_CP_DATE_FILTER': {
30
+ const { startDate, endDate } = action.payload;
31
+
32
+ const filters: Filter[] = [];
33
+
34
+ if (startDate) {
35
+ filters.push({
36
+ field: 'created_at',
37
+ op: '>=',
38
+ value: `${startDate}T00:00:00+00:00`,
39
+ });
40
+ }
41
+
42
+ if (endDate) {
43
+ filters.push({
44
+ field: 'created_at',
45
+ op: '<=',
46
+ value: `${endDate}T23:59:59+00:00`,
47
+ });
48
+ }
49
+
50
+ return {
51
+ ...state,
52
+ 'x-filters': [
53
+ ...state['x-filters'].filter(f => f.field !== 'created_at'),
54
+ ...filters,
55
+ ],
56
+ };
57
+ }
58
+
59
+ case 'SET_PAGE':
60
+ return {
61
+ ...state,
62
+ 'x-pagination': {
63
+ ...state['x-pagination'],
64
+ page: action.payload,
65
+ },
66
+ };
67
+
68
+ case 'SET_PERPAGE':
69
+ return {
70
+ ...state,
71
+ 'x-pagination': {
72
+ ...state['x-pagination'],
73
+ per_page: action.payload,
74
+ },
75
+ };
76
+ case 'CLEAR_FILTERS':
77
+ return {
78
+ ...state,
79
+ };
80
+ default:
81
+ return state;
82
+ }
83
+ };
84
+
85
+ const overviewfiltersStateAtom = atom(initialState);
86
+
87
+ export const dateFilterCPReducer = atom(
88
+ get => get(overviewfiltersStateAtom),
89
+ (get, set, action) =>
90
+ set(
91
+ overviewfiltersStateAtom,
92
+ overviewFilterReducer(get(overviewfiltersStateAtom), action)
93
+ )
94
+ );
@@ -0,0 +1,355 @@
1
+ import {
2
+ Checkbox,
3
+ displayValueOrNA,
4
+ useAxios,
5
+ } from '@bjsdistribution/dms-component-library';
6
+ import { Empty, notification, Skeleton } from 'antd';
7
+ import { format } from 'date-fns';
8
+ import { useAtom } from 'jotai';
9
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
10
+ import { NavLink } from 'react-router-dom';
11
+ import { filtersReducerAtom } from '../order-daily-overview/header-filters/filterStore';
12
+ import {
13
+ useClientOutstandingReturnData,
14
+ useClientPortal,
15
+ useLocationData,
16
+ useSearchText,
17
+ useSelectedClientPortOrders,
18
+ } from '../store';
19
+ import { usefetchAgain } from '../order-view/store';
20
+ import {
21
+ useLoading,
22
+ UsePaginationData,
23
+ usePrintOptionTOggle,
24
+ } from '../order-daily-overview/store/store';
25
+ import SortIcon from '../../common/SortIcon';
26
+ import CaretDownFilledIcon from '../../common/CaretDownFilledIcon';
27
+ import { ApiResponse } from '../types';
28
+ import {
29
+ CustomDrop,
30
+ EmptyDataContainer,
31
+ StyledTable,
32
+ StyledTableWrapper,
33
+ } from '../order-daily-overview/return-order-table/return-orders-filters/returnstyles';
34
+ import PrinterIcon from '../../assets/icons/PrinterIcon';
35
+ import DownIcon from '../../assets/icons/DownIcon';
36
+ import PrintDropDownReturn from '../order-view/details-filters/left-side-filters/dropdowns/PrintDropDownReturn';
37
+ import { dateFilterCPReducer } from './DateFilterStore';
38
+
39
+ const OutstandingTable = () => {
40
+ const [statePagination] = useAtom(filtersReducerAtom);
41
+ const { 'x-pagination': pagination } = statePagination;
42
+ const [
43
+ outstandingReturnData,
44
+ setOutstandingReturnData,
45
+ ] = useClientOutstandingReturnData();
46
+ const [load, setLoading] = useLoading();
47
+ const dropdownRefParent = useRef<HTMLDivElement>(null);
48
+ const dropdownRef = useRef<HTMLDivElement>(null);
49
+ const [printToogle, setPrintToggle] = usePrintOptionTOggle();
50
+ const [locationData] = useLocationData();
51
+ const [, setPaginationObject] = UsePaginationData();
52
+ const [callForFetch] = usefetchAgain();
53
+ const [clientPortal] = useClientPortal();
54
+ const [selectedOrderIds, setSelectedOrderIds] = useSelectedClientPortOrders();
55
+ const [selectClientAll, setSelectClientAll] = useState(false);
56
+ const [debouncedSearchText] = useSearchText();
57
+
58
+ const [state] = useAtom(dateFilterCPReducer);
59
+ const { 'x-filters': filters } = state;
60
+
61
+ //sorting
62
+ const [sortConfig, setSortConfig] = useState<{
63
+ key: string;
64
+ direction: 'asc' | 'desc';
65
+ } | null>(null);
66
+
67
+ const handleSort = (key: string) => {
68
+ setSortConfig((prev: any) => {
69
+ if (prev?.key === key && prev.direction === 'asc') {
70
+ return { key, direction: 'desc' };
71
+ }
72
+ return { key, direction: 'asc' };
73
+ });
74
+ };
75
+
76
+ const sortedData = useMemo(() => {
77
+ if (!outstandingReturnData || !sortConfig) return outstandingReturnData;
78
+
79
+ const { key, direction } = sortConfig;
80
+ return [...outstandingReturnData].sort((a, b) => {
81
+ const valueA = a[key];
82
+ const valueB = b[key];
83
+
84
+ if (typeof valueA === 'number' && typeof valueB === 'number') {
85
+ return direction === 'asc' ? valueA - valueB : valueB - valueA;
86
+ }
87
+ if (typeof valueA === 'string' && typeof valueB === 'string') {
88
+ return direction === 'asc'
89
+ ? valueA.localeCompare(valueB)
90
+ : valueB.localeCompare(valueA);
91
+ }
92
+ return 0;
93
+ });
94
+ }, [outstandingReturnData, sortConfig]);
95
+
96
+ const renderSortIcon = (columnKey: string) => {
97
+ if (!sortConfig || sortConfig.key !== columnKey) {
98
+ return <SortIcon />;
99
+ }
100
+ return sortConfig.direction === 'asc' ? (
101
+ <CaretDownFilledIcon />
102
+ ) : (
103
+ <CaretDownFilledIcon />
104
+ );
105
+ };
106
+
107
+ const OpenDropDown = (index: number) => {
108
+ setPrintToggle(prevIndex => (prevIndex === index ? null : index));
109
+ };
110
+ // Close dropdown outside click
111
+ useEffect(() => {
112
+ document.addEventListener('mousedown', handleClickOutside);
113
+ return () => {
114
+ document.removeEventListener('mousedown', handleClickOutside);
115
+ };
116
+ }, []);
117
+ const handleClickOutside = (event: MouseEvent) => {
118
+ if (
119
+ dropdownRef.current &&
120
+ !dropdownRef.current.contains(event.target as Node)
121
+ ) {
122
+ setPrintToggle(null);
123
+ }
124
+ };
125
+
126
+ const baseFilters = [
127
+ { field: 'isdeleted', op: '=', value: 0 },
128
+ { field: 'product_return_action_id', op: '=', value: 'RTS' },
129
+ ];
130
+
131
+ const modifiedFilters = [...baseFilters, ...filters];
132
+ const {
133
+ data: fetchedOrderData,
134
+ loading: returnDataLoad,
135
+ paginationData,
136
+ fetchData,
137
+ } = useAxios<ApiResponse>({
138
+ endpoint: '/v1/return/product/pending/',
139
+ method: 'GET',
140
+ filters: modifiedFilters,
141
+ pagination: pagination,
142
+ });
143
+
144
+ useEffect(() => {
145
+ if (clientPortal && debouncedSearchText === '') {
146
+ fetchData();
147
+ }
148
+ }, [JSON.stringify(filters), debouncedSearchText]);
149
+
150
+ useEffect(() => {
151
+ setLoading(returnDataLoad);
152
+ if (fetchedOrderData && fetchedOrderData?.data) {
153
+ setOutstandingReturnData(fetchedOrderData?.data);
154
+ if (paginationData) {
155
+ try {
156
+ const { count, ...rest } = JSON.parse(paginationData);
157
+ setPaginationObject(rest);
158
+ } catch (error) {
159
+ console.error('Error parsing paginationData:', error);
160
+ notification.error({
161
+ message: 'Error',
162
+ description: 'Failed to parse pagination data',
163
+ });
164
+ }
165
+ } else {
166
+ notification.error({
167
+ message: 'Error',
168
+ description: 'Pagination data is null or undefined',
169
+ });
170
+ }
171
+ }
172
+ }, [fetchedOrderData, returnDataLoad]);
173
+
174
+ useEffect(() => {
175
+ setLoading(returnDataLoad);
176
+ if (fetchedOrderData && fetchedOrderData?.data && locationData) {
177
+ const updatedReturnData = fetchedOrderData.data.map(returnItem => {
178
+ const matchingLocation = locationData.find(
179
+ (location: any) => location?.token === returnItem?.return_location
180
+ );
181
+ return {
182
+ ...returnItem,
183
+ new_location: matchingLocation
184
+ ? matchingLocation?.location_name
185
+ : null,
186
+ };
187
+ });
188
+
189
+ setOutstandingReturnData(updatedReturnData);
190
+ }
191
+ }, [fetchedOrderData, returnDataLoad, locationData, state, callForFetch]);
192
+
193
+ //Client Portal
194
+ const handleSelectOrderId = (id: string | number) => {
195
+ setSelectedOrderIds(prev =>
196
+ prev.includes(id) ? prev.filter(orderId => orderId !== id) : [...prev, id]
197
+ );
198
+ };
199
+
200
+ const handleClientSelectAll = (e: React.ChangeEvent<HTMLInputElement>) => {
201
+ const isChecked = e.target.checked;
202
+ setSelectClientAll(isChecked);
203
+
204
+ if (isChecked) {
205
+ setSelectedOrderIds(
206
+ outstandingReturnData?.map((item: any) => item?.order_id) || []
207
+ );
208
+ } else {
209
+ setSelectedOrderIds([]);
210
+ }
211
+ };
212
+ return (
213
+ <>
214
+ <StyledTableWrapper className="fortables">
215
+ <StyledTable>
216
+ <thead>
217
+ <tr>
218
+ {/* <th className="emailInvoiceCheckbox">
219
+ <Checkbox checked={selectAll} onChange={handleSelectAll} />
220
+ </th> */}
221
+ <th className="emailInvoiceCheckbox">
222
+ <Checkbox
223
+ checked={selectClientAll}
224
+ onChange={handleClientSelectAll}
225
+ />
226
+ </th>
227
+ <th onClick={() => handleSort('return_location_name')}>
228
+ <div className="sortIconClass">
229
+ Return Location {renderSortIcon('return_location_name')}
230
+ </div>
231
+ </th>
232
+ <th onClick={() => handleSort('recipient_name')}>
233
+ <div className="sortIconClass">
234
+ Recipient {renderSortIcon('recipient_name')}
235
+ </div>
236
+ </th>
237
+ <th>Return Action</th>
238
+ <th>Code</th>
239
+ <th>Description</th>
240
+ <th>Part</th>
241
+ <th onClick={() => handleSort('weight')}>
242
+ <div className="sortIconClass">
243
+ Weight {renderSortIcon('weight')}
244
+ </div>
245
+ </th>
246
+ <th>CBM</th>
247
+ <th onClick={() => handleSort('return_reason')}>
248
+ <div className="sortIconClass">
249
+ Return Reason {renderSortIcon('return_reason')}
250
+ </div>
251
+ </th>
252
+ <th>Collected</th>
253
+ <th onClick={() => handleSort('collection_reason')}>
254
+ <div className="sortIconClass">
255
+ Collection Reason {renderSortIcon('collection_reason')}
256
+ </div>
257
+ </th>
258
+ <th className="emailInvoiceShare">Labels</th>
259
+ </tr>
260
+ </thead>
261
+ <tbody>
262
+ {load ? (
263
+ <tr>
264
+ <td colSpan={14}>
265
+ <Skeleton active />
266
+ </td>
267
+ </tr>
268
+ ) : sortedData?.length === 0 ? (
269
+ <tr>
270
+ <td colSpan={14}>
271
+ <EmptyDataContainer>
272
+ <Empty />
273
+ </EmptyDataContainer>
274
+ </td>
275
+ </tr>
276
+ ) : (
277
+ sortedData?.map((item: any, index: any) => (
278
+ <tr key={item.id}>
279
+ <td>
280
+ <Checkbox
281
+ checked={selectedOrderIds.includes(item?.order_id)}
282
+ onChange={() => handleSelectOrderId(item?.order_id)}
283
+ />
284
+ </td>
285
+ <td> {displayValueOrNA(item?.return_location_name)}</td>
286
+ <td>
287
+ <ul style={{ listStyleType: 'none', padding: 0 }}>
288
+ <li
289
+ style={{
290
+ color: '#0099ff',
291
+ fontWeight: 600,
292
+ paddingLeft: 0,
293
+ }}
294
+ >
295
+ <NavLink to={`/orders/view/${item?.order_id}`}>
296
+ {displayValueOrNA(item?.recipient_name)}
297
+ </NavLink>
298
+ </li>
299
+ <li style={{ color: '#888075' }}>
300
+ {displayValueOrNA(item?.postcode)}
301
+ </li>
302
+ </ul>
303
+ </td>
304
+ <td>{displayValueOrNA(item?.product_return_action)}</td>
305
+ <td>{displayValueOrNA(item?.code)}</td>
306
+ <td>{displayValueOrNA(item?.description)}</td>
307
+ <td>{displayValueOrNA(item?.part)}</td>
308
+ <td>
309
+ {displayValueOrNA(item?.weight)}{' '}
310
+ {item?.weight && item?.weight !== null ? 'KG' : ''}
311
+ </td>
312
+ <td>{displayValueOrNA(item?.cube)}</td>
313
+ <td>{displayValueOrNA(item?.return_reason)}</td>
314
+ <td>
315
+ {item?.collected_at
316
+ ? format(new Date(item?.collected_at), 'dd/MM/yyyy')
317
+ : 'UNKNOWN'}
318
+ </td>
319
+
320
+ <td>{displayValueOrNA(item?.collection_reason)}</td>
321
+ <td>
322
+ <ul className="actionbox">
323
+ <CustomDrop
324
+ ref={dropdownRefParent}
325
+ className={printToogle === index ? 'active' : ''}
326
+ >
327
+ <li
328
+ className="shareIconContainer"
329
+ onClick={() => OpenDropDown(index)}
330
+ >
331
+ <PrinterIcon />
332
+ <DownIcon />
333
+ {printToogle === index && (
334
+ <div ref={dropdownRef}>
335
+ <PrintDropDownReturn
336
+ legacyURL={item?.return_order_product_label}
337
+ legacyProductID={item?.legacy_product_id}
338
+ />
339
+ </div>
340
+ )}
341
+ </li>
342
+ </CustomDrop>
343
+ </ul>
344
+ </td>
345
+ </tr>
346
+ ))
347
+ )}
348
+ </tbody>
349
+ </StyledTable>
350
+ </StyledTableWrapper>
351
+ </>
352
+ );
353
+ };
354
+
355
+ export default OutstandingTable;
@@ -5,38 +5,50 @@ import {
5
5
  } from '@bjsdistribution/dms-component-library';
6
6
  import React, { useEffect, useState } from 'react';
7
7
  import styled from 'styled-components';
8
- import { useAtom, useSearchAfterText } from '../store';
8
+ import {
9
+ useAtom,
10
+ useClientPortal,
11
+ useReturnConfirmedOrderData,
12
+ useSearchAfterText,
13
+ useStatsCPCount,
14
+ } from '../store';
9
15
 
10
16
  import { ApiResponse } from '../types';
11
17
  import { javascriptStringDumpToJSON } from '../utils';
12
18
  import { UsePaginationData } from '../order-daily-overview/store/store';
13
19
  import { notification } from 'antd';
14
- import { useReturnAfterOrderData } from '../order-view/store';
15
20
  import { filtersReducerReturnAtom } from '../order-daily-overview/return-after-table/table-filters/ReturnFilterStore';
21
+ import { returnCountType } from './ReturnStatus';
22
+ import { useParams } from 'react-router-dom';
23
+ import { dateFilterCPReducer } from './DateFilterStore';
16
24
 
17
25
  function ReturnAfterSearchBar() {
18
26
  const [searchText, setSearchText] = useState('');
19
27
  const [debouncedSearchText, setDebouncedSearchText] = useSearchAfterText();
20
- const [, setReturnOrderData] = useReturnAfterOrderData();
21
- //condition on client view
28
+ const [, setReturnConfirmedData] = useReturnConfirmedOrderData();
22
29
  const [, setPaginationObject] = UsePaginationData();
30
+
31
+ const [statePagination] = useAtom(filtersReducerReturnAtom);
32
+ const { 'x-pagination': pagination } = statePagination;
33
+ const [, setCount] = useStatsCPCount();
34
+ const [clientPortal] = useClientPortal();
35
+ const [state] = useAtom(dateFilterCPReducer);
36
+ const { 'x-filters': filters } = state;
37
+ const { status } = useParams();
38
+
23
39
  const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
24
40
  setSearchText(event.target.value);
25
41
  };
26
- //CP
27
-
28
- const [state] = useAtom(filtersReducerReturnAtom);
29
- const { 'x-filters': filters, 'x-pagination': pagination } = state;
30
42
 
31
43
  const { paginationData, fetchData: returnAfterCall } = useAxios<ApiResponse>({
32
44
  endpoint: '/v1/return/orders/',
33
45
  method: 'GET',
34
- filters: filters && filters?.length > 0 ? filters : undefined,
46
+ filters: filters,
35
47
  pagination: pagination,
36
48
  });
37
49
 
38
50
  useEffect(() => {
39
- if (debouncedSearchText.length > 1) {
51
+ if (debouncedSearchText?.length > 2) {
40
52
  returnAfterCall({
41
53
  endPointQuery: `?search_term=${debouncedSearchText}`,
42
54
  }).then((response: any) => {
@@ -48,20 +60,21 @@ function ReturnAfterSearchBar() {
48
60
  setPaginationObject(rest);
49
61
  }
50
62
  if (response?.data) {
51
- setReturnOrderData(response?.data);
63
+ setReturnConfirmedData(response?.data);
52
64
  } else {
53
- setReturnOrderData([]);
65
+ setReturnConfirmedData([]);
54
66
  }
55
67
  });
56
68
  } else if (
57
- debouncedSearchText.length > 0 &&
58
- debouncedSearchText.length <= 2
69
+ debouncedSearchText?.length > 0 &&
70
+ debouncedSearchText?.length <= 2
59
71
  ) {
60
72
  notification.warning({
61
73
  message: 'Search Phrase cannot be less than 3 characters',
62
74
  });
63
75
  }
64
- }, [debouncedSearchText]);
76
+ }, [debouncedSearchText, JSON.stringify(filters)]);
77
+
65
78
  // Debouncing effect
66
79
  useEffect(() => {
67
80
  const handler = setTimeout(() => {
@@ -73,14 +86,60 @@ function ReturnAfterSearchBar() {
73
86
  }, [searchText]);
74
87
 
75
88
  useEffect(() => {
76
- if (debouncedSearchText.length === 0) {
89
+ if (debouncedSearchText?.length === 0) {
77
90
  setSearchText('');
78
91
  }
79
92
  }, [debouncedSearchText]);
80
93
 
94
+ const { fetchData: fetchStatsData } = useAxios<{
95
+ data: returnCountType[];
96
+ }>({
97
+ endpoint: `v1/portal/return/stats/`,
98
+ method: 'GET',
99
+ pagination: { is_pagination: false },
100
+ filters: filters,
101
+ });
102
+
103
+ useEffect(() => {
104
+ const validStatuses = ['scheduled_for_return', 'return_completed'];
105
+ const isClientView = clientPortal && validStatuses.includes(status || '');
106
+
107
+ if (!isClientView) return;
108
+
109
+ const trimmedText = debouncedSearchText?.trim() || '';
110
+ if (trimmedText.length > 0 && trimmedText.length <= 2) {
111
+ notification.warning({
112
+ message: 'Search phrase cannot be less than 2 characters',
113
+ });
114
+ return;
115
+ }
116
+ if (trimmedText.length === 0) return;
117
+ const statusTypeMap: Record<string, string> = {
118
+ scheduled_for_return: 'scheduled',
119
+ return_completed: 'complete',
120
+ };
121
+
122
+ const type = statusTypeMap[status as keyof typeof statusTypeMap];
123
+
124
+ fetchStatsData({
125
+ endPointQuery: `?search_term=${trimmedText}&type=${type}`,
126
+ })
127
+ .then((response: any) => {
128
+ if (response?.data) {
129
+ console.log('inside response', response);
130
+ setCount(response.data);
131
+ } else {
132
+ setCount(null);
133
+ }
134
+ })
135
+ .catch((error: any) => {
136
+ console.error('Error fetching stats:', error);
137
+ setCount(null);
138
+ });
139
+ }, [debouncedSearchText, status]);
140
+
81
141
  const handleClear = () => {
82
142
  setSearchText('');
83
- setDebouncedSearchText('');
84
143
  };
85
144
  return (
86
145
  <Search>
@@ -2,8 +2,6 @@ import React, { useState } from 'react';
2
2
  import HeaderFilter from '../order-daily-overview/header-filters/HeaderFilter';
3
3
  import styled from 'styled-components';
4
4
  import ReturnFilter from '../order-daily-overview/return-order-table/return-orders-filters/ReturnFilter';
5
- import ReturnOrderTable from '../order-daily-overview/return-order-table/return-orders-filters/ReturnOrderTable';
6
- import ReturnAfterTable from '../order-daily-overview/return-after-table/ReturnAfterTable';
7
5
  import Pagination from '../order-daily-overview/table-view/Pagination';
8
6
  import {
9
7
  useItemsPerPage,
@@ -12,6 +10,8 @@ import {
12
10
  import { useClientPortal } from '../store';
13
11
  import { useParams } from 'react-router-dom';
14
12
  import RouterHeader from '../order-daily-overview/header/route-header/RouterHeader';
13
+ import OutstandingTable from './OutstandingTable';
14
+ import ConfirmedMain from './return-confirm/ConfirmedMain';
15
15
 
16
16
  const ReturnOverview = () => {
17
17
  const [paginationObj] = UsePaginationData();
@@ -43,7 +43,7 @@ const ReturnOverview = () => {
43
43
  <ReturnFilter />
44
44
  {clientPortal && status === 'outstanding_return' && (
45
45
  <>
46
- <ReturnOrderTable />
46
+ <OutstandingTable />
47
47
  {total > 0 && (
48
48
  <Pagination
49
49
  currentPage={page}
@@ -57,7 +57,7 @@ const ReturnOverview = () => {
57
57
  )}
58
58
  {shouldShowReturnAfterTable && (
59
59
  <>
60
- <ReturnAfterTable />
60
+ <ConfirmedMain />
61
61
  </>
62
62
  )}
63
63
  </Container>