dn-react-router-toolkit 0.4.4 → 0.5.0

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.
Files changed (93) hide show
  1. package/dist/api/create_api_handler.d.mts +28 -0
  2. package/dist/api/create_api_handler.d.ts +28 -0
  3. package/dist/api/create_api_handler.js +148 -0
  4. package/dist/api/create_api_handler.mjs +132 -0
  5. package/dist/api/create_handler.d.mts +1 -1
  6. package/dist/api/create_handler.d.ts +1 -1
  7. package/dist/api/create_handler.js +27 -25
  8. package/dist/api/create_handler.mjs +27 -25
  9. package/dist/api/index.js +27 -25
  10. package/dist/api/index.mjs +27 -25
  11. package/dist/api/item_api_handler.d.mts +18 -0
  12. package/dist/api/item_api_handler.d.ts +18 -0
  13. package/dist/api/item_api_handler.js +55 -0
  14. package/dist/api/item_api_handler.mjs +30 -0
  15. package/dist/auth/index.d.mts +1 -2
  16. package/dist/auth/index.d.ts +1 -2
  17. package/dist/auth/index.js +13 -21
  18. package/dist/auth/index.mjs +12 -20
  19. package/dist/auth/with_auth.d.mts +3 -3
  20. package/dist/auth/with_auth.d.ts +3 -3
  21. package/dist/auth/with_auth.js +13 -21
  22. package/dist/auth/with_auth.mjs +12 -20
  23. package/dist/crud/crud_form.d.mts +13 -0
  24. package/dist/crud/crud_form.d.ts +13 -0
  25. package/dist/crud/crud_form.js +88 -0
  26. package/dist/crud/crud_form.mjs +55 -0
  27. package/dist/crud/crud_form_provider.d.mts +34 -0
  28. package/dist/crud/crud_form_provider.d.ts +34 -0
  29. package/dist/crud/crud_form_provider.js +160 -0
  30. package/dist/crud/crud_form_provider.mjs +124 -0
  31. package/dist/crud/crud_loader.d.mts +21 -0
  32. package/dist/crud/crud_loader.d.ts +21 -0
  33. package/dist/crud/crud_loader.js +288 -0
  34. package/dist/crud/crud_loader.mjs +273 -0
  35. package/dist/crud/crud_page.d.mts +25 -0
  36. package/dist/crud/crud_page.d.ts +25 -0
  37. package/dist/crud/crud_page.js +645 -0
  38. package/dist/crud/crud_page.mjs +616 -0
  39. package/dist/crud/generate_handlers.d.mts +15 -0
  40. package/dist/crud/generate_handlers.d.ts +15 -0
  41. package/dist/crud/generate_handlers.js +39 -0
  42. package/dist/crud/generate_handlers.mjs +14 -0
  43. package/dist/crud/generate_pages.d.mts +11 -0
  44. package/dist/crud/generate_pages.d.ts +11 -0
  45. package/dist/crud/generate_pages.js +52 -0
  46. package/dist/crud/generate_pages.mjs +17 -0
  47. package/dist/crud/generate_routes.d.mts +5 -0
  48. package/dist/crud/generate_routes.d.ts +5 -0
  49. package/dist/crud/generate_routes.js +62 -0
  50. package/dist/crud/generate_routes.mjs +27 -0
  51. package/dist/crud/index.d.mts +21 -0
  52. package/dist/crud/index.d.ts +21 -0
  53. package/dist/crud/index.js +970 -0
  54. package/dist/crud/index.mjs +945 -0
  55. package/dist/db/index.d.mts +4 -0
  56. package/dist/db/index.d.ts +4 -0
  57. package/dist/db/index.js +46 -0
  58. package/dist/db/index.mjs +8 -0
  59. package/dist/index.d.mts +3 -2
  60. package/dist/index.d.ts +3 -2
  61. package/dist/table/buttons.d.mts +10 -0
  62. package/dist/table/buttons.d.ts +10 -0
  63. package/dist/table/buttons.js +102 -0
  64. package/dist/table/buttons.mjs +71 -0
  65. package/dist/table/index.d.mts +9 -0
  66. package/dist/table/index.d.ts +9 -0
  67. package/dist/table/index.js +570 -0
  68. package/dist/table/index.mjs +543 -0
  69. package/dist/table/item_loader.d.mts +12 -0
  70. package/dist/table/item_loader.d.ts +12 -0
  71. package/dist/table/item_loader.js +51 -0
  72. package/dist/table/item_loader.mjs +26 -0
  73. package/dist/table/loader.d.mts +28 -0
  74. package/dist/table/loader.d.ts +28 -0
  75. package/dist/table/loader.js +70 -0
  76. package/dist/table/loader.mjs +48 -0
  77. package/dist/table/page.d.mts +27 -0
  78. package/dist/table/page.d.ts +27 -0
  79. package/dist/table/page.js +444 -0
  80. package/dist/table/page.mjs +415 -0
  81. package/dist/table/repository.d.mts +38 -0
  82. package/dist/table/repository.d.ts +38 -0
  83. package/dist/table/repository.js +76 -0
  84. package/dist/table/repository.mjs +56 -0
  85. package/dist/table/table.d.mts +27 -0
  86. package/dist/table/table.d.ts +27 -0
  87. package/dist/table/table.js +290 -0
  88. package/dist/table/table.mjs +255 -0
  89. package/package.json +21 -3
  90. package/dist/auth/temp_user.d.mts +0 -5
  91. package/dist/auth/temp_user.d.ts +0 -5
  92. package/dist/auth/temp_user.js +0 -18
  93. package/dist/auth/temp_user.mjs +0 -0
