inboxlookup_screen 1.0.7 → 1.0.9

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.7",
3
+ "version": "1.0.9",
4
4
  "description": "A React component using DevExtreme",
5
5
  "main": "dist/index.js",
6
6
  "homepage": "./",
@@ -146,9 +146,9 @@
146
146
  margin-bottom: 4px;
147
147
  }
148
148
 
149
- .lookupscreenpopup-contentt input {
150
- height: 36px;
151
- padding: 6px 8px;
149
+ .lookupscreenpopup-content>.form-group>input {
150
+ height: 36px !important;
151
+ padding: 6px 8px !important;
152
152
  border: 1px solid #dcdcdc;
153
153
  border-radius: 4px;
154
154
  background: #f9f9f9;
@@ -9,27 +9,19 @@ import DataGrid, {
9
9
  Item,
10
10
  GroupItem, HeaderFilter, FilterRow,
11
11
  } from 'devextreme-react/data-grid';
12
- import Button from 'devextreme-react/button'; // <-- THIS import MUST be here
13
12
  import CustomStore from 'devextreme/data/custom_store';
14
13
  import Popup from 'devextreme-react/popup';
15
14
  import 'devextreme/dist/css/dx.light.css';
16
15
 
17
-
18
16
  const STORAGE_KEY = "ORDERS_MASTER_DETAIL_SEARCH_HISTORY";
19
- const DEFAULT_SERVICE = {
20
- CustomerId: 10,
21
- projectId: 147,
22
- id: 4, // any unique id for the list
23
- status: "Active" // optional for left list rendering
24
- };
25
17
 
26
- const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9lNjZmMWU2Yi05Y2I5LTQyNTgtYTQyOS0xNzhjZWUzNTlhYTkvIiwiaWF0IjoxNzQ3NjI2MDM0LCJuYmYiOjE3NDc2MjYwMzQsImV4cCI6MTc0NzYyOTk1MCwiYWNjdCI6MCwiYWNyIjoiMSIsImFjcnMiOlsicDEiXSwiYWlvIjoiQVpRQWEvOFpBQUFBbGJ3R3dWeVZteXA3THJKZ0ZiRUFzTFhGQ3ZDRE9mOVBHRFZmVkhDTVIyTU9PVkUyaXNOdmtPVG9JWmdZSXg2Yi9tQkYyYnVTUmwrVW5jZVFkZ3E1RVlFSDNGWmFRYkxOMGFZK05YV2l2d2pLakdzcEJkQVREQTE3WDduQ0pmS0k5RUVtNVczTnFLNXY2QUdlZnpZRzBXMkp5d1pueVhwbVBSaEpZREpGbFdzaE9OWk1XSVNQaVdjN05Fb3gvc1IrIiwiYW1yIjpbInB3ZCIsIm1mYSJdLCJhcHBfZGlzcGxheW5hbWUiOiJmbG93LVNTTy1pbnRlZ3JhdGlvbiIsImFwcGlkIjoiOTAwN2UyYzQtM2VlOS00MWQ4LWJlNzEtM2FiZGQ0ZTc5MzIxIiwiYXBwaWRhY3IiOiIxIiwiZmFtaWx5X25hbWUiOiJNIiwiZ2l2ZW5fbmFtZSI6IkdhbnRoaW1hdGhpIiwiaWR0eXAiOiJ1c2VyIiwiaXBhZGRyIjoiMTU3LjUxLjEyNS43NSIsIm5hbWUiOiJHYW50aGltYXRoaSBNIiwib2lkIjoiNmJkNDZkNGEtNGM0ZS00Y2RlLWI5MDItNTJlN2FkYzE5NGRmIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTE3NzEzODE2ODEtMjQ0NzgzODAwMi0zNTE0ODIwOTgxLTE3MjA3OCIsInBsYXRmIjoiNSIsInB1aWQiOiIxMDAzMjAwMjJDMDlEQzgyIiwicmgiOiIxLkFWTUFheDV2NXJtY1dFS2tLUmVNN2pXYXFRTUFBQUFBQUFBQXdBQUFBQUFBQUFCVEFIeFRBQS4iLCJzY3AiOiJEaXJlY3RvcnkuUmVhZC5BbGwgVXNlci5SZWFkIFVzZXIuUmVhZC5BbGwgcHJvZmlsZSBvcGVuaWQgZW1haWwiLCJzaWQiOiIwMDRmMzk1OS0wYjE5LWZhMjUtNGUyNS0zNDI0MWU0NjljZTkiLCJzdWIiOiItV1gtSXQ5NGFDaUozN1l6UEszemdXYWxTYS1MMmJ4MDhsempxUzEyb1JRIiwidGVuYW50X3JlZ2lvbl9zY29wZSI6IkFTIiwidGlkIjoiZTY2ZjFlNmItOWNiOS00MjU4LWE0MjktMTc4Y2VlMzU5YWE5IiwidW5pcXVlX25hbWUiOiJnYW50aGltYXRoaS5tQGFjY2Vzc2hlYWx0aGNhcmUuY29tIiwidXBuIjoiZ2FudGhpbWF0aGkubUBhY2Nlc3NoZWFsdGhjYXJlLmNvbSIsInV0aSI6IjlfZDJSOGJjRFVlZERaeFdJaHdvQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfZnRkIjoiSVFudjZvNlNiS1FUbEpIT05mV1FXQWFxWW9XUHRnMmFoM19lX1VpbjlHa0JhMjl5WldGemIzVjBhQzFrYzIxeiIsInhtc19pZHJlbCI6IjEgMjIiLCJ4bXNfc3QiOnsic3ViIjoiQ2hwWms3bVpSX2N3UGdVUnV4ZndTb0tVQkVMNlJCaWZxMkJ5c1RhSTFyZyJ9LCJ4bXNfdGNkdCI6MTQwMTQ2MzYyNSwiVXNlclR5cGUiOjEsIlVzZXJJZCI6Nzc3NzIsIkVtcElkIjoiTTA5NDgwNTciLCJFbWFpbElkIjoiZ2FudGhpbWF0aGkubUBhY2Nlc3NoZWFsdGhjYXJlLmNvbSIsIk5hbWUiOiJHYW50aGltYXRoaSBNIiwiQXBwS2V5IjoiMjllMWEyYTAtOGU0My00NDNhLTk4MDQtMTM3MGIwN2I3ZWRkIiwiU2Vzc2lvbklkIjoiMGM5NzU3ZjktYTA1OC00MWE1LWE5M2YtOWY5MTZhMWU2ZmQxIiwiSWFtVVJMIjoiaHR0cHM6Ly91YXRfaWFtYXBpLmFjY2Vzc2hlYWx0aGNhcmUuY29tL2FwaSJ9.YPFSayPCfTBDaB2vEHhwR3TnvvstT5G3z3yIWYny_Sc'; // Replace with your token
27
- const getFieldMetaAPI = (sheetId) =>
28
- `http://localhost:5017/api/excel-sheets/${sheetId}/columns`;
29
18
 
30
- let lastAppliedFilter = null;
31
-
32
- const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
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
+ };
33
25
  const [orders, setOrders] = useState([]);
34
26
  const [selectedOrder, setSelectedOrder] = useState(null);
35
27
  const [selectedService, setSelectedService] = useState(DEFAULT_SERVICE);
@@ -41,7 +33,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
41
33
  const [category, setCategory] = useState(0);
42
34
  const [status, setStatus] = useState(0);
43
35
  const [filteredOrders, setFilteredOrders] = useState([]);
44
- const [gridData, setGridData] = useState([]);
45
36
  const searchTimeoutRef = useRef(null);
46
37
  const [gridStore, setGridStore] = useState(null);
47
38
 
@@ -56,16 +47,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
56
47
  const [readOnlyFilters, setReadOnlyFilters] = useState(false);
57
48
  const [gridInstance, setGridInstance] = useState(null);
58
49
  const [autoExpandAll, setAutoExpandAll] = useState(true);
59
- const [popupVisible, setPopupVisible] = useState(false);
60
- const [actionValue, setActionValue] = useState(null);
61
- const [assignPopupVisible, setAssignPopupVisible] = useState(false);
62
- const [proceedEnabled, setProceedEnabled] = useState(false); // ✅ NEW: control button enabled state
63
- const [popupSummary, setPopupSummary] = useState({
64
- type: '',
65
- count: 0,
66
- ids: [],
67
- filters: []
68
- });
50
+ const [proceedEnabled, setProceedEnabled] = useState(false);
51
+ const getFieldMetaAPI = (sheetId) =>
52
+ `${BaseUrl}api/LookupSheetMaster/GetColumns/${sheetId}`;
69
53
 
70
54
  // ✅ Toast state
71
55
  const [toastConfig, setToastConfig] = useState({
@@ -81,21 +65,26 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
81
65
 
82
66
 
83
67
  useEffect(() => {
84
- if (!selectedService) return; // do nothing if no service is selected
68
+ if (!selectedService) return;
85
69
 
86
70
  const { projectId } = selectedService;
87
71
 
88
- axios.get(`http://localhost:5017/api/excel-sheets/latest-sheets/${projectId}`,)
72
+ axios.get(`${BaseUrl}api/LookupSheetMaster/GetLatestSheetsByProject/${projectId}`, {
73
+ headers: {
74
+ Authorization: `Bearer ${token}`,
75
+ "Content-Type": "application/json",
76
+ },
77
+ })
89
78
  .then(response => {
90
79
  const data = response.data.map(item => ({
91
80
  id: item.Id,
92
81
  sheetName: item.SheetName,
93
82
  fileId: item.FileId,
94
83
  ProjectId: item.ProjectId,
95
- status: "Active" // optional UI status
84
+ status: "Active"
96
85
  }));
97
86
  setOrders(data);
98
- setFilteredOrders(data); // ✅ show ALL by default
87
+ setFilteredOrders(data);
99
88
  // setSelectedOrder(data.length ? data[0] : null);
100
89
 
101
90
  })
@@ -111,11 +100,15 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
111
100
  const openLastViewedSheet = async () => {
112
101
  try {
113
102
  const res = await axios.get(
114
- "http://localhost:5017/api/excel-sheets/last-viewed",
103
+ `${BaseUrl}api/LookupSheetMaster/GetLastViewedSheet`,
115
104
  {
116
105
  params: {
117
106
  userId: 1,
118
- projectId: 147 // ✅ FIXED (do NOT read from selectedService)
107
+ projectId: ProjectId
108
+ },
109
+ headers: {
110
+ Authorization: `Bearer ${token}`,
111
+ "Content-Type": "application/json"
119
112
  }
120
113
  }
121
114
  );
@@ -126,7 +119,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
126
119
  const sheet = orders.find(o => o.id === lastViewedSheetId);
127
120
 
128
121
  if (!sheet) return;
129
- // ✅ EXACT SAME FLOW AS MANUAL CLICK
130
122
  setSelectedOrder(sheet);
131
123
  setSelectedService(sheet);
132
124
 
@@ -174,7 +166,7 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
174
166
  .map(p => `${p}=${encodeURIComponent(JSON.stringify(loadOptions[p]))}`)
175
167
  .join("&");
176
168
 
177
- const requestUrl = `http://localhost:5017/api/excel-sheets/${sheetId}/data?${queryString}`;
169
+ const requestUrl = `${BaseUrl}api/LookupSheetMaster/GetData/${sheetId}?${queryString}`;
178
170
 
179
171
  const response = await fetch(requestUrl, {
180
172
  method: "POST",
@@ -211,13 +203,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
211
203
  [toastConfig, setToastConfig],
212
204
  );
213
205
 
214
- const onHiding = useCallback(() => {
215
- setToastConfig({
216
- ...toastConfig,
217
- isVisible: false,
218
- });
219
- }, [toastConfig, setToastConfig]);
220
-
221
206
  const handleSearchChange = (value) => {
222
207
  const safeValue = typeof value === "string" ? value : "";
223
208
 
@@ -250,8 +235,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
250
235
  });
251
236
 
252
237
  const data = await res.json();
253
-
254
- // Always keep FlowTaskId first
255
238
  const flowTaskColumn = {
256
239
  dataField: "RowNumber",
257
240
  caption: "Sheet Row",
@@ -327,9 +310,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
327
310
 
328
311
  else if (selectAll && noneVisibleSelected) {
329
312
  // ✅ "Deselect All"
330
- e.component.clearSelection(); // ensures DevExtreme state resets
313
+ e.component.clearSelection();
331
314
  setSelectAll(false);
332
- setWasFullyDeselected(true); // flag for Scenario 6
315
+ setWasFullyDeselected(true);
333
316
  setExcludedKeys([]);
334
317
  setSelectedRowKeys([]);
335
318
  setFinalCount(0);
@@ -392,58 +375,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
392
375
  }, 0);
393
376
  }, [selectAll, excludedKeys, selectedRowKeys, gridInstance]);
394
377
 
395
-
396
- const getFinalSelectedIds = async (extraPayload = {}) => {
397
- const appliedFilters = Array.isArray(lastAppliedFilter) ? lastAppliedFilter : [];
398
- const totalRows = gridInstance?.totalCount() || 0;
399
-
400
- // Determine selectType and ids
401
- let selectType = '';
402
- let selectedIds = [];
403
- let deselectedIds = [];
404
- let selectionLabel = '';
405
- let selectedCount = 0;
406
-
407
- if (selectAll && excludedKeys.length === 0) {
408
- selectType = 'ALL';
409
- selectionLabel = 'All Rows Selected';
410
- selectedCount = totalRows;
411
- } else if (selectAll && excludedKeys.length > 0) {
412
- selectType = 'EXCLUDE';
413
- deselectedIds = excludedKeys;
414
- selectionLabel = 'Deselected Rows';
415
- selectedCount = excludedKeys.length;
416
- } else {
417
- selectType = 'INCLUDE';
418
- selectedIds = selectedRowKeys;
419
- selectionLabel = 'Selected Rows';
420
- selectedCount = selectedRowKeys.length;
421
- }
422
-
423
- const payload = {
424
- selectType,
425
- selectedIds,
426
- deselectedIds,
427
- totalSelectedCount: selectedCount,
428
- filters: appliedFilters.length > 0 ? appliedFilters : [],
429
- ...extraPayload, // Inject workspaceId, userId, etc.
430
- };
431
-
432
- console.log("📦 Final Selection Payload:", payload);
433
-
434
- setPopupSummary(payload);
435
- setPopupVisible(true);
436
- setActionValue(null);
437
-
438
- // Reset selection state
439
- setSelectAll(false);
440
- setExcludedKeys([]);
441
- setSelectedRowKeys([]);
442
- setFinalCount(0);
443
- getUnSelected();
444
-
445
- return selectedIds;
446
- };
447
378
  const formatRawFilterToReadableText = (filter) => {
448
379
  if (!filter) return '';
449
380
 
@@ -547,50 +478,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
547
478
  }
548
479
  };
549
480
 
550
- const getUnSelected = () => {
551
- const gridInstance = gridRef.current?.instance?.();
552
-
553
- if (!gridInstance) return;
554
-
555
- // ✅ Clear selection only (do not clear filters)
556
- gridInstance.deselectAll();
557
-
558
- // ✅ Reset your internal state
559
- setSelectAll(false);
560
- setExcludedKeys([]);
561
- setSelectedRowKeys([]);
562
- setShowCheckboxes(false);
563
- setFinalCount(0);
564
- setReadOnlyFilters(false);
565
- };
566
-
567
- const getClearSelected = () => {
568
- const gridInstance = gridRef.current?.instance?.();
569
-
570
- if (!gridInstance) return;
571
-
572
- // ✅ Clear selection
573
- gridInstance.deselectAll();
574
-
575
- // ✅ Clear all filters (FilterRow + HeaderFilter)
576
- const columns = gridInstance.getVisibleColumns();
577
- columns.forEach((col) => {
578
- gridInstance.columnOption(col.dataField, 'filterValue', null); // FilterRow
579
- gridInstance.columnOption(col.dataField, 'filterValues', null); // HeaderFilter
580
- });
581
-
582
- gridInstance.clearFilter(); // apply filter clearing
583
-
584
- // ✅ Reset your internal state
585
- setSelectAll(false);
586
- setExcludedKeys([]);
587
- setSelectedRowKeys([]);
588
- // setShowCheckboxes(false);
589
- setFinalCount(0);
590
- setReadOnlyFilters(false);
591
- setActionValue(null);
592
-
593
- };
594
481
 
595
482
  useEffect(() => {
596
483
  if (readOnlyFilters) {
@@ -613,33 +500,21 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
613
500
  const saveLastViewedSheet = async (sheet) => {
614
501
  try {
615
502
  await axios.post(
616
- "http://localhost:5017/api/excel-sheets/last-viewed",
503
+ `${BaseUrl}api/LookupSheetMaster/UpdateLastViewedSheet`,
617
504
  {
618
505
  userId: 1, // replace with logged-in user id later
619
- projectId: 147,
506
+ projectId: ProjectId,
620
507
  sheetId: sheet.id
621
- }
622
- );
623
- } catch (error) {
624
- console.error("Failed to save last viewed sheet", error);
625
- }
626
- };
627
- // ✅ GET LAST VIEWED SHEET
628
- const getLastViewedSheet = async (projectId) => {
629
- try {
630
- const response = await axios.get(
631
- "http://localhost:5017/api/excel-sheets/last-viewed",
508
+ },
632
509
  {
633
- params: {
634
- userId: 1, // replace later with logged-in user
635
- projectId: projectId
510
+ headers: {
511
+ Authorization: `Bearer ${token}`,
512
+ "Content-Type": "application/json"
636
513
  }
637
514
  }
638
515
  );
639
- return response.data; // expected: { sheetId: number }
640
516
  } catch (error) {
641
- console.error("Failed to get last viewed sheet", error);
642
- return null;
517
+ console.error("Failed to save last viewed sheet", error);
643
518
  }
644
519
  };
645
520
 
@@ -679,12 +554,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
679
554
  return () => window.removeEventListener("storage", handleStorageChange);
680
555
  }, []);
681
556
 
682
-
683
-
684
-
685
- /* ----------------------------
686
- API call (tab close / logout only)
687
- ----------------------------- */
688
557
  const updateSearchHistoryAPI = () => {
689
558
  if (!searchHistoryRef.current.length) return;
690
559
 
@@ -697,9 +566,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
697
566
  );
698
567
  };
699
568
 
700
- /* ----------------------------
701
- Tab switch & close
702
- ----------------------------- */
703
569
  useEffect(() => {
704
570
  const handleVisibilityChange = () => {
705
571
  if (document.visibilityState === "hidden") {
@@ -725,35 +591,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
725
591
 
726
592
  gridInstance.searchByText(searchText);
727
593
  };
728
- const clearSearch = () => {
729
- if (!gridInstance) return;
730
- setSearchText("");
731
- gridInstance.searchByText("");
732
- };
733
-
734
- const gridDataWithId = gridData.map((row, index) => ({
735
- ...row,
736
- rowId: index + 1
737
- }));
738
-
739
- const handleColumnReorder = (e) => {
740
- alert("bsvdchg")
741
- console.log("selectedOrder", selectedOrder)
742
- if (!selectedOrder) return;
743
-
744
- const payload = {
745
- sheetId: selectedOrder.id,
746
- fieldName: e.column.dataField,
747
- fromIndex: e.fromIndex,
748
- toIndex: e.toIndex
749
- };
750
-
751
- axios.post(
752
- "http://localhost:5017/api/excel-sheets/columns/reorder",
753
- payload
754
- ).catch(err => console.error("Column reorder save failed", err));
755
- };
756
-
757
594
 
758
595
  useEffect(() => {
759
596
  // If all filters are cleared → show all records
@@ -773,13 +610,9 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
773
610
  if (!key) return "";
774
611
 
775
612
  return key
776
- // Handle snake_case first
777
613
  .replace(/_/g, " ")
778
- // Add space between lowerCase -> UpperCase
779
614
  .replace(/([a-z])([A-Z])/g, "$1 $2")
780
- // Add space before last capital in acronyms (ID, URL, etc.)
781
615
  .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
782
- // Capitalize first letter of each word
783
616
  .replace(/\b\w/g, (c) => c.toUpperCase());
784
617
  };
785
618
 
@@ -951,39 +784,6 @@ const OrdersMasterDetail = ({ dataSource, keyExpr }) => {
951
784
  <GroupItem column="sheetId" summaryType="count" displayFormat="Count: {0}" />
952
785
  </Summary>
953
786
 
954
- {/* <Toolbar>
955
- <Item name="groupPanel" location="before" />
956
-
957
- <Item
958
- location="after"
959
- render={() => (
960
- <Button
961
- icon="arrowright"
962
- text={`(${finalCount})`}
963
- onClick={() => {
964
- if (actionValue === "Assigned") {
965
- setAssignPopupVisible(true);
966
- } else {
967
- getFinalSelectedIds();
968
- setPopupVisible(true);
969
- }
970
- }}
971
- disabled={!proceedEnabled}
972
- />
973
- )}
974
- />
975
-
976
- <Item
977
- location="after"
978
- render={() => (
979
- <Button
980
- icon="clearformat"
981
- text="Clear"
982
- onClick={getClearSelected}
983
- />
984
- )}
985
- />
986
- </Toolbar> */}
987
787
  </DataGrid>
988
788
 
989
789