@nestledjs/data-browser 0.1.17 → 0.1.18

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.
@@ -1,6 +1,6 @@
1
+ import { jsxDEV } from "react/jsx-dev-runtime";
1
2
  import { Link } from "react-router";
2
3
  import { useState, useEffect } from "react";
3
- var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx";
4
4
  const toKebabCase = (str) => {
5
5
  return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
6
6
  };
@@ -36,27 +36,72 @@ function RelationFieldWrapper({
36
36
  }
37
37
  }, [fieldName, currentValue, initialValue]);
38
38
  const showViewLink = !!(relationType && currentValue && currentValue !== "");
39
- return /* @__PURE__ */ React.createElement("div", { className: "relative", __self: this, __source: {
40
- fileName: _jsxFileName,
39
+ return /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [
40
+ children,
41
+ showViewLink && /* @__PURE__ */ jsxDEV("div", { className: "mt-1", children: /* @__PURE__ */ jsxDEV(
42
+ Link,
43
+ {
44
+ to: `${basePath}/${toKebabCase(relationType)}/${currentValue}`,
45
+ className: "inline-flex items-center text-xs text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 hover:underline",
46
+ children: [
47
+ /* @__PURE__ */ jsxDEV(
48
+ "svg",
49
+ {
50
+ className: "h-3 w-3 mr-1",
51
+ fill: "none",
52
+ stroke: "currentColor",
53
+ viewBox: "0 0 24 24",
54
+ xmlns: "http://www.w3.org/2000/svg",
55
+ children: /* @__PURE__ */ jsxDEV(
56
+ "path",
57
+ {
58
+ strokeLinecap: "round",
59
+ strokeLinejoin: "round",
60
+ strokeWidth: 2,
61
+ d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
62
+ },
63
+ void 0,
64
+ false,
65
+ {
66
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx",
67
+ lineNumber: 79,
68
+ columnNumber: 15
69
+ },
70
+ this
71
+ )
72
+ },
73
+ void 0,
74
+ false,
75
+ {
76
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx",
77
+ lineNumber: 72,
78
+ columnNumber: 13
79
+ },
80
+ this
81
+ ),
82
+ "View ",
83
+ relationType,
84
+ " record"
85
+ ]
86
+ },
87
+ void 0,
88
+ true,
89
+ {
90
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx",
91
+ lineNumber: 68,
92
+ columnNumber: 11
93
+ },
94
+ this
95
+ ) }, void 0, false, {
96
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx",
97
+ lineNumber: 67,
98
+ columnNumber: 9
99
+ }, this)
100
+ ] }, void 0, true, {
101
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/RelationFieldWrapper.tsx",
41
102
  lineNumber: 64,
42
103
  columnNumber: 5
43
- } }, children, showViewLink && /* @__PURE__ */ React.createElement("div", { className: "mt-1", __self: this, __source: {
44
- fileName: _jsxFileName,
45
- lineNumber: 67,
46
- columnNumber: 9
47
- } }, /* @__PURE__ */ React.createElement(Link, { to: `${basePath}/${toKebabCase(relationType)}/${currentValue}`, className: "inline-flex items-center text-xs text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 hover:underline", __self: this, __source: {
48
- fileName: _jsxFileName,
49
- lineNumber: 68,
50
- columnNumber: 11
51
- } }, /* @__PURE__ */ React.createElement("svg", { className: "h-3 w-3 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", __self: this, __source: {
52
- fileName: _jsxFileName,
53
- lineNumber: 72,
54
- columnNumber: 13
55
- } }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z", __self: this, __source: {
56
- fileName: _jsxFileName,
57
- lineNumber: 79,
58
- columnNumber: 15
59
- } })), "View ", relationType, " record")));
104
+ }, this);
60
105
  }
