pixelize-design-library 2.2.157 → 2.2.158

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.
@@ -137,7 +137,7 @@ var TableBody = function (_a) {
137
137
  : {
138
138
  backgroundColor: (_g = (_f = theme.colors.secondary) === null || _f === void 0 ? void 0 : _f.opacity) === null || _g === void 0 ? void 0 : _g[4],
139
139
  } },
140
- react_2.default.createElement(react_1.Box, { display: "block", overflow: "hidden", whiteSpace: "normal", overflowWrap: "break-word" }, header.node ? header.node(row) : row[header.id])));
140
+ react_2.default.createElement(react_1.Box, { display: "block", overflow: "hidden", whiteSpace: "normal", overflowWrap: "break-word" }, (0, table_1.normalizeTableCellValue)(header.node ? header.node(row) : row[header.id]))));
141
141
  }),
142
142
  isLink && react_2.default.createElement(RenderView, { row: row })),
143
143
  row.content && isExpanded && (react_2.default.createElement(react_1.Tr, null,
@@ -24,6 +24,19 @@ var react_1 = require("react");
24
24
  var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
25
25
  var table_1 = require("../../../Utils/table");
26
26
  var defaultPageSize = 50;
27
+ var mergeColumnWithPreference = function (originalCol, pref) {
28
+ if (!pref || typeof pref !== "object") {
29
+ return __assign({}, originalCol);
30
+ }
31
+ var next = __assign({}, originalCol);
32
+ if (typeof pref.isHidden === "boolean") {
33
+ next.isHidden = pref.isHidden;
34
+ }
35
+ if (typeof pref.label === "string" || typeof pref.label === "number") {
36
+ next.label = pref.label;
37
+ }
38
+ return next;
39
+ };
27
40
  var useTable = function (_a) {
28
41
  var tableBorderColor = _a.tableBorderColor, data = _a.data, isPagination = _a.isPagination, selections = _a.selections, onSelection = _a.onSelection, tablePreferences = _a.tablePreferences, savePreferences = _a.savePreferences, noOfRowsPerPage = _a.noOfRowsPerPage, isServerPagination = _a.isServerPagination, totalRecords = _a.totalRecords, columns = _a.columns, onNoOfRowsPerPageChange = _a.onNoOfRowsPerPageChange;
29
42
  var theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -39,15 +52,18 @@ var useTable = function (_a) {
39
52
  return columns.map(function (col) { return (__assign({}, col)); });
40
53
  }), columnsList = _h[0], setColumnsList = _h[1];
41
54
  (0, react_1.useEffect)(function () {
42
- if (tablePreferences) {
43
- var columnPreference_1 = tablePreferences.columns;
44
- if (columnPreference_1 === null || columnPreference_1 === void 0 ? void 0 : columnPreference_1.length) {
45
- var mergedColumns = columns.map(function (originalCol) {
46
- var prefCol = columnPreference_1.find(function (c) { return c.id === originalCol.id; });
47
- return prefCol ? __assign(__assign({}, originalCol), prefCol) : __assign({}, originalCol);
48
- });
49
- setColumnsList(mergedColumns);
50
- }
55
+ var columnPreference = tablePreferences === null || tablePreferences === void 0 ? void 0 : tablePreferences.columns;
56
+ if (Array.isArray(columnPreference) && columnPreference.length > 0) {
57
+ var mergedColumns = columns.map(function (originalCol) {
58
+ var prefCol = columnPreference.find(function (c) { return c.id === originalCol.id; });
59
+ return prefCol
60
+ ? mergeColumnWithPreference(originalCol, prefCol)
61
+ : __assign({}, originalCol);
62
+ });
63
+ setColumnsList(mergedColumns);
64
+ }
65
+ else {
66
+ setColumnsList(columns.map(function (col) { return (__assign({}, col)); }));
51
67
  }
52
68
  }, [tablePreferences, columns]);
53
69
  (0, react_1.useEffect)(function () {
@@ -1,9 +1,15 @@
1
+ import React from "react";
1
2
  import { DataObject, TableHeaderProps } from "../Components/Table/TableProps";
2
3
  export declare function SortMultiColumnData(data: Record<string, string | number>[], sortConfig: {
3
4
  column: string | number;
4
5
  direction: string;
5
6
  }[]): Record<string, string | number>[];
6
7
  export declare const calculateLeftOffset: (columns: number[], index: number) => number;
8
+ /**
9
+ * When a column has no `node`, raw cell values are rendered; plain objects
10
+ * (e.g. relation/user fields) must not be passed as React children.
11
+ */
12
+ export declare function normalizeTableCellValue(value: unknown): React.ReactNode;
7
13
  export declare const searchAndSortData: (data: DataObject[], searchValues: Record<string, string>) => DataObject[];
8
14
  export declare function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void;
9
15
  export declare function useDebounce<T extends (...args: any[]) => void>(callback: T, delay: number): (...args: Parameters<T>) => void;
@@ -44,6 +44,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.TableCellCalculation = exports.pageSizeCalculation = exports.searchAndSortData = exports.calculateLeftOffset = void 0;
46
46
  exports.SortMultiColumnData = SortMultiColumnData;
47
+ exports.normalizeTableCellValue = normalizeTableCellValue;
47
48
  exports.debounce = debounce;
48
49
  exports.useDebounce = useDebounce;
49
50
  exports.globalSearchFilter = globalSearchFilter;
@@ -93,8 +94,48 @@ var getStringValue = function (value) {
93
94
  if (react_1.default.isValidElement(value)) {
94
95
  return extractTextFromReactNode(value);
95
96
  }
97
+ if (value && typeof value === "object") {
98
+ var o = value;
99
+ if (typeof o.label === "string" || typeof o.label === "number") {
100
+ return String(o.label);
101
+ }
102
+ if (typeof o.name === "string" || typeof o.name === "number") {
103
+ return String(o.name);
104
+ }
105
+ }
96
106
  return "";
97
107
  };
108
+ /**
109
+ * When a column has no `node`, raw cell values are rendered; plain objects
110
+ * (e.g. relation/user fields) must not be passed as React children.
111
+ */
112
+ function normalizeTableCellValue(value) {
113
+ if (value === null || value === undefined)
114
+ return "";
115
+ if (typeof value === "string" ||
116
+ typeof value === "number" ||
117
+ typeof value === "boolean") {
118
+ return value;
119
+ }
120
+ if (react_1.default.isValidElement(value)) {
121
+ return value;
122
+ }
123
+ if (typeof value === "object") {
124
+ var o = value;
125
+ if (typeof o.label === "string" || typeof o.label === "number") {
126
+ return String(o.label);
127
+ }
128
+ if (typeof o.name === "string" || typeof o.name === "number") {
129
+ return String(o.name);
130
+ }
131
+ if (typeof o.title === "string")
132
+ return o.title;
133
+ if (typeof o.company_name === "string")
134
+ return o.company_name;
135
+ return "";
136
+ }
137
+ return String(value);
138
+ }
98
139
  var searchAndSortData = function (data, searchValues) {
99
140
  var filteredData = data.filter(function (item) {
100
141
  return Object.keys(searchValues).every(function (key) {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var table_1 = require("./table");
8
+ describe("normalizeTableCellValue", function () {
9
+ it("returns primitives as-is (string/number/boolean)", function () {
10
+ expect((0, table_1.normalizeTableCellValue)("x")).toBe("x");
11
+ expect((0, table_1.normalizeTableCellValue)(42)).toBe(42);
12
+ expect((0, table_1.normalizeTableCellValue)(false)).toBe(false);
13
+ });
14
+ it("returns empty string for null and undefined", function () {
15
+ expect((0, table_1.normalizeTableCellValue)(null)).toBe("");
16
+ expect((0, table_1.normalizeTableCellValue)(undefined)).toBe("");
17
+ });
18
+ it("returns React elements unchanged", function () {
19
+ var el = react_1.default.createElement("span", null, "hi");
20
+ expect((0, table_1.normalizeTableCellValue)(el)).toBe(el);
21
+ });
22
+ it("uses label or name on plain objects (relation fields)", function () {
23
+ expect((0, table_1.normalizeTableCellValue)({
24
+ id: 1,
25
+ label: "Owner Name",
26
+ email: "a@b.com",
27
+ role: "admin",
28
+ company_name: "Acme",
29
+ })).toBe("Owner Name");
30
+ expect((0, table_1.normalizeTableCellValue)({ id: 2, name: "Jane", email: "j@b.com" })).toBe("Jane");
31
+ });
32
+ it("returns company_name when label/name missing", function () {
33
+ expect((0, table_1.normalizeTableCellValue)({
34
+ id: 3,
35
+ company_name: "Solo Co",
36
+ })).toBe("Solo Co");
37
+ });
38
+ it("returns empty string for unrecognized objects", function () {
39
+ expect((0, table_1.normalizeTableCellValue)({ a: 1, b: 2 })).toBe("");
40
+ });
41
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.157",
3
+ "version": "2.2.158",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",