@visns-studio/visns-components 5.3.14 → 5.4.0

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
@@ -78,7 +78,7 @@
78
78
  "react-dom": "^17.0.0 || ^18.0.0"
79
79
  },
80
80
  "name": "@visns-studio/visns-components",
81
- "version": "5.3.14",
81
+ "version": "5.4.0",
82
82
  "description": "Various packages to assist in the development of our Custom Applications.",
83
83
  "main": "src/index.js",
84
84
  "files": [
@@ -321,6 +321,31 @@ function GenericDetail({
321
321
  }
322
322
  };
323
323
 
324
+ const handleCheckboxDelete = async () => {
325
+ try {
326
+ if (currentConfigRef.current.functions.checkboxDelete) {
327
+ const { data, method, message, url } =
328
+ currentConfigRef.current.functions.checkboxDelete;
329
+ if (!Object.keys(rowsSelected).length) {
330
+ toast.warning(message.warning);
331
+ return;
332
+ }
333
+ const res = await CustomFetch(url, method, {
334
+ ...data,
335
+ rows: rowsSelected,
336
+ });
337
+ if (res.data.error === '') {
338
+ toast.success(message.success);
339
+ gridRef.current.reload();
340
+ } else {
341
+ toast.error(message.error);
342
+ }
343
+ }
344
+ } catch (error) {
345
+ console.error(error);
346
+ }
347
+ };
348
+
324
349
  const handleReload = () => {
325
350
  const min = 0;
326
351
  const max = 999999999;
@@ -877,10 +902,6 @@ function GenericDetail({
877
902
  }
878
903
  };
879
904
 
880
- useEffect(() => {
881
- console.info(activeTabConfig);
882
- }, [activeTabConfig]);
883
-
884
905
  const renderContent = () => {
885
906
  if (subnav && subnav.length > 0) {
886
907
  const activeTab = subnav.find((s) => s.show === true);
@@ -1913,6 +1934,22 @@ function GenericDetail({
1913
1934
  </button>
1914
1935
  </div>
1915
1936
  )}
1937
+
1938
+ {activeTabConfig.functions
1939
+ ?.checkboxDelete && (
1940
+ <div className={styles.polActions}>
1941
+ <button
1942
+ className={styles.btn}
1943
+ onClick={
1944
+ handleCheckboxDelete
1945
+ }
1946
+ >
1947
+ {activeTabConfig.functions
1948
+ .checkboxDelete.label ||
1949
+ 'Delete'}
1950
+ </button>
1951
+ </div>
1952
+ )}
1916
1953
  </>
1917
1954
  );
1918
1955
  } else {
@@ -249,6 +249,52 @@ function GenericIndex({
249
249
  tableData,
250
250
  ]);
251
251
 
252
+ const handleCheckboxDelete = async () => {
253
+ try {
254
+ const { data, method, message, url } = setting?.functions
255
+ ?.checkboxDelete
256
+ ? setting.functions.checkboxDelete
257
+ : config.form?.functions?.checkboxDelete;
258
+
259
+ if (!Object.keys(rowsSelectedRef.current).length) {
260
+ toast.warning(message.warning);
261
+ return;
262
+ }
263
+
264
+ // Create a map of selected rows with full data from tableData
265
+ const selectedRowsData = {};
266
+ Object.entries(rowsSelectedRef.current).forEach(([id, value]) => {
267
+ if (value) {
268
+ const fullRowData = tableData.find(
269
+ (row) => row.id === parseInt(id)
270
+ );
271
+ if (fullRowData) {
272
+ selectedRowsData[id] = fullRowData;
273
+ }
274
+ }
275
+ });
276
+
277
+ const res = await CustomFetch(url, method, {
278
+ ...data,
279
+ rows: selectedRowsData,
280
+ });
281
+
282
+ if (res.data.error === '') {
283
+ toast.success(message.success);
284
+ gridRef.current?.reload();
285
+ // Clear selections after successful delete
286
+ rowsSelectedRef.current = {};
287
+ } else {
288
+ toast.error(message.error);
289
+ }
290
+ } catch (err) {
291
+ console.error(err);
292
+ toast.error(
293
+ 'An error occurred while processing the delete request'
294
+ );
295
+ }
296
+ };
297
+
252
298
  const handleExport = async (e) => {
253
299
  try {
254
300
  if (e) {
@@ -464,34 +510,48 @@ function GenericIndex({
464
510
 
465
511
  <div className={styles.grid}>{renderContent()}</div>
466
512
  <Outlet />
467
- {setting.functions?.checkboxUpdate && (
468
- <div className={styles.polActions}>
513
+
514
+ <div className={styles.polActions}>
515
+ {setting.functions?.checkboxUpdate && (
469
516
  <button
470
517
  className={styles.btn}
471
518
  onClick={handleCheckboxUpdate}
472
519
  >
473
520
  {setting.functions.checkboxUpdate.label || 'Update'}
474
521
  </button>
475
- </div>
476
- )}
477
- {config?.form?.functions?.checkboxUpdate && (
478
- <div className={styles.polActions}>
522
+ )}
523
+ {config?.form?.functions?.checkboxUpdate && (
479
524
  <button
480
525
  className={styles.btn}
481
526
  onClick={handleCheckboxUpdate}
482
527
  >
483
528
  {config.form.functions.checkboxUpdate.label || 'Update'}
484
529
  </button>
485
- </div>
486
- )}
530
+ )}
531
+
532
+ {setting.functions?.checkboxDelete && (
533
+ <button
534
+ className={styles.btn}
535
+ onClick={handleCheckboxDelete}
536
+ >
537
+ {setting.functions.checkboxDelete.label || 'Delete'}
538
+ </button>
539
+ )}
540
+ {config?.form?.functions?.checkboxDelete && (
541
+ <button
542
+ className={styles.btn}
543
+ onClick={handleCheckboxDelete}
544
+ >
545
+ {config.form.functions.checkboxDelete.label || 'Delete'}
546
+ </button>
547
+ )}
487
548
 
488
- {setting.export?.label && (
489
- <div className={styles.polActions}>
549
+ {setting.export?.label && (
490
550
  <button className={styles.btn} onClick={handleExport}>
491
551
  {setting.export.label}
492
552
  </button>
493
- </div>
494
- )}
553
+ )}
554
+ </div>
495
555
  </>
496
556
  );
497
557
  }