dn-react-router-toolkit 0.5.9 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/cookie_store.d.mts +1 -1
- package/dist/auth/cookie_store.d.ts +1 -1
- package/dist/auth/cookie_store.js +4 -4
- package/dist/auth/cookie_store.mjs +4 -4
- package/dist/auth/index.js +4 -4
- package/dist/auth/index.mjs +4 -4
- package/dist/client/env_loader.d.mts +2 -2
- package/dist/client/env_loader.d.ts +2 -2
- package/dist/client/file_input.d.mts +10 -0
- package/dist/client/file_input.d.ts +10 -0
- package/dist/client/file_input.js +80 -0
- package/dist/client/file_input.mjs +45 -0
- package/dist/client/index.d.mts +4 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.js +104 -0
- package/dist/client/index.mjs +102 -0
- package/dist/client/store_text_editor.d.mts +13 -0
- package/dist/client/store_text_editor.d.ts +13 -0
- package/dist/client/store_text_editor.js +94 -0
- package/dist/client/store_text_editor.mjs +59 -0
- package/dist/crud/crud_form.d.mts +4 -6
- package/dist/crud/crud_form.d.ts +4 -6
- package/dist/crud/crud_form.js +147 -100
- package/dist/crud/crud_form.mjs +148 -106
- package/dist/crud/crud_form_provider.d.mts +10 -10
- package/dist/crud/crud_form_provider.d.ts +10 -10
- package/dist/crud/crud_form_provider.js +5 -6
- package/dist/crud/crud_form_provider.mjs +4 -5
- package/dist/crud/crud_page.d.mts +8 -8
- package/dist/crud/crud_page.d.ts +8 -8
- package/dist/crud/crud_page.js +203 -160
- package/dist/crud/crud_page.mjs +200 -162
- package/dist/crud/generate_pages.d.mts +3 -3
- package/dist/crud/generate_pages.d.ts +3 -3
- package/dist/crud/index.d.mts +1 -1
- package/dist/crud/index.d.ts +1 -1
- package/dist/crud/index.js +256 -213
- package/dist/crud/index.mjs +240 -202
- package/dist/form/create_form_component.d.mts +28 -0
- package/dist/form/create_form_component.d.ts +28 -0
- package/dist/form/create_form_component.js +47 -0
- package/dist/form/create_form_component.mjs +12 -0
- package/dist/form/form_components.d.mts +7 -0
- package/dist/form/form_components.d.ts +7 -0
- package/dist/form/form_components.js +64 -0
- package/dist/form/form_components.mjs +25 -0
- package/dist/form/index.d.mts +3 -0
- package/dist/form/index.d.ts +3 -0
- package/dist/form/index.js +66 -0
- package/dist/form/index.mjs +26 -0
- package/dist/post/index.js +1 -0
- package/dist/post/index.mjs +1 -0
- package/dist/post/thumbnail_picker.d.mts +8 -7
- package/dist/post/thumbnail_picker.d.ts +8 -7
- package/dist/post/thumbnail_picker.js +8 -4
- package/dist/post/thumbnail_picker.mjs +8 -4
- package/dist/seo/seo.d.mts +2 -2
- package/dist/seo/seo.d.ts +2 -2
- package/dist/table/buttons.d.mts +2 -2
- package/dist/table/buttons.d.ts +2 -2
- package/dist/table/index.js +44 -47
- package/dist/table/index.mjs +44 -47
- package/dist/table/page.d.mts +5 -7
- package/dist/table/page.d.ts +5 -7
- package/dist/table/page.js +44 -47
- package/dist/table/page.mjs +44 -47
- package/dist/table/table.d.mts +4 -4
- package/dist/table/table.d.ts +4 -4
- package/package.json +92 -85
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { Store } from 'react-store-input';
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
type FormState<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Omit<TModel, TPrimaryKey> & {
|
|
5
5
|
[K in TPrimaryKey]?: TModel[K];
|
|
6
6
|
};
|
|
7
7
|
type FormColumnValue<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = {
|
|
8
8
|
label: string;
|
|
9
|
-
type?:
|
|
10
|
-
component?:
|
|
11
|
-
store:
|
|
9
|
+
type?: React__default.HTMLInputTypeAttribute | "textarea";
|
|
10
|
+
component?: React__default.FC<{
|
|
11
|
+
store: Store<FormState<TModel, TPrimaryKey>>;
|
|
12
12
|
property: string;
|
|
13
13
|
}>;
|
|
14
|
-
options?:
|
|
14
|
+
options?: React__default.FC;
|
|
15
15
|
};
|
|
16
16
|
type FormColumns<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Partial<{
|
|
17
17
|
[K in keyof TModel]: FormColumnValue<TModel, TPrimaryKey>;
|
|
18
18
|
}>;
|
|
19
|
-
declare const FormContext:
|
|
19
|
+
declare const FormContext: React__default.Context<{}>;
|
|
20
20
|
declare function useFormContext<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>(): {
|
|
21
21
|
name: string;
|
|
22
22
|
item?: TModel;
|
|
23
|
-
store:
|
|
23
|
+
store: Store<FormState<TModel, TPrimaryKey>>;
|
|
24
24
|
submit: () => Promise<void>;
|
|
25
25
|
delete: () => Promise<void>;
|
|
26
26
|
columns: FormColumns<TModel, TPrimaryKey>;
|
|
@@ -31,8 +31,8 @@ type CrudFormProps<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof
|
|
|
31
31
|
prefix: string;
|
|
32
32
|
item?: TModel;
|
|
33
33
|
columns?: FormColumns<TModel, TPrimaryKey>;
|
|
34
|
-
children?:
|
|
34
|
+
children?: React__default.ReactNode;
|
|
35
35
|
};
|
|
36
|
-
declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>):
|
|
36
|
+
declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>): React__default.JSX.Element;
|
|
37
37
|
|
|
38
38
|
export { type CrudFormProps, type FormColumnValue, type FormColumns, FormContext, type FormState, CrudFormProvider as default, useFormContext };
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { Store } from 'react-store-input';
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
type FormState<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Omit<TModel, TPrimaryKey> & {
|
|
5
5
|
[K in TPrimaryKey]?: TModel[K];
|
|
6
6
|
};
|
|
7
7
|
type FormColumnValue<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = {
|
|
8
8
|
label: string;
|
|
9
|
-
type?:
|
|
10
|
-
component?:
|
|
11
|
-
store:
|
|
9
|
+
type?: React__default.HTMLInputTypeAttribute | "textarea";
|
|
10
|
+
component?: React__default.FC<{
|
|
11
|
+
store: Store<FormState<TModel, TPrimaryKey>>;
|
|
12
12
|
property: string;
|
|
13
13
|
}>;
|
|
14
|
-
options?:
|
|
14
|
+
options?: React__default.FC;
|
|
15
15
|
};
|
|
16
16
|
type FormColumns<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Partial<{
|
|
17
17
|
[K in keyof TModel]: FormColumnValue<TModel, TPrimaryKey>;
|
|
18
18
|
}>;
|
|
19
|
-
declare const FormContext:
|
|
19
|
+
declare const FormContext: React__default.Context<{}>;
|
|
20
20
|
declare function useFormContext<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>(): {
|
|
21
21
|
name: string;
|
|
22
22
|
item?: TModel;
|
|
23
|
-
store:
|
|
23
|
+
store: Store<FormState<TModel, TPrimaryKey>>;
|
|
24
24
|
submit: () => Promise<void>;
|
|
25
25
|
delete: () => Promise<void>;
|
|
26
26
|
columns: FormColumns<TModel, TPrimaryKey>;
|
|
@@ -31,8 +31,8 @@ type CrudFormProps<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof
|
|
|
31
31
|
prefix: string;
|
|
32
32
|
item?: TModel;
|
|
33
33
|
columns?: FormColumns<TModel, TPrimaryKey>;
|
|
34
|
-
children?:
|
|
34
|
+
children?: React__default.ReactNode;
|
|
35
35
|
};
|
|
36
|
-
declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>):
|
|
36
|
+
declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>): React__default.JSX.Element;
|
|
37
37
|
|
|
38
38
|
export { type CrudFormProps, type FormColumnValue, type FormColumns, FormContext, type FormState, CrudFormProvider as default, useFormContext };
|
|
@@ -36,7 +36,7 @@ __export(crud_form_provider_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(crud_form_provider_exports);
|
|
38
38
|
var import_react_router = require("react-router");
|
|
39
|
-
var
|
|
39
|
+
var import_react_store_input = require("react-store-input");
|
|
40
40
|
var import_react = require("react");
|
|
41
41
|
var import_react2 = __toESM(require("react"));
|
|
42
42
|
var FormContext = (0, import_react.createContext)({});
|
|
@@ -52,7 +52,7 @@ function CrudFormProvider({
|
|
|
52
52
|
children
|
|
53
53
|
}) {
|
|
54
54
|
const apiPrefix = `/api${prefix}`;
|
|
55
|
-
const store = (0,
|
|
55
|
+
const store = (0, import_react_store_input.useStore)({
|
|
56
56
|
...item || {}
|
|
57
57
|
});
|
|
58
58
|
const navigate = (0, import_react_router.useNavigate)();
|
|
@@ -102,10 +102,9 @@ function CrudFormProvider({
|
|
|
102
102
|
return value2.map((v) => converter(v));
|
|
103
103
|
}
|
|
104
104
|
if (typeof value2 === "object") {
|
|
105
|
-
return Object.entries(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
);
|
|
105
|
+
return Object.entries(
|
|
106
|
+
value2
|
|
107
|
+
).reduce(reducer, {});
|
|
109
108
|
}
|
|
110
109
|
};
|
|
111
110
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/crud/crud_form_provider.tsx
|
|
2
2
|
import { useNavigate } from "react-router";
|
|
3
|
-
import { useStore } from "
|
|
3
|
+
import { useStore } from "react-store-input";
|
|
4
4
|
import { createContext, useContext } from "react";
|
|
5
5
|
import React from "react";
|
|
6
6
|
var FormContext = createContext({});
|
|
@@ -66,10 +66,9 @@ function CrudFormProvider({
|
|
|
66
66
|
return value2.map((v) => converter(v));
|
|
67
67
|
}
|
|
68
68
|
if (typeof value2 === "object") {
|
|
69
|
-
return Object.entries(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
);
|
|
69
|
+
return Object.entries(
|
|
70
|
+
value2
|
|
71
|
+
).reduce(reducer, {});
|
|
73
72
|
}
|
|
74
73
|
};
|
|
75
74
|
return {
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { CrudFormProps } from './crud_form_provider.mjs';
|
|
2
2
|
import { TablePageOptions } from '../table/page.mjs';
|
|
3
|
-
import
|
|
4
|
-
import '
|
|
3
|
+
import React__default from 'react';
|
|
4
|
+
import 'react-store-input';
|
|
5
5
|
import '../table/table.mjs';
|
|
6
6
|
|
|
7
7
|
type CrudPageOptions<TModel, TPrimaryKey extends keyof TModel> = {
|
|
8
8
|
name: string;
|
|
9
9
|
tablePageOptions: Omit<TablePageOptions<TModel>, "name">;
|
|
10
10
|
formOptions: {
|
|
11
|
-
form?:
|
|
11
|
+
form?: React__default.FC;
|
|
12
12
|
columns: CrudFormProps<TModel, TPrimaryKey>["columns"];
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
AdminHeader: React__default.FC<{
|
|
15
15
|
title: string;
|
|
16
|
-
actions?:
|
|
16
|
+
actions?: React__default.ReactNode;
|
|
17
17
|
className?: string;
|
|
18
|
-
children?:
|
|
18
|
+
children?: React__default.ReactNode;
|
|
19
19
|
}>;
|
|
20
20
|
};
|
|
21
|
-
type CrudPage = (prefix: string) =>
|
|
22
|
-
declare function crudPage<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ name, tablePageOptions, formOptions,
|
|
21
|
+
type CrudPage = (prefix: string) => React__default.FC;
|
|
22
|
+
declare function crudPage<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ name, tablePageOptions, formOptions, AdminHeader, }: CrudPageOptions<TModel, TPrimaryKey>): CrudPage;
|
|
23
23
|
|
|
24
24
|
export { type CrudPage, type CrudPageOptions, crudPage };
|
package/dist/crud/crud_page.d.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { CrudFormProps } from './crud_form_provider.js';
|
|
2
2
|
import { TablePageOptions } from '../table/page.js';
|
|
3
|
-
import
|
|
4
|
-
import '
|
|
3
|
+
import React__default from 'react';
|
|
4
|
+
import 'react-store-input';
|
|
5
5
|
import '../table/table.js';
|
|
6
6
|
|
|
7
7
|
type CrudPageOptions<TModel, TPrimaryKey extends keyof TModel> = {
|
|
8
8
|
name: string;
|
|
9
9
|
tablePageOptions: Omit<TablePageOptions<TModel>, "name">;
|
|
10
10
|
formOptions: {
|
|
11
|
-
form?:
|
|
11
|
+
form?: React__default.FC;
|
|
12
12
|
columns: CrudFormProps<TModel, TPrimaryKey>["columns"];
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
AdminHeader: React__default.FC<{
|
|
15
15
|
title: string;
|
|
16
|
-
actions?:
|
|
16
|
+
actions?: React__default.ReactNode;
|
|
17
17
|
className?: string;
|
|
18
|
-
children?:
|
|
18
|
+
children?: React__default.ReactNode;
|
|
19
19
|
}>;
|
|
20
20
|
};
|
|
21
|
-
type CrudPage = (prefix: string) =>
|
|
22
|
-
declare function crudPage<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ name, tablePageOptions, formOptions,
|
|
21
|
+
type CrudPage = (prefix: string) => React__default.FC;
|
|
22
|
+
declare function crudPage<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ name, tablePageOptions, formOptions, AdminHeader, }: CrudPageOptions<TModel, TPrimaryKey>): CrudPage;
|
|
23
23
|
|
|
24
24
|
export { type CrudPage, type CrudPageOptions, crudPage };
|
package/dist/crud/crud_page.js
CHANGED
|
@@ -33,11 +33,11 @@ __export(crud_page_exports, {
|
|
|
33
33
|
crudPage: () => crudPage
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(crud_page_exports);
|
|
36
|
-
var
|
|
36
|
+
var import_react_router7 = require("react-router");
|
|
37
37
|
|
|
38
38
|
// src/crud/crud_form_provider.tsx
|
|
39
39
|
var import_react_router = require("react-router");
|
|
40
|
-
var
|
|
40
|
+
var import_react_store_input = require("react-store-input");
|
|
41
41
|
var import_react = require("react");
|
|
42
42
|
var import_react2 = __toESM(require("react"));
|
|
43
43
|
var FormContext = (0, import_react.createContext)({});
|
|
@@ -53,7 +53,7 @@ function CrudFormProvider({
|
|
|
53
53
|
children
|
|
54
54
|
}) {
|
|
55
55
|
const apiPrefix = `/api${prefix}`;
|
|
56
|
-
const store = (0,
|
|
56
|
+
const store = (0, import_react_store_input.useStore)({
|
|
57
57
|
...item || {}
|
|
58
58
|
});
|
|
59
59
|
const navigate = (0, import_react_router.useNavigate)();
|
|
@@ -103,10 +103,9 @@ function CrudFormProvider({
|
|
|
103
103
|
return value2.map((v) => converter(v));
|
|
104
104
|
}
|
|
105
105
|
if (typeof value2 === "object") {
|
|
106
|
-
return Object.entries(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
);
|
|
106
|
+
return Object.entries(
|
|
107
|
+
value2
|
|
108
|
+
).reduce(reducer, {});
|
|
110
109
|
}
|
|
111
110
|
};
|
|
112
111
|
return {
|
|
@@ -487,7 +486,7 @@ function createTablePage({
|
|
|
487
486
|
primaryKey = "id"
|
|
488
487
|
}) {
|
|
489
488
|
return function TablePage({
|
|
490
|
-
|
|
489
|
+
AdminHeader
|
|
491
490
|
}) {
|
|
492
491
|
const { pathname } = (0, import_react_router4.useLocation)();
|
|
493
492
|
const { table } = (0, import_react_router4.useLoaderData)();
|
|
@@ -500,198 +499,242 @@ function createTablePage({
|
|
|
500
499
|
navigate(`${pathname}?${searchParams2.toString()}`);
|
|
501
500
|
};
|
|
502
501
|
const [searchParams] = (0, import_react_router4.useSearchParams)();
|
|
503
|
-
return /* @__PURE__ */ import_react7.default.createElement(
|
|
504
|
-
|
|
502
|
+
return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, /* @__PURE__ */ import_react7.default.createElement(
|
|
503
|
+
AdminHeader,
|
|
505
504
|
{
|
|
506
505
|
title: name,
|
|
507
506
|
actions: /* @__PURE__ */ import_react7.default.createElement(import_react_router4.Link, { to: `${pathname}/new`, className: "button-primary" }, name, " \uCD94\uAC00")
|
|
507
|
+
}
|
|
508
|
+
), /* @__PURE__ */ import_react7.default.createElement("div", { className: "max-w-7xl mx-auto" }, searchKey && /* @__PURE__ */ import_react7.default.createElement(
|
|
509
|
+
"form",
|
|
510
|
+
{
|
|
511
|
+
className: "h-18 px-4 flex items-center border-t",
|
|
512
|
+
onSubmit: (e) => {
|
|
513
|
+
e.preventDefault();
|
|
514
|
+
const formData = new FormData(e.currentTarget);
|
|
515
|
+
const query = formData.get("query");
|
|
516
|
+
search(query);
|
|
517
|
+
}
|
|
508
518
|
},
|
|
509
|
-
searchKey && /* @__PURE__ */ import_react7.default.createElement(
|
|
510
|
-
"form",
|
|
511
|
-
{
|
|
512
|
-
className: "h-18 px-4 flex items-center border-t",
|
|
513
|
-
onSubmit: (e) => {
|
|
514
|
-
e.preventDefault();
|
|
515
|
-
const formData = new FormData(e.currentTarget);
|
|
516
|
-
const query = formData.get("query");
|
|
517
|
-
search(query);
|
|
518
|
-
}
|
|
519
|
-
},
|
|
520
|
-
/* @__PURE__ */ import_react7.default.createElement(
|
|
521
|
-
"button",
|
|
522
|
-
{
|
|
523
|
-
type: "submit",
|
|
524
|
-
className: "w-10 h-10 flex justify-center items-center"
|
|
525
|
-
},
|
|
526
|
-
/* @__PURE__ */ import_react7.default.createElement(GoSearch, { className: "text-xl mr-4" })
|
|
527
|
-
),
|
|
528
|
-
/* @__PURE__ */ import_react7.default.createElement(
|
|
529
|
-
"input",
|
|
530
|
-
{
|
|
531
|
-
className: "outline-none h-full flex-1",
|
|
532
|
-
placeholder: "\uC5EC\uAE30\uC5D0 \uAC80\uC0C9\uD558\uC138\uC694...",
|
|
533
|
-
name: "query",
|
|
534
|
-
defaultValue: searchParams.get("query") ?? ""
|
|
535
|
-
}
|
|
536
|
-
)
|
|
537
|
-
),
|
|
538
519
|
/* @__PURE__ */ import_react7.default.createElement(
|
|
539
|
-
|
|
520
|
+
"button",
|
|
540
521
|
{
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
offset,
|
|
546
|
-
orderBy,
|
|
547
|
-
direction
|
|
548
|
-
}
|
|
522
|
+
type: "submit",
|
|
523
|
+
className: "w-10 h-10 flex justify-center items-center"
|
|
524
|
+
},
|
|
525
|
+
/* @__PURE__ */ import_react7.default.createElement(GoSearch, { className: "text-xl mr-4" })
|
|
549
526
|
),
|
|
550
527
|
/* @__PURE__ */ import_react7.default.createElement(
|
|
551
|
-
|
|
528
|
+
"input",
|
|
552
529
|
{
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
530
|
+
className: "outline-none h-full flex-1",
|
|
531
|
+
placeholder: "\uC5EC\uAE30\uC5D0 \uAC80\uC0C9\uD558\uC138\uC694...",
|
|
532
|
+
name: "query",
|
|
533
|
+
defaultValue: searchParams.get("query") ?? ""
|
|
557
534
|
}
|
|
558
535
|
)
|
|
559
|
-
)
|
|
536
|
+
), /* @__PURE__ */ import_react7.default.createElement(
|
|
537
|
+
Table,
|
|
538
|
+
{
|
|
539
|
+
data: items,
|
|
540
|
+
columns,
|
|
541
|
+
getLink: primaryKey ? (item) => `${pathname}/${item[primaryKey]}` : void 0,
|
|
542
|
+
limit,
|
|
543
|
+
offset,
|
|
544
|
+
orderBy,
|
|
545
|
+
direction
|
|
546
|
+
}
|
|
547
|
+
), /* @__PURE__ */ import_react7.default.createElement(
|
|
548
|
+
TablePageButtons,
|
|
549
|
+
{
|
|
550
|
+
total,
|
|
551
|
+
limit,
|
|
552
|
+
offset,
|
|
553
|
+
MAX_PAGES_TO_SHOW: 10
|
|
554
|
+
}
|
|
555
|
+
)));
|
|
560
556
|
};
|
|
561
557
|
}
|
|
562
558
|
|
|
563
559
|
// src/crud/crud_form.tsx
|
|
564
|
-
var
|
|
560
|
+
var import_react13 = __toESM(require("react"));
|
|
561
|
+
var import_dn_react_text_editor2 = require("dn-react-text-editor");
|
|
562
|
+
var import_react_store_input3 = require("react-store-input");
|
|
563
|
+
|
|
564
|
+
// src/client/env_loader.tsx
|
|
565
565
|
var import_react8 = __toESM(require("react"));
|
|
566
|
+
var import_react_router5 = require("react-router");
|
|
567
|
+
|
|
568
|
+
// src/client/file_input.tsx
|
|
569
|
+
var import_react9 = require("react");
|
|
570
|
+
var import_react10 = __toESM(require("react"));
|
|
571
|
+
|
|
572
|
+
// src/client/use_user_agent.tsx
|
|
573
|
+
var import_react_router6 = require("react-router");
|
|
574
|
+
|
|
575
|
+
// src/client/store_text_editor.tsx
|
|
576
|
+
var import_dn_react_text_editor = require("dn-react-text-editor");
|
|
577
|
+
var import_react_store_input2 = require("react-store-input");
|
|
578
|
+
var import_react11 = __toESM(require("react"));
|
|
579
|
+
function createStoreTextEditor(TextEditor2) {
|
|
580
|
+
function StoreComponent({
|
|
581
|
+
store,
|
|
582
|
+
name,
|
|
583
|
+
defaultValue,
|
|
584
|
+
...props
|
|
585
|
+
}) {
|
|
586
|
+
const { ref, onChange } = (0, import_react_store_input2.useStoreController)(
|
|
587
|
+
store,
|
|
588
|
+
{
|
|
589
|
+
ref: props.ref,
|
|
590
|
+
onSubscribe: (state, element) => {
|
|
591
|
+
const result = (props.getter ? props.getter(state) : name ? state[name] : "") || "";
|
|
592
|
+
if (element.value !== result) {
|
|
593
|
+
element.value = result;
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
onDispatch: (state, element) => {
|
|
597
|
+
if (props.setter) {
|
|
598
|
+
props.setter(state, element.value);
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
if (name) {
|
|
602
|
+
state[name] = element.value;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
const getDefaultValue = () => {
|
|
608
|
+
if (props.getter) {
|
|
609
|
+
return props.getter(store.state);
|
|
610
|
+
}
|
|
611
|
+
if (name) {
|
|
612
|
+
return store.state[name];
|
|
613
|
+
}
|
|
614
|
+
return void 0;
|
|
615
|
+
};
|
|
616
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
617
|
+
TextEditor2,
|
|
618
|
+
{
|
|
619
|
+
...props,
|
|
620
|
+
ref,
|
|
621
|
+
defaultValue: defaultValue ?? getDefaultValue(),
|
|
622
|
+
onChange: (e) => {
|
|
623
|
+
onChange();
|
|
624
|
+
props.onChange?.(e);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
);
|
|
628
|
+
}
|
|
629
|
+
return StoreComponent;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// src/form/create_form_component.tsx
|
|
566
633
|
var import_utils3 = require("dn-react-toolkit/utils");
|
|
567
|
-
var
|
|
568
|
-
|
|
569
|
-
function
|
|
634
|
+
var import_react12 = __toESM(require("react"));
|
|
635
|
+
function createComponent(tag, options) {
|
|
636
|
+
return function FormComponent({ className, ...props }) {
|
|
637
|
+
const Tag = tag;
|
|
638
|
+
return /* @__PURE__ */ import_react12.default.createElement(Tag, { ...props, className: (0, import_utils3.cn)(options.className, className) });
|
|
639
|
+
};
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
// src/form/form_components.tsx
|
|
643
|
+
var FormEntry = createComponent("div", {
|
|
644
|
+
className: "flex-1"
|
|
645
|
+
});
|
|
646
|
+
var FormRow = createComponent("div", {
|
|
647
|
+
className: "flex-1 flex gap-4 mb-6"
|
|
648
|
+
});
|
|
649
|
+
var FormLabel = createComponent("label", {
|
|
650
|
+
className: "flex-1 font-semibold mb-2.5 block"
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
// src/crud/crud_form.tsx
|
|
654
|
+
var TextEditor = createStoreTextEditor((0, import_dn_react_text_editor2.createTextEditor)());
|
|
655
|
+
function CrudForm({ AdminHeader }) {
|
|
570
656
|
const form = useFormContext();
|
|
571
|
-
return /* @__PURE__ */
|
|
572
|
-
|
|
657
|
+
return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement(
|
|
658
|
+
AdminHeader,
|
|
573
659
|
{
|
|
574
660
|
title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
|
|
575
|
-
actions: /* @__PURE__ */
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
serializer: (value2) => {
|
|
597
|
-
if (value2 === void 0 || value2 === null) {
|
|
598
|
-
return "";
|
|
599
|
-
}
|
|
600
|
-
return String(value2);
|
|
601
|
-
},
|
|
602
|
-
deserializer: (value2) => {
|
|
603
|
-
const parsed = Number(value2);
|
|
604
|
-
if (isNaN(parsed)) {
|
|
605
|
-
return void 0;
|
|
606
|
-
}
|
|
607
|
-
return parsed;
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
);
|
|
611
|
-
}
|
|
612
|
-
if (value.type === "datetime") {
|
|
613
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
614
|
-
import_store2.SyncInput,
|
|
615
|
-
{
|
|
616
|
-
store: form.store,
|
|
617
|
-
property: key,
|
|
618
|
-
className: "input-form",
|
|
619
|
-
type: "datetime-local",
|
|
620
|
-
serializer: (value2) => {
|
|
621
|
-
if (value2 instanceof Date) {
|
|
622
|
-
return (0, import_utils3.moment)(value2).toISOString(true).slice(0, 16);
|
|
623
|
-
}
|
|
624
|
-
return String(value2);
|
|
625
|
-
},
|
|
626
|
-
deserializer: (value2) => {
|
|
627
|
-
if (!value2) {
|
|
628
|
-
return void 0;
|
|
629
|
-
}
|
|
630
|
-
return (0, import_utils3.moment)(value2).toDate();
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
);
|
|
634
|
-
}
|
|
635
|
-
if (value.type === "textarea") {
|
|
636
|
-
const Editor = (0, import_store2.useSyncTextEditor)(textarea);
|
|
637
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
638
|
-
Editor.Component,
|
|
639
|
-
{
|
|
640
|
-
store: form.store,
|
|
641
|
-
property: key
|
|
642
|
-
}
|
|
643
|
-
);
|
|
644
|
-
}
|
|
645
|
-
if (value.options) {
|
|
646
|
-
const Component = value.options;
|
|
647
|
-
return /* @__PURE__ */ import_react8.default.createElement(import_store2.SyncSelect, { store: form.store, property: key }, /* @__PURE__ */ import_react8.default.createElement(Component, null));
|
|
648
|
-
}
|
|
649
|
-
return /* @__PURE__ */ import_react8.default.createElement(
|
|
650
|
-
import_store2.SyncInput,
|
|
661
|
+
actions: /* @__PURE__ */ import_react13.default.createElement(
|
|
662
|
+
"button",
|
|
663
|
+
{
|
|
664
|
+
type: "button",
|
|
665
|
+
className: "button-primary",
|
|
666
|
+
onClick: form.submit
|
|
667
|
+
},
|
|
668
|
+
"\uC800\uC7A5\uD558\uAE30"
|
|
669
|
+
)
|
|
670
|
+
}
|
|
671
|
+
), /* @__PURE__ */ import_react13.default.createElement("div", { className: "max-w-2xl mx-auto" }, Object.keys(form.columns).length > 0 && /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, Object.entries(
|
|
672
|
+
form.columns
|
|
673
|
+
).map(([key, value]) => {
|
|
674
|
+
function InputComponent() {
|
|
675
|
+
if (value.type === "textarea") {
|
|
676
|
+
return /* @__PURE__ */ import_react13.default.createElement(TextEditor, { store: form.store, name: key });
|
|
677
|
+
}
|
|
678
|
+
if (value.options) {
|
|
679
|
+
const Component = value.options;
|
|
680
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
681
|
+
import_react_store_input3.Select,
|
|
651
682
|
{
|
|
652
683
|
store: form.store,
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
684
|
+
name: key,
|
|
685
|
+
className: "select-form"
|
|
686
|
+
},
|
|
687
|
+
/* @__PURE__ */ import_react13.default.createElement(Component, null)
|
|
657
688
|
);
|
|
658
|
-
}
|
|
659
|
-
return /* @__PURE__ */
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
form.delete();
|
|
689
|
+
}
|
|
690
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
691
|
+
import_react_store_input3.Input,
|
|
692
|
+
{
|
|
693
|
+
store: form.store,
|
|
694
|
+
name: key,
|
|
695
|
+
type: value.type,
|
|
696
|
+
className: "input-form"
|
|
667
697
|
}
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
698
|
+
);
|
|
699
|
+
}
|
|
700
|
+
const v = form.store.state[key];
|
|
701
|
+
if (typeof v === "boolean") {
|
|
702
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex" }, value.label, /* @__PURE__ */ import_react13.default.createElement("div", { className: "ml-auto" }, /* @__PURE__ */ import_react13.default.createElement(InputComponent, null)));
|
|
703
|
+
}
|
|
704
|
+
return /* @__PURE__ */ import_react13.default.createElement(FormRow, null, /* @__PURE__ */ import_react13.default.createElement(FormEntry, null, /* @__PURE__ */ import_react13.default.createElement(FormLabel, { key }, value.label), /* @__PURE__ */ import_react13.default.createElement(InputComponent, null)));
|
|
705
|
+
})), form.item && /* @__PURE__ */ import_react13.default.createElement(
|
|
706
|
+
"button",
|
|
707
|
+
{
|
|
708
|
+
className: "button-dangerous mt-8",
|
|
709
|
+
onClick: () => {
|
|
710
|
+
form.delete();
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
"\uC0AD\uC81C\uD558\uAE30"
|
|
714
|
+
)));
|
|
672
715
|
}
|
|
673
716
|
|
|
674
717
|
// src/crud/crud_page.tsx
|
|
675
|
-
var
|
|
718
|
+
var import_react14 = __toESM(require("react"));
|
|
676
719
|
function crudPage({
|
|
677
720
|
name,
|
|
678
721
|
tablePageOptions,
|
|
679
722
|
formOptions,
|
|
680
|
-
|
|
723
|
+
AdminHeader
|
|
681
724
|
}) {
|
|
682
725
|
return (prefix) => {
|
|
683
726
|
return function Page() {
|
|
684
|
-
const data = (0,
|
|
685
|
-
const { pathname } = (0,
|
|
727
|
+
const data = (0, import_react_router7.useLoaderData)();
|
|
728
|
+
const { pathname } = (0, import_react_router7.useLocation)();
|
|
686
729
|
if (pathname === prefix) {
|
|
687
730
|
const Component = createTablePage({
|
|
688
731
|
...tablePageOptions,
|
|
689
732
|
name
|
|
690
733
|
});
|
|
691
|
-
return /* @__PURE__ */
|
|
734
|
+
return /* @__PURE__ */ import_react14.default.createElement(Component, { AdminHeader });
|
|
692
735
|
}
|
|
693
736
|
if (pathname.startsWith(prefix)) {
|
|
694
|
-
return /* @__PURE__ */
|
|
737
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
695
738
|
CrudFormProvider,
|
|
696
739
|
{
|
|
697
740
|
item: data?.item,
|
|
@@ -699,7 +742,7 @@ function crudPage({
|
|
|
699
742
|
name,
|
|
700
743
|
columns: formOptions.columns
|
|
701
744
|
},
|
|
702
|
-
formOptions.form ? /* @__PURE__ */
|
|
745
|
+
formOptions.form ? /* @__PURE__ */ import_react14.default.createElement(formOptions.form, null) : /* @__PURE__ */ import_react14.default.createElement(CrudForm, { AdminHeader })
|
|
703
746
|
);
|
|
704
747
|
}
|
|
705
748
|
};
|