@proteinjs/db-ui 1.12.2 → 1.13.1

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 (31) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/form/RecordForm.d.ts.map +1 -1
  7. package/dist/src/form/RecordForm.js +63 -3
  8. package/dist/src/form/RecordForm.js.map +1 -1
  9. package/dist/src/table/RecordTable.d.ts +10 -0
  10. package/dist/src/table/RecordTable.d.ts.map +1 -1
  11. package/dist/src/table/RecordTable.js +126 -49
  12. package/dist/src/table/RecordTable.js.map +1 -1
  13. package/dist/src/table/ReferenceCellValue.d.ts +14 -0
  14. package/dist/src/table/ReferenceCellValue.d.ts.map +1 -0
  15. package/dist/src/table/ReferenceCellValue.js +168 -0
  16. package/dist/src/table/ReferenceCellValue.js.map +1 -0
  17. package/dist/test/recordFormStructuredFields.test.d.ts +5 -0
  18. package/dist/test/recordFormStructuredFields.test.d.ts.map +1 -0
  19. package/dist/test/recordFormStructuredFields.test.js +301 -0
  20. package/dist/test/recordFormStructuredFields.test.js.map +1 -0
  21. package/dist/test/recordTableDefaultRenderers.test.d.ts +5 -0
  22. package/dist/test/recordTableDefaultRenderers.test.d.ts.map +1 -0
  23. package/dist/test/recordTableDefaultRenderers.test.js +309 -0
  24. package/dist/test/recordTableDefaultRenderers.test.js.map +1 -0
  25. package/index.ts +1 -0
  26. package/package.json +5 -4
  27. package/src/form/RecordForm.tsx +76 -3
  28. package/src/table/RecordTable.tsx +154 -49
  29. package/src/table/ReferenceCellValue.tsx +133 -0
  30. package/test/recordFormStructuredFields.test.tsx +169 -0
  31. package/test/recordTableDefaultRenderers.test.tsx +218 -0
