@rufous/ui 0.2.96 → 0.2.98

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 (3) hide show
  1. package/dist/main.cjs +60 -44
  2. package/dist/main.js +60 -44
  3. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -4435,7 +4435,6 @@ function DataGrid({
4435
4435
  const [sortDirection, setSortDirection] = (0, import_react23.useState)(null);
4436
4436
  const [filterText, setFilterText] = (0, import_react23.useState)("");
4437
4437
  const [currentPage, setCurrentPage] = (0, import_react23.useState)(1);
4438
- const [columnFilters, setColumnFilters] = (0, import_react23.useState)({});
4439
4438
  const [resizingColumn, setResizingColumn] = (0, import_react23.useState)(null);
4440
4439
  const [startX, setStartX] = (0, import_react23.useState)(0);
4441
4440
  const [startWidth, setStartWidth] = (0, import_react23.useState)(0);
@@ -4530,46 +4529,32 @@ function DataGrid({
4530
4529
  });
4531
4530
  setActiveMenu(null);
4532
4531
  };
4532
+ const getDisplayValue = (item, col) => {
4533
+ const field = String(col.field);
4534
+ const raw = item[field];
4535
+ let val = col.valueGetter ? col.valueGetter({ value: raw, row: item, field }) : raw;
4536
+ if (col.valueFormatter) {
4537
+ val = col.valueFormatter({ value: val, row: item, field });
4538
+ }
4539
+ return val === null || val === void 0 ? "" : String(val);
4540
+ };
4533
4541
  const filteredData = (0, import_react23.useMemo)(() => {
4534
4542
  return data.filter((item) => {
4535
- const matchesGlobal = !filterText || Object.values(item).some(
4536
- (val) => String(val).toLowerCase().includes(filterText.toLowerCase())
4537
- );
4543
+ const matchesGlobal = !filterText || resolvedColumns.some((col) => {
4544
+ if (col.hidden) return false;
4545
+ return getDisplayValue(item, col).toLowerCase().includes(filterText.toLowerCase());
4546
+ });
4538
4547
  const evalFilter = (f) => {
4539
4548
  if (!f.value && f.operator !== "is empty" && f.operator !== "is not empty") return true;
4540
4549
  const col = resolvedColumns.find((c) => String(c.field) === f.column || String(c.key) === f.column);
4541
- const rawVal = String(item[f.column]);
4542
- if (col?.type === "number") {
4543
- const itemNum = Number(rawVal);
4544
- const filterNum = Number(f.value);
4545
- switch (f.operator) {
4546
- case "=":
4547
- return itemNum === filterNum;
4548
- case "!=":
4549
- return itemNum !== filterNum;
4550
- case ">":
4551
- return itemNum > filterNum;
4552
- case ">=":
4553
- return itemNum >= filterNum;
4554
- case "<":
4555
- return itemNum < filterNum;
4556
- case "<=":
4557
- return itemNum <= filterNum;
4558
- case "is empty":
4559
- return rawVal === "" || rawVal === "undefined" || rawVal === "null";
4560
- case "is not empty":
4561
- return rawVal !== "" && rawVal !== "undefined" && rawVal !== "null";
4562
- default:
4563
- return true;
4564
- }
4565
- }
4550
+ const field = f.column;
4551
+ const raw = item[field];
4566
4552
  if (col?.type === "date") {
4567
- const raw = item[f.column];
4568
- const resolvedDate = col.valueGetter ? col.valueGetter({ value: raw, row: item, field: f.column }) : raw;
4569
- const isEmpty = resolvedDate == null || resolvedDate === "" || resolvedDate === "undefined" || resolvedDate === "null";
4570
- if (f.operator === "is empty") return isEmpty;
4571
- if (f.operator === "is not empty") return !isEmpty;
4572
- if (isEmpty) return false;
4553
+ const resolvedDate = col.valueGetter ? col.valueGetter({ value: raw, row: item, field }) : raw;
4554
+ const isEmpty2 = resolvedDate == null || resolvedDate === "" || resolvedDate === "undefined" || resolvedDate === "null";
4555
+ if (f.operator === "is empty") return isEmpty2;
4556
+ if (f.operator === "is not empty") return !isEmpty2;
4557
+ if (isEmpty2) return false;
4573
4558
  const itemTs = new Date(resolvedDate);
4574
4559
  itemTs.setHours(0, 0, 0, 0);
4575
4560
  const filterTs = new Date(f.value);
@@ -4592,21 +4577,47 @@ function DataGrid({
4592
4577
  return true;
4593
4578
  }
4594
4579
  }
4580
+ const displayVal = col ? getDisplayValue(item, col) : raw === null || raw === void 0 ? "" : String(raw);
4581
+ const isEmpty = displayVal === "" || displayVal === "undefined" || displayVal === "null";
4582
+ if (col?.type === "number") {
4583
+ const itemNum = Number(displayVal);
4584
+ const filterNum = Number(f.value);
4585
+ switch (f.operator) {
4586
+ case "=":
4587
+ return itemNum === filterNum;
4588
+ case "!=":
4589
+ return itemNum !== filterNum;
4590
+ case ">":
4591
+ return itemNum > filterNum;
4592
+ case ">=":
4593
+ return itemNum >= filterNum;
4594
+ case "<":
4595
+ return itemNum < filterNum;
4596
+ case "<=":
4597
+ return itemNum <= filterNum;
4598
+ case "is empty":
4599
+ return isEmpty;
4600
+ case "is not empty":
4601
+ return !isEmpty;
4602
+ default:
4603
+ return true;
4604
+ }
4605
+ }
4595
4606
  if (col?.type === "status") {
4596
4607
  switch (f.operator) {
4597
4608
  case "is":
4598
- return rawVal === f.value;
4609
+ return displayVal === f.value;
4599
4610
  case "is not":
4600
- return rawVal !== f.value;
4611
+ return displayVal !== f.value;
4601
4612
  case "is empty":
4602
- return rawVal === "" || rawVal === "undefined" || rawVal === "null";
4613
+ return isEmpty;
4603
4614
  case "is not empty":
4604
- return rawVal !== "" && rawVal !== "undefined" && rawVal !== "null";
4615
+ return !isEmpty;
4605
4616
  default:
4606
4617
  return true;
4607
4618
  }
4608
4619
  }
4609
- const itemVal = rawVal.toLowerCase();
4620
+ const itemVal = displayVal.toLowerCase();
4610
4621
  const val = f.value.toLowerCase();
4611
4622
  switch (f.operator) {
4612
4623
  case "contains":
@@ -4640,7 +4651,7 @@ function DataGrid({
4640
4651
  }
4641
4652
  return matchesGlobal && matchesAdvanced;
4642
4653
  });
4643
- }, [data, filterText, advancedFilters]);
4654
+ }, [data, filterText, advancedFilters, resolvedColumns]);
4644
4655
  const sortedData = (0, import_react23.useMemo)(() => {
4645
4656
  if (!sortField || !sortDirection) return filteredData;
4646
4657
  const col = resolvedColumns.find((c) => c.field === sortField);
@@ -4666,9 +4677,14 @@ function DataGrid({
4666
4677
  const headers = exportableCols.map((c) => c.headerName).join(",");
4667
4678
  const rows = sortedData.map(
4668
4679
  (item) => exportableCols.map((c) => {
4669
- const raw = item[c.field];
4670
- const val = raw === null || raw === void 0 ? "" : String(raw).replace(/"/g, '""');
4671
- return `"${val}"`;
4680
+ const field = String(c.field);
4681
+ const raw = item[field];
4682
+ let val = c.valueGetter ? c.valueGetter({ value: raw, row: item, field }) : raw;
4683
+ if (c.valueFormatter) {
4684
+ val = c.valueFormatter({ value: val, row: item, field });
4685
+ }
4686
+ const str = val === null || val === void 0 ? "" : String(val).replace(/"/g, '""');
4687
+ return `"${str}"`;
4672
4688
  }).join(",")
4673
4689
  );
4674
4690
  const csv = [headers, ...rows].join("\n");
package/dist/main.js CHANGED
@@ -4305,7 +4305,6 @@ function DataGrid({
4305
4305
  const [sortDirection, setSortDirection] = useState9(null);
4306
4306
  const [filterText, setFilterText] = useState9("");
4307
4307
  const [currentPage, setCurrentPage] = useState9(1);
4308
- const [columnFilters, setColumnFilters] = useState9({});
4309
4308
  const [resizingColumn, setResizingColumn] = useState9(null);
4310
4309
  const [startX, setStartX] = useState9(0);
4311
4310
  const [startWidth, setStartWidth] = useState9(0);
@@ -4400,46 +4399,32 @@ function DataGrid({
4400
4399
  });
4401
4400
  setActiveMenu(null);
4402
4401
  };
4402
+ const getDisplayValue = (item, col) => {
4403
+ const field = String(col.field);
4404
+ const raw = item[field];
4405
+ let val = col.valueGetter ? col.valueGetter({ value: raw, row: item, field }) : raw;
4406
+ if (col.valueFormatter) {
4407
+ val = col.valueFormatter({ value: val, row: item, field });
4408
+ }
4409
+ return val === null || val === void 0 ? "" : String(val);
4410
+ };
4403
4411
  const filteredData = useMemo2(() => {
4404
4412
  return data.filter((item) => {
4405
- const matchesGlobal = !filterText || Object.values(item).some(
4406
- (val) => String(val).toLowerCase().includes(filterText.toLowerCase())
4407
- );
4413
+ const matchesGlobal = !filterText || resolvedColumns.some((col) => {
4414
+ if (col.hidden) return false;
4415
+ return getDisplayValue(item, col).toLowerCase().includes(filterText.toLowerCase());
4416
+ });
4408
4417
  const evalFilter = (f) => {
4409
4418
  if (!f.value && f.operator !== "is empty" && f.operator !== "is not empty") return true;
4410
4419
  const col = resolvedColumns.find((c) => String(c.field) === f.column || String(c.key) === f.column);
4411
- const rawVal = String(item[f.column]);
4412
- if (col?.type === "number") {
4413
- const itemNum = Number(rawVal);
4414
- const filterNum = Number(f.value);
4415
- switch (f.operator) {
4416
- case "=":
4417
- return itemNum === filterNum;
4418
- case "!=":
4419
- return itemNum !== filterNum;
4420
- case ">":
4421
- return itemNum > filterNum;
4422
- case ">=":
4423
- return itemNum >= filterNum;
4424
- case "<":
4425
- return itemNum < filterNum;
4426
- case "<=":
4427
- return itemNum <= filterNum;
4428
- case "is empty":
4429
- return rawVal === "" || rawVal === "undefined" || rawVal === "null";
4430
- case "is not empty":
4431
- return rawVal !== "" && rawVal !== "undefined" && rawVal !== "null";
4432
- default:
4433
- return true;
4434
- }
4435
- }
4420
+ const field = f.column;
4421
+ const raw = item[field];
4436
4422
  if (col?.type === "date") {
4437
- const raw = item[f.column];
4438
- const resolvedDate = col.valueGetter ? col.valueGetter({ value: raw, row: item, field: f.column }) : raw;
4439
- const isEmpty = resolvedDate == null || resolvedDate === "" || resolvedDate === "undefined" || resolvedDate === "null";
4440
- if (f.operator === "is empty") return isEmpty;
4441
- if (f.operator === "is not empty") return !isEmpty;
4442
- if (isEmpty) return false;
4423
+ const resolvedDate = col.valueGetter ? col.valueGetter({ value: raw, row: item, field }) : raw;
4424
+ const isEmpty2 = resolvedDate == null || resolvedDate === "" || resolvedDate === "undefined" || resolvedDate === "null";
4425
+ if (f.operator === "is empty") return isEmpty2;
4426
+ if (f.operator === "is not empty") return !isEmpty2;
4427
+ if (isEmpty2) return false;
4443
4428
  const itemTs = new Date(resolvedDate);
4444
4429
  itemTs.setHours(0, 0, 0, 0);
4445
4430
  const filterTs = new Date(f.value);
@@ -4462,21 +4447,47 @@ function DataGrid({
4462
4447
  return true;
4463
4448
  }
4464
4449
  }
4450
+ const displayVal = col ? getDisplayValue(item, col) : raw === null || raw === void 0 ? "" : String(raw);
4451
+ const isEmpty = displayVal === "" || displayVal === "undefined" || displayVal === "null";
4452
+ if (col?.type === "number") {
4453
+ const itemNum = Number(displayVal);
4454
+ const filterNum = Number(f.value);
4455
+ switch (f.operator) {
4456
+ case "=":
4457
+ return itemNum === filterNum;
4458
+ case "!=":
4459
+ return itemNum !== filterNum;
4460
+ case ">":
4461
+ return itemNum > filterNum;
4462
+ case ">=":
4463
+ return itemNum >= filterNum;
4464
+ case "<":
4465
+ return itemNum < filterNum;
4466
+ case "<=":
4467
+ return itemNum <= filterNum;
4468
+ case "is empty":
4469
+ return isEmpty;
4470
+ case "is not empty":
4471
+ return !isEmpty;
4472
+ default:
4473
+ return true;
4474
+ }
4475
+ }
4465
4476
  if (col?.type === "status") {
4466
4477
  switch (f.operator) {
4467
4478
  case "is":
4468
- return rawVal === f.value;
4479
+ return displayVal === f.value;
4469
4480
  case "is not":
4470
- return rawVal !== f.value;
4481
+ return displayVal !== f.value;
4471
4482
  case "is empty":
4472
- return rawVal === "" || rawVal === "undefined" || rawVal === "null";
4483
+ return isEmpty;
4473
4484
  case "is not empty":
4474
- return rawVal !== "" && rawVal !== "undefined" && rawVal !== "null";
4485
+ return !isEmpty;
4475
4486
  default:
4476
4487
  return true;
4477
4488
  }
4478
4489
  }
4479
- const itemVal = rawVal.toLowerCase();
4490
+ const itemVal = displayVal.toLowerCase();
4480
4491
  const val = f.value.toLowerCase();
4481
4492
  switch (f.operator) {
4482
4493
  case "contains":
@@ -4510,7 +4521,7 @@ function DataGrid({
4510
4521
  }
4511
4522
  return matchesGlobal && matchesAdvanced;
4512
4523
  });
4513
- }, [data, filterText, advancedFilters]);
4524
+ }, [data, filterText, advancedFilters, resolvedColumns]);
4514
4525
  const sortedData = useMemo2(() => {
4515
4526
  if (!sortField || !sortDirection) return filteredData;
4516
4527
  const col = resolvedColumns.find((c) => c.field === sortField);
@@ -4536,9 +4547,14 @@ function DataGrid({
4536
4547
  const headers = exportableCols.map((c) => c.headerName).join(",");
4537
4548
  const rows = sortedData.map(
4538
4549
  (item) => exportableCols.map((c) => {
4539
- const raw = item[c.field];
4540
- const val = raw === null || raw === void 0 ? "" : String(raw).replace(/"/g, '""');
4541
- return `"${val}"`;
4550
+ const field = String(c.field);
4551
+ const raw = item[field];
4552
+ let val = c.valueGetter ? c.valueGetter({ value: raw, row: item, field }) : raw;
4553
+ if (c.valueFormatter) {
4554
+ val = c.valueFormatter({ value: val, row: item, field });
4555
+ }
4556
+ const str = val === null || val === void 0 ? "" : String(val).replace(/"/g, '""');
4557
+ return `"${str}"`;
4542
4558
  }).join(",")
4543
4559
  );
4544
4560
  const csv = [headers, ...rows].join("\n");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rufous/ui",
3
3
  "private": false,
4
- "version": "0.2.96",
4
+ "version": "0.2.98",
5
5
  "type": "module",
6
6
  "description": "Experimental: A lightweight React UI component library (Beta)",
7
7
  "style": "./dist/main.css",