dn-react-router-toolkit 0.5.2 → 0.5.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.
@@ -69,58 +69,56 @@ function CrudFormProvider({
69
69
  "Content-Type": "application/json"
70
70
  },
71
71
  body: JSON.stringify(
72
- Object.entries(store.state).reduce(
73
- function reducer(acc, [key, value]) {
74
- const converter = (value2) => {
75
- if (value2 === void 0) {
76
- return void 0;
77
- }
78
- if (value2 === null) {
79
- return {
80
- type: "null",
81
- value: null
82
- };
83
- }
84
- if (typeof value2 === "string") {
85
- return {
86
- type: "string",
87
- value: value2
88
- };
89
- }
90
- if (typeof value2 === "number") {
91
- return {
92
- type: "number",
93
- value: value2
94
- };
95
- }
96
- if (typeof value2 === "boolean") {
97
- return {
98
- type: "boolean",
99
- value: value2
100
- };
101
- }
102
- if (value2 instanceof Date) {
103
- return {
104
- type: "date",
105
- value: value2.toISOString()
106
- };
107
- }
108
- if (Array.isArray(value2)) {
109
- return value2.map((v) => converter(v));
110
- }
111
- if (typeof value2 === "object") {
112
- return Object.entries(
113
- value2
114
- ).reduce(reducer, {});
115
- }
116
- };
117
- return {
118
- ...acc,
119
- [key]: converter(value)
120
- };
121
- },
122
- {}
123
- )
72
+ Object.entries(store.state).reduce(function reducer(acc, [key, value]) {
73
+ const converter = (value2) => {
74
+ if (value2 === void 0) {
75
+ return void 0;
76
+ }
77
+ if (value2 === null) {
78
+ return {
79
+ type: "null",
80
+ value: null
81
+ };
82
+ }
83
+ if (typeof value2 === "string") {
84
+ return {
85
+ type: "string",
86
+ value: value2
87
+ };
88
+ }
89
+ if (typeof value2 === "number") {
90
+ return {
91
+ type: "number",
92
+ value: value2
93
+ };
94
+ }
95
+ if (typeof value2 === "boolean") {
96
+ return {
97
+ type: "boolean",
98
+ value: value2
99
+ };
100
+ }
101
+ if (value2 instanceof Date) {
102
+ return {
103
+ type: "date",
104
+ value: value2.toISOString()
105
+ };
106
+ }
107
+ if (Array.isArray(value2)) {
108
+ return value2.map((v) => converter(v));
109
+ }
110
+ if (typeof value2 === "object") {
111
+ return Object.entries(value2).reduce(
112
+ reducer,
113
+ {}
114
+ );
115
+ }
116
+ };
117
+ return {
118
+ ...acc,
119
+ [key]: converter(value)
120
+ };
121
+ }, {})
124
122
  )
125
123
  });
