@bjsdistribution/dms-client-return 0.1.16-prod → 0.1.17-prod

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 (57) hide show
  1. package/dist/common/date-picker/header/ClearDate.d.ts +1 -1
  2. package/dist/components/client-portal/DateFilterStore.d.ts +15 -0
  3. package/dist/components/client-portal/ReturnRTFilters.d.ts +3 -0
  4. package/dist/components/order-daily-overview/header/route-header/ClientRouterHeader.d.ts +11 -0
  5. package/dist/components/order-daily-overview/table-view/TableStyle.d.ts +4 -4
  6. package/dist/components/order-view/order-actions/types.d.ts +2 -2
  7. package/dist/components/order-view/types.d.ts +6 -0
  8. package/dist/components/order-view/utils.d.ts +8 -2
  9. package/dist/components/order-view/view-reminder/ViewReminder.d.ts +2 -0
  10. package/dist/dms-client-return.cjs.development.js +1780 -2272
  11. package/dist/dms-client-return.cjs.development.js.map +1 -1
  12. package/dist/dms-client-return.cjs.production.min.js +1 -1
  13. package/dist/dms-client-return.cjs.production.min.js.map +1 -1
  14. package/dist/dms-client-return.esm.js +1838 -2330
  15. package/dist/dms-client-return.esm.js.map +1 -1
  16. package/package.json +2 -2
  17. package/src/components/client-portal/DateFilterStore.ts +139 -0
  18. package/src/components/client-portal/OutstandingTable.tsx +16 -72
  19. package/src/components/client-portal/ReturnAfterSearchBar.tsx +42 -87
  20. package/src/components/client-portal/ReturnOverview.tsx +11 -2
  21. package/src/components/client-portal/ReturnRTFilters.tsx +140 -43
  22. package/src/components/client-portal/ReturnSearchBar.tsx +42 -153
  23. package/src/components/client-portal/ReturnStatus.tsx +30 -66
  24. package/src/components/client-portal/return-confirm/ConfirmedMain.tsx +12 -23
  25. package/src/components/client-portal/return-confirm/ReturnConfirmedTable.tsx +9 -86
  26. package/src/components/order-daily-overview/header/route-header/ClientRouterHeader.tsx +166 -0
  27. package/src/components/order-daily-overview/header/route-header/RouterHeader.tsx +2 -86
  28. package/src/components/order-daily-overview/header-filters/SelectionFilter.tsx +5 -2
  29. package/src/components/order-daily-overview/index.tsx +16 -4
  30. package/src/components/order-daily-overview/return-after-table/table-filters/ReturnFilterStore.ts +36 -36
  31. package/src/components/order-view/notification/ReminderTemplate.tsx +13 -5
  32. package/src/components/order-view/order-actions/actions/confirm-order/index.tsx +0 -29
  33. package/src/components/order-view/order-actions/actions/create-task-reminder/CreateReminderModal.tsx +86 -28
  34. package/src/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.tsx +35 -20
  35. package/src/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.tsx +11 -62
  36. package/src/components/order-view/order-actions/index.tsx +1 -5
  37. package/src/components/order-view/order-actions/types.ts +2 -2
  38. package/src/components/order-view/order-details/expanded-content/footer/index.tsx +55 -80
  39. package/src/components/order-view/order-details/expanded-content/services-section/AssemblyType.tsx +9 -91
  40. package/src/components/order-view/order-details/expanded-content/services-section/OrderServices.tsx +10 -182
  41. package/src/components/order-view/store.ts +6 -0
  42. package/src/components/order-view/types.ts +6 -0
  43. package/src/components/order-view/utils.ts +0 -33
  44. package/src/components/order-view/view-reminder/AssigneeDropdown.tsx +85 -26
  45. package/src/components/order-view/view-reminder/ViewReminder.tsx +33 -14
  46. package/src/components/store.ts +1 -1
  47. package/src/index.tsx +17 -2
  48. package/dist/components/order-view/order-actions/actions/log-service-refusal/DeliveryPoint.d.ts +0 -7
  49. package/dist/components/order-view/order-actions/actions/log-service-refusal/Notes.d.ts +0 -7
  50. package/dist/components/order-view/order-actions/actions/log-service-refusal/OrderServices.d.ts +0 -7
  51. package/dist/components/order-view/order-actions/actions/log-service-refusal/helper.d.ts +0 -3
  52. package/dist/components/order-view/order-actions/actions/log-service-refusal/index.d.ts +0 -3
  53. package/src/components/order-view/order-actions/actions/log-service-refusal/DeliveryPoint.tsx +0 -50
  54. package/src/components/order-view/order-actions/actions/log-service-refusal/Notes.tsx +0 -50
  55. package/src/components/order-view/order-actions/actions/log-service-refusal/OrderServices.tsx +0 -57
  56. package/src/components/order-view/order-actions/actions/log-service-refusal/helper.ts +0 -26
  57. package/src/components/order-view/order-actions/actions/log-service-refusal/index.tsx +0 -130