61
106
  export {
62
107
  RelationFieldWrapper
@@ -1,5 +1,5 @@
1
+ import { jsxDEV } from "react/jsx-dev-runtime";
1
2
  import { formatFieldName } from "../../utils/string-utils.js";
2
- var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx";
3
3
  function DateRangeFilter({
4
4
  fieldName,
5
5
  currentValue,
@@ -8,9 +8,7 @@ function DateRangeFilter({
8
8
  const fromDate = (currentValue == null ? void 0 : currentValue.gte) ? new Date(currentValue.gte).toISOString().split("T")[0] : "";
9
9
  const toDate = (currentValue == null ? void 0 : currentValue.lte) ? new Date(currentValue.lte).toISOString().split("T")[0] : "";
10
10
  const handleFromChange = (date) => {
11
- const newValue = {
12
- ...currentValue
13
- };
11
+ const newValue = { ...currentValue };
14
12
  if (date) {
15
13
  newValue.gte = new Date(date).toISOString();
16
14
  } else {
@@ -23,9 +21,7 @@ function DateRangeFilter({
23
21
  }
24
22
  };
25
23
  const handleToChange = (date) => {
26
- const newValue = {
27
- ...currentValue
28
- };
24
+ const newValue = { ...currentValue };
29
25
  if (date) {
30
26
  const endOfDay = new Date(date);
31
27
  endOfDay.setHours(23, 59, 59, 999);
@@ -39,47 +35,90 @@ function DateRangeFilter({
39
35
  onChange(newValue);
40
36
  }
41
37
  };
42
- return /* @__PURE__ */ React.createElement("div", { className: "space-y-1", __self: this, __source: {
43
- fileName: _jsxFileName,
38
+ return /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [
39
+ /* @__PURE__ */ jsxDEV("label", { className: "block text-sm font-medium text-gray-700", children: formatFieldName(fieldName) }, void 0, false, {
40
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
41
+ lineNumber: 56,
42
+ columnNumber: 7
43
+ }, this),
44
+ /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-2 gap-2", children: [
45
+ /* @__PURE__ */ jsxDEV("div", { children: [
46
+ /* @__PURE__ */ jsxDEV("label", { htmlFor: `${fieldName}-from`, className: "block text-xs text-gray-500 mb-1", children: "From" }, void 0, false, {
47
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
48
+ lineNumber: 61,
49
+ columnNumber: 11
50
+ }, this),
51
+ /* @__PURE__ */ jsxDEV(
52
+ "input",
53
+ {
54
+ id: `${fieldName}-from`,
55
+ type: "date",
56
+ value: fromDate,
57
+ onChange: (e) => handleFromChange(e.target.value),
58
+ 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"
59
+ },
60
+ void 0,
61
+ false,
62
+ {
63
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
64
+ lineNumber: 62,
65
+ columnNumber: 11
66
+ },
67
+ this
68
+ )
69
+ ] }, void 0, true, {
70
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
71
+ lineNumber: 60,
72
+ columnNumber: 9
73
+ }, this),
74
+ /* @__PURE__ */ jsxDEV("div", { children: [
75
+ /* @__PURE__ */ jsxDEV("label", { htmlFor: `${fieldName}-to`, className: "block text-xs text-gray-500 mb-1", children: "To" }, void 0, false, {
76
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
77
+ lineNumber: 71,
78
+ columnNumber: 11
79
+ }, this),
80
+ /* @__PURE__ */ jsxDEV(
81
+ "input",
82
+ {
83
+ id: `${fieldName}-to`,
84
+ type: "date",
85
+ value: toDate,
86
+ onChange: (e) => handleToChange(e.target.value),
87
+ 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"
88
+ },
89
+ void 0,
90
+ false,
91
+ {
92
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
93
+ lineNumber: 72,
94
+ columnNumber: 11
95
+ },
96
+ this
97
+ )
98
+ ] }, void 0, true, {
99
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
100
+ lineNumber: 70,
101
+ columnNumber: 9
102
+ }, this)
103
+ ] }, void 0, true, {
104
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
105
+ lineNumber: 59,
106
+ columnNumber: 7
107
+ }, this),
108
+ (fromDate || toDate) && /* @__PURE__ */ jsxDEV("div", { className: "text-xs text-gray-500", children: [
109
+ fromDate && toDate && `${fromDate} to ${toDate}`,
110
+ fromDate && !toDate && `From ${fromDate}`,
111
+ !fromDate && toDate && `Until ${toDate}`
112
+ ] }, void 0, true, {
113
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
114
+ lineNumber: 82,
115
+ columnNumber: 9
116
+ }, this)
117
+ ] }, void 0, true, {
118
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/DateRangeFilter.tsx",
44
119
  lineNumber: 55,
45
120
  columnNumber: 5
46
- } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
47
- fileName: _jsxFileName,
48
- lineNumber: 56,
49
- columnNumber: 7
50
- } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-2 gap-2", __self: this, __source: {
51
- fileName: _jsxFileName,
52
- lineNumber: 59,
53
- columnNumber: 7
54
- } }, /* @__PURE__ */ React.createElement("div", { __self: this, __source: {
55
- fileName: _jsxFileName,
56
- lineNumber: 60,
57
- columnNumber: 9
58
- } }, /* @__PURE__ */ React.createElement("label", { htmlFor: `${fieldName}-from`, className: "block text-xs text-gray-500 mb-1", __self: this, __source: {
59
- fileName: _jsxFileName,
60
- lineNumber: 61,
61
- columnNumber: 11
62
- } }, "From"), /* @__PURE__ */ React.createElement("input", { id: `${fieldName}-from`, type: "date", value: fromDate, onChange: (e) => handleFromChange(e.target.value), 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", __self: this, __source: {
63
- fileName: _jsxFileName,
64
- lineNumber: 62,
65
- columnNumber: 11
66
- } })), /* @__PURE__ */ React.createElement("div", { __self: this, __source: {
67
- fileName: _jsxFileName,
68
- lineNumber: 70,
69
- columnNumber: 9
70
- } }, /* @__PURE__ */ React.createElement("label", { htmlFor: `${fieldName}-to`, className: "block text-xs text-gray-500 mb-1", __self: this, __source: {
71
- fileName: _jsxFileName,
72
- lineNumber: 71,
73
- columnNumber: 11
74
- } }, "To"), /* @__PURE__ */ React.createElement("input", { id: `${fieldName}-to`, type: "date", value: toDate, onChange: (e) => handleToChange(e.target.value), 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", __self: this, __source: {
75
- fileName: _jsxFileName,
76
- lineNumber: 72,
77
- columnNumber: 11
78
- } }))), (fromDate || toDate) && /* @__PURE__ */ React.createElement("div", { className: "text-xs text-gray-500", __self: this, __source: {
79
- fileName: _jsxFileName,
80
- lineNumber: 82,
81
- columnNumber: 9
82
- } }, fromDate && toDate && `${fromDate} to ${toDate}`, fromDate && !toDate && `From ${fromDate}`, !fromDate && toDate && `Until ${toDate}`));
121
+ }, this);
83
122
  }
