inboxlookup_screen 1.0.8 → 1.0.10

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inboxlookup_screen",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "A React component using DevExtreme",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "./",
@@ -13,22 +13,15 @@ import CustomStore from 'devextreme/data/custom_store';
13
13
  import Popup from 'devextreme-react/popup';
14
14
  import 'devextreme/dist/css/dx.light.css';
15
15
 
16
-
17
16
  const STORAGE_KEY = "ORDERS_MASTER_DETAIL_SEARCH_HISTORY";
18
- const DEFAULT_SERVICE = {
19
- CustomerId: 10,
20
- projectId: 147,
21
- id: 4, // any unique id for the list
22
- status: "Active" // optional for left list rendering
23
- };
24
17
 
25
- const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9lNjZmMWU2Yi05Y2I5LTQyNTgtYTQyOS0xNzhjZWUzNTlhYTkvIiwiaWF0IjoxNzQ3NjI2MDM0LCJuYmYiOjE3NDc2MjYwMzQsImV4cCI6MTc0NzYyOTk1MCwiYWNjdCI6MCwiYWNyIjoiMSIsImFjcnMiOlsicDEiXSwiYWlvIjoiQVpRQWEvOFpBQUFBbGJ3R3dWeVZteXA3THJKZ0ZiRUFzTFhGQ3ZDRE9mOVBHRFZmVkhDTVIyTU9PVkUyaXNOdmtPVG9JWmdZSXg2Yi9tQkYyYnVTUmwrVW5jZVFkZ3E1RVlFSDNGWmFRYkxOMGFZK05YV2l2d2pLakdzcEJkQVREQTE3WDduQ0pmS0k5RUVtNVczTnFLNXY2QUdlZnpZRzBXMkp5d1pueVhwbVBSaEpZREpGbFdzaE9OWk1XSVNQaVdjN05Fb3gvc1IrIiwiYW1yIjpbInB3ZCIsIm1mYSJdLCJhcHBfZGlzcGxheW5hbWUiOiJmbG93LVNTTy1pbnRlZ3JhdGlvbiIsImFwcGlkIjoiOTAwN2UyYzQtM2VlOS00MWQ4LWJlNzEtM2FiZGQ0ZTc5MzIxIiwiYXBwaWRhY3IiOiIxIiwiZmFtaWx5X25hbWUiOiJNIiwiZ2l2ZW5fbmFtZSI6IkdhbnRoaW1hdGhpIiwiaWR0eXAiOiJ1c2VyIiwiaXBhZGRyIjoiMTU3LjUxLjEyNS43NSIsIm5hbWUiOiJHYW50aGltYXRoaSBNIiwib2lkIjoiNmJkNDZkNGEtNGM0ZS00Y2RlLWI5MDItNTJlN2FkYzE5NGRmIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTE3NzEzODE2ODEtMjQ0NzgzODAwMi0zNTE0ODIwOTgxLTE3MjA3OCIsInBsYXRmIjoiNSIsInB1aWQiOiIxMDAzMjAwMjJDMDlEQzgyIiwicmgiOiIxLkFWTUFheDV2NXJtY1dFS2tLUmVNN2pXYXFRTUFBQUFBQUFBQXdBQUFBQUFBQUFCVEFIeFRBQS4iLCJzY3AiOiJEaXJlY3RvcnkuUmVhZC5BbGwgVXNlci5SZWFkIFVzZXIuUmVhZC5BbGwgcHJvZmlsZSBvcGVuaWQgZW1haWwiLCJzaWQiOiIwMDRmMzk1OS0wYjE5LWZhMjUtNGUyNS0zNDI0MWU0NjljZTkiLCJzdWIiOiItV1gtSXQ5NGFDaUozN1l6UEszemdXYWxTYS1MMmJ4MDhsempxUzEyb1JRIiwidGVuYW50X3JlZ2lvbl9zY29wZSI6IkFTIiwidGlkIjoiZTY2ZjFlNmItOWNiOS00MjU4LWE0MjktMTc4Y2VlMzU5YWE5IiwidW5pcXVlX25hbWUiOiJnYW50aGltYXRoaS5tQGFjY2Vzc2hlYWx0aGNhcmUuY29tIiwidXBuIjoiZ2FudGhpbWF0aGkubUBhY2Nlc3NoZWFsdGhjYXJlLmNvbSIsInV0aSI6IjlfZDJSOGJjRFVlZERaeFdJaHdvQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiSVFudjZvNlNiS1FUbEpIT05mV1FXQWFxWW9XUHRnMmFoM19lX1VpbjlHa0JhMjl5WldGemIzVjBhQzFrYzIxeiIsInhtc19pZHJlbCI6IjEgMjIiLCJ4bXNfc3QiOnsic3ViIjoiQ2hwWms3bVpSX2N3UGdVUnV4ZndTb0tVQkVMNlJCaWZxMkJ5c1RhSTFyZyJ9LCJ4bXNfdGNkdCI6MTQwMTQ2MzYyNSwiVXNlclR5cGUiOjEsIlVzZXJJZCI6Nzc3NzIsIkVtcElkIjoiTTA5NDgwNTciLCJFbWFpbElkIjoiZ2FudGhpbWF0aGkubUBhY2Nlc3NoZWFsdGhjYXJlLmNvbSIsIk5hbWUiOiJHYW50aGltYXRoaSBNIiwiQXBwS2V5IjoiMjllMWEyYTAtOGU0My00NDNhLTk4MDQtMTM3MGIwN2I3ZWRkIiwiU2Vzc2lvbklkIjoiMGM5NzU3ZjktYTA1OC00MWE1LWE5M2YtOWY5MTZhMWU2ZmQxIiwiSWFtVVJMIjoiaHR0cHM6Ly91YXRfaWFtYXBpLmFjY2Vzc2hlYWx0aGNhcmUuY29tL2FwaSJ9.YPFSayPCfTBDaB2vEHhwR3TnvvstT5G3z3yIWYny_Sc'; // Replace with your token
26
- const getFieldMetaAPI = (sheetId) =>
27
- `http://localhost:5017/api/excel-sheets/${sheetId}/columns`;
28
18
 
