pixelize-design-library 2.2.155 → 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.
- package/dist/Components/KanbanBoard/AccountCard.test.js +1 -1
- package/dist/Components/KanbanBoard/KanbanBoard.test.js +36 -8
- package/dist/Components/SideBar/components/OtherApps.test.js +8 -9
- package/dist/Components/Table/Components/TableBody.js +1 -1
- package/dist/Components/Table/Components/useTable.js +25 -9
- package/dist/Components/Table/TableSettings/ManageColumns.js +3 -0
- package/dist/Components/Table/TableSettings/ManageColumns.test.d.ts +1 -0
- package/dist/Components/Table/TableSettings/ManageColumns.test.js +146 -0
- package/dist/Components/Table/TableSettings/TableFilters.js +3 -0
- package/dist/Components/Table/TableSettings/TableFilters.test.d.ts +1 -0
- package/dist/Components/Table/TableSettings/TableFilters.test.js +109 -0
- package/dist/Utils/table.d.ts +6 -0
- package/dist/Utils/table.js +41 -0
- package/dist/Utils/tableNormalizeCellValue.test.d.ts +1 -0
- package/dist/Utils/tableNormalizeCellValue.test.js +41 -0
- package/package.json +4 -1
|
@@ -57,7 +57,7 @@ describe("AccountCard – permissions", function () {
|
|
|
57
57
|
it("calls onDelete when delete icon is clicked and isDeletable is true", function () {
|
|
58
58
|
var onDelete = jest.fn();
|
|
59
59
|
(0, react_2.render)(react_1.default.createElement(AccountCard_1.default, __assign({}, defaultProps, { onDelete: onDelete, isDeletable: true })));
|
|
60
|
-
react_2.screen.getByLabelText("Delete")
|
|
60
|
+
react_2.fireEvent.click(react_2.screen.getByLabelText("Delete"));
|
|
61
61
|
expect(onDelete).toHaveBeenCalledWith(mockAccount);
|
|
62
62
|
});
|
|
63
63
|
});
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
var react_1 = __importDefault(require("react"));
|
|
7
7
|
var react_2 = require("@testing-library/react");
|
|
8
8
|
require("@testing-library/jest-dom");
|
|
9
|
+
var react_3 = require("@chakra-ui/react");
|
|
9
10
|
var KanbanBoard_1 = __importDefault(require("./KanbanBoard"));
|
|
10
11
|
jest.mock("../../Theme/useCustomTheme", function () { return ({
|
|
11
12
|
useCustomTheme: function () { return ({
|
|
@@ -42,6 +43,33 @@ jest.mock("@hello-pangea/dnd", function () { return ({
|
|
|
42
43
|
jest.mock("react-window", function () { return ({
|
|
43
44
|
VariableSizeList: function () { return null; },
|
|
44
45
|
}); });
|
|
46
|
+
beforeAll(function () {
|
|
47
|
+
global.ResizeObserver = /** @class */ (function () {
|
|
48
|
+
function class_1() {
|
|
49
|
+
}
|
|
50
|
+
class_1.prototype.observe = function () { };
|
|
51
|
+
class_1.prototype.unobserve = function () { };
|
|
52
|
+
class_1.prototype.disconnect = function () { };
|
|
53
|
+
return class_1;
|
|
54
|
+
}());
|
|
55
|
+
Object.defineProperty(window, "matchMedia", {
|
|
56
|
+
writable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
value: jest.fn().mockImplementation(function (query) { return ({
|
|
59
|
+
matches: false,
|
|
60
|
+
media: query,
|
|
61
|
+
onchange: null,
|
|
62
|
+
addListener: jest.fn(),
|
|
63
|
+
removeListener: jest.fn(),
|
|
64
|
+
addEventListener: jest.fn(),
|
|
65
|
+
removeEventListener: jest.fn(),
|
|
66
|
+
dispatchEvent: jest.fn(),
|
|
67
|
+
}); }),
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
var renderWithChakra = function (ui) {
|
|
71
|
+
return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, null, ui));
|
|
72
|
+
};
|
|
45
73
|
var sampleData = {
|
|
46
74
|
col1: {
|
|
47
75
|
id: "col1",
|
|
@@ -56,41 +84,41 @@ var sampleData = {
|
|
|
56
84
|
describe("KanbanBoard – permissions", function () {
|
|
57
85
|
describe("isDeletable", function () {
|
|
58
86
|
it("shows card delete icons when permissions.isDeletable is true", function () {
|
|
59
|
-
(
|
|
87
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, permissions: { isDeletable: true } }));
|
|
60
88
|
expect(react_2.screen.getAllByLabelText("Delete").length).toBeGreaterThan(0);
|
|
61
89
|
});
|
|
62
90
|
it("hides card delete icons when permissions.isDeletable is false", function () {
|
|
63
|
-
(
|
|
91
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, permissions: { isDeletable: false } }));
|
|
64
92
|
expect(react_2.screen.queryByLabelText("Delete")).not.toBeInTheDocument();
|
|
65
93
|
});
|
|
66
94
|
it("shows card delete icons when permissions prop is omitted (default allow)", function () {
|
|
67
|
-
(
|
|
95
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData }));
|
|
68
96
|
expect(react_2.screen.getAllByLabelText("Delete").length).toBeGreaterThan(0);
|
|
69
97
|
});
|
|
70
98
|
});
|
|
71
99
|
describe("isCreatable", function () {
|
|
72
100
|
var kanbanCreate = { isCreatable: true, label: "Create New" };
|
|
73
101
|
it("shows the create button when permissions.isCreatable is true", function () {
|
|
74
|
-
(
|
|
102
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, kanbanCreate: kanbanCreate, permissions: { isCreatable: true } }));
|
|
75
103
|
expect(react_2.screen.getByText("Create New")).toBeInTheDocument();
|
|
76
104
|
});
|
|
77
105
|
it("hides the create button when permissions.isCreatable is false", function () {
|
|
78
|
-
(
|
|
106
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, kanbanCreate: kanbanCreate, permissions: { isCreatable: false } }));
|
|
79
107
|
expect(react_2.screen.queryByText("Create New")).not.toBeInTheDocument();
|
|
80
108
|
});
|
|
81
109
|
});
|
|
82
110
|
describe("isEditable", function () {
|
|
83
111
|
var kanbanEdit = { isEditable: true, label: "Edit Layout" };
|
|
84
112
|
it("shows the edit button when permissions.isEditable is true", function () {
|
|
85
|
-
(
|
|
113
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, kanbanEdit: kanbanEdit, permissions: { isEditable: true } }));
|
|
86
114
|
expect(react_2.screen.getByText("Edit Layout")).toBeInTheDocument();
|
|
87
115
|
});
|
|
88
116
|
it("hides the edit button when permissions.isEditable is false", function () {
|
|
89
|
-
(
|
|
117
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, kanbanEdit: kanbanEdit, permissions: { isEditable: false } }));
|
|
90
118
|
expect(react_2.screen.queryByText("Edit Layout")).not.toBeInTheDocument();
|
|
91
119
|
});
|
|
92
120
|
it("sets isDragDisabled on cards when permissions.isEditable is false", function () {
|
|
93
|
-
(
|
|
121
|
+
renderWithChakra(react_1.default.createElement(KanbanBoard_1.default, { data: sampleData, permissions: { isEditable: false } }));
|
|
94
122
|
var disabledDraggables = react_2.screen
|
|
95
123
|
.getAllByRole("generic")
|
|
96
124
|
.filter(function (el) { return el.getAttribute("data-drag-disabled") === "true"; });
|
|
@@ -82,24 +82,23 @@ describe("OtherApps", function () {
|
|
|
82
82
|
renderWithChakra(react_1.default.createElement(OtherApps_1.default, { toggle: false, otherApps: sampleApps }));
|
|
83
83
|
expect(react_2.screen.getByText("Other Apps")).toBeInTheDocument();
|
|
84
84
|
expect(react_2.screen.getByText("Billing")).toBeInTheDocument();
|
|
85
|
-
expect(react_2.screen.
|
|
85
|
+
expect(react_2.screen.queryAllByRole("tooltip")).toHaveLength(0);
|
|
86
86
|
});
|
|
87
87
|
it("shows flyout with Open label on hover when collapsed", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
88
|
-
var buttons;
|
|
89
|
-
return __generator(this, function (
|
|
90
|
-
switch (
|
|
88
|
+
var buttons, _a;
|
|
89
|
+
return __generator(this, function (_b) {
|
|
90
|
+
switch (_b.label) {
|
|
91
91
|
case 0:
|
|
92
92
|
renderWithChakra(react_1.default.createElement(OtherApps_1.default, { toggle: true, otherApps: sampleApps }));
|
|
93
93
|
buttons = react_2.screen.getAllByRole("button");
|
|
94
94
|
expect(buttons).toHaveLength(2);
|
|
95
95
|
return [4 /*yield*/, user_event_1.default.hover(buttons[0])];
|
|
96
96
|
case 1:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
})];
|
|
97
|
+
_b.sent();
|
|
98
|
+
_a = expect;
|
|
99
|
+
return [4 /*yield*/, react_2.screen.findByText("Billing app")];
|
|
101
100
|
case 2:
|
|
102
|
-
_a.sent();
|
|
101
|
+
_a.apply(void 0, [_b.sent()]).toBeInTheDocument();
|
|
103
102
|
return [2 /*return*/];
|
|
104
103
|
}
|
|
105
104
|
});
|
|
@@ -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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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 () {
|
|
@@ -70,6 +70,9 @@ var ManageColumns = function (_a) {
|
|
|
70
70
|
var visibleCount = (0, react_1.useMemo)(function () {
|
|
71
71
|
return items.filter(function (i) { return !i.isHidden; }).length;
|
|
72
72
|
}, [items]);
|
|
73
|
+
(0, react_1.useEffect)(function () {
|
|
74
|
+
setItems(columns);
|
|
75
|
+
}, [columns]);
|
|
73
76
|
(0, react_1.useImperativeHandle)(childInputMethodsRef, function () {
|
|
74
77
|
return {
|
|
75
78
|
getManageColumnsData: function () {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
72
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
73
|
+
};
|
|
74
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
+
var react_1 = __importStar(require("react"));
|
|
76
|
+
var react_2 = require("@testing-library/react");
|
|
77
|
+
require("@testing-library/jest-dom");
|
|
78
|
+
var react_3 = require("@chakra-ui/react");
|
|
79
|
+
var ManageColumns_1 = __importDefault(require("./ManageColumns"));
|
|
80
|
+
jest.mock("../../../Theme/useCustomTheme", function () { return ({
|
|
81
|
+
useCustomTheme: function () { return ({
|
|
82
|
+
colors: {
|
|
83
|
+
gray: {
|
|
84
|
+
50: "#fafafa",
|
|
85
|
+
100: "#f5f5f5",
|
|
86
|
+
200: "#eee",
|
|
87
|
+
400: "#ccc",
|
|
88
|
+
500: "#999",
|
|
89
|
+
600: "#666",
|
|
90
|
+
},
|
|
91
|
+
primary: {
|
|
92
|
+
50: "#eef",
|
|
93
|
+
100: "#ddf",
|
|
94
|
+
300: "#99c",
|
|
95
|
+
400: "#66a",
|
|
96
|
+
500: "#338",
|
|
97
|
+
},
|
|
98
|
+
red: { 50: "#fee", 200: "#fcc", 600: "#c00" },
|
|
99
|
+
border: { 200: "#e2e8f0" },
|
|
100
|
+
white: "#fff",
|
|
101
|
+
},
|
|
102
|
+
shadows: { sm: "0 1px 2px rgba(0,0,0,0.05)" },
|
|
103
|
+
}); },
|
|
104
|
+
}); });
|
|
105
|
+
var renderWithChakra = function (ui) {
|
|
106
|
+
return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, null, ui));
|
|
107
|
+
};
|
|
108
|
+
function ManageColumnsHarness(_a) {
|
|
109
|
+
var columns = _a.columns, childRef = _a.childRef;
|
|
110
|
+
var _b = (0, react_1.useState)(columns), items = _b[0], setItems = _b[1];
|
|
111
|
+
return (react_1.default.createElement(ManageColumns_1.default, { columns: columns, items: items, setItems: setItems, childInputMethodsRef: childRef }));
|
|
112
|
+
}
|
|
113
|
+
describe("ManageColumns", function () {
|
|
114
|
+
it("syncs local column state when the columns prop changes", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
115
|
+
var childRef, columnsA, columnsB, rerender;
|
|
116
|
+
var _a, _b;
|
|
117
|
+
return __generator(this, function (_c) {
|
|
118
|
+
switch (_c.label) {
|
|
119
|
+
case 0:
|
|
120
|
+
childRef = (0, react_1.createRef)();
|
|
121
|
+
columnsA = [
|
|
122
|
+
{ id: "a", label: "Alpha", isHidden: false },
|
|
123
|
+
{ id: "b", label: "Beta", isHidden: true },
|
|
124
|
+
];
|
|
125
|
+
columnsB = [
|
|
126
|
+
{ id: "a", label: "Alpha", isHidden: true },
|
|
127
|
+
{ id: "b", label: "Beta", isHidden: false },
|
|
128
|
+
];
|
|
129
|
+
rerender = renderWithChakra(react_1.default.createElement(ManageColumnsHarness, { columns: columnsA, childRef: childRef })).rerender;
|
|
130
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Alpha" })).toBeChecked();
|
|
131
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Beta" })).not.toBeChecked();
|
|
132
|
+
expect((_a = childRef.current) === null || _a === void 0 ? void 0 : _a.getManageColumnsData()).toEqual(columnsA);
|
|
133
|
+
rerender(react_1.default.createElement(react_3.ChakraProvider, null,
|
|
134
|
+
react_1.default.createElement(ManageColumnsHarness, { columns: columnsB, childRef: childRef })));
|
|
135
|
+
return [4 /*yield*/, (0, react_2.waitFor)(function () {
|
|
136
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Alpha" })).not.toBeChecked();
|
|
137
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Beta" })).toBeChecked();
|
|
138
|
+
})];
|
|
139
|
+
case 1:
|
|
140
|
+
_c.sent();
|
|
141
|
+
expect((_b = childRef.current) === null || _b === void 0 ? void 0 : _b.getManageColumnsData()).toEqual(columnsB);
|
|
142
|
+
return [2 /*return*/];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}); });
|
|
146
|
+
});
|
|
@@ -51,6 +51,9 @@ var Checkbox_1 = __importDefault(require("../../Checkbox/Checkbox"));
|
|
|
51
51
|
var TableFilters = function (_a) {
|
|
52
52
|
var filters = _a.filters, childFilterMethodsRef = _a.childFilterMethodsRef, filterSelected = _a.filterSelected;
|
|
53
53
|
var _b = (0, react_2.useState)(filterSelected !== null && filterSelected !== void 0 ? filterSelected : []), selectedFilters = _b[0], setSelectedFilters = _b[1];
|
|
54
|
+
(0, react_2.useEffect)(function () {
|
|
55
|
+
setSelectedFilters(filterSelected !== null && filterSelected !== void 0 ? filterSelected : []);
|
|
56
|
+
}, [filterSelected]);
|
|
54
57
|
(0, react_2.useImperativeHandle)(childFilterMethodsRef, function () {
|
|
55
58
|
return {
|
|
56
59
|
getSelectedFilters: function () {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
72
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
73
|
+
};
|
|
74
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
+
var react_1 = __importStar(require("react"));
|
|
76
|
+
var react_2 = require("@testing-library/react");
|
|
77
|
+
require("@testing-library/jest-dom");
|
|
78
|
+
var react_3 = require("@chakra-ui/react");
|
|
79
|
+
var TableFilters_1 = __importDefault(require("./TableFilters"));
|
|
80
|
+
var renderWithChakra = function (ui) {
|
|
81
|
+
return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, null, ui));
|
|
82
|
+
};
|
|
83
|
+
describe("TableFilters", function () {
|
|
84
|
+
it("syncs selected filters when filterSelected prop changes", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
85
|
+
var childRef, filters, rerender;
|
|
86
|
+
var _a, _b;
|
|
87
|
+
return __generator(this, function (_c) {
|
|
88
|
+
switch (_c.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
childRef = (0, react_1.createRef)();
|
|
91
|
+
filters = ["Status: Open", "Status: Closed"];
|
|
92
|
+
rerender = renderWithChakra(react_1.default.createElement(TableFilters_1.default, { filters: filters, childFilterMethodsRef: childRef, filterSelected: ["Status: Open"] })).rerender;
|
|
93
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Status: Open" })).toBeChecked();
|
|
94
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Status: Closed" })).not.toBeChecked();
|
|
95
|
+
expect((_a = childRef.current) === null || _a === void 0 ? void 0 : _a.getSelectedFilters()).toEqual(["Status: Open"]);
|
|
96
|
+
rerender(react_1.default.createElement(react_3.ChakraProvider, null,
|
|
97
|
+
react_1.default.createElement(TableFilters_1.default, { filters: filters, childFilterMethodsRef: childRef, filterSelected: ["Status: Closed"] })));
|
|
98
|
+
return [4 /*yield*/, (0, react_2.waitFor)(function () {
|
|
99
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Status: Open" })).not.toBeChecked();
|
|
100
|
+
expect(react_2.screen.getByRole("checkbox", { name: "Status: Closed" })).toBeChecked();
|
|
101
|
+
})];
|
|
102
|
+
case 1:
|
|
103
|
+
_c.sent();
|
|
104
|
+
expect((_b = childRef.current) === null || _b === void 0 ? void 0 : _b.getSelectedFilters()).toEqual(["Status: Closed"]);
|
|
105
|
+
return [2 /*return*/];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}); });
|
|
109
|
+
});
|
package/dist/Utils/table.d.ts
CHANGED
|
@@ -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;
|
package/dist/Utils/table.js
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "2.2.158",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -42,6 +42,9 @@
|
|
|
42
42
|
"moduleNameMapper": {
|
|
43
43
|
"\\.(css|less|scss|sass)$": "<rootDir>/__mocks__/styleMock.js"
|
|
44
44
|
},
|
|
45
|
+
"testPathIgnorePatterns": [
|
|
46
|
+
"<rootDir>/dist/"
|
|
47
|
+
],
|
|
45
48
|
"testMatch": [
|
|
46
49
|
"**/__tests__/**/*.[jt]s?(x)",
|
|
47
50
|
"**/?(*.)+(spec|test).[jt]s?(x)"
|