@@ -3,111 +3,29 @@ import React from 'react';
3
3
  import styled from 'styled-components';
4
4
  import { useOrderDetails, useOrderStaticData } from '../../../store';
5
5
  import { capitalize } from '../../../utils';
6
+ import { OrdersType } from '../../../types';
6
7
 
7
8
  function AssemblyType() {
8
9
  const [orderData, setOrderData] = useOrderDetails();
9
10
  const [orderStaticData] = useOrderStaticData();
10
- const orderServices = orderData?.order_services;
11
- const cloneServices = [...orderServices];
12
- const assembleOrderService = orderStaticData?.order_service_list?.find(
13
- (x: any) => x?.type?.toLowerCase() === 'assemble'
14
- );
15
- const disassembleOrderService = orderStaticData?.order_service_list?.find(
16
- (x: any) => x?.type?.toLowerCase() === 'disassemble'
17
- );
18
- const assemblyTypeService = cloneServices?.find(
19
- (x: any) => x?.order_service_list_id === assembleOrderService?.id
20
- );
21
- const disassemblyTypeService = cloneServices?.find(
22
- (x: any) => x?.order_service_list_id === disassembleOrderService?.id
23
- );
24
- const assemblyTypeId =
25
- assemblyTypeService?.service_category_id ||
26
- disassemblyTypeService?.service_category_id;
11
+
27
12
  const assemblyTypeOptions = orderStaticData?.order_service_list_category?.map(
28
13
  (option: any) => ({
29
14
  label: capitalize(option.type.replaceAll('_', ' ')),
30
- value: option.id.toString(),
15
+ value: option.type,
31
16
  })
32
17
  );
33
18
 
34
19
  const radioGroupHandler = (event: React.ChangeEvent<HTMLInputElement>) => {
35
- let updatedAssemblyTypeService = {};
36
-
37
- let updatedDisassemblyTypeService = {};
38
-
39
- let updatedOrderServices: any = [];
40
-
41
- if (
42
- (assemblyTypeService?.is_deleted === false &&
43
- disassemblyTypeService?.is_deleted === true &&
44
- disassemblyTypeService !== undefined &&
45
- disassemblyTypeService !== null) ||
46
- (disassemblyTypeService?.is_deleted === false &&
47
- assemblyTypeService?.is_deleted === true &&
48
- assemblyTypeService !== undefined &&
49
- assemblyTypeService !== null) ||
50
- (assemblyTypeService?.is_deleted === false &&
51
- disassemblyTypeService?.is_deleted === false)
52
- ) {
53
- updatedAssemblyTypeService = {
54
- ...assemblyTypeService!,
55
- service_category_id: +event.target.value,
56
- };
57
- updatedDisassemblyTypeService = {
58
- ...disassemblyTypeService!,
59
- service_category_id: +event.target.value,
60
- };
61
- updatedOrderServices = cloneServices?.filter(
62
- s =>
63
- s?.order_service_list_id !== assembleOrderService?.id &&
64
- s?.order_service_list_id !== disassembleOrderService?.id
65
- );
66
- updatedOrderServices.push(updatedAssemblyTypeService);
67
- updatedOrderServices.push(updatedDisassemblyTypeService);
68
- } else if (
69
- assemblyTypeService?.is_deleted === false &&
70
- (disassemblyTypeService?.is_deleted === true ||
71
- disassemblyTypeService === undefined ||
72
- disassemblyTypeService === null)
73
- ) {
74
- updatedAssemblyTypeService = {
75
- ...assemblyTypeService!,
76
- service_category_id: +event.target.value,
77
- };
78
- updatedOrderServices = cloneServices?.filter(
79
- s => s?.order_service_list_id !== assembleOrderService?.id
80
- );
81
- updatedOrderServices.push(updatedAssemblyTypeService);
82
- } else {
83
- updatedDisassemblyTypeService = {
84
- ...disassemblyTypeService!,
85
- service_category_id: +event.target.value,
86
- };
87
- updatedOrderServices = cloneServices?.filter(
88
- s => s?.order_service_list_id !== disassembleOrderService?.id
89
- );
90
-
91
- updatedOrderServices.push(updatedDisassemblyTypeService);
92
- }
93
- const newData = { ...orderData, order_services: updatedOrderServices };
20
+ const newData: OrdersType = {
21
+ ...orderData,
22
+ assembly_type: event.target.value,
23
+ };
94
24
  setOrderData(newData);
95
25
  };
96
26
 
97
27
  const isServiceDisable = () => {
98
- if (
99
- (assemblyTypeService?.is_deleted === true &&
100
- (disassemblyTypeService?.is_deleted === true ||
101
- disassemblyTypeService === undefined ||
102
- disassemblyTypeService === null)) ||
103
- (disassemblyTypeService?.is_deleted === true &&
104
- (assemblyTypeService?.is_deleted === true ||
105
- assemblyTypeService === undefined ||
106
- assemblyTypeService === null)) ||
107
- (assemblyTypeService === undefined &&
108
- disassemblyTypeService === undefined) ||
109
- (assemblyTypeService === null && disassemblyTypeService === null)
110
- ) {
28
+ if (orderData?.assemble === false && orderData?.disassemble === false) {
111
29
  return true;
112
30
  } else {
113
31
  return false;
@@ -117,7 +35,7 @@ function AssemblyType() {
117
35
  return (
118
36
  <Container $isDisable={isServiceDisable()}>
119
37
  <RadioButtonGroup
120
- selectedValue={assemblyTypeId?.toString() || ''}
38
+ selectedValue={orderData?.assembly_type || ''}
121
39
  heading="Assembly Type"
122
40
  options={assemblyTypeOptions || []}
123
41
  onChange={radioGroupHandler}
@@ -4,16 +4,12 @@ import ServiceSlider from '../../../../../common/services-slider/ServiceSlider';
4
4
  import {
5
5
  useOrderDetails,
6
6
  useOrderStaticData,
7
- usePrevOrderDetails,
8
7
  } from '../../../store';
9
- import { OrderServiceType } from '../../../types';
8
+ import { OrdersType } from '../../../types';
10
9
 
11
10
  function OrderServices() {
12
11
  const [orderStaticData] = useOrderStaticData();
13
12
  const [orderDetails, setOrderDetails] = useOrderDetails();
14
- const [prevOrderDetails] = usePrevOrderDetails();
15
- const orderServices = orderDetails?.order_services;
16
- const prevOrderServices = prevOrderDetails?.order_services;
17
13
 
18
14
  const orderServicesOptions = orderStaticData?.order_service_list;
19
15
 
@@ -30,190 +26,22 @@ function OrderServices() {
30
26
  });
31
27
 
32
28
  const toggleServices = (id: number) => {
33
- const clone = [...orderServices];
34
- const selectedService = clone?.find(
35
- (s: OrderServiceType) => s?.order_service_list_id === id
29
+ const selectedService = orderServicesOptions?.find(
30
+ (item: any) => item.id === id
36
31
  );
37
- const assembleOrderService = orderStaticData?.order_service_list?.find(
38
- (x: any) => x?.type?.toLowerCase() === 'assemble'
39
- );
40
- const disassembleOrderService = orderStaticData?.order_service_list?.find(
41
- (x: any) => x?.type?.toLowerCase() === 'disassemble'
42
- );
43
-
44
- const assemblyTypeService = clone?.find(
45
- (x: any) => x?.order_service_list_id === assembleOrderService?.id
46
- );
47
-
48
- const disassemblyTypeService = clone?.find(
49
- (x: any) => x?.order_service_list_id === disassembleOrderService?.id
50
- );
51
-
52
- if (selectedService !== undefined) {
53
- const isAssembleService =
54
- assembleOrderService?.id === selectedService?.order_service_list_id;
55
-
56
- const isDisassembleService =
57
- disassembleOrderService?.id === selectedService?.order_service_list_id;
58
-
59
- if (selectedService.new_id) {
60
- const updatedOrderServices = clone.filter(
61
- (service: OrderServiceType) => service.id !== selectedService.id
62
- );
63
- const newData = {
64
- ...orderDetails,
65
- order_services: updatedOrderServices,
66
- };
67
- setOrderDetails(newData);
68
- } else {
69
- let updatedSelectedService = {
70
- ...selectedService,
71
- is_deleted: !selectedService.is_deleted,
72
- };
73
-
74
- let updatedOrderServices = [];
75
- let newUpdatedOrderServices: any = [];
76
-
77
- updatedOrderServices = clone.filter(
78
- (service: OrderServiceType) => service.id !== selectedService.id
79
- );
80
-
81
- updatedOrderServices.push(updatedSelectedService);
82
- if (
83
- (isAssembleService &&
84
- updatedSelectedService?.is_deleted === true &&
85
- (disassemblyTypeService?.is_deleted === true ||
86
- disassemblyTypeService === undefined ||
87
- disassemblyTypeService === null)) ||
88
- (isDisassembleService &&
89
- updatedSelectedService?.is_deleted === true &&
90
- (assemblyTypeService?.is_deleted === true ||
91
- assemblyTypeService === undefined ||
92
- assemblyTypeService === null))
93
- ) {
94
- const prevSelectedService = prevOrderServices?.find(
95
- (s: OrderServiceType) => s?.order_service_list_id === id
96
- );
97
- updatedSelectedService = {
98
- ...selectedService,
99
- is_deleted: true,
100
- service_category_id: prevSelectedService?.service_category_id,
101
- };
102
- updatedOrderServices = clone.filter(
103
- (service: OrderServiceType) => service.id !== selectedService.id
104
- );
105
-
106
- updatedOrderServices.push(updatedSelectedService);
107
- // new cases
108
- if (
109
- isAssembleService &&
110
- disassemblyTypeService?.is_deleted === true &&
111
- disassemblyTypeService !== undefined &&
112
- disassemblyTypeService !== null
113
- ) {
114
- const newUpdatedSelectedService = {
115
- ...disassemblyTypeService,
116
- is_deleted: true,
117
- service_category_id: prevSelectedService?.service_category_id,
118
- };
119
- newUpdatedOrderServices = updatedOrderServices?.filter(
120
- (service: OrderServiceType) =>
121
- service.id !== disassemblyTypeService.id
122
- );
123
- newUpdatedOrderServices?.push(newUpdatedSelectedService);
124
- }
125
- // new cases
126
- if (
127
- isDisassembleService &&
128
- assemblyTypeService?.is_deleted === true &&
129
- assemblyTypeService !== undefined &&
130
- assemblyTypeService !== null
131
- ) {
132
- const newUpdatedSelectedService = {
133
- ...assemblyTypeService,
134
- is_deleted: true,
135
- service_category_id: prevSelectedService?.service_category_id,
136
- };
137
- newUpdatedOrderServices = updatedOrderServices?.filter(
138
- (service: OrderServiceType) =>
139
- service.id !== assemblyTypeService.id
140
- );
141
- newUpdatedOrderServices?.push(newUpdatedSelectedService);
142
- }
143
- }
144
-
145
- const newData = {
146
- ...orderDetails,
147
- order_services:
148
- newUpdatedOrderServices.length > 0
149
- ? newUpdatedOrderServices
150
- : updatedOrderServices,
151
- };
152
- setOrderDetails(newData);
153
- }
154
- } else {
155
- // service not exist case
156
- // if not matched then treat it as an new service
157
- let largestId: number;
158
- if (clone === undefined || clone.length === 0) {
159
- largestId = 0;
160
- } else {
161
- largestId = Math.max(
162
- ...clone?.map((o: OrderServiceType) => +o?.order_service_list_id!)
163
- );
164
- }
165
-
166
- let service: OrderServiceType = {};
167
- // Normal service addition
168
- service = {
169
- is_deleted: false,
170
- order_service_list_id: id,
171
- new_id:
172
- largestId !== undefined && largestId !== null ? largestId + 1 : 1,
173
- id: largestId !== undefined && largestId !== null ? largestId + 1 : 1,
174
- };
175
- // special case if assembly already exist and we are adding disassemble service and vice-versa
176
- if (
177
- assemblyTypeService?.is_deleted === false &&
178
- disassembleOrderService?.id === id
179
- ) {
180
- service = {
181
- is_deleted: false,
182
- order_service_list_id: id,
183
- new_id:
184
- largestId !== undefined && largestId !== null ? largestId + 1 : 1,
185
- id: largestId !== undefined && largestId !== null ? largestId + 1 : 1,
186
- service_category_id: assemblyTypeService?.service_category_id,
187
- };
188
- }
189
-
190
- if (
191
- disassemblyTypeService?.is_deleted === false &&
192
- assembleOrderService?.id === id
193
- ) {
194
- service = {
195
- is_deleted: false,
196
- order_service_list_id: id,
197
- new_id:
198
- largestId !== undefined && largestId !== null ? largestId + 1 : 1,
199
- id: largestId !== undefined && largestId !== null ? largestId + 1 : 1,
200
- service_category_id: disassemblyTypeService?.service_category_id,
201
- };
202
- }
203
- clone.push(service);
204
- const newData = { ...orderDetails, order_services: clone };
205
- setOrderDetails(newData);
206
- }
32
+ const key = selectedService?.type;
33
+ const value = !orderDetails[key as keyof OrdersType];
34
+ setOrderDetails(prev => ({
35
+ ...prev,
36
+ [key]: value,
37
+ }));
207
38
  };
208
39
  const isDisabled = true;
209
40
 
210
41
  return (
211
42
  <Container disabled={isDisabled}>
212
43
  {sortedServices?.map((service: any) => {
213
- const selected = !!orderServices?.find(
214
- (s: OrderServiceType) =>
215
- s?.order_service_list_id === service?.id && s.is_deleted === false
216
- );
44
+ const selected = orderDetails[service?.type as keyof OrdersType];
217
45
  return (
218
46
  <ServiceSlider
219
47
  serviceName={service?.type?.replaceAll('_', ' ')}
@@ -113,6 +113,12 @@ export const ordersInitialValue: OrdersType = {
113
113
  order_type: {
114
114
  type: null,
115
115
  },
116
+ assemble: false,
117
+ disassemble: false,
118
+ unpack_items: false,
119
+ take_packaging_away: false,
120
+ collect_disposal: false,
121
+ assembly_type: null,
116
122
  };
117
123
 
118
124
  export const orderProductInitialvalue: CreateProduct = {
@@ -174,6 +174,12 @@ export interface OrdersType {
174
174
  postcode: any;
175
175
  carrier_id: number | null;
176
176
  order_type: orderType;
177
+ assemble: boolean;
178
+ disassemble: boolean;
179
+ unpack_items: boolean;
180
+ take_packaging_away: boolean;
181
+ collect_disposal: boolean;
182
+ assembly_type: string | null;
177
183
  }
178
184
 
179
185
  export type DeleteProds = {
@@ -2,7 +2,6 @@ import {
2
2
  OrderRecipientType,
3
3
  OrderRouteType,
4
4
  OrderServicesDetailType,
5
- OrderServiceType,
6
5
  OrdersType,
7
6
  } from './types';
8
7
 
@@ -277,14 +276,12 @@ export const compareOrderDetailsStates = (
277
276
  order_recipient: oldOrderRecipient,
278
277
  order_routes: oldOrderRoutes,
279
278
  order_services_detail: oldOrderServicesDetail,
280
- order_services: oldOrderServices,
281
279
  ...oldRequiredData
282
280
  } = oldData;
283
281
  const {
284
282
  order_recipient: newOrderRecipient,
285
283
  order_routes: newOrderRoutes,
286
284
  order_services_detail: newOrderServicesDetail,
287
- order_services: newOrderServices,
288
285
  ...newRequiredData
289
286
  } = newData;
290
287
 
@@ -307,33 +304,6 @@ export const compareOrderDetailsStates = (
307
304
  newOrderServicesDetail
308
305
  );
309
306
 
310
- // need to remove id and new_id from new order_services
311
- const filteredNewOrderServices = newOrderServices?.map((item: any) => {
312
- if (item.new_id) {
313
- const { id, new_id, ...newItem } = item;
314
- return newItem;
315
- } else {
316
- return item;
317
- }
318
- });
319
-
320
- const newOrderServicesWithoutId = filteredNewOrderServices.filter(
321
- (service: OrderServiceType) => !service.id
322
- );
323
- const newOrderServicesWithId = filteredNewOrderServices.filter(
324
- (service: OrderServiceType) => service.id
325
- );
326
-
327
- const payloadOrderServices: OrderServiceType[] = compareArrays(
328
- oldOrderServices,
329
- newOrderServicesWithId
330
- );
331
-
332
- const finalPayloadOrderServices = [
333
- ...payloadOrderServices,
334
- ...newOrderServicesWithoutId,
335
- ];
336
-
337
307
  const finalPayload = {
338
308
  ...payloadWithId,
339
309
  ...(!isObjectEmpty(payloadOrderRecipient) && {
@@ -345,9 +315,6 @@ export const compareOrderDetailsStates = (
345
315
  ...(!isObjectEmpty(payloadOrderServicesDetail) && {
346
316
  order_services_detail: payloadOrderServicesDetail,
347
317
  }),
348
- ...(finalPayloadOrderServices.length > 0 && {
349
- order_services: finalPayloadOrderServices,
350
- }),
351
318
  };
352
319
 
353
320
  return finalPayload;
@@ -13,8 +13,6 @@ function AssigneeDropdown() {
13
13
  const [reminderData] = useReminderById();
14
14
  const [reminderPayload, setReminderPayload] = useUpdateReminderData();
15
15
  const [departmentData, setDepartmentData] = useDeptData();
16
- const [selectedDeptId, setSelectedDeptId] = useState<any | null>(null);
17
- const [, setFilteredUsers] = useState<typeof allUsers>([]);
18
16
  const [allUsers, setAllUsers] = useState<
19
17
  {
20
18
  fName: string;
@@ -58,15 +56,7 @@ function AssigneeDropdown() {
58
56
  value: item?.value,
59
57
  })) || [];
60
58
 
61
- const handleDepartmentChange = (value: string, option: { label: string }) => {
62
- setSelectedDeptId(value);
63
-
64
- setReminderPayload((prevState: any) => ({
65
- ...prevState,
66
- department: option?.label,
67
- assigned_to: null,
68
- }));
69
- };
59
+ const [selectedDeptIds, setSelectedDeptIds] = useState<string[]>([]);
70
60
 
71
61
  // SSO Departments
72
62
  const { fetchData: getSSOData, data: fetchData } = useAxios<{
@@ -134,15 +124,22 @@ function AssigneeDropdown() {
134
124
  }, []);
135
125
 
136
126
  useEffect(() => {
137
- if (selectedDeptId !== null && allUsers?.length > 0) {
138
- const matchedUsers = allUsers?.filter(
139
- user => user?.deptId?.toString() === selectedDeptId?.toString()
140
- );
141
- setFilteredUsers(matchedUsers);
142
- } else {
143
- setFilteredUsers([]);
127
+ if (
128
+ selectedDeptIds.length === 0 &&
129
+ reminderPayload?.department &&
130
+ departmentData?.length > 0
131
+ ) {
132
+ const deptNames = reminderPayload.department
133
+ .split(',')
134
+ .map((d: any) => d.trim());
135
+
136
+ const matched = departmentData
137
+ .filter((dept: any) => deptNames.includes(dept.label))
138
+ .map((dept: any) => dept.value);
139
+
140
+ setSelectedDeptIds(matched);
144
141
  }
145
- }, [selectedDeptId, allUsers]);
142
+ }, [reminderPayload?.department, departmentData, selectedDeptIds]);
146
143
 
147
144
  useEffect(() => {
148
145
  if (fetchData && fetchData?.data) {
@@ -155,24 +152,86 @@ function AssigneeDropdown() {
155
152
  }
156
153
  }, [fetchData]);
157
154
 
158
- const userOptions = allUsers?.map(user => ({
159
- label: `${user?.fName?.trim()} ${user?.lName?.trim()}`, // shown in dropdown
160
- value: user?.id, // used internally and stored
161
- }));
155
+ const assignedUserIds = (reminderPayload?.assigned_to ?? []) as string[];
156
+
157
+ const selectedUsers = allUsers?.filter(user =>
158
+ assignedUserIds?.includes(user?.id)
159
+ );
160
+
161
+ const deptUsers = selectedDeptIds.length
162
+ ? allUsers?.filter(user => selectedDeptIds?.includes(user?.deptId as any))
163
+ : [];
164
+
165
+ const mergedUsersMap = new Map();
166
+
167
+ // Add selected users first
168
+ selectedUsers?.forEach(user => {
169
+ mergedUsersMap?.set(user.id, {
170
+ label: `${user?.fName} ${user?.lName}`,
171
+ value: user?.id,
172
+ });
173
+ });
174
+
175
+ // Add department users next
176
+ deptUsers?.forEach(user => {
177
+ if (!mergedUsersMap?.has(user?.id)) {
178
+ mergedUsersMap?.set(user?.id, {
179
+ label: `${user?.fName} ${user?.lName}`,
180
+ value: user?.id,
181
+ });
182
+ }
183
+ });
184
+
185
+ const userOptions = Array.from(mergedUsersMap.values());
186
+
187
+ const handleDepartmentChange = (
188
+ values: string[],
189
+ options: { label: string }[]
190
+ ) => {
191
+ setSelectedDeptIds(values);
192
+
193
+ const deptLabels = options?.map(opt => opt.label).join(', ');
194
+
195
+ let updatedAssignedTo = reminderPayload?.assigned_to || [];
196
+
197
+ if (reminderPayload && reminderPayload?.assigned_to?.length > 0) {
198
+ const matchedUsers = allUsers?.filter(
199
+ user => user?.deptId !== null && values?.includes(String(user?.deptId))
200
+ );
201
+
202
+ updatedAssignedTo = reminderPayload?.assigned_to?.filter((id: any) =>
203
+ matchedUsers?.some(user => user.id === id)
204
+ );
205
+ }
206
+
207
+ setReminderPayload((prev: any) => ({
208
+ ...prev,
209
+ department: deptLabels,
210
+ assigned_to: updatedAssignedTo,
211
+ }));
212
+ };
162
213
 
163
214
  return (
164
215
  <FormContainer>
165
216
  <Label label="Department" required />
166
217
  <StyledAntSelect
167
218
  disabled={disabled}
219
+ mode="multiple"
168
220
  options={deptData}
169
221
  placeholder="Select Department"
170
222
  onChange={handleDepartmentChange}
223
+ // {(values: string[], options: { label: string }[]) => {
224
+ // setSelectedDeptIds(values);
225
+ // setReminderPayload((prev: any) => ({
226
+ // ...prev,
227
+ // department: options?.map(o => o?.label).join(', '),
228
+ // assigned_to: reminderPayload?.assigned_to,
229
+ // }));
230
+ // }}
171
231
  style={{ width: '8vw' }}
172
- value={reminderPayload?.department || undefined}
173
- showSearch
174
- dis
232
+ value={selectedDeptIds}
175
233
  />
234
+
176
235
  <Label label="Assigned To" required htmlFor="assigneDropdown" />
177
236
  <StyledAntSelect
178
237
  disabled={disabled}