29
- let lastAppliedFilter = null;
30
-
31
- const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
19
+ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl, ProjectId }) => {
20
+ const DEFAULT_SERVICE = {
21
+ projectId: ProjectId,
22
+ id: 4,
23
+ status: "Active" // optional for left list rendering
24
+ };
32
25
  const [orders, setOrders] = useState([]);
33
26
  const [selectedOrder, setSelectedOrder] = useState(null);
34
27
  const [selectedService, setSelectedService] = useState(DEFAULT_SERVICE);
@@ -40,7 +33,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
40
33
  const [category, setCategory] = useState(0);
41
34
  const [status, setStatus] = useState(0);
42
35
  const [filteredOrders, setFilteredOrders] = useState([]);
43
- const [gridData, setGridData] = useState([]);
44
36
  const searchTimeoutRef = useRef(null);
45
37
  const [gridStore, setGridStore] = useState(null);
46
38
 
@@ -55,15 +47,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
55
47
  const [readOnlyFilters, setReadOnlyFilters] = useState(false);
56
48
  const [gridInstance, setGridInstance] = useState(null);
57
49
  const [autoExpandAll, setAutoExpandAll] = useState(true);
58
- const [popupVisible, setPopupVisible] = useState(false);
59
- const [actionValue, setActionValue] = useState(null);
60
- const [proceedEnabled, setProceedEnabled] = useState(false); // ✅ NEW: control button enabled state
61
- const [popupSummary, setPopupSummary] = useState({
62
- type: '',
63
- count: 0,
64
- ids: [],
65
- filters: []
66
- });
50
+ const [proceedEnabled, setProceedEnabled] = useState(false);
51
+ const getFieldMetaAPI = (sheetId) =>
52
+ `${BaseUrl}api/LookupSheetMaster/GetColumns/${sheetId}`;
67
53
 
68
54
  // ✅ Toast state
69
55
  const [toastConfig, setToastConfig] = useState({
@@ -79,21 +65,24 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
79
65
 
80
66
 
81
67
  useEffect(() => {
82
- if (!selectedService) return; // do nothing if no service is selected
83
-
84
- const { projectId } = selectedService;
85
-
86
- axios.get(`http://localhost:5017/api/excel-sheets/latest-sheets/${projectId}`,)
68
+ if (!ProjectId) return;
69
+
70
+ axios.get(`${BaseUrl}api/LookupSheetMaster/GetLatestSheetsByProject/${ProjectId}`, {
71
+ headers: {
72
+ Authorization: `Bearer ${token}`,
73
+ "Content-Type": "application/json",
74
+ },
75
+ })
87
76
  .then(response => {
88
77
  const data = response.data.map(item => ({
89
78
  id: item.Id,
90
79
  sheetName: item.SheetName,
91
80
  fileId: item.FileId,
92
81
  ProjectId: item.ProjectId,
93
- status: "Active" // optional UI status
82
+ status: "Active"
94
83
  }));
95
84
  setOrders(data);
96
- setFilteredOrders(data); // ✅ show ALL by default
85
+ setFilteredOrders(data);
97
86
  // setSelectedOrder(data.length ? data[0] : null);
98
87
 
99
88
  })
@@ -109,11 +98,15 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
109
98
  const openLastViewedSheet = async () => {
110
99
  try {
111
100
  const res = await axios.get(
112
- "http://localhost:5017/api/excel-sheets/last-viewed",
101
+ `${BaseUrl}api/LookupSheetMaster/GetLastViewedSheet`,
113
102
  {
114
103
  params: {
115
104
  userId: 1,
116
- projectId: 147 // ✅ FIXED (do NOT read from selectedService)
105
+ projectId: ProjectId
106
+ },
107
+ headers: {
108
+ Authorization: `Bearer ${token}`,
109
+ "Content-Type": "application/json"
117
110
  }
118
111
  }
119
112
  );
@@ -124,7 +117,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
124
117
  const sheet = orders.find(o => o.id === lastViewedSheetId);
125
118
 
126
119
  if (!sheet) return;
127
- // ✅ EXACT SAME FLOW AS MANUAL CLICK
128
120
  setSelectedOrder(sheet);
129
121
  setSelectedService(sheet);
130
122
 
@@ -172,7 +164,7 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
172
164
  .map(p => `${p}=${encodeURIComponent(JSON.stringify(loadOptions[p]))}`)
173
165
  .join("&");
174
166
 
175
- const requestUrl = `http://localhost:5017/api/excel-sheets/${sheetId}/data?${queryString}`;
167
+ const requestUrl = `${BaseUrl}api/LookupSheetMaster/GetData/${sheetId}?${queryString}`;
176
168
 
177
169
  const response = await fetch(requestUrl, {
178
170
  method: "POST",
@@ -209,13 +201,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
209
201
  [toastConfig, setToastConfig],
210
202
  );
211
203
 
212
- const onHiding = useCallback(() => {
213
- setToastConfig({
214
- ...toastConfig,
215
- isVisible: false,
216
- });
217
- }, [toastConfig, setToastConfig]);
218
-
219
204
  const handleSearchChange = (value) => {
220
205
  const safeValue = typeof value === "string" ? value : "";
221
206
 
@@ -248,8 +233,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
248
233
  });
249
234
 
250
235
  const data = await res.json();
251
-
252
- // Always keep FlowTaskId first
253
236
  const flowTaskColumn = {
254
237
  dataField: "RowNumber",
255
238
  caption: "Sheet Row",
@@ -325,9 +308,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
325
308
 
326
309
  else if (selectAll && noneVisibleSelected) {
327
310
  // ✅ "Deselect All"
328
- e.component.clearSelection(); // ensures DevExtreme state resets
311
+ e.component.clearSelection();
329
312
  setSelectAll(false);
330
- setWasFullyDeselected(true); // flag for Scenario 6
313
+ setWasFullyDeselected(true);
331
314
  setExcludedKeys([]);
332
315
  setSelectedRowKeys([]);
333
316
  setFinalCount(0);
@@ -390,58 +373,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
390
373
  }, 0);
391
374
  }, [selectAll, excludedKeys, selectedRowKeys, gridInstance]);
392
375
 
393
-
394
- const getFinalSelectedIds = async (extraPayload = {}) => {
395
- const appliedFilters = Array.isArray(lastAppliedFilter) ? lastAppliedFilter : [];
396
- const totalRows = gridInstance?.totalCount() || 0;
397
-
398
- // Determine selectType and ids
399
- let selectType = '';
400
- let selectedIds = [];
401
- let deselectedIds = [];
402
- let selectionLabel = '';
403
- let selectedCount = 0;
404
-
405
- if (selectAll && excludedKeys.length === 0) {
406
- selectType = 'ALL';
407
- selectionLabel = 'All Rows Selected';
408
- selectedCount = totalRows;
409
- } else if (selectAll && excludedKeys.length > 0) {
410
- selectType = 'EXCLUDE';
411
- deselectedIds = excludedKeys;
412
- selectionLabel = 'Deselected Rows';
413
- selectedCount = excludedKeys.length;
414
- } else {
415
- selectType = 'INCLUDE';
416
- selectedIds = selectedRowKeys;
417
- selectionLabel = 'Selected Rows';
418
- selectedCount = selectedRowKeys.length;
419
- }
420
-
421
- const payload = {
422
- selectType,
423
- selectedIds,
424
- deselectedIds,
425
- totalSelectedCount: selectedCount,
426
- filters: appliedFilters.length > 0 ? appliedFilters : [],
427
- ...extraPayload, // Inject workspaceId, userId, etc.
428
- };
429
-
430
- console.log("📦 Final Selection Payload:", payload);
431
-
432
- setPopupSummary(payload);
433
- setPopupVisible(true);
434
- setActionValue(null);
435
-
436
- // Reset selection state
437
- setSelectAll(false);
438
- setExcludedKeys([]);
439
- setSelectedRowKeys([]);
440
- setFinalCount(0);
441
- getUnSelected();
442
-
443
- return selectedIds;
444
- };
445
376
  const formatRawFilterToReadableText = (filter) => {
446
377
  if (!filter) return '';
447
378
 
@@ -545,50 +476,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
545
476
  }
546
477
  };
547
478
 
548
- const getUnSelected = () => {
549
- const gridInstance = gridRef.current?.instance?.();
550
-
551
- if (!gridInstance) return;
552
-
553
- // ✅ Clear selection only (do not clear filters)
554
- gridInstance.deselectAll();
555
-
556
- // ✅ Reset your internal state
557
- setSelectAll(false);
558
- setExcludedKeys([]);
559
- setSelectedRowKeys([]);
560
- setShowCheckboxes(false);
561
- setFinalCount(0);
562
- setReadOnlyFilters(false);
563
- };
564
-
565
- const getClearSelected = () => {
566
- const gridInstance = gridRef.current?.instance?.();
567
-
568
- if (!gridInstance) return;
569
-
570
- // ✅ Clear selection
571
- gridInstance.deselectAll();
572
-
573
- // ✅ Clear all filters (FilterRow + HeaderFilter)
574
- const columns = gridInstance.getVisibleColumns();
575
- columns.forEach((col) => {
576
- gridInstance.columnOption(col.dataField, 'filterValue', null); // FilterRow
577
- gridInstance.columnOption(col.dataField, 'filterValues', null); // HeaderFilter
578
- });
579
-
580
- gridInstance.clearFilter(); // apply filter clearing
581
-
582
- // ✅ Reset your internal state
583
- setSelectAll(false);
584
- setExcludedKeys([]);
585
- setSelectedRowKeys([]);
586
- // setShowCheckboxes(false);
587
- setFinalCount(0);
588
- setReadOnlyFilters(false);
589
- setActionValue(null);
590
-
591
- };
592
479
 
593
480
  useEffect(() => {
594
481
  if (readOnlyFilters) {
@@ -611,33 +498,21 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
611
498
  const saveLastViewedSheet = async (sheet) => {
612
499
  try {
613
500
  await axios.post(
614
- "http://localhost:5017/api/excel-sheets/last-viewed",
501
+ `${BaseUrl}api/LookupSheetMaster/UpdateLastViewedSheet`,
615
502
  {
616
503
  userId: 1, // replace with logged-in user id later
617
- projectId: 147,
504
+ projectId: ProjectId,
618
505
  sheetId: sheet.id
619
- }
620
- );
621
- } catch (error) {
622
- console.error("Failed to save last viewed sheet", error);
623
- }
624
- };
625
- // ✅ GET LAST VIEWED SHEET
626
- const getLastViewedSheet = async (projectId) => {
627
- try {
628
- const response = await axios.get(
629
- "http://localhost:5017/api/excel-sheets/last-viewed",
506
+ },
630
507
  {
631
- params: {
632
- userId: 1, // replace later with logged-in user
633
- projectId: projectId
508
+ headers: {
509
+ Authorization: `Bearer ${token}`,
510
+ "Content-Type": "application/json"
634
511
  }
635
512
  }
636
513
  );
637
- return response.data; // expected: { sheetId: number }
638
514
  } catch (error) {
639
- console.error("Failed to get last viewed sheet", error);
640
- return null;
515
+ console.error("Failed to save last viewed sheet", error);
641
516
  }
642
517
  };
643
518
 
@@ -714,17 +589,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
714
589
 
715
590
  gridInstance.searchByText(searchText);
716
591
  };
717
- const clearSearch = () => {
718
- if (!gridInstance) return;
719
- setSearchText("");
720
- gridInstance.searchByText("");
721
- };
722
-
723
- const gridDataWithId = gridData.map((row, index) => ({
724
- ...row,
725
- rowId: index + 1
726
- }));
727
-
728
592
 
729
593
  useEffect(() => {
730
594
  // If all filters are cleared → show all records
@@ -744,13 +608,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
744
608
  if (!key) return "";
745
609
 
746
610
  return key
747
- // Handle snake_case first
748
611
  .replace(/_/g, " ")
749
- // Add space between lowerCase -> UpperCase
750
612
  .replace(/([a-z])([A-Z])/g, "$1 $2")
751
- // Add space before last capital in acronyms (ID, URL, etc.)
752
613
  .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
753
- // Capitalize first letter of each word
754
614
  .replace(/\b\w/g, (c) => c.toUpperCase());
755
615
  };
756
616
 
@@ -922,39 +782,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr, token, BaseUrl }) => {
922
782
  <GroupItem column="sheetId" summaryType="count" displayFormat="Count: {0}" />
923
783
  </Summary>
924
784
 
925
- {/* <Toolbar>
926
- <Item name="groupPanel" location="before" />
927
-
928
- <Item
929
- location="after"
930
- render={() => (
931
- <Button
932
- icon="arrowright"
933
- text={`(${finalCount})`}
934
- onClick={() => {
935
- if (actionValue === "Assigned") {
936
- setAssignPopupVisible(true);
937
- } else {
938
- getFinalSelectedIds();
939
- setPopupVisible(true);
940
- }
941
- }}
942
- disabled={!proceedEnabled}
943
- />
944
- )}
945
- />
946
-
947
- <Item
948
- location="after"
949
- render={() => (
950
- <Button
951
- icon="clearformat"
952
- text="Clear"
953
- onClick={getClearSelected}
954
- />
955
- )}
956
- />
957
- </Toolbar> */}
958
785
  </DataGrid>
959
786
 
960
787