@@ -21,7 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var with_auth_exports = {};
22
22
  __export(with_auth_exports, {
23
23
  createWithAuthHandler: () => createWithAuthHandler,
24
- createWithTempAuthHandler: () => createWithTempAuthHandler
24
+ createWithStrictAuthHandler: () => createWithStrictAuthHandler
25
25
  });
26
26
  module.exports = __toCommonJS(with_auth_exports);
27
27
  var import_uuid = require("uuid");
@@ -31,7 +31,7 @@ var toResponse = (result) => {
31
31
  }
32
32
  return Response.json(result);
33
33
  };
34
- function createWithAuthHandler({ authService }) {
34
+ function createWithStrictAuthHandler({ authService }) {
35
35
  return function(fn) {
36
36
  const handler = async function(arg) {
37
37
  const respond = async (auth, headers = new Headers()) => {
@@ -48,9 +48,7 @@ function createWithAuthHandler({ authService }) {
48
48
  arg.request
49
49
  );
50
50
  if (accessToken) {
51
- const payload = await authService.accessTokenManager.verify(
52
- accessToken
53
- );
51
+ const payload = await authService.accessTokenManager.verify(accessToken);
54
52
  if (payload) {
55
53
  return respond(payload);
56
54
  }
@@ -60,23 +58,17 @@ function createWithAuthHandler({ authService }) {
60
58
  );
61
59
  if (refreshToken) {
62
60
  try {
63
- const newAccessToken = await authService.refreshAccessToken(
64
- refreshToken
65
- );
61
+ const newAccessToken = await authService.refreshAccessToken(refreshToken);
66
62
  const setCookieHeader = await authService.getAccessTokenSetCookie(
67
63
  newAccessToken
68
64
  );
69
65
  const headers = new Headers();
70
66
  headers.append("Set-Cookie", setCookieHeader);
71
- const payload = authService.accessTokenManager.decode(
72
- newAccessToken
73
- );
67
+ const payload = authService.accessTokenManager.decode(newAccessToken);
74
68
  return respond(payload, headers);
75
69
  } catch (e) {
76
70
  console.log(e);
77
- const setCookieHeader = await authService.getRefreshTokenSetCookie(
78
- null
79
- );
71
+ const setCookieHeader = await authService.getRefreshTokenSetCookie(null);
80
72
  const headers = new Headers();
81
73
  headers.append("Set-Cookie", setCookieHeader);
82
74
  return respond(void 0, headers);
@@ -87,13 +79,13 @@ function createWithAuthHandler({ authService }) {
87
79
  return handler;
88
80
  };
89
81
  }
90
- function createWithTempAuthHandler({
82
+ function createWithAuthHandler({
91
83
  authService,
92
84
  tempUserTokenManager,
93
85
  tempUserCookieManager
94
86
  }) {
95
87
  return function(fn) {
96
- const withAuthHandler = createWithAuthHandler({
88
+ const withAuthHandler = createWithStrictAuthHandler({
97
89
  authService
98
90
  });
99
91
  const handler = withAuthHandler((auth) => async (args) => {
@@ -110,7 +102,9 @@ function createWithTempAuthHandler({
110
102
  });
111
103
  return res;
112
104
  };
113
- const tempUserToken = await tempUserCookieManager.parse(args.request);
105
+ const tempUserToken = await tempUserCookieManager.parse(
106
+ args.request
107
+ );
114
108
  if (tempUserToken) {
115
109
  const tempUserPayload = await tempUserTokenManager.verify(tempUserToken);
116
110
  if (tempUserPayload) {
@@ -128,9 +122,7 @@ function createWithTempAuthHandler({
128
122
  role: user.role
129
123
  });
130
124
  const headers = new Headers();
131
- const setCookie = await tempUserCookieManager.serialize(
132
- newTempUserToken
133
- );
125
+ const setCookie = await tempUserCookieManager.serialize(newTempUserToken);
134
126
  headers.append("Set-Cookie", setCookie);
135
127
  const newTempUserPayload = tempUserTokenManager.decode(newTempUserToken);
136
128
  return respond(newTempUserPayload, headers);
@@ -141,5 +133,5 @@ function createWithTempAuthHandler({
141
133
  // Annotate the CommonJS export names for ESM import in node:
142
134
  0 && (module.exports = {
143
135
  createWithAuthHandler,
144
- createWithTempAuthHandler
136
+ createWithStrictAuthHandler
145
137
  });
@@ -6,7 +6,7 @@ var toResponse = (result) => {
6
6
  }
7
7
  return Response.json(result);
8
8
  };
9
- function createWithAuthHandler({ authService }) {
9
+ function createWithStrictAuthHandler({ authService }) {
10
10
  return function(fn) {
11
11
  const handler = async function(arg) {
12
12
  const respond = async (auth, headers = new Headers()) => {
@@ -23,9 +23,7 @@ function createWithAuthHandler({ authService }) {
23
23
  arg.request
24
24
  );
25
25
  if (accessToken) {
26
- const payload = await authService.accessTokenManager.verify(
27
- accessToken
28
- );
26
+ const payload = await authService.accessTokenManager.verify(accessToken);
29
27
  if (payload) {
30
28
  return respond(payload);
31
29
  }
@@ -35,23 +33,17 @@ function createWithAuthHandler({ authService }) {
35
33
  );
36
34
  if (refreshToken) {
37
35
  try {
38
- const newAccessToken = await authService.refreshAccessToken(
39
- refreshToken
40
- );
36
+ const newAccessToken = await authService.refreshAccessToken(refreshToken);
41
37
  const setCookieHeader = await authService.getAccessTokenSetCookie(
42
38
  newAccessToken
43
39
  );
44
40
  const headers = new Headers();
45
41
  headers.append("Set-Cookie", setCookieHeader);
46
- const payload = authService.accessTokenManager.decode(
47
- newAccessToken
48
- );
42
+ const payload = authService.accessTokenManager.decode(newAccessToken);
49
43
  return respond(payload, headers);
50
44
  } catch (e) {
51
45
  console.log(e);
52
- const setCookieHeader = await authService.getRefreshTokenSetCookie(
53
- null
54
- );
46
+ const setCookieHeader = await authService.getRefreshTokenSetCookie(null);
55
47
  const headers = new Headers();
56
48
  headers.append("Set-Cookie", setCookieHeader);
57
49
  return respond(void 0, headers);
@@ -62,13 +54,13 @@ function createWithAuthHandler({ authService }) {
62
54
  return handler;
63
55
  };
64
56
  }
65
- function createWithTempAuthHandler({
57
+ function createWithAuthHandler({
66
58
  authService,
67
59
  tempUserTokenManager,
68
60
  tempUserCookieManager
69
61
  }) {
70
62
  return function(fn) {
71
- const withAuthHandler = createWithAuthHandler({
63
+ const withAuthHandler = createWithStrictAuthHandler({
72
64
  authService
73
65
  });
74
66
  const handler = withAuthHandler((auth) => async (args) => {
@@ -85,7 +77,9 @@ function createWithTempAuthHandler({
85
77
  });
86
78
  return res;
87
79
  };
88
- const tempUserToken = await tempUserCookieManager.parse(args.request);
80
+ const tempUserToken = await tempUserCookieManager.parse(
81
+ args.request
82
+ );
89
83
  if (tempUserToken) {
90
84
  const tempUserPayload = await tempUserTokenManager.verify(tempUserToken);
91
85
  if (tempUserPayload) {
@@ -103,9 +97,7 @@ function createWithTempAuthHandler({
103
97
  role: user.role
104
98
  });
105
99
  const headers = new Headers();
106
- const setCookie = await tempUserCookieManager.serialize(
107
- newTempUserToken
108
- );
100
+ const setCookie = await tempUserCookieManager.serialize(newTempUserToken);
109
101
  headers.append("Set-Cookie", setCookie);
110
102
  const newTempUserPayload = tempUserTokenManager.decode(newTempUserToken);
111
103
  return respond(newTempUserPayload, headers);
@@ -115,5 +107,5 @@ function createWithTempAuthHandler({
115
107
  }
116
108
  export {
117
109
  createWithAuthHandler,
118
- createWithTempAuthHandler
110
+ createWithStrictAuthHandler
119
111
  };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ type Props = {
4
+ AdminLayout: React.FC<{
5
+ title: string;
6
+ actions?: React.ReactNode;
7
+ className?: string;
8
+ children?: React.ReactNode;
9
+ }>;
10
+ };
11
+ declare function CrudForm<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ AdminLayout }: Props): React.JSX.Element;
12
+
13
+ export { CrudForm as default };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ type Props = {
4
+ AdminLayout: React.FC<{
5
+ title: string;
6
+ actions?: React.ReactNode;
7
+ className?: string;
8
+ children?: React.ReactNode;
9
+ }>;
10
+ };
11
+ declare function CrudForm<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ AdminLayout }: Props): React.JSX.Element;
12
+
13
+ export { CrudForm as default };
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/crud/crud_form.tsx
31
+ var crud_form_exports = {};
32
+ __export(crud_form_exports, {
33
+ default: () => CrudForm
34
+ });
35
+ module.exports = __toCommonJS(crud_form_exports);
36
+
37
+ // src/crud/crud_form_provider.tsx
38
+ var import_react_router = require("react-router");
39
+ var import_store = require("dn-react-toolkit/store");
40
+ var import_react = require("react");
41
+ var import_react2 = __toESM(require("react"));
42
+ var FormContext = (0, import_react.createContext)({});
43
+ function useFormContext() {
44
+ return (0, import_react.useContext)(FormContext);
45
+ }
46
+
47
+ // src/crud/crud_form.tsx
48
+ var import_store2 = require("dn-react-toolkit/store");
49
+ var import_react3 = __toESM(require("react"));
50
+ function CrudForm({ AdminLayout }) {
51
+ const form = useFormContext();
52
+ return /* @__PURE__ */ import_react3.default.createElement(
53
+ AdminLayout,
54
+ {
55
+ title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
56
+ actions: /* @__PURE__ */ import_react3.default.createElement(
57
+ "button",
58
+ {
59
+ type: "button",
60
+ className: "button-primary",
61
+ onClick: form.submit
62
+ },
63
+ "\uC800\uC7A5\uD558\uAE30"
64
+ ),
65
+ className: "max-w-3xl mx-auto"
66
+ },
67
+ Object.keys(form.columns).length > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, Object.entries(form.columns).map(
68
+ ([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(
69
+ import_store2.SyncInput,
70
+ {
71
+ store: form.store,
72
+ property: key,
73
+ className: "input-form"
74
+ }
75
+ ))
76
+ )),
77
+ form.item && /* @__PURE__ */ import_react3.default.createElement(
78
+ "button",
79
+ {
80
+ className: "button-dangerous mt-8",
81
+ onClick: () => {
82
+ form.delete();
83
+ }
84
+ },
85
+ "\uC0AD\uC81C\uD558\uAE30"
86
+ )
87
+ );
88
+ }
@@ -0,0 +1,55 @@
1
+ // src/crud/crud_form_provider.tsx
2
+ import { useNavigate } from "react-router";
3
+ import { useStore } from "dn-react-toolkit/store";
4
+ import { createContext, useContext } from "react";
5
+ import React from "react";
6
+ var FormContext = createContext({});
7
+ function useFormContext() {
8
+ return useContext(FormContext);
9
+ }
10
+
11
+ // src/crud/crud_form.tsx
12
+ import { SyncInput } from "dn-react-toolkit/store";
13
+ import React2 from "react";
14
+ function CrudForm({ AdminLayout }) {
15
+ const form = useFormContext();
16
+ return /* @__PURE__ */ React2.createElement(
17
+ AdminLayout,
18
+ {
19
+ title: `${form.name} ${form.item ? "\uC218\uC815" : "\uCD94\uAC00"}`,
20
+ actions: /* @__PURE__ */ React2.createElement(
21
+ "button",
22
+ {
23
+ type: "button",
24
+ className: "button-primary",
25
+ onClick: form.submit
26
+ },
27
+ "\uC800\uC7A5\uD558\uAE30"
28
+ ),
29
+ className: "max-w-3xl mx-auto"
30
+ },
31
+ Object.keys(form.columns).length > 0 && /* @__PURE__ */ React2.createElement(React2.Fragment, null, Object.entries(form.columns).map(
32
+ ([key, value]) => /* @__PURE__ */ React2.createElement("label", { key }, value.label, value.component ? /* @__PURE__ */ React2.createElement(value.component, null) : /* @__PURE__ */ React2.createElement(
33
+ SyncInput,
34
+ {
35
+ store: form.store,
36
+ property: key,
37
+ className: "input-form"
38
+ }
39
+ ))
40
+ )),
41
+ form.item && /* @__PURE__ */ React2.createElement(
42
+ "button",
43
+ {
44
+ className: "button-dangerous mt-8",
45
+ onClick: () => {
46
+ form.delete();
47
+ }
48
+ },
49
+ "\uC0AD\uC81C\uD558\uAE30"
50
+ )
51
+ );
52
+ }
53
+ export {
54
+ CrudForm as default
55
+ };
@@ -0,0 +1,34 @@
1
+ import { RxStore } from 'dn-react-toolkit/store';
2
+ import { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
+ import React from 'react';
4
+
5
+ type FormState<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Omit<TModel, TPrimaryKey> & {
6
+ [K in TPrimaryKey]?: TModel[K];
7
+ };
8
+ type FormColumnValue = {
9
+ label: string;
10
+ component?: React.FC;
11
+ };
12
+ type FormColumns<T> = Partial<{
13
+ [K in T extends PgTableWithColumns<infer U> ? keyof U["columns"] : never]: FormColumnValue;
14
+ }>;
15
+ declare const FormContext: React.Context<{}>;
16
+ declare function useFormContext<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>(): {
17
+ name: string;
18
+ item?: TModel;
19
+ store: RxStore<FormState<TModel, TPrimaryKey>>;
20
+ submit: () => Promise<void>;
21
+ delete: () => Promise<void>;
22
+ columns: FormColumns<TModel>;
23
+ };
24
+ type CrudFormProps<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = {
25
+ primaryKey?: TPrimaryKey;
26
+ name: string;
27
+ prefix: string;
28
+ item?: TModel;
29
+ columns?: FormColumns<TModel>;
30
+ children?: React.ReactNode;
31
+ };
32
+ declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>): React.JSX.Element;
33
+
34
+ export { type CrudFormProps, type FormColumnValue, type FormColumns, FormContext, type FormState, CrudFormProvider as default, useFormContext };
@@ -0,0 +1,34 @@
1
+ import { RxStore } from 'dn-react-toolkit/store';
2
+ import { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
+ import React from 'react';
4
+
5
+ type FormState<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = Omit<TModel, TPrimaryKey> & {
6
+ [K in TPrimaryKey]?: TModel[K];
7
+ };
8
+ type FormColumnValue = {
9
+ label: string;
10
+ component?: React.FC;
11
+ };
12
+ type FormColumns<T> = Partial<{
13
+ [K in T extends PgTableWithColumns<infer U> ? keyof U["columns"] : never]: FormColumnValue;
14
+ }>;
15
+ declare const FormContext: React.Context<{}>;
16
+ declare function useFormContext<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>(): {
17
+ name: string;
18
+ item?: TModel;
19
+ store: RxStore<FormState<TModel, TPrimaryKey>>;
20
+ submit: () => Promise<void>;
21
+ delete: () => Promise<void>;
22
+ columns: FormColumns<TModel>;
23
+ };
24
+ type CrudFormProps<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never> = {
25
+ primaryKey?: TPrimaryKey;
26
+ name: string;
27
+ prefix: string;
28
+ item?: TModel;
29
+ columns?: FormColumns<TModel>;
30
+ children?: React.ReactNode;
31
+ };
32
+ declare function CrudFormProvider<TModel, TPrimaryKey extends keyof TModel = "id" extends keyof TModel ? "id" : never>({ primaryKey, name, prefix, item, columns, children, }: CrudFormProps<TModel, TPrimaryKey>): React.JSX.Element;
33
+
34
+ export { type CrudFormProps, type FormColumnValue, type FormColumns, FormContext, type FormState, CrudFormProvider as default, useFormContext };
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/crud/crud_form_provider.tsx
31
+ var crud_form_provider_exports = {};
32
+ __export(crud_form_provider_exports, {
33
+ FormContext: () => FormContext,
34
+ default: () => CrudFormProvider,
35
+ useFormContext: () => useFormContext
36
+ });
37
+ module.exports = __toCommonJS(crud_form_provider_exports);
38
+ var import_react_router = require("react-router");
39
+ var import_store = require("dn-react-toolkit/store");
40
+ var import_react = require("react");
41
+ var import_react2 = __toESM(require("react"));
42
+ var FormContext = (0, import_react.createContext)({});
43
+ function useFormContext() {
44
+ return (0, import_react.useContext)(FormContext);
45
+ }
46
+ function CrudFormProvider({
47
+ primaryKey = "id",
48
+ name,
49
+ prefix,
50
+ item,
51
+ columns = {},
52
+ children
53
+ }) {
54
+ const apiPrefix = `/api${prefix}`;
55
+ const store = (0, import_store.useStore)({
56
+ ...item || {}
57
+ });
58
+ const navigate = (0, import_react_router.useNavigate)();
59
+ const submit = async () => {
60
+ const res = await fetch(apiPrefix, {
61
+ method: "POST",
62
+ headers: {
63
+ "Content-Type": "application/json"
64
+ },
65
+ body: JSON.stringify(
66
+ Object.entries(store.state).reduce(
67
+ function reducer(acc, [key, value]) {
68
+ const converter = (value2) => {
69
+ if (value2 === void 0) {
70
+ return void 0;
71
+ }
72
+ if (value2 === null) {
73
+ return {
74
+ type: "null",
75
+ value: null
76
+ };
77
+ }
78
+ if (typeof value2 === "string") {
79
+ return {
80
+ type: "string",
81
+ value: value2
82
+ };
83
+ }
84
+ if (typeof value2 === "number") {
85
+ return {
86
+ type: "number",
87
+ value: value2
88
+ };
89
+ }
90
+ if (typeof value2 === "boolean") {
91
+ return {
92
+ type: "boolean",
93
+ value: value2
94
+ };
95
+ }
96
+ if (value2 instanceof Date) {
97
+ return {
98
+ type: "date",
99
+ value: value2.toISOString()
100
+ };
101
+ }
102
+ if (Array.isArray(value2)) {
103
+ return value2.map((v) => converter(v));
104
+ }
105
+ if (typeof value2 === "object") {
106
+ return Object.entries(
107
+ value2
108
+ ).reduce(reducer, {});
109
+ }
110
+ };
111
+ return {
112
+ ...acc,
113
+ [key]: converter(value)
114
+ };
115
+ },
116
+ {}
117
+ )
118
+ )
119
+ });
120
+ if (!res.ok) {
121
+ const { message } = await res.json();
122
+ alert(message);
123
+ return;
124
+ }
125
+ alert(`${name}\uB97C \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4.`);
126
+ const { id } = await res.json();
127
+ navigate(`${prefix}/${id}`);
128
+ };
129
+ const deleteItem = async () => {
130
+ if (!item || !primaryKey) {
131
+ return;
132
+ }
133
+ const ok = confirm("\uC815\uB9D0\uB85C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?");
134
+ if (!ok) {
135
+ return;
136
+ }
137
+ const res = await fetch(`${apiPrefix}/${item[primaryKey]}`, {
138
+ method: "DELETE"
139
+ });
140
+ if (!res.ok) {
141
+ const { message } = await res.json();
142
+ alert(message);
143
+ return;
144
+ }
145
+ alert(`${name}\uB97C \uC0AD\uC81C\uD588\uC2B5\uB2C8\uB2E4.`);
146
+ navigate(`${prefix}`);
147
+ };
148
+ return /* @__PURE__ */ import_react2.default.createElement(
149
+ FormContext.Provider,
150
+ {
151
+ value: { name, item, store, submit, delete: deleteItem, columns }
152
+ },
153
+ children
154
+ );
155
+ }
156
+ // Annotate the CommonJS export names for ESM import in node:
157
+ 0 && (module.exports = {
158
+ FormContext,
159
+ useFormContext
160
+ });