@@ -0,0 +1,168 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ 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;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.ReferenceArrayCellValue = exports.ReferenceCellValue = exports.shortReferenceId = exports.clearReferenceNameCache = void 0;
63
+ var react_1 = __importStar(require("react"));
64
+ var material_1 = require("@mui/material");
65
+ var react_router_dom_1 = require("react-router-dom");
66
+ var ui_1 = require("@proteinjs/ui");
67
+ var db_1 = require("@proteinjs/db");
68
+ var RecordFormPage_1 = require("../pages/RecordFormPage");
69
+ /**
70
+ * A reference rendered as the referenced record's NAME, linked to its record form — an admin
71
+ * scanning a table reads who/what, not a uuid. Resolution rides `Reference.get()` (the
72
+ * ReferenceCache-backed house path) and lands in a module cache so a page of rows resolves
73
+ * each distinct target once and re-renders never flicker. Until the name arrives — and for
74
+ * records without a usable `name` (or ones this session can't read) — the cell shows the
75
+ * short id in mono: truthful immediately, enriched when the name lands.
76
+ */
77
+ /** `${table}:${id}` → display name (null: resolved, but no name to show). */
78
+ var resolvedNames = new Map();
79
+ var inflight = new Map();
80
+ function resolveDisplayName(tableName, id) {
81
+ var _this = this;
82
+ var key = "".concat(tableName, ":").concat(id);
83
+ var settled = resolvedNames.get(key);
84
+ if (settled !== undefined) {
85
+ return Promise.resolve(settled);
86
+ }
87
+ var pending = inflight.get(key);
88
+ if (!pending) {
89
+ pending = (function () { return __awaiter(_this, void 0, void 0, function () {
90
+ var record, name_1, _a;
91
+ return __generator(this, function (_b) {
92
+ switch (_b.label) {
93
+ case 0:
94
+ _b.trys.push([0, 2, 3, 4]);
95
+ return [4 /*yield*/, new db_1.Reference(tableName, id).get()];
96
+ case 1:
97
+ record = (_b.sent());
98
+ name_1 = record && typeof record.name === 'string' && record.name.trim() ? record.name : null;
99
+ resolvedNames.set(key, name_1);
100
+ return [2 /*return*/, name_1];
101
+ case 2:
102
+ _a = _b.sent();
103
+ // Unreadable target (row gone, or not visible to this session): the short id stands.
104
+ resolvedNames.set(key, null);
105
+ return [2 /*return*/, null];
106
+ case 3:
107
+ inflight.delete(key);
108
+ return [7 /*endfinally*/];
109
+ case 4: return [2 /*return*/];
110
+ }
111
+ });
112
+ }); })();
113
+ inflight.set(key, pending);
114
+ }
115
+ return pending;
116
+ }
117
+ /** Test seam: a resolved-name cache survives unmounts by design; suites reset it between cases. */
118
+ function clearReferenceNameCache() {
119
+ resolvedNames.clear();
120
+ inflight.clear();
121
+ }
122
+ exports.clearReferenceNameCache = clearReferenceNameCache;
123
+ var shortReferenceId = function (id) { return (id.length > 8 ? id.slice(0, 8) : id); };
124
+ exports.shortReferenceId = shortReferenceId;
125
+ function ReferenceCellValue(_a) {
126
+ var tableName = _a.tableName, id = _a.id;
127
+ var navigate = (0, react_router_dom_1.useNavigate)();
128
+ var _b = (0, react_1.useState)(function () { var _a; return tableName && id ? (_a = resolvedNames.get("".concat(tableName, ":").concat(id))) !== null && _a !== void 0 ? _a : null : null; }), name = _b[0], setName = _b[1];
129
+ (0, react_1.useEffect)(function () {
130
+ if (!tableName || !id) {
131
+ return;
132
+ }
133
+ var cancelled = false;
134
+ resolveDisplayName(tableName, id).then(function (resolved) {
135
+ if (!cancelled) {
136
+ setName(resolved);
137
+ }
138
+ });
139
+ return function () {
140
+ cancelled = true;
141
+ };
142
+ }, [tableName, id]);
143
+ if (!tableName || !id) {
144
+ return react_1.default.createElement(ui_1.EmptyCellValue, null);
145
+ }
146
+ // recordFormLink already leads with '/' — no extra prefix (a '//'-prefixed href reads as
147
+ // a protocol-relative URL and breaks navigation).
148
+ var url = (0, RecordFormPage_1.recordFormLink)(tableName, id);
149
+ return (react_1.default.createElement(material_1.Link, { href: url, underline: 'hover', onClick: function (event) {
150
+ // The row's own click navigates to the HOST record; this link goes to the TARGET.
151
+ event.stopPropagation();
152
+ event.preventDefault();
153
+ navigate(url);
154
+ }, sx: { whiteSpace: 'nowrap' } }, name !== null ? (react_1.default.createElement(material_1.Typography, { variant: 'body2', component: 'span' }, name)) : (react_1.default.createElement(material_1.Typography, { variant: 'body2', component: 'span', title: id, sx: { fontFamily: 'ui-monospace, Menlo, monospace', fontSize: '0.8125rem' } }, (0, exports.shortReferenceId)(id)))));
155
+ }
156
+ exports.ReferenceCellValue = ReferenceCellValue;
157
+ /** A reference array: each target renders through the single-reference presentation. */
158
+ function ReferenceArrayCellValue(_a) {
159
+ var tableName = _a.tableName, ids = _a.ids;
160
+ if (!tableName || !ids || ids.length === 0) {
161
+ return react_1.default.createElement(ui_1.EmptyCellValue, null);
162
+ }
163
+ return (react_1.default.createElement(material_1.Typography, { variant: 'body2', component: 'span', sx: { overflowWrap: 'anywhere' } }, ids.map(function (id, index) { return (react_1.default.createElement(react_1.default.Fragment, { key: id },
164
+ index > 0 && ', ',
165
+ react_1.default.createElement(ReferenceCellValue, { tableName: tableName, id: id }))); })));
166
+ }
167
+ exports.ReferenceArrayCellValue = ReferenceArrayCellValue;
168
+ //# sourceMappingURL=ReferenceCellValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceCellValue.js","sourceRoot":"","sources":["../../../src/table/ReferenceCellValue.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import '../generated';
2
+ declare global {
3
+ var IS_REACT_ACT_ENVIRONMENT: boolean;
4
+ }
5
+ //# sourceMappingURL=recordFormStructuredFields.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordFormStructuredFields.test.d.ts","sourceRoot":"","sources":["../../test/recordFormStructuredFields.test.tsx"],"names":[],"mappings":"AAoBA,OAAO,cAAc,CAAC;AAetB,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,OAAO,CAAC;CACvC"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ 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;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __importDefault = (this && this.__importDefault) || function (mod) {
65
+ return (mod && mod.__esModule) ? mod : { "default": mod };
66
+ };
67
+ Object.defineProperty(exports, "__esModule", { value: true });
68
+ /**
69
+ * @jest-environment jsdom
70
+ *
71
+ * RecordForm's long-text and structured-value fields (the admin-surface polish rev).
72
+ * Contracts as OUTCOMES:
73
+ * 1. Long-text columns (maxLength > 255) render as multiline textareas — a single-line
74
+ * input truncates exactly what the form exists to show.
75
+ * 2. Object columns present pretty-printed JSON in a multiline field and the SAVE payload
76
+ * carries the parsed OBJECT (round trip), never the display string.
77
+ * 3. Invalid JSON refuses the save with a message naming the field — the service update
78
+ * never runs.
79
+ * 4. Readonly timestamps display compact ('MMM D, YYYY, h:mm A') with the relative read as
80
+ * the field's helper line.
81
+ */
82
+ var react_1 = __importDefault(require("react"));
83
+ var moment_1 = __importDefault(require("moment"));
84
+ var client_1 = require("react-dom/client");
85
+ var test_utils_1 = require("react-dom/test-utils");
86
+ var react_router_dom_1 = require("react-router-dom");
87
+ var db_1 = require("@proteinjs/db");
88
+ require("../generated");
89
+ var RecordForm_1 = require("../src/form/RecordForm");
90
+ var mockDbService = {
91
+ get: jest.fn(),
92
+ insert: jest.fn(function (table, record) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
93
+ return [2 /*return*/, record];
94
+ }); }); }),
95
+ update: jest.fn(function (table, record) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
96
+ return [2 /*return*/, record];
97
+ }); }); }),
98
+ delete: jest.fn(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
99
+ return [2 /*return*/, 1];
100
+ }); }); }),
101
+ };
102
+ jest.mock('@proteinjs/db', function () { return (__assign(__assign({}, jest.requireActual('@proteinjs/db')), { getDbService: function () { return mockDbService; } })); });
103
+ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
104
+ var JobTable = /** @class */ (function (_super) {
105
+ __extends(JobTable, _super);
106
+ function JobTable() {
107
+ var _this = _super !== null && _super.apply(this, arguments) || this;
108
+ _this.name = 'admin_test_job';
109
+ _this.columns = (0, db_1.withRecordColumns)({
110
+ title: new db_1.StringColumn('title'),
111
+ description: new db_1.StringColumn('description', {}, 4000),
112
+ payload: new db_1.ObjectColumn('payload', { ui: { hidden: false } }),
113
+ });
114
+ return _this;
115
+ }
116
+ return JobTable;
117
+ }(db_1.Table));
118
+ var created = (0, moment_1.default)('2026-01-02T03:04:05.000Z');
119
+ var updated = (0, moment_1.default)('2026-02-03T04:05:06.000Z');
120
+ function loadedRecord() {
121
+ return {
122
+ id: 'job-1',
123
+ title: 'Nightly export',
124
+ description: 'A very long description of what the job does.',
125
+ payload: { retries: 3 },
126
+ created: created,
127
+ updated: updated,
128
+ };
129
+ }
130
+ describe('RecordForm structured fields', function () {
131
+ var container;
132
+ var root;
133
+ beforeEach(function () {
134
+ jest.clearAllMocks();
135
+ container = document.createElement('div');
136
+ document.body.appendChild(container);
137
+ root = (0, client_1.createRoot)(container);
138
+ });
139
+ afterEach(function () {
140
+ (0, test_utils_1.act)(function () { return root.unmount(); });
141
+ container.remove();
142
+ });
143
+ var mount = function (record) { return __awaiter(void 0, void 0, void 0, function () {
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0: return [4 /*yield*/, (0, test_utils_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
147
+ return __generator(this, function (_a) {
148
+ root.render(react_1.default.createElement(react_router_dom_1.MemoryRouter, null,
149
+ react_1.default.createElement(RecordForm_1.RecordForm, { table: new JobTable(), record: record })));
150
+ return [2 /*return*/];
151
+ });
152
+ }); })];
153
+ case 1:
154
+ _a.sent();
155
+ return [4 /*yield*/, (0, test_utils_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
156
+ return __generator(this, function (_a) {
157
+ switch (_a.label) {
158
+ case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 0); })];
159
+ case 1:
160
+ _a.sent();
161
+ return [2 /*return*/];
162
+ }
163
+ });
164
+ }); })];
165
+ case 2:
166
+ _a.sent();
167
+ return [2 /*return*/];
168
+ }
169
+ });
170
+ }); };
171
+ var controlByLabel = function (label) {
172
+ var labels = Array.from(document.body.querySelectorAll('label'));
173
+ var match = labels.find(function (candidate) { var _a; return (_a = candidate.textContent) === null || _a === void 0 ? void 0 : _a.startsWith(label); });
174
+ if (!match) {
175
+ throw new Error("no field labeled ".concat(label));
176
+ }
177
+ var control = document.getElementById(match.htmlFor);
178
+ if (!control) {
179
+ throw new Error("no control for label ".concat(label));
180
+ }
181
+ return control;
182
+ };
183
+ var setValue = function (control, value) { return __awaiter(void 0, void 0, void 0, function () {
184
+ var proto, setter;
185
+ return __generator(this, function (_a) {
186
+ switch (_a.label) {
187
+ case 0:
188
+ proto = control instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype;
189
+ setter = Object.getOwnPropertyDescriptor(proto, 'value').set;
190
+ return [4 /*yield*/, (0, test_utils_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
191
+ return __generator(this, function (_a) {
192
+ setter.call(control, value);
193
+ control.dispatchEvent(new Event('input', { bubbles: true }));
194
+ return [2 /*return*/];
195
+ });
196
+ }); })];
197
+ case 1:
198
+ _a.sent();
199
+ return [2 /*return*/];
200
+ }
201
+ });
202
+ }); };
203
+ var clickButton = function (name) { return __awaiter(void 0, void 0, void 0, function () {
204
+ var button;
205
+ return __generator(this, function (_a) {
206
+ switch (_a.label) {
207
+ case 0:
208
+ button = Array.from(document.body.querySelectorAll('button')).find(function (candidate) { return candidate.textContent === name; });
209
+ return [4 /*yield*/, (0, test_utils_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
210
+ return __generator(this, function (_a) {
211
+ button.dispatchEvent(new MouseEvent('click', { bubbles: true }));
212
+ return [2 /*return*/];
213
+ });
214
+ }); })];
215
+ case 1:
216
+ _a.sent();
217
+ return [4 /*yield*/, (0, test_utils_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
218
+ return __generator(this, function (_a) {
219
+ switch (_a.label) {
220
+ case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 0); })];
221
+ case 1:
222
+ _a.sent();
223
+ return [2 /*return*/];
224
+ }
225
+ });
226
+ }); })];
227
+ case 2:
228
+ _a.sent();
229
+ return [2 /*return*/];
230
+ }
231
+ });
232
+ }); };
233
+ it('long-text columns render as multiline textareas; short ones stay single-line inputs', function () { return __awaiter(void 0, void 0, void 0, function () {
234
+ return __generator(this, function (_a) {
235
+ switch (_a.label) {
236
+ case 0: return [4 /*yield*/, mount(loadedRecord())];
237
+ case 1:
238
+ _a.sent();
239
+ expect(controlByLabel('Title').tagName).toBe('INPUT');
240
+ expect(controlByLabel('Description').tagName).toBe('TEXTAREA');
241
+ return [2 /*return*/];
242
+ }
243
+ });
244
+ }); });
245
+ it('object columns present pretty JSON and save the parsed object (round trip)', function () { return __awaiter(void 0, void 0, void 0, function () {
246
+ var payloadControl, payloadSent;
247
+ return __generator(this, function (_a) {
248
+ switch (_a.label) {
249
+ case 0: return [4 /*yield*/, mount(loadedRecord())];
250
+ case 1:
251
+ _a.sent();
252
+ payloadControl = controlByLabel('Payload');
253
+ expect(payloadControl.tagName).toBe('TEXTAREA');
254
+ expect(payloadControl.value).toBe(JSON.stringify({ retries: 3 }, null, 2));
255
+ return [4 /*yield*/, setValue(payloadControl, '{\n "retries": 5\n}')];
256
+ case 2:
257
+ _a.sent();
258
+ return [4 /*yield*/, clickButton('Save')];
259
+ case 3:
260
+ _a.sent();
261
+ expect(mockDbService.update).toHaveBeenCalledTimes(1);
262
+ payloadSent = mockDbService.update.mock.calls[0][1].payload;
263
+ expect(payloadSent).toEqual({ retries: 5 });
264
+ return [2 /*return*/];
265
+ }
266
+ });
267
+ }); });
268
+ it('invalid JSON refuses the save with a message naming the field; the update never runs', function () { return __awaiter(void 0, void 0, void 0, function () {
269
+ return __generator(this, function (_a) {
270
+ switch (_a.label) {
271
+ case 0: return [4 /*yield*/, mount(loadedRecord())];
272
+ case 1:
273
+ _a.sent();
274
+ return [4 /*yield*/, setValue(controlByLabel('Payload'), '{not json')];
275
+ case 2:
276
+ _a.sent();
277
+ return [4 /*yield*/, clickButton('Save')];
278
+ case 3:
279
+ _a.sent();
280
+ expect(mockDbService.update).not.toHaveBeenCalled();
281
+ expect(document.body.textContent).toContain('Payload must be valid JSON');
282
+ return [2 /*return*/];
283
+ }
284
+ });
285
+ }); });
286
+ it('readonly timestamps display compact with the relative read as the helper line', function () { return __awaiter(void 0, void 0, void 0, function () {
287
+ var createdControl;
288
+ return __generator(this, function (_a) {
289
+ switch (_a.label) {
290
+ case 0: return [4 /*yield*/, mount(loadedRecord())];
291
+ case 1:
292
+ _a.sent();
293
+ createdControl = controlByLabel('Created');
294
+ expect(createdControl.value).toBe(created.format('MMM D, YYYY, h:mm A'));
295
+ expect(document.body.textContent).toContain(created.fromNow());
296
+ return [2 /*return*/];
297
+ }
298
+ });
299
+ }); });
300
+ });
301
+ //# sourceMappingURL=recordFormStructuredFields.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordFormStructuredFields.test.js","sourceRoot":"","sources":["../../test/recordFormStructuredFields.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare global {
2
+ var IS_REACT_ACT_ENVIRONMENT: boolean;
3
+ }
4
+ export {};
5
+ //# sourceMappingURL=recordTableDefaultRenderers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordTableDefaultRenderers.test.d.ts","sourceRoot":"","sources":["../../test/recordTableDefaultRenderers.test.tsx"],"names":[],"mappings":"AAqDA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,OAAO,CAAC;CACvC"}