@nestledjs/data-browser 0.1.12 → 0.1.15
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/index.js +2 -0
- package/lib/components/RelationFieldWrapper.d.ts +9 -0
- package/lib/components/RelationFieldWrapper.js +63 -0
- package/lib/components/filters/DateRangeFilter.d.ts +1 -1
- package/lib/components/filters/DateRangeFilter.js +9 -9
- package/lib/components/filters/NumberRangeFilter.js +21 -21
- package/lib/components/filters/RelationComponents.d.ts +4 -4
- package/lib/components/filters/RelationComponents.js +16 -16
- package/lib/components/filters/RelationFilterField.js +16 -10
- package/lib/components/index.d.ts +1 -0
- package/lib/components/shared/AdminBreadcrumbs.js +3 -3
- package/lib/components/shared/AdminErrorStates.js +1 -1
- package/lib/components/shared/AdminStatusDisplay.js +1 -1
- package/lib/context/AdminDataContext.d.ts +1 -1
- package/lib/context/AdminDataContext.js +6 -5
- package/lib/hooks/useRelationData.d.ts +1 -1
- package/lib/hooks/useRelationData.js +3 -2
- package/lib/layouts/AdminDataLayout.js +53 -56
- package/lib/pages/AdminDataCreatePage.js +6 -5
- package/lib/pages/AdminDataEditPage.js +6 -5
- package/lib/pages/AdminDataIndexPage.js +14 -13
- package/lib/pages/AdminDataListPage.js +138 -99
- package/lib/utils/graphql-utils.d.ts +1 -1
- package/lib/utils/graphql-utils.js +132 -24
- package/lib/utils/string-utils.js +3 -3
- package/package.json +3 -3
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useMemo } from "react";
|
|
1
2
|
import { useQuery } from "@apollo/client/react";
|
|
2
3
|
import { DataTable, ErrorBoundary } from "@nestledjs/shared-components";
|
|
3
4
|
import { getPluralName } from "@nestledjs/helpers";
|
|
4
5
|
import { AdminLocalStorage } from "../utils/secure-storage.js";
|
|
5
6
|
import { kebabCase, formatFieldName } from "../utils/string-utils.js";
|
|
6
|
-
import {
|
|
7
|
-
import { useParams, Link } from "react-router";
|
|
7
|
+
import { useParams, useSearchParams, Link } from "react-router";
|
|
8
8
|
import { DateRangeFilter } from "../components/filters/DateRangeFilter.js";
|
|
9
9
|
import { NumberRangeFilter } from "../components/filters/NumberRangeFilter.js";
|
|
10
10
|
import { RelationFilterField } from "../components/filters/RelationFilterField.js";
|
|
11
11
|
import { useAdminList } from "../hooks/useAdminList.js";
|
|
12
12
|
import { getAdminDocuments } from "../utils/graphql-utils.js";
|
|
13
13
|
import { useAdminDataContext } from "../context/AdminDataContext.js";
|
|
14
|
-
var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/
|
|
14
|
+
var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/pages/AdminDataListPage.tsx";
|
|
15
15
|
function AdminDataListPage({
|
|
16
16
|
modelName: propModelName
|
|
17
17
|
} = {}) {
|
|
18
18
|
const params = useParams();
|
|
19
|
+
const [searchParams] = useSearchParams();
|
|
19
20
|
const {
|
|
20
21
|
sdk,
|
|
21
22
|
databaseModels,
|
|
@@ -106,6 +107,44 @@ function AdminDataListPage({
|
|
|
106
107
|
return modelUrlName.toLowerCase() === pluralParam.toLowerCase();
|
|
107
108
|
});
|
|
108
109
|
}, [propModelName, pluralParam, databaseModels]);
|
|
110
|
+
const urlFilters = useMemo(() => {
|
|
111
|
+
if (!model) return {};
|
|
112
|
+
const filters2 = {};
|
|
113
|
+
for (const [key, value] of searchParams.entries()) {
|
|
114
|
+
if (key !== "page" && key !== "search" && key !== "sort") {
|
|
115
|
+
const relationField = model.fields.find((f) => {
|
|
116
|
+
var _a;
|
|
117
|
+
return f.relationName && !f.isList && ((_a = f.relationFromFields) == null ? void 0 : _a[0]) === key;
|
|
118
|
+
});
|
|
119
|
+
if (relationField) {
|
|
120
|
+
filters2[relationField.name] = {
|
|
121
|
+
id: value
|
|
122
|
+
};
|
|
123
|
+
} else {
|
|
124
|
+
const scalarField = model.fields.find((f) => f.name === key && !f.relationName);
|
|
125
|
+
if (scalarField) {
|
|
126
|
+
filters2[key] = value;
|
|
127
|
+
} else {
|
|
128
|
+
console.warn(`[AdminList] URL parameter "${key}" does not exist on model "${model.name}" - ignoring`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return filters2;
|
|
134
|
+
}, [searchParams, model]);
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
if (Object.keys(urlFilters).length > 0) {
|
|
137
|
+
dispatch({
|
|
138
|
+
type: "SET_FILTERS",
|
|
139
|
+
payload: urlFilters
|
|
140
|
+
});
|
|
141
|
+
if (!showFilters) {
|
|
142
|
+
dispatch({
|
|
143
|
+
type: "TOGGLE_FILTERS"
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}, [urlFilters, showFilters]);
|
|
109
148
|
const documents = useMemo(() => {
|
|
110
149
|
if (!model) return {
|
|
111
150
|
query: void 0,
|
|
@@ -327,129 +366,129 @@ function AdminDataListPage({
|
|
|
327
366
|
if (!model) {
|
|
328
367
|
return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", __self: this, __source: {
|
|
329
368
|
fileName: _jsxFileName,
|
|
330
|
-
lineNumber:
|
|
369
|
+
lineNumber: 458,
|
|
331
370
|
columnNumber: 7
|
|
332
371
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
|
|
333
372
|
fileName: _jsxFileName,
|
|
334
|
-
lineNumber:
|
|
373
|
+
lineNumber: 459,
|
|
335
374
|
columnNumber: 9
|
|
336
375
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
337
376
|
fileName: _jsxFileName,
|
|
338
|
-
lineNumber:
|
|
377
|
+
lineNumber: 460,
|
|
339
378
|
columnNumber: 11
|
|
340
379
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
341
380
|
fileName: _jsxFileName,
|
|
342
|
-
lineNumber:
|
|
381
|
+
lineNumber: 461,
|
|
343
382
|
columnNumber: 13
|
|
344
383
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "mx-auto h-12 w-12 text-red-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
|
|
345
384
|
fileName: _jsxFileName,
|
|
346
|
-
lineNumber:
|
|
385
|
+
lineNumber: 462,
|
|
347
386
|
columnNumber: 15
|
|
348
387
|
} }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z", __self: this, __source: {
|
|
349
388
|
fileName: _jsxFileName,
|
|
350
|
-
lineNumber:
|
|
389
|
+
lineNumber: 468,
|
|
351
390
|
columnNumber: 17
|
|
352
391
|
} })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
|
|
353
392
|
fileName: _jsxFileName,
|
|
354
|
-
lineNumber:
|
|
393
|
+
lineNumber: 475,
|
|
355
394
|
columnNumber: 15
|
|
356
395
|
} }, "Invalid Data Type"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
|
|
357
396
|
fileName: _jsxFileName,
|
|
358
|
-
lineNumber:
|
|
397
|
+
lineNumber: 476,
|
|
359
398
|
columnNumber: 15
|
|
360
399
|
} }, 'The data type "', pluralParam, '" is not recognized.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6", __self: this, __source: {
|
|
361
400
|
fileName: _jsxFileName,
|
|
362
|
-
lineNumber:
|
|
401
|
+
lineNumber: 479,
|
|
363
402
|
columnNumber: 15
|
|
364
403
|
} }, /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
365
404
|
fileName: _jsxFileName,
|
|
366
|
-
lineNumber:
|
|
405
|
+
lineNumber: 480,
|
|
367
406
|
columnNumber: 17
|
|
368
407
|
} }, "Return to Data Browser"))))));
|
|
369
408
|
}
|
|
370
409
|
if (!query) {
|
|
371
410
|
return /* @__PURE__ */ React.createElement("div", { className: "min-h-screen bg-gray-50 flex flex-col justify-center py-12 sm:px-6 lg:px-8", __self: this, __source: {
|
|
372
411
|
fileName: _jsxFileName,
|
|
373
|
-
lineNumber:
|
|
412
|
+
lineNumber: 496,
|
|
374
413
|
columnNumber: 7
|
|
375
414
|
} }, /* @__PURE__ */ React.createElement("div", { className: "mt-8 sm:mx-auto sm:w-full sm:max-w-md", __self: this, __source: {
|
|
376
415
|
fileName: _jsxFileName,
|
|
377
|
-
lineNumber:
|
|
416
|
+
lineNumber: 497,
|
|
378
417
|
columnNumber: 9
|
|
379
418
|
} }, /* @__PURE__ */ React.createElement("div", { className: "bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10", __self: this, __source: {
|
|
380
419
|
fileName: _jsxFileName,
|
|
381
|
-
lineNumber:
|
|
420
|
+
lineNumber: 498,
|
|
382
421
|
columnNumber: 11
|
|
383
422
|
} }, /* @__PURE__ */ React.createElement("div", { className: "text-center", __self: this, __source: {
|
|
384
423
|
fileName: _jsxFileName,
|
|
385
|
-
lineNumber:
|
|
424
|
+
lineNumber: 499,
|
|
386
425
|
columnNumber: 13
|
|
387
426
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "mx-auto h-12 w-12 text-yellow-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
|
|
388
427
|
fileName: _jsxFileName,
|
|
389
|
-
lineNumber:
|
|
428
|
+
lineNumber: 500,
|
|
390
429
|
columnNumber: 15
|
|
391
430
|
} }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.728-.833-2.498 0L5.316 15c-.77.833.192 2.5 1.732 2.5z", __self: this, __source: {
|
|
392
431
|
fileName: _jsxFileName,
|
|
393
|
-
lineNumber:
|
|
432
|
+
lineNumber: 506,
|
|
394
433
|
columnNumber: 17
|
|
395
434
|
} })), /* @__PURE__ */ React.createElement("h2", { className: "mt-4 text-lg font-medium text-gray-900", __self: this, __source: {
|
|
396
435
|
fileName: _jsxFileName,
|
|
397
|
-
lineNumber:
|
|
436
|
+
lineNumber: 513,
|
|
398
437
|
columnNumber: 15
|
|
399
438
|
} }, "GraphQL Schema Not Available"), /* @__PURE__ */ React.createElement("p", { className: "mt-2 text-sm text-gray-600", __self: this, __source: {
|
|
400
439
|
fileName: _jsxFileName,
|
|
401
|
-
lineNumber:
|
|
440
|
+
lineNumber: 516,
|
|
402
441
|
columnNumber: 15
|
|
403
442
|
} }, 'No GraphQL query found for "', model.name, '". The admin schema may need to be regenerated.'), /* @__PURE__ */ React.createElement("div", { className: "mt-6 space-y-3", __self: this, __source: {
|
|
404
443
|
fileName: _jsxFileName,
|
|
405
|
-
lineNumber:
|
|
444
|
+
lineNumber: 520,
|
|
406
445
|
columnNumber: 15
|
|
407
446
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => window.location.reload(), className: "w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-green-web hover:bg-green-web-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
408
447
|
fileName: _jsxFileName,
|
|
409
|
-
lineNumber:
|
|
448
|
+
lineNumber: 521,
|
|
410
449
|
columnNumber: 17
|
|
411
450
|
} }, "Reload Page"), /* @__PURE__ */ React.createElement(Link, { to: basePath, className: "w-full flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
412
451
|
fileName: _jsxFileName,
|
|
413
|
-
lineNumber:
|
|
452
|
+
lineNumber: 527,
|
|
414
453
|
columnNumber: 17
|
|
415
454
|
} }, "Return to Data Browser"))))));
|
|
416
455
|
}
|
|
417
456
|
const createLink = `${basePath}/${kebabCase(model.name)}/create`;
|
|
418
457
|
const columnSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "column-selector", __self: this, __source: {
|
|
419
458
|
fileName: _jsxFileName,
|
|
420
|
-
lineNumber:
|
|
459
|
+
lineNumber: 546,
|
|
421
460
|
columnNumber: 5
|
|
422
461
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowColumnSelector(!showColumnSelector), className: "inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web", __self: this, __source: {
|
|
423
462
|
fileName: _jsxFileName,
|
|
424
|
-
lineNumber:
|
|
463
|
+
lineNumber: 547,
|
|
425
464
|
columnNumber: 7
|
|
426
465
|
} }, "Columns", /* @__PURE__ */ React.createElement("svg", { className: "-mr-0.5 ml-2 h-4 w-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
|
|
427
466
|
fileName: _jsxFileName,
|
|
428
|
-
lineNumber:
|
|
467
|
+
lineNumber: 552,
|
|
429
468
|
columnNumber: 9
|
|
430
469
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd", __self: this, __source: {
|
|
431
470
|
fileName: _jsxFileName,
|
|
432
|
-
lineNumber:
|
|
471
|
+
lineNumber: 558,
|
|
433
472
|
columnNumber: 11
|
|
434
473
|
} }))), showColumnSelector && /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 mt-2 w-80 bg-white rounded-md shadow-lg z-50 border border-gray-200", __self: this, __source: {
|
|
435
474
|
fileName: _jsxFileName,
|
|
436
|
-
lineNumber:
|
|
475
|
+
lineNumber: 567,
|
|
437
476
|
columnNumber: 9
|
|
438
477
|
} }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
|
|
439
478
|
fileName: _jsxFileName,
|
|
440
|
-
lineNumber:
|
|
479
|
+
lineNumber: 568,
|
|
441
480
|
columnNumber: 11
|
|
442
481
|
} }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
|
|
443
482
|
fileName: _jsxFileName,
|
|
444
|
-
lineNumber:
|
|
483
|
+
lineNumber: 569,
|
|
445
484
|
columnNumber: 13
|
|
446
485
|
} }, "Visible Columns"), /* @__PURE__ */ React.createElement("div", { className: "space-y-2 max-h-64 overflow-y-auto", __self: this, __source: {
|
|
447
486
|
fileName: _jsxFileName,
|
|
448
|
-
lineNumber:
|
|
487
|
+
lineNumber: 570,
|
|
449
488
|
columnNumber: 13
|
|
450
489
|
} }, fieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
|
|
451
490
|
fileName: _jsxFileName,
|
|
452
|
-
lineNumber:
|
|
491
|
+
lineNumber: 572,
|
|
453
492
|
columnNumber: 17
|
|
454
493
|
} }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: visibleColumns.includes(field), onChange: (e) => {
|
|
455
494
|
const newColumns = e.target.checked ? [...visibleColumns, field] : visibleColumns.filter((col) => col !== field);
|
|
@@ -457,22 +496,22 @@ function AdminDataListPage({
|
|
|
457
496
|
AdminLocalStorage.setColumnVisibility(model.name, newColumns);
|
|
458
497
|
}, className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded", __self: this, __source: {
|
|
459
498
|
fileName: _jsxFileName,
|
|
460
|
-
lineNumber:
|
|
499
|
+
lineNumber: 573,
|
|
461
500
|
columnNumber: 19
|
|
462
501
|
} }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
|
|
463
502
|
fileName: _jsxFileName,
|
|
464
|
-
lineNumber:
|
|
503
|
+
lineNumber: 585,
|
|
465
504
|
columnNumber: 19
|
|
466
505
|
} }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
|
|
467
506
|
fileName: _jsxFileName,
|
|
468
|
-
lineNumber:
|
|
507
|
+
lineNumber: 589,
|
|
469
508
|
columnNumber: 13
|
|
470
509
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
471
510
|
setVisibleColumns(fieldNames);
|
|
472
511
|
AdminLocalStorage.setColumnVisibility(model.name, fieldNames);
|
|
473
512
|
}, className: "text-xs text-green-web hover:text-green-web-800", __self: this, __source: {
|
|
474
513
|
fileName: _jsxFileName,
|
|
475
|
-
lineNumber:
|
|
514
|
+
lineNumber: 590,
|
|
476
515
|
columnNumber: 15
|
|
477
516
|
} }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
478
517
|
const defaults = fieldNames.slice(0, 8);
|
|
@@ -480,44 +519,44 @@ function AdminDataListPage({
|
|
|
480
519
|
AdminLocalStorage.setColumnVisibility(model.name, defaults);
|
|
481
520
|
}, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
|
|
482
521
|
fileName: _jsxFileName,
|
|
483
|
-
lineNumber:
|
|
522
|
+
lineNumber: 599,
|
|
484
523
|
columnNumber: 15
|
|
485
524
|
} }, "Reset to Defaults")))));
|
|
486
525
|
const searchFieldSelector = /* @__PURE__ */ React.createElement("div", { className: "relative", "data-dropdown": "search-field-selector", __self: this, __source: {
|
|
487
526
|
fileName: _jsxFileName,
|
|
488
|
-
lineNumber:
|
|
527
|
+
lineNumber: 618,
|
|
489
528
|
columnNumber: 5
|
|
490
529
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowSearchFieldSelector(!showSearchFieldSelector), className: "h-full px-3 border-l border-gray-300 text-gray-400 hover:text-gray-600 focus:outline-none focus:text-gray-600", "aria-label": "Configure search fields", __self: this, __source: {
|
|
491
530
|
fileName: _jsxFileName,
|
|
492
|
-
lineNumber:
|
|
531
|
+
lineNumber: 619,
|
|
493
532
|
columnNumber: 7
|
|
494
533
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "h-4 w-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
|
|
495
534
|
fileName: _jsxFileName,
|
|
496
|
-
lineNumber:
|
|
535
|
+
lineNumber: 624,
|
|
497
536
|
columnNumber: 9
|
|
498
537
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M3 3a1 1 0 000 2v8a2 2 0 002 2h2.586l-1.293 1.293a1 1 0 101.414 1.414L10 15.414l2.293 2.293a1 1 0 001.414-1.414L12.414 15H15a2 2 0 002-2V5a1 1 0 100-2H3zm11.707 4.707a1 1 0 00-1.414-1.414L10 9.586 8.707 8.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd", __self: this, __source: {
|
|
499
538
|
fileName: _jsxFileName,
|
|
500
|
-
lineNumber:
|
|
539
|
+
lineNumber: 630,
|
|
501
540
|
columnNumber: 11
|
|
502
541
|
} }))), showSearchFieldSelector && /* @__PURE__ */ React.createElement("div", { className: "absolute right-0 mt-2 w-72 bg-white rounded-md shadow-lg z-50 border border-gray-200", __self: this, __source: {
|
|
503
542
|
fileName: _jsxFileName,
|
|
504
|
-
lineNumber:
|
|
543
|
+
lineNumber: 639,
|
|
505
544
|
columnNumber: 9
|
|
506
545
|
} }, /* @__PURE__ */ React.createElement("div", { className: "p-4", __self: this, __source: {
|
|
507
546
|
fileName: _jsxFileName,
|
|
508
|
-
lineNumber:
|
|
547
|
+
lineNumber: 640,
|
|
509
548
|
columnNumber: 11
|
|
510
549
|
} }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900 mb-3", __self: this, __source: {
|
|
511
550
|
fileName: _jsxFileName,
|
|
512
|
-
lineNumber:
|
|
551
|
+
lineNumber: 641,
|
|
513
552
|
columnNumber: 13
|
|
514
553
|
} }, "Search Fields"), searchableFieldNames.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "space-y-2 max-h-48 overflow-y-auto", __self: this, __source: {
|
|
515
554
|
fileName: _jsxFileName,
|
|
516
|
-
lineNumber:
|
|
555
|
+
lineNumber: 644,
|
|
517
556
|
columnNumber: 17
|
|
518
557
|
} }, searchableFieldNames.map((field) => /* @__PURE__ */ React.createElement("label", { key: field, className: "flex items-start gap-2 cursor-pointer", __self: this, __source: {
|
|
519
558
|
fileName: _jsxFileName,
|
|
520
|
-
lineNumber:
|
|
559
|
+
lineNumber: 646,
|
|
521
560
|
columnNumber: 21
|
|
522
561
|
} }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: searchFields.includes(field), onChange: (e) => {
|
|
523
562
|
const newFields = e.target.checked ? [...searchFields, field] : searchFields.filter((f) => f !== field);
|
|
@@ -525,22 +564,22 @@ function AdminDataListPage({
|
|
|
525
564
|
AdminLocalStorage.setSearchFields(model.name, newFields);
|
|
526
565
|
}, className: "h-4 w-4 mt-0.5 flex-shrink-0 text-green-web focus:ring-green-web border-gray-300 rounded", __self: this, __source: {
|
|
527
566
|
fileName: _jsxFileName,
|
|
528
|
-
lineNumber:
|
|
567
|
+
lineNumber: 647,
|
|
529
568
|
columnNumber: 23
|
|
530
569
|
} }), /* @__PURE__ */ React.createElement("span", { className: "text-sm text-gray-700 leading-5", __self: this, __source: {
|
|
531
570
|
fileName: _jsxFileName,
|
|
532
|
-
lineNumber:
|
|
571
|
+
lineNumber: 659,
|
|
533
572
|
columnNumber: 23
|
|
534
573
|
} }, formatFieldName(field))))), /* @__PURE__ */ React.createElement("div", { className: "mt-3 pt-3 border-t border-gray-200 flex justify-between", __self: this, __source: {
|
|
535
574
|
fileName: _jsxFileName,
|
|
536
|
-
lineNumber:
|
|
575
|
+
lineNumber: 665,
|
|
537
576
|
columnNumber: 17
|
|
538
577
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
539
578
|
setSearchFields(searchableFieldNames);
|
|
540
579
|
AdminLocalStorage.setSearchFields(model.name, searchableFieldNames);
|
|
541
580
|
}, className: "text-xs text-green-web hover:text-green-web-800 mr-3", __self: this, __source: {
|
|
542
581
|
fileName: _jsxFileName,
|
|
543
|
-
lineNumber:
|
|
582
|
+
lineNumber: 666,
|
|
544
583
|
columnNumber: 19
|
|
545
584
|
} }, "Select All"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
546
585
|
const defaults = getDefaultSearchFields(searchableFieldNames);
|
|
@@ -548,28 +587,28 @@ function AdminDataListPage({
|
|
|
548
587
|
AdminLocalStorage.setSearchFields(model.name, defaults);
|
|
549
588
|
}, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
|
|
550
589
|
fileName: _jsxFileName,
|
|
551
|
-
lineNumber:
|
|
590
|
+
lineNumber: 675,
|
|
552
591
|
columnNumber: 19
|
|
553
592
|
} }, "Reset to Defaults"))) : /* @__PURE__ */ React.createElement("div", { className: "text-sm text-gray-500", __self: this, __source: {
|
|
554
593
|
fileName: _jsxFileName,
|
|
555
|
-
lineNumber:
|
|
594
|
+
lineNumber: 688,
|
|
556
595
|
columnNumber: 15
|
|
557
596
|
} }, "No searchable text fields available"))));
|
|
558
597
|
const filterPanel = showFilters && /* @__PURE__ */ React.createElement("div", { className: "mb-4 bg-gray-50 border border-gray-200 rounded-lg p-4", __self: this, __source: {
|
|
559
598
|
fileName: _jsxFileName,
|
|
560
|
-
lineNumber:
|
|
599
|
+
lineNumber: 698,
|
|
561
600
|
columnNumber: 5
|
|
562
601
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-between mb-3", __self: this, __source: {
|
|
563
602
|
fileName: _jsxFileName,
|
|
564
|
-
lineNumber:
|
|
603
|
+
lineNumber: 699,
|
|
565
604
|
columnNumber: 7
|
|
566
605
|
} }, /* @__PURE__ */ React.createElement("h3", { className: "text-sm font-medium text-gray-900", __self: this, __source: {
|
|
567
606
|
fileName: _jsxFileName,
|
|
568
|
-
lineNumber:
|
|
607
|
+
lineNumber: 700,
|
|
569
608
|
columnNumber: 9
|
|
570
609
|
} }, "Filters"), /* @__PURE__ */ React.createElement("div", { className: "flex items-center space-x-2", __self: this, __source: {
|
|
571
610
|
fileName: _jsxFileName,
|
|
572
|
-
lineNumber:
|
|
611
|
+
lineNumber: 701,
|
|
573
612
|
columnNumber: 9
|
|
574
613
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
575
614
|
setFilters({});
|
|
@@ -578,23 +617,23 @@ function AdminDataListPage({
|
|
|
578
617
|
});
|
|
579
618
|
}, className: "text-xs text-gray-600 hover:text-gray-800", __self: this, __source: {
|
|
580
619
|
fileName: _jsxFileName,
|
|
581
|
-
lineNumber:
|
|
620
|
+
lineNumber: 702,
|
|
582
621
|
columnNumber: 11
|
|
583
622
|
} }, "Clear All"), /* @__PURE__ */ React.createElement("button", { onClick: () => setShowFilters(false), className: "text-gray-400 hover:text-gray-600", __self: this, __source: {
|
|
584
623
|
fileName: _jsxFileName,
|
|
585
|
-
lineNumber:
|
|
624
|
+
lineNumber: 711,
|
|
586
625
|
columnNumber: 11
|
|
587
626
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "h-5 w-5", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", __self: this, __source: {
|
|
588
627
|
fileName: _jsxFileName,
|
|
589
|
-
lineNumber:
|
|
628
|
+
lineNumber: 715,
|
|
590
629
|
columnNumber: 13
|
|
591
630
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd", __self: this, __source: {
|
|
592
631
|
fileName: _jsxFileName,
|
|
593
|
-
lineNumber:
|
|
632
|
+
lineNumber: 721,
|
|
594
633
|
columnNumber: 15
|
|
595
634
|
} }))))), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", __self: this, __source: {
|
|
596
635
|
fileName: _jsxFileName,
|
|
597
|
-
lineNumber:
|
|
636
|
+
lineNumber: 731,
|
|
598
637
|
columnNumber: 7
|
|
599
638
|
} }, filterableFieldNames.map((fieldName) => {
|
|
600
639
|
const field = model.fields.find((f) => f.name === fieldName);
|
|
@@ -617,21 +656,21 @@ function AdminDataListPage({
|
|
|
617
656
|
if (field.relationName && !field.isList) {
|
|
618
657
|
return /* @__PURE__ */ React.createElement(RelationFilterField, { key: fieldName, fieldName, relatedModelName: field.type, currentValue, onChange: handleChange, __self: this, __source: {
|
|
619
658
|
fileName: _jsxFileName,
|
|
620
|
-
lineNumber:
|
|
659
|
+
lineNumber: 751,
|
|
621
660
|
columnNumber: 15
|
|
622
661
|
} });
|
|
623
662
|
}
|
|
624
663
|
if (field.type.toLowerCase() === "datetime" || field.type.toLowerCase() === "date") {
|
|
625
664
|
return /* @__PURE__ */ React.createElement(DateRangeFilter, { key: fieldName, fieldName, currentValue, onChange: handleChange, __self: this, __source: {
|
|
626
665
|
fileName: _jsxFileName,
|
|
627
|
-
lineNumber:
|
|
666
|
+
lineNumber: 764,
|
|
628
667
|
columnNumber: 15
|
|
629
668
|
} });
|
|
630
669
|
}
|
|
631
670
|
if (["int", "bigint", "float", "decimal"].includes(field.type.toLowerCase())) {
|
|
632
671
|
return /* @__PURE__ */ React.createElement(NumberRangeFilter, { key: fieldName, fieldName, fieldType: field.type.toLowerCase(), currentValue, onChange: handleChange, __self: this, __source: {
|
|
633
672
|
fileName: _jsxFileName,
|
|
634
|
-
lineNumber:
|
|
673
|
+
lineNumber: 776,
|
|
635
674
|
columnNumber: 15
|
|
636
675
|
} });
|
|
637
676
|
}
|
|
@@ -640,23 +679,23 @@ function AdminDataListPage({
|
|
|
640
679
|
if (enumValues) {
|
|
641
680
|
return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
|
|
642
681
|
fileName: _jsxFileName,
|
|
643
|
-
lineNumber:
|
|
682
|
+
lineNumber: 791,
|
|
644
683
|
columnNumber: 17
|
|
645
684
|
} }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
|
|
646
685
|
fileName: _jsxFileName,
|
|
647
|
-
lineNumber:
|
|
686
|
+
lineNumber: 792,
|
|
648
687
|
columnNumber: 19
|
|
649
688
|
} }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("select", { value: typeof currentValue === "string" ? currentValue : "", onChange: (e) => handleChange(e.target.value || void 0), className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
|
|
650
689
|
fileName: _jsxFileName,
|
|
651
|
-
lineNumber:
|
|
690
|
+
lineNumber: 795,
|
|
652
691
|
columnNumber: 19
|
|
653
692
|
} }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
|
|
654
693
|
fileName: _jsxFileName,
|
|
655
|
-
lineNumber:
|
|
694
|
+
lineNumber: 800,
|
|
656
695
|
columnNumber: 21
|
|
657
696
|
} }, "All"), enumValues.map((val) => /* @__PURE__ */ React.createElement("option", { key: val, value: val, __self: this, __source: {
|
|
658
697
|
fileName: _jsxFileName,
|
|
659
|
-
lineNumber:
|
|
698
|
+
lineNumber: 802,
|
|
660
699
|
columnNumber: 23
|
|
661
700
|
} }, val))));
|
|
662
701
|
}
|
|
@@ -664,121 +703,121 @@ function AdminDataListPage({
|
|
|
664
703
|
if (field.type.toLowerCase() === "boolean") {
|
|
665
704
|
return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
|
|
666
705
|
fileName: _jsxFileName,
|
|
667
|
-
lineNumber:
|
|
706
|
+
lineNumber: 815,
|
|
668
707
|
columnNumber: 15
|
|
669
708
|
} }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
|
|
670
709
|
fileName: _jsxFileName,
|
|
671
|
-
lineNumber:
|
|
710
|
+
lineNumber: 816,
|
|
672
711
|
columnNumber: 17
|
|
673
712
|
} }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("select", { value: currentValue === void 0 || currentValue === null ? "" : currentValue.toString(), onChange: (e) => {
|
|
674
713
|
const value = e.target.value;
|
|
675
714
|
handleChange(value === "" ? void 0 : value === "true");
|
|
676
715
|
}, className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
|
|
677
716
|
fileName: _jsxFileName,
|
|
678
|
-
lineNumber:
|
|
717
|
+
lineNumber: 819,
|
|
679
718
|
columnNumber: 17
|
|
680
719
|
} }, /* @__PURE__ */ React.createElement("option", { value: "", __self: this, __source: {
|
|
681
720
|
fileName: _jsxFileName,
|
|
682
|
-
lineNumber:
|
|
721
|
+
lineNumber: 827,
|
|
683
722
|
columnNumber: 19
|
|
684
723
|
} }, "All"), /* @__PURE__ */ React.createElement("option", { value: "true", __self: this, __source: {
|
|
685
724
|
fileName: _jsxFileName,
|
|
686
|
-
lineNumber:
|
|
725
|
+
lineNumber: 828,
|
|
687
726
|
columnNumber: 19
|
|
688
727
|
} }, "Yes"), /* @__PURE__ */ React.createElement("option", { value: "false", __self: this, __source: {
|
|
689
728
|
fileName: _jsxFileName,
|
|
690
|
-
lineNumber:
|
|
729
|
+
lineNumber: 829,
|
|
691
730
|
columnNumber: 19
|
|
692
731
|
} }, "No")));
|
|
693
732
|
}
|
|
694
733
|
return /* @__PURE__ */ React.createElement("div", { key: fieldName, className: "space-y-1", __self: this, __source: {
|
|
695
734
|
fileName: _jsxFileName,
|
|
696
|
-
lineNumber:
|
|
735
|
+
lineNumber: 837,
|
|
697
736
|
columnNumber: 13
|
|
698
737
|
} }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
|
|
699
738
|
fileName: _jsxFileName,
|
|
700
|
-
lineNumber:
|
|
739
|
+
lineNumber: 838,
|
|
701
740
|
columnNumber: 15
|
|
702
741
|
} }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("input", { type: "text", value: typeof currentValue === "string" ? currentValue : "", onChange: (e) => handleChange(e.target.value || void 0), placeholder: `Filter by ${formatFieldName(fieldName).toLowerCase()}...`, className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-green-web focus:border-green-web text-sm", __self: this, __source: {
|
|
703
742
|
fileName: _jsxFileName,
|
|
704
|
-
lineNumber:
|
|
743
|
+
lineNumber: 841,
|
|
705
744
|
columnNumber: 15
|
|
706
745
|
} }));
|
|
707
746
|
})));
|
|
708
747
|
const searchFilter = /* @__PURE__ */ React.createElement("div", { className: "mb-4 flex items-center justify-between", __self: this, __source: {
|
|
709
748
|
fileName: _jsxFileName,
|
|
710
|
-
lineNumber:
|
|
749
|
+
lineNumber: 856,
|
|
711
750
|
columnNumber: 5
|
|
712
751
|
} }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 max-w-lg", __self: this, __source: {
|
|
713
752
|
fileName: _jsxFileName,
|
|
714
|
-
lineNumber:
|
|
753
|
+
lineNumber: 857,
|
|
715
754
|
columnNumber: 7
|
|
716
755
|
} }, /* @__PURE__ */ React.createElement("label", { htmlFor: "search", className: "sr-only", __self: this, __source: {
|
|
717
756
|
fileName: _jsxFileName,
|
|
718
|
-
lineNumber:
|
|
757
|
+
lineNumber: 858,
|
|
719
758
|
columnNumber: 9
|
|
720
759
|
} }, "Search"), /* @__PURE__ */ React.createElement("div", { className: "relative", __self: this, __source: {
|
|
721
760
|
fileName: _jsxFileName,
|
|
722
|
-
lineNumber:
|
|
761
|
+
lineNumber: 861,
|
|
723
762
|
columnNumber: 9
|
|
724
763
|
} }, /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none", __self: this, __source: {
|
|
725
764
|
fileName: _jsxFileName,
|
|
726
|
-
lineNumber:
|
|
765
|
+
lineNumber: 862,
|
|
727
766
|
columnNumber: 11
|
|
728
767
|
} }, loading && search !== debouncedSearch ? /* @__PURE__ */ React.createElement("svg", { className: "animate-spin h-5 w-5 text-gray-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", __self: this, __source: {
|
|
729
768
|
fileName: _jsxFileName,
|
|
730
|
-
lineNumber:
|
|
769
|
+
lineNumber: 864,
|
|
731
770
|
columnNumber: 15
|
|
732
771
|
} }, /* @__PURE__ */ React.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4", __self: this, __source: {
|
|
733
772
|
fileName: _jsxFileName,
|
|
734
|
-
lineNumber:
|
|
773
|
+
lineNumber: 870,
|
|
735
774
|
columnNumber: 17
|
|
736
775
|
} }), /* @__PURE__ */ React.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z", __self: this, __source: {
|
|
737
776
|
fileName: _jsxFileName,
|
|
738
|
-
lineNumber:
|
|
777
|
+
lineNumber: 878,
|
|
739
778
|
columnNumber: 17
|
|
740
779
|
} })) : /* @__PURE__ */ React.createElement("svg", { className: "h-5 w-5 text-gray-400", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", __self: this, __source: {
|
|
741
780
|
fileName: _jsxFileName,
|
|
742
|
-
lineNumber:
|
|
781
|
+
lineNumber: 885,
|
|
743
782
|
columnNumber: 15
|
|
744
783
|
} }, /* @__PURE__ */ React.createElement("path", { fillRule: "evenodd", d: "M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z", clipRule: "evenodd", __self: this, __source: {
|
|
745
784
|
fileName: _jsxFileName,
|
|
746
|
-
lineNumber:
|
|
785
|
+
lineNumber: 892,
|
|
747
786
|
columnNumber: 17
|
|
748
787
|
} }))), /* @__PURE__ */ React.createElement("input", { id: "search", name: "search", className: "block w-full pl-10 pr-12 py-2 border border-gray-300 rounded-md leading-5 bg-white placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-green-web focus:border-green-web sm:text-sm", placeholder: `Search ${searchFields.length > 0 ? searchFields.map((field) => field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (str) => str.toUpperCase())).join(", ") : getPluralName(model.name).toLowerCase()}...`, type: "search", value: state.search || "", onChange: (e) => dispatch({
|
|
749
788
|
type: "SET_SEARCH",
|
|
750
789
|
payload: e.target.value
|
|
751
790
|
}), __self: this, __source: {
|
|
752
791
|
fileName: _jsxFileName,
|
|
753
|
-
lineNumber:
|
|
792
|
+
lineNumber: 900,
|
|
754
793
|
columnNumber: 11
|
|
755
794
|
} }), searchableFieldNames.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center", __self: this, __source: {
|
|
756
795
|
fileName: _jsxFileName,
|
|
757
|
-
lineNumber:
|
|
796
|
+
lineNumber: 910,
|
|
758
797
|
columnNumber: 13
|
|
759
798
|
} }, searchFieldSelector))), /* @__PURE__ */ React.createElement("div", { className: "ml-4 flex space-x-2", __self: this, __source: {
|
|
760
799
|
fileName: _jsxFileName,
|
|
761
|
-
lineNumber:
|
|
800
|
+
lineNumber: 916,
|
|
762
801
|
columnNumber: 7
|
|
763
802
|
} }, /* @__PURE__ */ React.createElement("button", { onClick: () => setShowFilters(!showFilters), className: `inline-flex items-center px-3 py-2 border text-sm font-medium rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-web ${showFilters || Object.keys(filters).length > 0 ? "border-green-web text-green-web bg-green-50 hover:bg-green-100" : "border-gray-300 text-gray-700 bg-white hover:bg-gray-50"}`, __self: this, __source: {
|
|
764
803
|
fileName: _jsxFileName,
|
|
765
|
-
lineNumber:
|
|
804
|
+
lineNumber: 917,
|
|
766
805
|
columnNumber: 9
|
|
767
806
|
} }, /* @__PURE__ */ React.createElement("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", __self: this, __source: {
|
|
768
807
|
fileName: _jsxFileName,
|
|
769
|
-
lineNumber:
|
|
808
|
+
lineNumber: 925,
|
|
770
809
|
columnNumber: 11
|
|
771
810
|
} }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z", __self: this, __source: {
|
|
772
811
|
fileName: _jsxFileName,
|
|
773
|
-
lineNumber:
|
|
812
|
+
lineNumber: 926,
|
|
774
813
|
columnNumber: 13
|
|
775
814
|
} })), "Filters", Object.keys(filters).length > 0 && /* @__PURE__ */ React.createElement("span", { className: "ml-1 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-white bg-green-web rounded-full", __self: this, __source: {
|
|
776
815
|
fileName: _jsxFileName,
|
|
777
|
-
lineNumber:
|
|
816
|
+
lineNumber: 935,
|
|
778
817
|
columnNumber: 13
|
|
779
818
|
} }, Object.keys(filters).length)), columnSelector, /* @__PURE__ */ React.createElement(Link, { to: createLink, className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-600", __self: this, __source: {
|
|
780
819
|
fileName: _jsxFileName,
|
|
781
|
-
lineNumber:
|
|
820
|
+
lineNumber: 941,
|
|
782
821
|
columnNumber: 9
|
|
783
822
|
} }, "Create New")));
|
|
784
823
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, filterPanel, searchFilter, /* @__PURE__ */ React.createElement(DataTable, { data: items, path: createLink.replace("/create", ""), fields: visibleColumns.length > 0 ? visibleColumns : fieldNames, pagination, setSkip: (skip2) => dispatch({
|
|
@@ -786,7 +825,7 @@ function AdminDataListPage({
|
|
|
786
825
|
payload: skip2
|
|
787
826
|
}), sort: state.sort, setSort: setSortSafely, __self: this, __source: {
|
|
788
827
|
fileName: _jsxFileName,
|
|
789
|
-
lineNumber:
|
|
828
|
+
lineNumber: 955,
|
|
790
829
|
columnNumber: 7
|
|
791
830
|
} }));
|
|
792
831
|
}
|
|
@@ -795,7 +834,7 @@ function AdminDataErrorBoundary({
|
|
|
795
834
|
}) {
|
|
796
835
|
return /* @__PURE__ */ React.createElement(ErrorBoundary, { error, __self: this, __source: {
|
|
797
836
|
fileName: _jsxFileName,
|
|
798
|
-
lineNumber:
|
|
837
|
+
lineNumber: 969,
|
|
799
838
|
columnNumber: 10
|
|
800
839
|
} });
|
|
801
840
|
}
|
|
@@ -17,7 +17,7 @@ export declare function getMutationName(model: DatabaseModel, operation: 'create
|
|
|
17
17
|
/**
|
|
18
18
|
* Build form fields for a model and operation
|
|
19
19
|
*/
|
|
20
|
-
export declare function buildFormFields(sdk: any, model: DatabaseModel, operation: 'create' | 'update', currentItem?: any, isSubmitting?: boolean): FormField[];
|
|
20
|
+
export declare function buildFormFields(sdk: any, model: DatabaseModel, operation: 'create' | 'update', currentItem?: any, isSubmitting?: boolean, basePath?: string, databaseModels?: DatabaseModel[]): FormField[];
|
|
21
21
|
/**
|
|
22
22
|
* Clean form input data for GraphQL mutations
|
|
23
23
|
* Removes Apollo metadata and system fields
|