84
123
  export {
85
124
  DateRangeFilter
@@ -1,5 +1,5 @@
1
+ import { jsxDEV } from "react/jsx-dev-runtime";
1
2
  import { formatFieldName } from "../../utils/string-utils.js";
2
- var _jsxFileName = "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx";
3
3
  function NumberRangeFilter({
4
4
  fieldName,
5
5
  fieldType,
@@ -20,9 +20,7 @@ function NumberRangeFilter({
20
20
  return void 0;
21
21
  };
22
22
  const handleMinChange = (value) => {
23
- const newValue = {
24
- ...currentValue
25
- };
23
+ const newValue = { ...currentValue };
26
24
  const parsedValue = parseNumber(value);
27
25
  if (parsedValue === void 0) {
28
26
  delete newValue.gte;
@@ -36,9 +34,7 @@ function NumberRangeFilter({
36
34
  }
37
35
  };
38
36
  const handleMaxChange = (value) => {
39
- const newValue = {
40
- ...currentValue
41
- };
37
+ const newValue = { ...currentValue };
42
38
  const parsedValue = parseNumber(value);
43
39
  if (parsedValue === void 0) {
44
40
  delete newValue.lte;
@@ -52,47 +48,94 @@ function NumberRangeFilter({
52
48
  }
53
49
  };
54
50
  const step = fieldType === "int" || fieldType === "bigint" ? "1" : "any";
55
- return /* @__PURE__ */ React.createElement("div", { className: "space-y-1", __self: this, __source: {
56
- fileName: _jsxFileName,
51
+ return /* @__PURE__ */ jsxDEV("div", { className: "space-y-1", children: [
52
+ /* @__PURE__ */ jsxDEV("label", { className: "block text-sm font-medium text-gray-700", children: formatFieldName(fieldName) }, void 0, false, {
53
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
54
+ lineNumber: 75,
55
+ columnNumber: 7
56
+ }, this),
57
+ /* @__PURE__ */ jsxDEV("div", { className: "grid grid-cols-2 gap-2", children: [
58
+ /* @__PURE__ */ jsxDEV("div", { children: [
59
+ /* @__PURE__ */ jsxDEV("label", { htmlFor: `${fieldName}-min`, className: "block text-xs text-gray-500 mb-1", children: "Min" }, void 0, false, {
60
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
61
+ lineNumber: 80,
62
+ columnNumber: 11
63
+ }, this),
64
+ /* @__PURE__ */ jsxDEV(
65
+ "input",
66
+ {
67
+ id: `${fieldName}-min`,
68
+ type: "number",
69
+ step,
70
+ value: minValue,
71
+ onChange: (e) => handleMinChange(e.target.value),
72
+ placeholder: "No minimum",
73
+ 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"
74
+ },
75
+ void 0,
76
+ false,
77
+ {
78
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
79
+ lineNumber: 81,
80
+ columnNumber: 11
81
+ },
82
+ this
83
+ )
84
+ ] }, void 0, true, {
85
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
86
+ lineNumber: 79,
87
+ columnNumber: 9
88
+ }, this),
89
+ /* @__PURE__ */ jsxDEV("div", { children: [
90
+ /* @__PURE__ */ jsxDEV("label", { htmlFor: `${fieldName}-max`, className: "block text-xs text-gray-500 mb-1", children: "Max" }, void 0, false, {
91
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
92
+ lineNumber: 92,
93
+ columnNumber: 11
94
+ }, this),
95
+ /* @__PURE__ */ jsxDEV(
96
+ "input",
97
+ {
98
+ id: `${fieldName}-max`,
99
+ type: "number",
100
+ step,
101
+ value: maxValue,
102
+ onChange: (e) => handleMaxChange(e.target.value),
103
+ placeholder: "No maximum",
104
+ 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"
105
+ },
106
+ void 0,
107
+ false,
108
+ {
109
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
110
+ lineNumber: 93,
111
+ columnNumber: 11
112
+ },
113
+ this
114
+ )
115
+ ] }, void 0, true, {
116
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
117
+ lineNumber: 91,
118
+ columnNumber: 9
119
+ }, this)
120
+ ] }, void 0, true, {
121
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
122
+ lineNumber: 78,
123
+ columnNumber: 7
124
+ }, this),
125
+ (minValue || maxValue) && /* @__PURE__ */ jsxDEV("div", { className: "text-xs text-gray-500", children: [
126
+ minValue && maxValue && `${minValue} to ${maxValue}`,
127
+ minValue && !maxValue && `≥ ${minValue}`,
128
+ !minValue && maxValue && `≤ ${maxValue}`
129
+ ] }, void 0, true, {
130
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
131
+ lineNumber: 105,
132
+ columnNumber: 9
133
+ }, this)
134
+ ] }, void 0, true, {
135
+ fileName: "/Users/justinhandley/IdeaProjects/nestled_template/libs/data-browser/src/lib/components/filters/NumberRangeFilter.tsx",
57
136
  lineNumber: 74,
58
137
  columnNumber: 5
59
- } }, /* @__PURE__ */ React.createElement("label", { className: "block text-sm font-medium text-gray-700", __self: this, __source: {
60
- fileName: _jsxFileName,
61
- lineNumber: 75,
62
- columnNumber: 7
63
- } }, formatFieldName(fieldName)), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-2 gap-2", __self: this, __source: {
64
- fileName: _jsxFileName,
65
- lineNumber: 78,
66
- columnNumber: 7
67
- } }, /* @__PURE__ */ React.createElement("div", { __self: this, __source: {
68
- fileName: _jsxFileName,
69
- lineNumber: 79,
70
- columnNumber: 9
71
- } }, /* @__PURE__ */ React.createElement("label", { htmlFor: `${fieldName}-min`, className: "block text-xs text-gray-500 mb-1", __self: this, __source: {
72
- fileName: _jsxFileName,
73
- lineNumber: 80,
74
- columnNumber: 11
75
- } }, "Min"), /* @__PURE__ */ React.createElement("input", { id: `${fieldName}-min`, type: "number", step, value: minValue, onChange: (e) => handleMinChange(e.target.value), placeholder: "No minimum", 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", __self: this, __source: {
76
- fileName: _jsxFileName,
77
- lineNumber: 81,
78
- columnNumber: 11
79
- } })), /* @__PURE__ */ React.createElement("div", { __self: this, __source: {
80
- fileName: _jsxFileName,
81
- lineNumber: 91,
82
- columnNumber: 9
83
- } }, /* @__PURE__ */ React.createElement("label", { htmlFor: `${fieldName}-max`, className: "block text-xs text-gray-500 mb-1", __self: this, __source: {
84
- fileName: _jsxFileName,
85
- lineNumber: 92,
86
- columnNumber: 11
87
- } }, "Max"), /* @__PURE__ */ React.createElement("input", { id: `${fieldName}-max`, type: "number", step, value: maxValue, onChange: (e) => handleMaxChange(e.target.value), placeholder: "No maximum", 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", __self: this, __source: {
88
- fileName: _jsxFileName,
89
- lineNumber: 93,
90
- columnNumber: 11
91
- } }))), (minValue || maxValue) && /* @__PURE__ */ React.createElement("div", { className: "text-xs text-gray-500", __self: this, __source: {
92
- fileName: _jsxFileName,
93
- lineNumber: 105,
94
- columnNumber: 9
95
- } }, minValue && maxValue && `${minValue} to ${maxValue}`, minValue && !maxValue && `≥ ${minValue}`, !minValue && maxValue && `≤ ${maxValue}`));
138
+ }, this);
96
139
  }
97
140
  export {
98
141
  NumberRangeFilter