@nestledjs/data-browser 0.1.2 → 0.1.4
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.d.ts +15 -0
- package/index.js +64 -0
- package/lib/admin-data.d.ts +2 -0
- package/lib/components/filters/DateRangeFilter.d.ts +7 -0
- package/lib/components/filters/DateRangeFilter.js +105 -0
- package/lib/components/filters/NumberRangeFilter.d.ts +8 -0
- package/lib/components/filters/NumberRangeFilter.js +115 -0
- package/lib/components/filters/RelationComponents.d.ts +32 -0
- package/lib/components/filters/RelationComponents.js +265 -0
- package/lib/components/filters/RelationFilterField.d.ts +8 -0
- package/lib/components/filters/RelationFilterField.js +116 -0
- package/lib/components/filters/index.d.ts +4 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/components/shared/AdminBreadcrumbs.d.ts +13 -0
- package/lib/components/shared/AdminBreadcrumbs.js +103 -0
- package/lib/components/shared/AdminErrorStates.d.ts +30 -0
- package/lib/components/shared/AdminErrorStates.js +214 -0
- package/lib/components/shared/AdminStatusDisplay.d.ts +21 -0
- package/lib/components/shared/AdminStatusDisplay.js +205 -0
- package/lib/components/shared/index.d.ts +3 -0
- package/lib/context/AdminDataContext.d.ts +47 -0
- package/lib/context/AdminDataContext.js +28 -0
- package/lib/hooks/useAdminList.d.ts +5 -0
- package/lib/hooks/useAdminList.js +41 -0
- package/lib/hooks/useClickOutside.d.ts +2 -0
- package/lib/hooks/useClickOutside.js +13 -0
- package/lib/hooks/useDebounce.d.ts +1 -0
- package/lib/hooks/useDebounce.js +13 -0
- package/lib/hooks/useRelationData.d.ts +7 -0
- package/lib/hooks/useRelationData.js +64 -0
- package/lib/layouts/AdminDataLayout.d.ts +5 -0
- package/lib/layouts/AdminDataLayout.js +315 -0
- package/lib/pages/AdminDataCreatePage.d.ts +4 -0
- package/lib/pages/AdminDataCreatePage.js +487 -0
- package/lib/pages/AdminDataEditPage.d.ts +4 -0
- package/lib/pages/AdminDataEditPage.js +903 -0
- package/lib/pages/AdminDataIndexPage.d.ts +4 -0
- package/lib/pages/AdminDataIndexPage.js +91 -0
- package/lib/pages/AdminDataListPage.d.ts +9 -0
- package/lib/pages/AdminDataListPage.js +1218 -0
- package/lib/types/index.d.ts +60 -0
- package/lib/types/index.js +16 -0
- package/lib/utils/graphql-utils.d.ts +25 -0
- package/lib/utils/graphql-utils.js +265 -0
- package/lib/utils/secure-storage.d.ts +50 -0
- package/lib/utils/secure-storage.js +145 -0
- package/lib/utils/string-utils.d.ts +6 -0
- package/lib/utils/string-utils.js +27 -0
- package/package.json +8 -2
- package/.babelrc +0 -12
- package/LICENSE +0 -21
- package/eslint.config.mjs +0 -12
- package/project.json +0 -35
- package/src/index.ts +0 -28
- package/src/lib/admin-data.spec.tsx +0 -10
- package/src/lib/admin-data.tsx +0 -9
- package/src/lib/components/filters/DateRangeFilter.tsx +0 -88
- package/src/lib/components/filters/NumberRangeFilter.tsx +0 -111
- package/src/lib/components/filters/RelationComponents.tsx +0 -176
- package/src/lib/components/filters/RelationFilterField.tsx +0 -106
- package/src/lib/components/filters/index.ts +0 -5
- package/src/lib/components/index.ts +0 -2
- package/src/lib/components/shared/AdminBreadcrumbs.tsx +0 -88
- package/src/lib/components/shared/AdminErrorStates.tsx +0 -180
- package/src/lib/components/shared/AdminStatusDisplay.tsx +0 -292
- package/src/lib/components/shared/index.ts +0 -3
- package/src/lib/context/AdminDataContext.tsx +0 -74
- package/src/lib/hooks/useAdminList.ts +0 -42
- package/src/lib/hooks/useClickOutside.ts +0 -21
- package/src/lib/hooks/useDebounce.ts +0 -16
- package/src/lib/hooks/useRelationData.ts +0 -114
- package/src/lib/layouts/AdminDataLayout.tsx +0 -251
- package/src/lib/pages/AdminDataCreatePage.tsx +0 -415
- package/src/lib/pages/AdminDataEditPage.tsx +0 -777
- package/src/lib/pages/AdminDataIndexPage.tsx +0 -50
- package/src/lib/pages/AdminDataListPage.tsx +0 -921
- package/src/lib/types/index.ts +0 -51
- package/src/lib/utils/graphql-utils.ts +0 -538
- package/src/lib/utils/secure-storage.ts +0 -305
- package/src/lib/utils/string-utils.ts +0 -53
- package/tsconfig.json +0 -17
- package/tsconfig.lib.json +0 -20
- package/vite.config.ts +0 -35
package/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './lib/context/AdminDataContext';
|
|
2
|
+
export * from './lib/pages/AdminDataCreatePage';
|
|
3
|
+
export * from './lib/pages/AdminDataEditPage';
|
|
4
|
+
export * from './lib/pages/AdminDataListPage';
|
|
5
|
+
export * from './lib/pages/AdminDataIndexPage';
|
|
6
|
+
export * from './lib/layouts/AdminDataLayout';
|
|
7
|
+
export * from './lib/types';
|
|
8
|
+
export * from './lib/hooks/useAdminList';
|
|
9
|
+
export * from './lib/hooks/useClickOutside';
|
|
10
|
+
export * from './lib/hooks/useDebounce';
|
|
11
|
+
export * from './lib/hooks/useRelationData';
|
|
12
|
+
export * from './lib/components';
|
|
13
|
+
export * from './lib/utils/graphql-utils';
|
|
14
|
+
export * from './lib/utils/secure-storage';
|
|
15
|
+
export * from './lib/utils/string-utils';
|
package/index.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AdminDataProvider as r, useAdminDataContext as o } from "./lib/context/AdminDataContext.js";
|
|
2
|
+
import { AdminDataCreateErrorBoundary as m, AdminDataCreatePage as i } from "./lib/pages/AdminDataCreatePage.js";
|
|
3
|
+
import { AdminDataEditErrorBoundary as d, AdminDataEditPage as p } from "./lib/pages/AdminDataEditPage.js";
|
|
4
|
+
import { AdminDataErrorBoundary as u, AdminDataListPage as x } from "./lib/pages/AdminDataListPage.js";
|
|
5
|
+
import { AdminDataIndexPage as s } from "./lib/pages/AdminDataIndexPage.js";
|
|
6
|
+
import { AdminDataLayout as D } from "./lib/layouts/AdminDataLayout.js";
|
|
7
|
+
import { initialState as c } from "./lib/types/index.js";
|
|
8
|
+
import { useAdminList as F } from "./lib/hooks/useAdminList.js";
|
|
9
|
+
import { useClickOutside as y } from "./lib/hooks/useClickOutside.js";
|
|
10
|
+
import { useDebounce as L } from "./lib/hooks/useDebounce.js";
|
|
11
|
+
import { useRelationData as C } from "./lib/hooks/useRelationData.js";
|
|
12
|
+
import { DateRangeFilter as B } from "./lib/components/filters/DateRangeFilter.js";
|
|
13
|
+
import { NumberRangeFilter as P } from "./lib/components/filters/NumberRangeFilter.js";
|
|
14
|
+
import { RelationDropdownButton as k, RelationDropdownContent as w, RelationItem as M, RelationItemList as v, RelationSearchInput as z } from "./lib/components/filters/RelationComponents.js";
|
|
15
|
+
import { RelationFilterField as U } from "./lib/components/filters/RelationFilterField.js";
|
|
16
|
+
import { AdminBreadcrumbs as j } from "./lib/components/shared/AdminBreadcrumbs.js";
|
|
17
|
+
import { AdminEmptyState as G, AdminErrorState as H, AdminLoadingState as J } from "./lib/components/shared/AdminErrorStates.js";
|
|
18
|
+
import { AdminStatusDisplay as Q, AdminUserStatus as T } from "./lib/components/shared/AdminStatusDisplay.js";
|
|
19
|
+
import { buildFormFields as X, cleanFormInput as Y, getAdminDocuments as Z, getMutationName as _ } from "./lib/utils/graphql-utils.js";
|
|
20
|
+
import { AdminLocalStorage as ee, SecureAdminLocalStorage as te } from "./lib/utils/secure-storage.js";
|
|
21
|
+
import { formatFieldName as oe, getItemDisplayName as ae, getSmartSearchFields as me, kebabCase as ie, normalizeModelNameForDocument as ne, spacedWords as de } from "./lib/utils/string-utils.js";
|
|
22
|
+
export {
|
|
23
|
+
j as AdminBreadcrumbs,
|
|
24
|
+
m as AdminDataCreateErrorBoundary,
|
|
25
|
+
i as AdminDataCreatePage,
|
|
26
|
+
d as AdminDataEditErrorBoundary,
|
|
27
|
+
p as AdminDataEditPage,
|
|
28
|
+
u as AdminDataErrorBoundary,
|
|
29
|
+
s as AdminDataIndexPage,
|
|
30
|
+
D as AdminDataLayout,
|
|
31
|
+
x as AdminDataListPage,
|
|
32
|
+
r as AdminDataProvider,
|
|
33
|
+
G as AdminEmptyState,
|
|
34
|
+
H as AdminErrorState,
|
|
35
|
+
J as AdminLoadingState,
|
|
36
|
+
ee as AdminLocalStorage,
|
|
37
|
+
Q as AdminStatusDisplay,
|
|
38
|
+
T as AdminUserStatus,
|
|
39
|
+
B as DateRangeFilter,
|
|
40
|
+
P as NumberRangeFilter,
|
|
41
|
+
k as RelationDropdownButton,
|
|
42
|
+
w as RelationDropdownContent,
|
|
43
|
+
U as RelationFilterField,
|
|
44
|
+
M as RelationItem,
|
|
45
|
+
v as RelationItemList,
|
|
46
|
+
z as RelationSearchInput,
|
|
47
|
+
te as SecureAdminLocalStorage,
|
|
48
|
+
X as buildFormFields,
|
|
49
|
+
Y as cleanFormInput,
|
|
50
|
+
oe as formatFieldName,
|
|
51
|
+
Z as getAdminDocuments,
|
|
52
|
+
ae as getItemDisplayName,
|
|
53
|
+
_ as getMutationName,
|
|
54
|
+
me as getSmartSearchFields,
|
|
55
|
+
c as initialState,
|
|
56
|
+
ie as kebabCase,
|
|
57
|
+
ne as normalizeModelNameForDocument,
|
|
58
|
+
de as spacedWords,
|
|
59
|
+
o as useAdminDataContext,
|
|
60
|
+
F as useAdminList,
|
|
61
|
+
y as useClickOutside,
|
|
62
|
+
L as useDebounce,
|
|
63
|
+
C as useRelationData
|
|
64
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface DateRangeFilterProps {
|
|
2
|
+
fieldName: string;
|
|
3
|
+
currentValue: any;
|
|
4
|
+
onChange: (value: any) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function DateRangeFilter({ fieldName, currentValue, onChange }: DateRangeFilterProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsxDEV as s } from "react/jsx-dev-runtime";
|
|
2
|
+
import { formatFieldName as c } from "../../utils/string-utils.js";
|
|
3
|
+
function u({
|
|
4
|
+
fieldName: o,
|
|
5
|
+
currentValue: t,
|
|
6
|
+
onChange: n
|
|
7
|
+
}) {
|
|
8
|
+
const i = t != null && t.gte ? new Date(t.gte).toISOString().split("T")[0] : "", a = t != null && t.lte ? new Date(t.lte).toISOString().split("T")[0] : "", m = (l) => {
|
|
9
|
+
const e = { ...t };
|
|
10
|
+
l ? e.gte = new Date(l).toISOString() : delete e.gte, !e.gte && !e.lte ? n(void 0) : n(e);
|
|
11
|
+
}, d = (l) => {
|
|
12
|
+
const e = { ...t };
|
|
13
|
+
if (l) {
|
|
14
|
+
const r = new Date(l);
|
|
15
|
+
r.setHours(23, 59, 59, 999), e.lte = r.toISOString();
|
|
16
|
+
} else
|
|
17
|
+
delete e.lte;
|
|
18
|
+
!e.gte && !e.lte ? n(void 0) : n(e);
|
|
19
|
+
};
|
|
20
|
+
return /* @__PURE__ */ s("div", { className: "space-y-1", children: [
|
|
21
|
+
/* @__PURE__ */ s("label", { className: "block text-sm font-medium text-gray-700", children: c(o) }, void 0, !1, {
|
|
22
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
23
|
+
lineNumber: 56,
|
|
24
|
+
columnNumber: 7
|
|
25
|
+
}, this),
|
|
26
|
+
/* @__PURE__ */ s("div", { className: "grid grid-cols-2 gap-2", children: [
|
|
27
|
+
/* @__PURE__ */ s("div", { children: [
|
|
28
|
+
/* @__PURE__ */ s("label", { className: "block text-xs text-gray-500 mb-1", children: "From" }, void 0, !1, {
|
|
29
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
30
|
+
lineNumber: 61,
|
|
31
|
+
columnNumber: 11
|
|
32
|
+
}, this),
|
|
33
|
+
/* @__PURE__ */ s(
|
|
34
|
+
"input",
|
|
35
|
+
{
|
|
36
|
+
type: "date",
|
|
37
|
+
value: i,
|
|
38
|
+
onChange: (l) => m(l.target.value),
|
|
39
|
+
className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
|
|
40
|
+
},
|
|
41
|
+
void 0,
|
|
42
|
+
!1,
|
|
43
|
+
{
|
|
44
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
45
|
+
lineNumber: 62,
|
|
46
|
+
columnNumber: 11
|
|
47
|
+
},
|
|
48
|
+
this
|
|
49
|
+
)
|
|
50
|
+
] }, void 0, !0, {
|
|
51
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
52
|
+
lineNumber: 60,
|
|
53
|
+
columnNumber: 9
|
|
54
|
+
}, this),
|
|
55
|
+
/* @__PURE__ */ s("div", { children: [
|
|
56
|
+
/* @__PURE__ */ s("label", { className: "block text-xs text-gray-500 mb-1", children: "To" }, void 0, !1, {
|
|
57
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
58
|
+
lineNumber: 70,
|
|
59
|
+
columnNumber: 11
|
|
60
|
+
}, this),
|
|
61
|
+
/* @__PURE__ */ s(
|
|
62
|
+
"input",
|
|
63
|
+
{
|
|
64
|
+
type: "date",
|
|
65
|
+
value: a,
|
|
66
|
+
onChange: (l) => d(l.target.value),
|
|
67
|
+
className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
|
|
68
|
+
},
|
|
69
|
+
void 0,
|
|
70
|
+
!1,
|
|
71
|
+
{
|
|
72
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
73
|
+
lineNumber: 71,
|
|
74
|
+
columnNumber: 11
|
|
75
|
+
},
|
|
76
|
+
this
|
|
77
|
+
)
|
|
78
|
+
] }, void 0, !0, {
|
|
79
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
80
|
+
lineNumber: 69,
|
|
81
|
+
columnNumber: 9
|
|
82
|
+
}, this)
|
|
83
|
+
] }, void 0, !0, {
|
|
84
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
85
|
+
lineNumber: 59,
|
|
86
|
+
columnNumber: 7
|
|
87
|
+
}, this),
|
|
88
|
+
(i || a) && /* @__PURE__ */ s("div", { className: "text-xs text-gray-500", children: [
|
|
89
|
+
i && a && `${i} to ${a}`,
|
|
90
|
+
i && !a && `From ${i}`,
|
|
91
|
+
!i && a && `Until ${a}`
|
|
92
|
+
] }, void 0, !0, {
|
|
93
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
94
|
+
lineNumber: 80,
|
|
95
|
+
columnNumber: 9
|
|
96
|
+
}, this)
|
|
97
|
+
] }, void 0, !0, {
|
|
98
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/DateRangeFilter.tsx",
|
|
99
|
+
lineNumber: 55,
|
|
100
|
+
columnNumber: 5
|
|
101
|
+
}, this);
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
u as DateRangeFilter
|
|
105
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface NumberRangeFilterProps {
|
|
2
|
+
fieldName: string;
|
|
3
|
+
fieldType: string;
|
|
4
|
+
currentValue: any;
|
|
5
|
+
onChange: (value: any) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function NumberRangeFilter({ fieldName, fieldType, currentValue, onChange }: Readonly<NumberRangeFilterProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsxDEV as i } from "react/jsx-dev-runtime";
|
|
2
|
+
import { formatFieldName as N } from "../../utils/string-utils.js";
|
|
3
|
+
function p({
|
|
4
|
+
fieldName: b,
|
|
5
|
+
fieldType: a,
|
|
6
|
+
currentValue: s,
|
|
7
|
+
onChange: m
|
|
8
|
+
}) {
|
|
9
|
+
const l = (s == null ? void 0 : s.gte) !== void 0 ? s.gte.toString() : "", n = (s == null ? void 0 : s.lte) !== void 0 ? s.lte.toString() : "", o = (t) => {
|
|
10
|
+
if (t) {
|
|
11
|
+
if (a === "int" || a === "bigint") {
|
|
12
|
+
const e = parseInt(t, 10);
|
|
13
|
+
return isNaN(e) ? void 0 : e;
|
|
14
|
+
} else if (a === "float" || a === "decimal") {
|
|
15
|
+
const e = parseFloat(t);
|
|
16
|
+
return isNaN(e) ? void 0 : e;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}, c = (t) => {
|
|
20
|
+
const e = { ...s }, r = o(t);
|
|
21
|
+
r !== void 0 ? e.gte = r : delete e.gte, e.gte === void 0 && e.lte === void 0 ? m(void 0) : m(e);
|
|
22
|
+
}, u = (t) => {
|
|
23
|
+
const e = { ...s }, r = o(t);
|
|
24
|
+
r !== void 0 ? e.lte = r : delete e.lte, e.gte === void 0 && e.lte === void 0 ? m(void 0) : m(e);
|
|
25
|
+
}, d = a === "int" || a === "bigint" ? "1" : "any";
|
|
26
|
+
return /* @__PURE__ */ i("div", { className: "space-y-1", children: [
|
|
27
|
+
/* @__PURE__ */ i("label", { className: "block text-sm font-medium text-gray-700", children: N(b) }, void 0, !1, {
|
|
28
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
29
|
+
lineNumber: 75,
|
|
30
|
+
columnNumber: 7
|
|
31
|
+
}, this),
|
|
32
|
+
/* @__PURE__ */ i("div", { className: "grid grid-cols-2 gap-2", children: [
|
|
33
|
+
/* @__PURE__ */ i("div", { children: [
|
|
34
|
+
/* @__PURE__ */ i("label", { className: "block text-xs text-gray-500 mb-1", children: "Min" }, void 0, !1, {
|
|
35
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
36
|
+
lineNumber: 80,
|
|
37
|
+
columnNumber: 11
|
|
38
|
+
}, this),
|
|
39
|
+
/* @__PURE__ */ i(
|
|
40
|
+
"input",
|
|
41
|
+
{
|
|
42
|
+
type: "number",
|
|
43
|
+
step: d,
|
|
44
|
+
value: l,
|
|
45
|
+
onChange: (t) => c(t.target.value),
|
|
46
|
+
placeholder: "No minimum",
|
|
47
|
+
className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
|
|
48
|
+
},
|
|
49
|
+
void 0,
|
|
50
|
+
!1,
|
|
51
|
+
{
|
|
52
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
53
|
+
lineNumber: 81,
|
|
54
|
+
columnNumber: 11
|
|
55
|
+
},
|
|
56
|
+
this
|
|
57
|
+
)
|
|
58
|
+
] }, void 0, !0, {
|
|
59
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
60
|
+
lineNumber: 79,
|
|
61
|
+
columnNumber: 9
|
|
62
|
+
}, this),
|
|
63
|
+
/* @__PURE__ */ i("div", { children: [
|
|
64
|
+
/* @__PURE__ */ i("label", { className: "block text-xs text-gray-500 mb-1", children: "Max" }, void 0, !1, {
|
|
65
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
66
|
+
lineNumber: 91,
|
|
67
|
+
columnNumber: 11
|
|
68
|
+
}, this),
|
|
69
|
+
/* @__PURE__ */ i(
|
|
70
|
+
"input",
|
|
71
|
+
{
|
|
72
|
+
type: "number",
|
|
73
|
+
step: d,
|
|
74
|
+
value: n,
|
|
75
|
+
onChange: (t) => u(t.target.value),
|
|
76
|
+
placeholder: "No maximum",
|
|
77
|
+
className: "w-full px-2 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-green-web focus:border-green-web"
|
|
78
|
+
},
|
|
79
|
+
void 0,
|
|
80
|
+
!1,
|
|
81
|
+
{
|
|
82
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
83
|
+
lineNumber: 92,
|
|
84
|
+
columnNumber: 11
|
|
85
|
+
},
|
|
86
|
+
this
|
|
87
|
+
)
|
|
88
|
+
] }, void 0, !0, {
|
|
89
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
90
|
+
lineNumber: 90,
|
|
91
|
+
columnNumber: 9
|
|
92
|
+
}, this)
|
|
93
|
+
] }, void 0, !0, {
|
|
94
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
95
|
+
lineNumber: 78,
|
|
96
|
+
columnNumber: 7
|
|
97
|
+
}, this),
|
|
98
|
+
(l || n) && /* @__PURE__ */ i("div", { className: "text-xs text-gray-500", children: [
|
|
99
|
+
l && n && `${l} to ${n}`,
|
|
100
|
+
l && !n && `≥ ${l}`,
|
|
101
|
+
!l && n && `≤ ${n}`
|
|
102
|
+
] }, void 0, !0, {
|
|
103
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
104
|
+
lineNumber: 103,
|
|
105
|
+
columnNumber: 9
|
|
106
|
+
}, this)
|
|
107
|
+
] }, void 0, !0, {
|
|
108
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/NumberRangeFilter.tsx",
|
|
109
|
+
lineNumber: 74,
|
|
110
|
+
columnNumber: 5
|
|
111
|
+
}, this);
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
p as NumberRangeFilter
|
|
115
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare function RelationDropdownButton({ currentItem, relatedModelName, isOpen, onClick }: Readonly<{
|
|
2
|
+
currentItem: any;
|
|
3
|
+
relatedModelName: string;
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function RelationSearchInput({ searchTerm, onSearchChange, relatedModelName }: Readonly<{
|
|
8
|
+
searchTerm: string;
|
|
9
|
+
onSearchChange: (value: string) => void;
|
|
10
|
+
relatedModelName: string;
|
|
11
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function RelationItem({ item, onSelect }: {
|
|
13
|
+
item: any;
|
|
14
|
+
onSelect: (item: any) => void;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function RelationItemList({ items, loading, error, onSelect, onClear }: Readonly<{
|
|
17
|
+
items: any[];
|
|
18
|
+
loading: boolean;
|
|
19
|
+
error?: any;
|
|
20
|
+
onSelect: (item: any) => void;
|
|
21
|
+
onClear: () => void;
|
|
22
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function RelationDropdownContent({ searchTerm, onSearchChange, relatedModelName, items, loading, error, onSelect, onClear }: {
|
|
24
|
+
searchTerm: string;
|
|
25
|
+
onSearchChange: (value: string) => void;
|
|
26
|
+
relatedModelName: string;
|
|
27
|
+
items: any[];
|
|
28
|
+
loading: boolean;
|
|
29
|
+
error?: any;
|
|
30
|
+
onSelect: (item: any) => void;
|
|
31
|
+
onClear: () => void;
|
|
32
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { jsxDEV as e } from "react/jsx-dev-runtime";
|
|
2
|
+
import { getItemDisplayName as a } from "../../utils/string-utils.js";
|
|
3
|
+
function f({
|
|
4
|
+
currentItem: t,
|
|
5
|
+
relatedModelName: s,
|
|
6
|
+
isOpen: n,
|
|
7
|
+
onClick: l
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ e(
|
|
10
|
+
"button",
|
|
11
|
+
{
|
|
12
|
+
type: "button",
|
|
13
|
+
onClick: l,
|
|
14
|
+
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 text-left bg-white flex items-center justify-between",
|
|
15
|
+
children: [
|
|
16
|
+
/* @__PURE__ */ e("span", { className: t ? "text-gray-900" : "text-gray-500", children: t ? a(t) : `Select ${s.toLowerCase()}...` }, void 0, !1, {
|
|
17
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
18
|
+
lineNumber: 21,
|
|
19
|
+
columnNumber: 11
|
|
20
|
+
}, this),
|
|
21
|
+
/* @__PURE__ */ e(
|
|
22
|
+
"svg",
|
|
23
|
+
{
|
|
24
|
+
className: `w-4 h-4 text-gray-400 transition-transform ${n ? "rotate-180" : ""}`,
|
|
25
|
+
fill: "none",
|
|
26
|
+
stroke: "currentColor",
|
|
27
|
+
viewBox: "0 0 24 24",
|
|
28
|
+
children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }, void 0, !1, {
|
|
29
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
30
|
+
lineNumber: 30,
|
|
31
|
+
columnNumber: 13
|
|
32
|
+
}, this)
|
|
33
|
+
},
|
|
34
|
+
void 0,
|
|
35
|
+
!1,
|
|
36
|
+
{
|
|
37
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
38
|
+
lineNumber: 24,
|
|
39
|
+
columnNumber: 7
|
|
40
|
+
},
|
|
41
|
+
this
|
|
42
|
+
)
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
void 0,
|
|
46
|
+
!0,
|
|
47
|
+
{
|
|
48
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
49
|
+
lineNumber: 16,
|
|
50
|
+
columnNumber: 9
|
|
51
|
+
},
|
|
52
|
+
this
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
function d({
|
|
56
|
+
searchTerm: t,
|
|
57
|
+
onSearchChange: s,
|
|
58
|
+
relatedModelName: n
|
|
59
|
+
}) {
|
|
60
|
+
return /* @__PURE__ */ e("div", { className: "p-2", children: /* @__PURE__ */ e(
|
|
61
|
+
"input",
|
|
62
|
+
{
|
|
63
|
+
type: "text",
|
|
64
|
+
placeholder: `Search ${n.toLowerCase()}...`,
|
|
65
|
+
value: t,
|
|
66
|
+
onChange: (l) => s(l.target.value),
|
|
67
|
+
className: "w-full px-2 py-1 text-sm border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-green-web",
|
|
68
|
+
autoFocus: !0
|
|
69
|
+
},
|
|
70
|
+
void 0,
|
|
71
|
+
!1,
|
|
72
|
+
{
|
|
73
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
74
|
+
lineNumber: 48,
|
|
75
|
+
columnNumber: 15
|
|
76
|
+
},
|
|
77
|
+
this
|
|
78
|
+
) }, void 0, !1, {
|
|
79
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
80
|
+
lineNumber: 47,
|
|
81
|
+
columnNumber: 13
|
|
82
|
+
}, this);
|
|
83
|
+
}
|
|
84
|
+
function c({
|
|
85
|
+
item: t,
|
|
86
|
+
onSelect: s
|
|
87
|
+
}) {
|
|
88
|
+
return /* @__PURE__ */ e(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: () => s(t),
|
|
93
|
+
className: "w-full px-3 py-2 text-left text-sm hover:bg-gray-100 focus:bg-gray-100 transition-colors",
|
|
94
|
+
children: a(t)
|
|
95
|
+
},
|
|
96
|
+
void 0,
|
|
97
|
+
!1,
|
|
98
|
+
{
|
|
99
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
100
|
+
lineNumber: 69,
|
|
101
|
+
columnNumber: 5
|
|
102
|
+
},
|
|
103
|
+
this
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
function u({
|
|
107
|
+
items: t,
|
|
108
|
+
loading: s,
|
|
109
|
+
error: n,
|
|
110
|
+
onSelect: l,
|
|
111
|
+
onClear: o
|
|
112
|
+
}) {
|
|
113
|
+
return /* @__PURE__ */ e("div", { className: "max-h-48 overflow-y-auto", children: [
|
|
114
|
+
/* @__PURE__ */ e(
|
|
115
|
+
"button",
|
|
116
|
+
{
|
|
117
|
+
type: "button",
|
|
118
|
+
onClick: o,
|
|
119
|
+
className: "w-full px-3 py-2 text-left text-sm hover:bg-gray-100 text-gray-500 border-b border-gray-200",
|
|
120
|
+
children: "Clear selection"
|
|
121
|
+
},
|
|
122
|
+
void 0,
|
|
123
|
+
!1,
|
|
124
|
+
{
|
|
125
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
126
|
+
lineNumber: 95,
|
|
127
|
+
columnNumber: 15
|
|
128
|
+
},
|
|
129
|
+
this
|
|
130
|
+
),
|
|
131
|
+
n ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-red-600", children: [
|
|
132
|
+
/* @__PURE__ */ e("div", { className: "flex items-center", children: [
|
|
133
|
+
/* @__PURE__ */ e("svg", { className: "w-4 h-4 mr-2", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }, void 0, !1, {
|
|
134
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
135
|
+
lineNumber: 107,
|
|
136
|
+
columnNumber: 15
|
|
137
|
+
}, this) }, void 0, !1, {
|
|
138
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
139
|
+
lineNumber: 106,
|
|
140
|
+
columnNumber: 13
|
|
141
|
+
}, this),
|
|
142
|
+
"Failed to load options"
|
|
143
|
+
] }, void 0, !0, {
|
|
144
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
145
|
+
lineNumber: 105,
|
|
146
|
+
columnNumber: 11
|
|
147
|
+
}, this),
|
|
148
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-gray-500 mt-1", children: n.networkError ? "Network error" : "Please try again" }, void 0, !1, {
|
|
149
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
150
|
+
lineNumber: 111,
|
|
151
|
+
columnNumber: 11
|
|
152
|
+
}, this)
|
|
153
|
+
] }, void 0, !0, {
|
|
154
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
155
|
+
lineNumber: 104,
|
|
156
|
+
columnNumber: 9
|
|
157
|
+
}, this) : s ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-gray-500", children: /* @__PURE__ */ e("div", { className: "flex items-center", children: [
|
|
158
|
+
/* @__PURE__ */ e("svg", { className: "animate-spin -ml-1 mr-2 h-4 w-4 text-gray-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
|
|
159
|
+
/* @__PURE__ */ e("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }, void 0, !1, {
|
|
160
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
161
|
+
lineNumber: 119,
|
|
162
|
+
columnNumber: 15
|
|
163
|
+
}, this),
|
|
164
|
+
/* @__PURE__ */ e("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" }, void 0, !1, {
|
|
165
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
166
|
+
lineNumber: 120,
|
|
167
|
+
columnNumber: 15
|
|
168
|
+
}, this)
|
|
169
|
+
] }, void 0, !0, {
|
|
170
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
171
|
+
lineNumber: 118,
|
|
172
|
+
columnNumber: 13
|
|
173
|
+
}, this),
|
|
174
|
+
"Loading..."
|
|
175
|
+
] }, void 0, !0, {
|
|
176
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
177
|
+
lineNumber: 117,
|
|
178
|
+
columnNumber: 11
|
|
179
|
+
}, this) }, void 0, !1, {
|
|
180
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
181
|
+
lineNumber: 116,
|
|
182
|
+
columnNumber: 9
|
|
183
|
+
}, this) : t.length === 0 ? /* @__PURE__ */ e("div", { className: "px-3 py-2 text-sm text-gray-500", children: "No items found" }, void 0, !1, {
|
|
184
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
185
|
+
lineNumber: 126,
|
|
186
|
+
columnNumber: 17
|
|
187
|
+
}, this) : t.map((i) => /* @__PURE__ */ e(
|
|
188
|
+
c,
|
|
189
|
+
{
|
|
190
|
+
item: i,
|
|
191
|
+
onSelect: l
|
|
192
|
+
},
|
|
193
|
+
i.id,
|
|
194
|
+
!1,
|
|
195
|
+
{
|
|
196
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
197
|
+
lineNumber: 129,
|
|
198
|
+
columnNumber: 11
|
|
199
|
+
},
|
|
200
|
+
this
|
|
201
|
+
))
|
|
202
|
+
] }, void 0, !0, {
|
|
203
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
204
|
+
lineNumber: 94,
|
|
205
|
+
columnNumber: 13
|
|
206
|
+
}, this);
|
|
207
|
+
}
|
|
208
|
+
function N({
|
|
209
|
+
searchTerm: t,
|
|
210
|
+
onSearchChange: s,
|
|
211
|
+
relatedModelName: n,
|
|
212
|
+
items: l,
|
|
213
|
+
loading: o,
|
|
214
|
+
error: i,
|
|
215
|
+
onSelect: r,
|
|
216
|
+
onClear: m
|
|
217
|
+
}) {
|
|
218
|
+
return /* @__PURE__ */ e("div", { className: "absolute z-10 w-full mt-1 bg-white border border-gray-300 rounded-md shadow-lg", children: [
|
|
219
|
+
/* @__PURE__ */ e(
|
|
220
|
+
d,
|
|
221
|
+
{
|
|
222
|
+
searchTerm: t,
|
|
223
|
+
onSearchChange: s,
|
|
224
|
+
relatedModelName: n
|
|
225
|
+
},
|
|
226
|
+
void 0,
|
|
227
|
+
!1,
|
|
228
|
+
{
|
|
229
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
230
|
+
lineNumber: 162,
|
|
231
|
+
columnNumber: 7
|
|
232
|
+
},
|
|
233
|
+
this
|
|
234
|
+
),
|
|
235
|
+
/* @__PURE__ */ e(
|
|
236
|
+
u,
|
|
237
|
+
{
|
|
238
|
+
items: l,
|
|
239
|
+
loading: o,
|
|
240
|
+
error: i,
|
|
241
|
+
onSelect: r,
|
|
242
|
+
onClear: m
|
|
243
|
+
},
|
|
244
|
+
void 0,
|
|
245
|
+
!1,
|
|
246
|
+
{
|
|
247
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
248
|
+
lineNumber: 167,
|
|
249
|
+
columnNumber: 7
|
|
250
|
+
},
|
|
251
|
+
this
|
|
252
|
+
)
|
|
253
|
+
] }, void 0, !0, {
|
|
254
|
+
fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/admin-data/src/lib/components/filters/RelationComponents.tsx",
|
|
255
|
+
lineNumber: 161,
|
|
256
|
+
columnNumber: 5
|
|
257
|
+
}, this);
|
|
258
|
+
}
|
|
259
|
+
export {
|
|
260
|
+
f as RelationDropdownButton,
|
|
261
|
+
N as RelationDropdownContent,
|
|
262
|
+
c as RelationItem,
|
|
263
|
+
u as RelationItemList,
|
|
264
|
+
d as RelationSearchInput
|
|
265
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface RelationFilterFieldProps {
|
|
2
|
+
fieldName: string;
|
|
3
|
+
relatedModelName: string;
|
|
4
|
+
currentValue: any;
|
|
5
|
+
onChange: (value: any) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function RelationFilterField({ fieldName, relatedModelName, currentValue, onChange }: Readonly<RelationFilterFieldProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|