126
124
  if (!res.ok) {
@@ -163,33 +161,65 @@ function CrudFormProvider({
163
161
  // src/crud/crud_form.tsx
164
162
  var import_store2 = require("dn-react-toolkit/store");
165
163
  var import_react3 = __toESM(require("react"));
164
+ var import_utils = require("dn-react-toolkit/utils");
166
165
  function CrudForm({ AdminLayout }) {
167
166
  const form = useFormContext();
168
167
  return /* @__PURE__ */ import_react3.default.createElement(
169
168
  AdminLayout,
170
169
  {
171
170
  title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
172
- actions: /* @__PURE__ */ import_react3.default.createElement(
173
- "button",
174
- {
175
- type: "button",
176
- className: "button-primary",
177
- onClick: form.submit
178
- },
179
- "\uC800\uC7A5\uD558\uAE30"
180
- ),
171
+ actions: /* @__PURE__ */ import_react3.default.createElement("button", { type: "button", className: "button-primary", onClick: form.submit }, "\uC800\uC7A5\uD558\uAE30"),
181
172
  className: "max-w-3xl mx-auto"
182
173
  },
183
- Object.keys(form.columns).length > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, Object.entries(form.columns).map(
184
- ([key, value]) => /* @__PURE__ */ import_react3.default.createElement("label", { key }, value.label, value.component ? /* @__PURE__ */ import_react3.default.createElement(value.component, null) : /* @__PURE__ */ import_react3.default.createElement(
185
- import_store2.SyncInput,
186
- {
187
- store: form.store,
188
- property: key,
189
- className: "input-form"
174
+ Object.keys(form.columns).length > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, Object.entries(
175
+ form.columns
176
+ ).map(([key, value]) => {
177
+ const createComponent = () => {
178
+ if (value.component) {
179
+ return /* @__PURE__ */ import_react3.default.createElement(value.component, { store: form.store, property: key });
180
+ }
181
+ if (value.type === "checkbox") {
182
+ return /* @__PURE__ */ import_react3.default.createElement(import_store2.SyncSwitch, { store: form.store, property: key });
183
+ }
184
+ if (value.type === "datetime") {
185
+ return /* @__PURE__ */ import_react3.default.createElement(
186
+ import_store2.SyncInput,
187
+ {
188
+ store: form.store,
189
+ property: key,
190
+ className: "input-form",
191
+ type: "datetime-local",
192
+ serializer: (value2) => {
193
+ if (value2 instanceof Date) {
194
+ return (0, import_utils.moment)(value2).toISOString(true).slice(0, 16);
195
+ }
196
+ return String(value2);
197
+ },
198
+ deserializer: (value2) => {
199
+ if (!value2) {
200
+ return void 0;
201
+ }
202
+ return (0, import_utils.moment)(value2).toDate();
203
+ }
204
+ }
205
+ );
190
206
  }
191
- ))
192
- )),
207
+ if (value.options) {
208
+ const Component = value.options;
209
+ return /* @__PURE__ */ import_react3.default.createElement(import_store2.SyncSelect, { store: form.store, property: key }, /* @__PURE__ */ import_react3.default.createElement(Component, null));
210
+ }
211
+ return /* @__PURE__ */ import_react3.default.createElement(
212
+ import_store2.SyncInput,
213
+ {
214
+ store: form.store,
215
+ property: key,
216
+ type: value.type,
217
+ className: "input-form"
218
+ }
219
+ );
220
+ };
221
+ return /* @__PURE__ */ import_react3.default.createElement("label", { key }, value.label, createComponent());
222
+ })),
193
223
  form.item && /* @__PURE__ */ import_react3.default.createElement(
194
224
  "button",
195
225
  {
@@ -248,24 +278,16 @@ function tableLoader({
248
278
 
249
279
  // src/table/item_loader.tsx
250
280
  var tableItemloader = ({
251
- loader,
252
281
  repository
253
282
  }) => {
254
- return async ({ params }) => {
255
- const body = loader ? await (async () => {
256
- const result = await loader({ params });
257
- if (result instanceof Response) {
258
- return result.json();
259
- }
260
- return result;
261
- })() : {};
283
+ return async (args) => {
284
+ const { params } = args;
262
285
  if (params["itemId"] === "new") {
263
- return { item: void 0, ...body };
286
+ return { item: void 0 };
264
287
  }
265
288
  const item = params["itemId"] ? await repository.find(params["itemId"]) : void 0;
266
289
  return {
267
- item,
268
- ...body
290
+ item
269
291
  };
270
292
  };
271
293
  };
@@ -451,13 +473,35 @@ function crudHandler({
451
473
  }
452
474
  }
453
475
  if (pattern === prefix2) {
454
- return tableLoader({
476
+ const body = await tableLoader({
455
477
  ...loaderOptions,
456
478
  repository
457
479
  })(args);
480
+ if (loaderOptions.loader) {
481
+ const result = await loaderOptions.loader(args);
482
+ if (typeof result === "object") {
483
+ return {
484
+ ...result,
485
+ ...body
486
+ };
487
+ }
488
+ }
489
+ return body;
458
490
  }
459
491
  if (pattern.startsWith(prefix2)) {
460
- return tableItemloader({ ...itemLoaderOptions, repository })(args);
492
+ const body = await tableItemloader({ ...itemLoaderOptions, repository })(
493
+ args
494
+ );
495
+ if (itemLoaderOptions.loader) {
496
+ const result = await itemLoaderOptions.loader(args);
497
+ if (typeof result === "object") {
498
+ return {
499
+ ...result,
500
+ ...body
501
+ };
502
+ }
503
+ }
504
+ return body;
461
505
  }
462
506
  };
463
507
  }
@@ -618,7 +662,7 @@ function GoSearch(props) {
618
662
  }
619
663
 
620
664
  // src/table/buttons.tsx
621
- var import_utils = require("dn-react-toolkit/utils");
665
+ var import_utils2 = require("dn-react-toolkit/utils");
622
666
  var import_react_router4 = require("react-router");
623
667
  var import_react6 = __toESM(require("react"));
624
668
  function TablePageButtons({
@@ -663,7 +707,7 @@ function TablePageButtons({
663
707
  );
664
708
  return `${pathname}?${searchParams.toString()}`;
665
709
  })(),
666
- className: (0, import_utils.cn)(
710
+ className: (0, import_utils2.cn)(
667
711
  "w-6 block text-center transition-colors",
668
712
  currentPage === startButton + index2 + 1 ? "font-bold text-primary" : "hover:text-primary"
669
713
  )
@@ -687,7 +731,7 @@ function TablePageButtons({
687
731
  }
688
732
 
689
733
  // src/table/table.tsx
690
- var import_utils2 = require("dn-react-toolkit/utils");
734
+ var import_utils3 = require("dn-react-toolkit/utils");
691
735
  var import_react_router5 = require("react-router");
692
736
  var import_react7 = __toESM(require("react"));
693
737
  function Table({
@@ -707,7 +751,7 @@ function Table({
707
751
  return /* @__PURE__ */ import_react7.default.createElement(
708
752
  "table",
709
753
  {
710
- className: (0, import_utils2.cn)(
754
+ className: (0, import_utils3.cn)(
711
755
  className,
712
756
  "text-[15px] border-separate border-spacing-0"
713
757
  )
@@ -726,7 +770,7 @@ function Table({
726
770
  return /* @__PURE__ */ import_react7.default.createElement(
727
771
  "button",
728
772
  {
729
- className: (0, import_utils2.cn)(
773
+ className: (0, import_utils3.cn)(
730
774
  orderBy === key ? "text-neutral-900 font-medium" : "text-neutral-500",
731
775
  "px-4 h-14 flex items-center w-full"
732
776
  ),
@@ -751,7 +795,7 @@ function Table({
751
795
  "th",
752
796
  {
753
797
  key,
754
- className: (0, import_utils2.cn)("border-y font-normal")
798
+ className: (0, import_utils3.cn)("border-y font-normal")
755
799
  },
756
800
  /* @__PURE__ */ import_react7.default.createElement(Head, null)
757
801
  );
@@ -27,58 +27,56 @@ function CrudFormProvider({
27
27
  "Content-Type": "application/json"
28
28
  },
29
29
  body: JSON.stringify(
30
- Object.entries(store.state).reduce(
31
- function reducer(acc, [key, value]) {
32
- const converter = (value2) => {
33
- if (value2 === void 0) {
34
- return void 0;
35
- }
36
- if (value2 === null) {
37
- return {
38
- type: "null",
39
- value: null
40
- };
41
- }
42
- if (typeof value2 === "string") {
43
- return {
44
- type: "string",
45
- value: value2
46
- };
47
- }
48
- if (typeof value2 === "number") {
49
- return {
50
- type: "number",
51
- value: value2
52
- };
53
- }
54
- if (typeof value2 === "boolean") {
55
- return {
56
- type: "boolean",
57
- value: value2
58
- };
59
- }
60
- if (value2 instanceof Date) {
61
- return {
62
- type: "date",
63
- value: value2.toISOString()
64
- };
65
- }
66
- if (Array.isArray(value2)) {
67
- return value2.map((v) => converter(v));
68
- }
69
- if (typeof value2 === "object") {
70
- return Object.entries(
71
- value2
72
- ).reduce(reducer, {});
73
- }
74
- };
75
- return {
76
- ...acc,
77
- [key]: converter(value)
78
- };
79
- },
80
- {}
81
- )
30
+ Object.entries(store.state).reduce(function reducer(acc, [key, value]) {
31
+ const converter = (value2) => {
32
+ if (value2 === void 0) {
33
+ return void 0;
34
+ }
35
+ if (value2 === null) {
36
+ return {
37
+ type: "null",
38
+ value: null
39
+ };
40
+ }
41
+ if (typeof value2 === "string") {
42
+ return {
43
+ type: "string",
44
+ value: value2
45
+ };
46
+ }
47
+ if (typeof value2 === "number") {
48
+ return {
49
+ type: "number",
50
+ value: value2
51
+ };
52
+ }
53
+ if (typeof value2 === "boolean") {
54
+ return {
55
+ type: "boolean",
56
+ value: value2
57
+ };
58
+ }
59
+ if (value2 instanceof Date) {
60
+ return {
61
+ type: "date",
62
+ value: value2.toISOString()
63
+ };
64
+ }
65
+ if (Array.isArray(value2)) {
66
+ return value2.map((v) => converter(v));
67
+ }
68
+ if (typeof value2 === "object") {
69
+ return Object.entries(value2).reduce(
70
+ reducer,
71
+ {}
72
+ );
73
+ }
74
+ };
75
+ return {
76
+ ...acc,
77
+ [key]: converter(value)
78
+ };
79
+ }, {})
82
80
  )
83
81
  });
84
82
  if (!res.ok) {
@@ -119,35 +117,67 @@ function CrudFormProvider({
119
117
  }
120
118
 
121
119
  // src/crud/crud_form.tsx
122
- import { SyncInput } from "dn-react-toolkit/store";
120
+ import { SyncInput, SyncSelect, SyncSwitch } from "dn-react-toolkit/store";
123
121
  import React2 from "react";
122
+ import { moment } from "dn-react-toolkit/utils";
124
123
  function CrudForm({ AdminLayout }) {
125
124
  const form = useFormContext();
126
125
  return /* @__PURE__ */ React2.createElement(
127
126
  AdminLayout,
128
127
  {
129
128
  title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
130
- actions: /* @__PURE__ */ React2.createElement(
131
- "button",
132
- {
133
- type: "button",
134
- className: "button-primary",
135
- onClick: form.submit
136
- },
137
- "\uC800\uC7A5\uD558\uAE30"
138
- ),
129
+ actions: /* @__PURE__ */ React2.createElement("button", { type: "button", className: "button-primary", onClick: form.submit }, "\uC800\uC7A5\uD558\uAE30"),
139
130
  className: "max-w-3xl mx-auto"
140
131
  },
141
- Object.keys(form.columns).length > 0 && /* @__PURE__ */ React2.createElement(React2.Fragment, null, Object.entries(form.columns).map(
142
- ([key, value]) => /* @__PURE__ */ React2.createElement("label", { key }, value.label, value.component ? /* @__PURE__ */ React2.createElement(value.component, null) : /* @__PURE__ */ React2.createElement(
143
- SyncInput,
144
- {
145
- store: form.store,
146
- property: key,
147
- className: "input-form"
132
+ Object.keys(form.columns).length > 0 && /* @__PURE__ */ React2.createElement(React2.Fragment, null, Object.entries(
133
+ form.columns
134
+ ).map(([key, value]) => {
135
+ const createComponent = () => {
136
+ if (value.component) {
137
+ return /* @__PURE__ */ React2.createElement(value.component, { store: form.store, property: key });
138
+ }
139
+ if (value.type === "checkbox") {
140
+ return /* @__PURE__ */ React2.createElement(SyncSwitch, { store: form.store, property: key });
141
+ }
142
+ if (value.type === "datetime") {
143
+ return /* @__PURE__ */ React2.createElement(
144
+ SyncInput,
145
+ {
146
+ store: form.store,
147
+ property: key,
148
+ className: "input-form",
149
+ type: "datetime-local",
150
+ serializer: (value2) => {
151
+ if (value2 instanceof Date) {
152
+ return moment(value2).toISOString(true).slice(0, 16);
153
+ }
154
+ return String(value2);
155
+ },
156
+ deserializer: (value2) => {
157
+ if (!value2) {
158
+ return void 0;
159
+ }
160
+ return moment(value2).toDate();
161
+ }
162
+ }
163
+ );
148
164
  }
149
- ))
150
- )),
165
+ if (value.options) {
166
+ const Component = value.options;
167
+ return /* @__PURE__ */ React2.createElement(SyncSelect, { store: form.store, property: key }, /* @__PURE__ */ React2.createElement(Component, null));
168
+ }
169
+ return /* @__PURE__ */ React2.createElement(
170
+ SyncInput,
171
+ {
172
+ store: form.store,
173
+ property: key,
174
+ type: value.type,
175
+ className: "input-form"
176
+ }
177
+ );
178
+ };
179
+ return /* @__PURE__ */ React2.createElement("label", { key }, value.label, createComponent());
180
+ })),
151
181
  form.item && /* @__PURE__ */ React2.createElement(
152
182
  "button",
153
183
  {
@@ -209,24 +239,16 @@ function tableLoader({
209
239
 
210
240
  // src/table/item_loader.tsx
211
241
  var tableItemloader = ({
212
- loader,
213
242
  repository
214
243
  }) => {
215
- return async ({ params }) => {
216
- const body = loader ? await (async () => {
217
- const result = await loader({ params });
218
- if (result instanceof Response) {
219
- return result.json();
220
- }
221
- return result;
222
- })() : {};
244
+ return async (args) => {
245
+ const { params } = args;
223
246
  if (params["itemId"] === "new") {
224
- return { item: void 0, ...body };
247
+ return { item: void 0 };
225
248
  }
226
249
  const item = params["itemId"] ? await repository.find(params["itemId"]) : void 0;
227
250
  return {
228
- item,
229
- ...body
251
+ item
230
252
  };
231
253
  };
232
254
  };
@@ -421,13 +443,35 @@ function crudHandler({
421
443
  }
422
444
  }
423
445
  if (pattern === prefix2) {
424
- return tableLoader({
446
+ const body = await tableLoader({
425
447
  ...loaderOptions,
426
448
  repository
427
449
  })(args);
450
+ if (loaderOptions.loader) {
451
+ const result = await loaderOptions.loader(args);
452
+ if (typeof result === "object") {
453
+ return {
454
+ ...result,
455
+ ...body
456
+ };
457
+ }
458
+ }
459
+ return body;
428
460
  }
429
461
  if (pattern.startsWith(prefix2)) {
430
- return tableItemloader({ ...itemLoaderOptions, repository })(args);
462
+ const body = await tableItemloader({ ...itemLoaderOptions, repository })(
463
+ args
464
+ );
465
+ if (itemLoaderOptions.loader) {
466
+ const result = await itemLoaderOptions.loader(args);
467
+ if (typeof result === "object") {
468
+ return {
469
+ ...result,
470
+ ...body
471
+ };
472
+ }
473
+ }
474
+ return body;
431
475
  }
432
476
  };
433
477
  }
@@ -158,24 +158,16 @@ function TablePageButtons({
158
158
 
159
159
  // src/table/item_loader.tsx
160
160
  var tableItemloader = ({
161
- loader,
162
161
  repository
163
162
  }) => {
164
- return async ({ params }) => {
165
- const body = loader ? await (async () => {
166
- const result = await loader({ params });
167
- if (result instanceof Response) {
168
- return result.json();
169
- }
170
- return result;
171
- })() : {};
163
+ return async (args) => {
164
+ const { params } = args;
172
165
  if (params["itemId"] === "new") {
173
- return { item: void 0, ...body };
166
+ return { item: void 0 };
174
167
  }
175
168
  const item = params["itemId"] ? await repository.find(params["itemId"]) : void 0;
176
169
  return {
177
- item,
178
- ...body
170
+ item
179
171
  };
180
172
  };
181
173
  };
@@ -123,24 +123,16 @@ function TablePageButtons({
123
123
 
124
124
  // src/table/item_loader.tsx
125
125
  var tableItemloader = ({
126
- loader,
127
126
  repository
128
127
  }) => {
129
- return async ({ params }) => {
130
- const body = loader ? await (async () => {
131
- const result = await loader({ params });
132
- if (result instanceof Response) {
133
- return result.json();
134
- }
135
- return result;
136
- })() : {};
128
+ return async (args) => {
129
+ const { params } = args;
137
130
  if (params["itemId"] === "new") {
138
- return { item: void 0, ...body };
131
+ return { item: void 0 };
139
132
  }
140
133
  const item = params["itemId"] ? await repository.find(params["itemId"]) : void 0;
141
134
  return {
142
- item,
143
- ...body
135
+ item
144
136
  };
145
137
  };
146
138
  };
@@ -4,9 +4,10 @@ import { LoaderFunctionArgs } from 'react-router';
4
4
  import 'drizzle-orm/pg-core';
5
5
 
6
6
  type TableItemLoaderOptions<T extends Table, TSelect> = {
7
- loader?: (args: LoaderFunctionArgs) => Promise<any>;
8
7
  repository: TableRepository<T, TSelect>;
9
8
  };
10
- declare const tableItemloader: <T extends Table, TSelect>({ loader, repository, }: TableItemLoaderOptions<T, TSelect>) => ({ params }: LoaderFunctionArgs) => Promise<any>;
9
+ declare const tableItemloader: <T extends Table, TSelect>({ repository, }: TableItemLoaderOptions<T, TSelect>) => (args: LoaderFunctionArgs) => Promise<{
10
+ item: Awaited<TSelect> | undefined;
11
+ }>;
11
12
 
12
13
  export { type TableItemLoaderOptions, tableItemloader };
@@ -4,9 +4,10 @@ import { LoaderFunctionArgs } from 'react-router';
4
4
  import 'drizzle-orm/pg-core';
5
5
 
6
6
  type TableItemLoaderOptions<T extends Table, TSelect> = {
7
- loader?: (args: LoaderFunctionArgs) => Promise<any>;
8
7
  repository: TableRepository<T, TSelect>;
9
8
  };
10
- declare const tableItemloader: <T extends Table, TSelect>({ loader, repository, }: TableItemLoaderOptions<T, TSelect>) => ({ params }: LoaderFunctionArgs) => Promise<any>;
9
+ declare const tableItemloader: <T extends Table, TSelect>({ repository, }: TableItemLoaderOptions<T, TSelect>) => (args: LoaderFunctionArgs) => Promise<{
10
+ item: Awaited<TSelect> | undefined;
11
+ }>;
11
12
 
12
13
  export { type TableItemLoaderOptions, tableItemloader };