@jswork/react-ant-resource-form 1.0.4 → 1.0.6
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/main.cjs.js +1 -1
- package/dist/main.cjs.js.map +1 -1
- package/dist/main.d.mts +2 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.esm.js +1 -1
- package/dist/main.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/api.tsx +12 -1
- package/src/hooks.ts +18 -0
package/dist/main.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var T=Object.defineProperty;var g=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var L=(a,t,e)=>t in a?T(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,c=(a,t)=>{for(var e in t||(t={}))B.call(t,e)&&L(a,e,t[e]);if(g)for(var e of g(t))K.call(t,e)&&L(a,e,t[e]);return a};var s=(a,t)=>T(a,"name",{value:t,configurable:!0});var x=(a,t)=>{var e={};for(var o in a)B.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&g)for(var o of g(a))t.indexOf(o)<0&&K.call(a,o)&&(e[o]=a[o]);return e};var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _antd = require('antd');var _reactantformschema = require('@jswork/react-ant-form-schema'); var _reactantformschema2 = _interopRequireDefault(_reactantformschema);var _icons = require('@ant-design/icons');var P="react-ant-resource-form",I={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}},J={lang:"zh-CN"},Q=s(a=>{let S=c(c({},J),a),{className:t,meta:e,children:o,lang:p,title:f,loading:C,extra:A,size:F,okText:v,backText:E,okProps:h,backProps:i}=S,d=x(S,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps"]),y=s($=>I[p][$],"t"),m=s(()=>history.back(),"handleBack"),_=A||_react2.default.createElement(_antd.Button,c({size:"small",icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:m},i),E||y("back")),k=o||_react2.default.createElement(_antd.Space,null,_react2.default.createElement(_antd.Button,c({htmlType:"submit",type:"primary",icon:_react2.default.createElement(_icons.SaveOutlined,null)},h),v||y("submit")),_react2.default.createElement(_antd.Button,c({icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:m},i),E||y("back")));return _react2.default.createElement(_antd.Card,{title:f,size:F,loading:C,"data-component":P,className:_classnames2.default.call(void 0, P,t),extra:_},_react2.default.createElement(_reactantformschema2.default,c({meta:e},d),k))},"ReactAntResourceForm"),z= exports.ReactAntResourceForm =Q;var _next = require('@jswork/next'); var _next2 = _interopRequireDefault(_next);var H=s(a=>{let t=s(function(e){(e.ctrlKey||e.metaKey)&&e.key==="s"&&(e.preventDefault(),a(e))},"handler");_react.useEffect.call(void 0, ()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}),[])},"useKeyboardSave");var te={"zh-CN":{create:"\u521B\u5EFA",update:"\u4FDD\u5B58",create_title:"\u521B\u5EFA",update_title:"\u66F4\u65B0",create_success:"\u521B\u5EFA\u6210\u529F",update_success:"\u66F4\u65B0\u6210\u529F"},"en-US":{create:"Create",update:"Save",create_title:"Create",update_title:"Update",create_success:"Create success",update_success:"Update success"}},ae={lang:"zh-CN",disableHotkeySave:!1},oe=s(a=>{let N=c(c({},ae),a),{name:t,params:e,lang:o,transformRequest:p,transformResponse:f,disableHotkeySave:C}=N,A=x(N,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),F=`${t}_update`,v=`${t}_create`,E=`${t}_show`,[h]=_antd.Form.useForm(),i=!!(e!=null&&e.id),d=s(n=>te[o][n],"t"),[y,m]=_react.useState.call(void 0, !1),_=s(n=>(m(!0),(p==null?void 0:p(n))||n.payload),"handleStateRequest"),k=s(n=>{var r,u;return m(!1),(u=(r=_next2.default.$event)==null?void 0:r.emit)==null||u.call(r,`${t}:refetch`),(f==null?void 0:f(n))||n.data},"handleStateResponse"),S=s(n=>{if(i){let r=c({id:e.id},n),u=_({stage:"update",payload:r});_next2.default.$api[F](u).then(b=>{_antd.message.success(d("update_success")),k({stage:"update",data:b})}).finally(()=>m(!1))}else{let r=c({},n),u=_({stage:"create",payload:r});_next2.default.$api[v](u).then(b=>{_antd.message.success(d("create_success")),k({stage:"create",data:b})}).finally(()=>m(!1))}},"handleFinish");H(()=>{C||h.submit()}),_react.useEffect.call(void 0, ()=>{if(i){let n={id:e.id},r=_({stage:"show",payload:n});_next2.default.$api[E](r).then(u=>{let b=k({stage:"show",data:u});h.setFieldsValue(b)}).finally(()=>m(!1))}},[i,e==null?void 0:e.id]);let $=d(i?"update":"create"),D=d(i?"update_title":"create_title");return _react2.default.createElement(z,c({loading:y,form:h,onFinish:S,okText:$,title:D},A))},"ReactAntResourceFormApi"),ce= exports.ReactAntResourceFormApi =oe;exports.ReactAntResourceForm = z; exports.ReactAntResourceFormApi = ce;
|
|
2
2
|
//# sourceMappingURL=main.cjs.js.map
|
package/dist/main.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/ap7/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","../src/index.tsx","../src/api.tsx"],"names":["CLASS_NAME","locales","submit","back","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","rest","t","key","handleBack","history","_extra","React","Button","icon","ArrowLeftOutlined","onClick","_children","Space","htmlType","type","SaveOutlined","Card","data-component","cx","ReactAntdFormSchema","index_default","create","update","create_title","update_title","create_success","update_success","ReactAntResourceFormApi","name","params","transformRequest","transformResponse","resourceEdit"],"mappings":"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","file":"/Users/ap7/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","sourcesContent":[null,"// import noop from '@jswork/noop';\nimport cx from 'classnames';\nimport React, { FC } from 'react';\nimport { Button, ButtonProps, Card, CardProps, Space } from 'antd';\nimport ReactAntdFormSchema, { ReactAntdFormSchemaProps } from '@jswork/react-ant-form-schema';\nimport { ArrowLeftOutlined, SaveOutlined } from '@ant-design/icons';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\nconst locales = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {\n const {\n className,\n meta,\n children,\n lang,\n title,\n loading,\n extra,\n size,\n okText,\n backText,\n okProps,\n backProps,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n const t = (key: string) => locales[lang][key];\n const handleBack = () => history.back();\n const _extra = extra || (\n <Button size=\"small\" icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n );\n const _children = children || (\n <Space>\n <Button htmlType=\"submit\" type=\"primary\" icon={<SaveOutlined />} {...okProps}>\n {okText || t('submit')}\n </Button>\n <Button icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n </Space>\n );\n\n return (\n <Card\n title={title}\n size={size}\n loading={loading}\n data-component={CLASS_NAME}\n className={cx(CLASS_NAME, className)}\n extra={_extra}>\n <ReactAntdFormSchema meta={meta} {...rest}>\n {_children}\n </ReactAntdFormSchema>\n </Card>\n );\n};\n\nexport default ReactAntResourceForm;\n","import React, { FC, useEffect, useState } from 'react';\nimport ReactAntResourceForm, { ReactAntResourceFormProps } from '.';\nimport { Form, message } from 'antd';\nimport nx from '@jswork/next';\n\ndeclare global {\n interface NxStatic {\n $api: Record<string, any>;\n }\n}\n\ntype StagePayload = {\n stage: 'show' | 'create' | 'update';\n payload: any;\n};\n\ntype StageData = {\n stage: 'show' | 'create' | 'update';\n data: any;\n};\n\nexport type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {\n lang?: string;\n params?: Record<string, any>;\n transformRequest?: (payload: StagePayload) => any;\n transformResponse?: (res: StageData) => any;\n};\n\nconst locales = {\n 'zh-CN': {\n create: '创建',\n update: '保存',\n create_title: '创建',\n update_title: '更新',\n create_success: '创建成功',\n update_success: '更新成功',\n },\n 'en-US': {\n create: 'Create',\n update: 'Save',\n create_title: 'Create',\n update_title: 'Update',\n create_success: 'Create success',\n update_success: 'Update success',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {\n const { name, params, lang, transformRequest, transformResponse, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const resourceEdit = `${name}_update`;\n const resourceCreate = `${name}_create`;\n const resourceShow = `${name}_show`;\n const [form] = Form.useForm();\n const isEdit = Boolean(params?.id);\n const t = (key: string) => locales[lang!][key];\n const [loading, setLoading] = useState(false);\n const handleStateRequest = (stagePayload: StagePayload) => {\n setLoading(true);\n return transformRequest?.(stagePayload) || stagePayload.payload;\n };\n const handleStateResponse = (res: StageData) => {\n setLoading(false);\n return transformResponse?.(res) || res.data;\n };\n\n const handleFinish = (values) => {\n if (isEdit) {\n const payload = { id: params!.id, ...values };\n const _payload = handleStateRequest({ stage: 'update', payload });\n\n nx.$api[resourceEdit](_payload)\n .then((res) => {\n message.success(t('update_success'));\n handleStateResponse({ stage: 'update', data: res });\n })\n .finally(() => setLoading(false));\n } else {\n const payload = { ...values };\n const _payload = handleStateRequest({ stage: 'create', payload });\n\n nx.$api[resourceCreate](_payload)\n .then((res) => {\n message.success(t('create_success'));\n handleStateResponse({ stage: 'create', data: res });\n })\n .finally(() => setLoading(false));\n }\n };\n\n // init detail\n useEffect(() => {\n if (isEdit) {\n const payload = { id: params!.id };\n const _payload = handleStateRequest({ stage: 'show', payload });\n nx.$api[resourceShow](_payload)\n .then((res) => {\n const data = handleStateResponse({ stage: 'show', data: res });\n form.setFieldsValue(data);\n })\n .finally(() => setLoading(false));\n }\n }, [isEdit, params?.id]);\n\n const okText = isEdit ? t('update') : t('create');\n const title = isEdit ? t('update_title') : t('create_title');\n\n return (\n <ReactAntResourceForm\n loading={loading}\n form={form}\n onFinish={handleFinish}\n okText={okText}\n title={title}\n {...rest}\n />\n );\n};\n\nexport default ReactAntResourceFormApi;\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/aric/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","../src/index.tsx","../src/api.tsx","../src/hooks.ts"],"names":["CLASS_NAME","locales","submit","back","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","rest","t","key","handleBack","history","_extra","React","Button","icon","ArrowLeftOutlined","onClick","_children","Space","htmlType","type","SaveOutlined","Card","data-component","cx","ReactAntdFormSchema","index_default","useKeyboardSave","callback","handler","e","ctrlKey","metaKey","preventDefault","useEffect","document","addEventListener","removeEventListener","create","update","create_title","update_title","create_success","update_success","disableHotkeySave","ReactAntResourceFormApi","name","params","transformRequest","transformResponse","resourceEdit"],"mappings":"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","file":"/Users/aric/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","sourcesContent":[null,"// import noop from '@jswork/noop';\nimport cx from 'classnames';\nimport React, { FC } from 'react';\nimport { Button, ButtonProps, Card, CardProps, Space } from 'antd';\nimport ReactAntdFormSchema, { ReactAntdFormSchemaProps } from '@jswork/react-ant-form-schema';\nimport { ArrowLeftOutlined, SaveOutlined } from '@ant-design/icons';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\nconst locales = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {\n const {\n className,\n meta,\n children,\n lang,\n title,\n loading,\n extra,\n size,\n okText,\n backText,\n okProps,\n backProps,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n const t = (key: string) => locales[lang][key];\n const handleBack = () => history.back();\n const _extra = extra || (\n <Button size=\"small\" icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n );\n const _children = children || (\n <Space>\n <Button htmlType=\"submit\" type=\"primary\" icon={<SaveOutlined />} {...okProps}>\n {okText || t('submit')}\n </Button>\n <Button icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n </Space>\n );\n\n return (\n <Card\n title={title}\n size={size}\n loading={loading}\n data-component={CLASS_NAME}\n className={cx(CLASS_NAME, className)}\n extra={_extra}>\n <ReactAntdFormSchema meta={meta} {...rest}>\n {_children}\n </ReactAntdFormSchema>\n </Card>\n );\n};\n\nexport default ReactAntResourceForm;\n","import React, { FC, useEffect, useState } from 'react';\nimport ReactAntResourceForm, { ReactAntResourceFormProps } from '.';\nimport { Form, message } from 'antd';\nimport nx from '@jswork/next';\nimport { useKeyboardSave } from './hooks';\n\ndeclare global {\n interface NxStatic {\n $api: Record<string, any>;\n $event: any;\n }\n}\n\ntype StagePayload = {\n stage: 'show' | 'create' | 'update';\n payload: any;\n};\n\ntype StageData = {\n stage: 'show' | 'create' | 'update';\n data: any;\n};\n\nexport type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {\n lang?: string;\n params?: Record<string, any>;\n disableHotkeySave?: boolean;\n transformRequest?: (payload: StagePayload) => any;\n transformResponse?: (res: StageData) => any;\n};\n\nconst locales = {\n 'zh-CN': {\n create: '创建',\n update: '保存',\n create_title: '创建',\n update_title: '更新',\n create_success: '创建成功',\n update_success: '更新成功',\n },\n 'en-US': {\n create: 'Create',\n update: 'Save',\n create_title: 'Create',\n update_title: 'Update',\n create_success: 'Create success',\n update_success: 'Update success',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n disableHotkeySave: false,\n};\n\nconst ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {\n const { name, params, lang, transformRequest, transformResponse, disableHotkeySave, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const resourceEdit = `${name}_update`;\n const resourceCreate = `${name}_create`;\n const resourceShow = `${name}_show`;\n const [form] = Form.useForm();\n const isEdit = Boolean(params?.id);\n const t = (key: string) => locales[lang!][key];\n const [loading, setLoading] = useState(false);\n const handleStateRequest = (stagePayload: StagePayload) => {\n setLoading(true);\n return transformRequest?.(stagePayload) || stagePayload.payload;\n };\n\n const handleStateResponse = (res: StageData) => {\n setLoading(false);\n nx.$event?.emit?.(`${name}:refetch`);\n return transformResponse?.(res) || res.data;\n };\n\n const handleFinish = (values) => {\n if (isEdit) {\n const payload = { id: params!.id, ...values };\n const _payload = handleStateRequest({ stage: 'update', payload });\n\n nx.$api[resourceEdit](_payload)\n .then((res) => {\n message.success(t('update_success'));\n handleStateResponse({ stage: 'update', data: res });\n })\n .finally(() => setLoading(false));\n } else {\n const payload = { ...values };\n const _payload = handleStateRequest({ stage: 'create', payload });\n\n nx.$api[resourceCreate](_payload)\n .then((res) => {\n message.success(t('create_success'));\n handleStateResponse({ stage: 'create', data: res });\n })\n .finally(() => setLoading(false));\n }\n };\n\n // hotkey save\n useKeyboardSave(() => {\n if (!disableHotkeySave) form.submit();\n });\n\n // init detail\n useEffect(() => {\n if (isEdit) {\n const payload = { id: params!.id };\n const _payload = handleStateRequest({ stage: 'show', payload });\n nx.$api[resourceShow](_payload)\n .then((res) => {\n const data = handleStateResponse({ stage: 'show', data: res });\n form.setFieldsValue(data);\n })\n .finally(() => setLoading(false));\n }\n }, [isEdit, params?.id]);\n\n const okText = isEdit ? t('update') : t('create');\n const title = isEdit ? t('update_title') : t('create_title');\n\n return (\n <ReactAntResourceForm\n loading={loading}\n form={form}\n onFinish={handleFinish}\n okText={okText}\n title={title}\n {...rest}\n />\n );\n};\n\nexport default ReactAntResourceFormApi;\n","import { useEffect } from 'react';\n\nexport const useKeyboardSave = (callback: (e: KeyboardEvent) => void) => {\n const handler = function (e: KeyboardEvent) {\n // 检查是否按下了 Ctrl+S (Windows/Linux) 或 Cmd+S (macOS)\n if ((e.ctrlKey || e.metaKey) && e.key === 's') {\n e.preventDefault();\n callback(e);\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', handler);\n return () => {\n document.removeEventListener('keydown', handler);\n };\n }, []);\n};\n"]}
|
package/dist/main.d.mts
CHANGED
|
@@ -18,6 +18,7 @@ declare const ReactAntResourceForm: FC<ReactAntResourceFormProps>;
|
|
|
18
18
|
declare global {
|
|
19
19
|
interface NxStatic {
|
|
20
20
|
$api: Record<string, any>;
|
|
21
|
+
$event: any;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
type StagePayload = {
|
|
@@ -31,6 +32,7 @@ type StageData = {
|
|
|
31
32
|
type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {
|
|
32
33
|
lang?: string;
|
|
33
34
|
params?: Record<string, any>;
|
|
35
|
+
disableHotkeySave?: boolean;
|
|
34
36
|
transformRequest?: (payload: StagePayload) => any;
|
|
35
37
|
transformResponse?: (res: StageData) => any;
|
|
36
38
|
};
|
package/dist/main.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ declare const ReactAntResourceForm: FC<ReactAntResourceFormProps>;
|
|
|
18
18
|
declare global {
|
|
19
19
|
interface NxStatic {
|
|
20
20
|
$api: Record<string, any>;
|
|
21
|
+
$event: any;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
type StagePayload = {
|
|
@@ -31,6 +32,7 @@ type StageData = {
|
|
|
31
32
|
type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {
|
|
32
33
|
lang?: string;
|
|
33
34
|
params?: Record<string, any>;
|
|
35
|
+
disableHotkeySave?: boolean;
|
|
34
36
|
transformRequest?: (payload: StagePayload) => any;
|
|
35
37
|
transformResponse?: (res: StageData) => any;
|
|
36
38
|
};
|
package/dist/main.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var T=Object.defineProperty;var g=Object.getOwnPropertySymbols;var B=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var L=(a,t,e)=>t in a?T(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,c=(a,t)=>{for(var e in t||(t={}))B.call(t,e)&&L(a,e,t[e]);if(g)for(var e of g(t))K.call(t,e)&&L(a,e,t[e]);return a};var s=(a,t)=>T(a,"name",{value:t,configurable:!0});var x=(a,t)=>{var e={};for(var o in a)B.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&g)for(var o of g(a))t.indexOf(o)<0&&K.call(a,o)&&(e[o]=a[o]);return e};import M from"classnames";import l from"react";import{Button as w,Card as V,Space as j}from"antd";import q from"@jswork/react-ant-form-schema";import{ArrowLeftOutlined as U,SaveOutlined as G}from"@ant-design/icons";var P="react-ant-resource-form",I={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}},J={lang:"zh-CN"},Q=s(a=>{let S=c(c({},J),a),{className:t,meta:e,children:o,lang:p,title:f,loading:C,extra:A,size:F,okText:v,backText:E,okProps:h,backProps:i}=S,d=x(S,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps"]),y=s($=>I[p][$],"t"),m=s(()=>history.back(),"handleBack"),_=A||l.createElement(w,c({size:"small",icon:l.createElement(U,null),onClick:m},i),E||y("back")),k=o||l.createElement(j,null,l.createElement(w,c({htmlType:"submit",type:"primary",icon:l.createElement(G,null)},h),v||y("submit")),l.createElement(w,c({icon:l.createElement(U,null),onClick:m},i),E||y("back")));return l.createElement(V,{title:f,size:F,loading:C,"data-component":P,className:M(P,t),extra:_},l.createElement(q,c({meta:e},d),k))},"ReactAntResourceForm"),z=Q;import X,{useEffect as Y,useState as Z}from"react";import{Form as ee,message as O}from"antd";import R from"@jswork/next";import{useEffect as W}from"react";var H=s(a=>{let t=s(function(e){(e.ctrlKey||e.metaKey)&&e.key==="s"&&(e.preventDefault(),a(e))},"handler");W(()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}),[])},"useKeyboardSave");var te={"zh-CN":{create:"\u521B\u5EFA",update:"\u4FDD\u5B58",create_title:"\u521B\u5EFA",update_title:"\u66F4\u65B0",create_success:"\u521B\u5EFA\u6210\u529F",update_success:"\u66F4\u65B0\u6210\u529F"},"en-US":{create:"Create",update:"Save",create_title:"Create",update_title:"Update",create_success:"Create success",update_success:"Update success"}},ae={lang:"zh-CN",disableHotkeySave:!1},oe=s(a=>{let N=c(c({},ae),a),{name:t,params:e,lang:o,transformRequest:p,transformResponse:f,disableHotkeySave:C}=N,A=x(N,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),F=`${t}_update`,v=`${t}_create`,E=`${t}_show`,[h]=ee.useForm(),i=!!(e!=null&&e.id),d=s(n=>te[o][n],"t"),[y,m]=Z(!1),_=s(n=>(m(!0),(p==null?void 0:p(n))||n.payload),"handleStateRequest"),k=s(n=>{var r,u;return m(!1),(u=(r=R.$event)==null?void 0:r.emit)==null||u.call(r,`${t}:refetch`),(f==null?void 0:f(n))||n.data},"handleStateResponse"),S=s(n=>{if(i){let r=c({id:e.id},n),u=_({stage:"update",payload:r});R.$api[F](u).then(b=>{O.success(d("update_success")),k({stage:"update",data:b})}).finally(()=>m(!1))}else{let r=c({},n),u=_({stage:"create",payload:r});R.$api[v](u).then(b=>{O.success(d("create_success")),k({stage:"create",data:b})}).finally(()=>m(!1))}},"handleFinish");H(()=>{C||h.submit()}),Y(()=>{if(i){let n={id:e.id},r=_({stage:"show",payload:n});R.$api[E](r).then(u=>{let b=k({stage:"show",data:u});h.setFieldsValue(b)}).finally(()=>m(!1))}},[i,e==null?void 0:e.id]);let $=d(i?"update":"create"),D=d(i?"update_title":"create_title");return X.createElement(z,c({loading:y,form:h,onFinish:S,okText:$,title:D},A))},"ReactAntResourceFormApi"),ce=oe;export{z as ReactAntResourceForm,ce as ReactAntResourceFormApi};
|
|
2
2
|
//# sourceMappingURL=main.esm.js.map
|
package/dist/main.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/api.tsx"],"sourcesContent":["// import noop from '@jswork/noop';\nimport cx from 'classnames';\nimport React, { FC } from 'react';\nimport { Button, ButtonProps, Card, CardProps, Space } from 'antd';\nimport ReactAntdFormSchema, { ReactAntdFormSchemaProps } from '@jswork/react-ant-form-schema';\nimport { ArrowLeftOutlined, SaveOutlined } from '@ant-design/icons';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\nconst locales = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {\n const {\n className,\n meta,\n children,\n lang,\n title,\n loading,\n extra,\n size,\n okText,\n backText,\n okProps,\n backProps,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n const t = (key: string) => locales[lang][key];\n const handleBack = () => history.back();\n const _extra = extra || (\n <Button size=\"small\" icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n );\n const _children = children || (\n <Space>\n <Button htmlType=\"submit\" type=\"primary\" icon={<SaveOutlined />} {...okProps}>\n {okText || t('submit')}\n </Button>\n <Button icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n </Space>\n );\n\n return (\n <Card\n title={title}\n size={size}\n loading={loading}\n data-component={CLASS_NAME}\n className={cx(CLASS_NAME, className)}\n extra={_extra}>\n <ReactAntdFormSchema meta={meta} {...rest}>\n {_children}\n </ReactAntdFormSchema>\n </Card>\n );\n};\n\nexport default ReactAntResourceForm;\n","import React, { FC, useEffect, useState } from 'react';\nimport ReactAntResourceForm, { ReactAntResourceFormProps } from '.';\nimport { Form, message } from 'antd';\nimport nx from '@jswork/next';\n\ndeclare global {\n interface NxStatic {\n $api: Record<string, any>;\n }\n}\n\ntype StagePayload = {\n stage: 'show' | 'create' | 'update';\n payload: any;\n};\n\ntype StageData = {\n stage: 'show' | 'create' | 'update';\n data: any;\n};\n\nexport type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {\n lang?: string;\n params?: Record<string, any>;\n transformRequest?: (payload: StagePayload) => any;\n transformResponse?: (res: StageData) => any;\n};\n\nconst locales = {\n 'zh-CN': {\n create: '创建',\n update: '保存',\n create_title: '创建',\n update_title: '更新',\n create_success: '创建成功',\n update_success: '更新成功',\n },\n 'en-US': {\n create: 'Create',\n update: 'Save',\n create_title: 'Create',\n update_title: 'Update',\n create_success: 'Create success',\n update_success: 'Update success',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {\n const { name, params, lang, transformRequest, transformResponse, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const resourceEdit = `${name}_update`;\n const resourceCreate = `${name}_create`;\n const resourceShow = `${name}_show`;\n const [form] = Form.useForm();\n const isEdit = Boolean(params?.id);\n const t = (key: string) => locales[lang!][key];\n const [loading, setLoading] = useState(false);\n const handleStateRequest = (stagePayload: StagePayload) => {\n setLoading(true);\n return transformRequest?.(stagePayload) || stagePayload.payload;\n };\n const handleStateResponse = (res: StageData) => {\n setLoading(false);\n return transformResponse?.(res) || res.data;\n };\n\n const handleFinish = (values) => {\n if (isEdit) {\n const payload = { id: params!.id, ...values };\n const _payload = handleStateRequest({ stage: 'update', payload });\n\n nx.$api[resourceEdit](_payload)\n .then((res) => {\n message.success(t('update_success'));\n handleStateResponse({ stage: 'update', data: res });\n })\n .finally(() => setLoading(false));\n } else {\n const payload = { ...values };\n const _payload = handleStateRequest({ stage: 'create', payload });\n\n nx.$api[resourceCreate](_payload)\n .then((res) => {\n message.success(t('create_success'));\n handleStateResponse({ stage: 'create', data: res });\n })\n .finally(() => setLoading(false));\n }\n };\n\n // init detail\n useEffect(() => {\n if (isEdit) {\n const payload = { id: params!.id };\n const _payload = handleStateRequest({ stage: 'show', payload });\n nx.$api[resourceShow](_payload)\n .then((res) => {\n const data = handleStateResponse({ stage: 'show', data: res });\n form.setFieldsValue(data);\n })\n .finally(() => setLoading(false));\n }\n }, [isEdit, params?.id]);\n\n const okText = isEdit ? t('update') : t('create');\n const title = isEdit ? t('update_title') : t('create_title');\n\n return (\n <ReactAntResourceForm\n loading={loading}\n form={form}\n onFinish={handleFinish}\n okText={okText}\n title={title}\n {...rest}\n />\n );\n};\n\nexport default ReactAntResourceFormApi;\n"],"mappings":"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","names":["cx","React","Button","Card","Space","ReactAntdFormSchema","ArrowLeftOutlined","SaveOutlined","CLASS_NAME","locales","submit","back","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","rest","t","key","handleBack","history","_extra","React","Button","icon","ArrowLeftOutlined","onClick","_children","Space","htmlType","type","SaveOutlined","Card","data-component","cx","ReactAntdFormSchema","index_default","React","useEffect","useState","Form","message","nx","locales","create","update","create_title","update_title","create_success","update_success","defaultProps","lang","ReactAntResourceFormApi","__name","props","_a","__spreadValues","name","params","transformRequest","transformResponse","rest","resourceEdit","resourceCreate","resourceShow","form","Form","useForm","isEdit","Boolean","id","t","key","loading","setLoading","useState","handleStateRequest","stagePayload","payload","handleStateResponse","res","data","handleFinish","values","_payload","stage","nx","$api","then","message","success","finally","useEffect","setFieldsValue","okText","title","React","ReactAntResourceForm","onFinish","api_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/api.tsx","../src/hooks.ts"],"sourcesContent":["// import noop from '@jswork/noop';\nimport cx from 'classnames';\nimport React, { FC } from 'react';\nimport { Button, ButtonProps, Card, CardProps, Space } from 'antd';\nimport ReactAntdFormSchema, { ReactAntdFormSchemaProps } from '@jswork/react-ant-form-schema';\nimport { ArrowLeftOutlined, SaveOutlined } from '@ant-design/icons';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\nconst locales = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n};\n\nconst ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {\n const {\n className,\n meta,\n children,\n lang,\n title,\n loading,\n extra,\n size,\n okText,\n backText,\n okProps,\n backProps,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n const t = (key: string) => locales[lang][key];\n const handleBack = () => history.back();\n const _extra = extra || (\n <Button size=\"small\" icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n );\n const _children = children || (\n <Space>\n <Button htmlType=\"submit\" type=\"primary\" icon={<SaveOutlined />} {...okProps}>\n {okText || t('submit')}\n </Button>\n <Button icon={<ArrowLeftOutlined />} onClick={handleBack} {...backProps}>\n {backText || t('back')}\n </Button>\n </Space>\n );\n\n return (\n <Card\n title={title}\n size={size}\n loading={loading}\n data-component={CLASS_NAME}\n className={cx(CLASS_NAME, className)}\n extra={_extra}>\n <ReactAntdFormSchema meta={meta} {...rest}>\n {_children}\n </ReactAntdFormSchema>\n </Card>\n );\n};\n\nexport default ReactAntResourceForm;\n","import React, { FC, useEffect, useState } from 'react';\nimport ReactAntResourceForm, { ReactAntResourceFormProps } from '.';\nimport { Form, message } from 'antd';\nimport nx from '@jswork/next';\nimport { useKeyboardSave } from './hooks';\n\ndeclare global {\n interface NxStatic {\n $api: Record<string, any>;\n $event: any;\n }\n}\n\ntype StagePayload = {\n stage: 'show' | 'create' | 'update';\n payload: any;\n};\n\ntype StageData = {\n stage: 'show' | 'create' | 'update';\n data: any;\n};\n\nexport type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {\n lang?: string;\n params?: Record<string, any>;\n disableHotkeySave?: boolean;\n transformRequest?: (payload: StagePayload) => any;\n transformResponse?: (res: StageData) => any;\n};\n\nconst locales = {\n 'zh-CN': {\n create: '创建',\n update: '保存',\n create_title: '创建',\n update_title: '更新',\n create_success: '创建成功',\n update_success: '更新成功',\n },\n 'en-US': {\n create: 'Create',\n update: 'Save',\n create_title: 'Create',\n update_title: 'Update',\n create_success: 'Create success',\n update_success: 'Update success',\n },\n};\n\nconst defaultProps = {\n lang: 'zh-CN',\n disableHotkeySave: false,\n};\n\nconst ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {\n const { name, params, lang, transformRequest, transformResponse, disableHotkeySave, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const resourceEdit = `${name}_update`;\n const resourceCreate = `${name}_create`;\n const resourceShow = `${name}_show`;\n const [form] = Form.useForm();\n const isEdit = Boolean(params?.id);\n const t = (key: string) => locales[lang!][key];\n const [loading, setLoading] = useState(false);\n const handleStateRequest = (stagePayload: StagePayload) => {\n setLoading(true);\n return transformRequest?.(stagePayload) || stagePayload.payload;\n };\n\n const handleStateResponse = (res: StageData) => {\n setLoading(false);\n nx.$event?.emit?.(`${name}:refetch`);\n return transformResponse?.(res) || res.data;\n };\n\n const handleFinish = (values) => {\n if (isEdit) {\n const payload = { id: params!.id, ...values };\n const _payload = handleStateRequest({ stage: 'update', payload });\n\n nx.$api[resourceEdit](_payload)\n .then((res) => {\n message.success(t('update_success'));\n handleStateResponse({ stage: 'update', data: res });\n })\n .finally(() => setLoading(false));\n } else {\n const payload = { ...values };\n const _payload = handleStateRequest({ stage: 'create', payload });\n\n nx.$api[resourceCreate](_payload)\n .then((res) => {\n message.success(t('create_success'));\n handleStateResponse({ stage: 'create', data: res });\n })\n .finally(() => setLoading(false));\n }\n };\n\n // hotkey save\n useKeyboardSave(() => {\n if (!disableHotkeySave) form.submit();\n });\n\n // init detail\n useEffect(() => {\n if (isEdit) {\n const payload = { id: params!.id };\n const _payload = handleStateRequest({ stage: 'show', payload });\n nx.$api[resourceShow](_payload)\n .then((res) => {\n const data = handleStateResponse({ stage: 'show', data: res });\n form.setFieldsValue(data);\n })\n .finally(() => setLoading(false));\n }\n }, [isEdit, params?.id]);\n\n const okText = isEdit ? t('update') : t('create');\n const title = isEdit ? t('update_title') : t('create_title');\n\n return (\n <ReactAntResourceForm\n loading={loading}\n form={form}\n onFinish={handleFinish}\n okText={okText}\n title={title}\n {...rest}\n />\n );\n};\n\nexport default ReactAntResourceFormApi;\n","import { useEffect } from 'react';\n\nexport const useKeyboardSave = (callback: (e: KeyboardEvent) => void) => {\n const handler = function (e: KeyboardEvent) {\n // 检查是否按下了 Ctrl+S (Windows/Linux) 或 Cmd+S (macOS)\n if ((e.ctrlKey || e.metaKey) && e.key === 's') {\n e.preventDefault();\n callback(e);\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', handler);\n return () => {\n document.removeEventListener('keydown', handler);\n };\n }, []);\n};\n"],"mappings":"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","names":["cx","React","Button","Card","Space","ReactAntdFormSchema","ArrowLeftOutlined","SaveOutlined","CLASS_NAME","locales","submit","back","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","rest","t","key","handleBack","history","_extra","React","Button","icon","ArrowLeftOutlined","onClick","_children","Space","htmlType","type","SaveOutlined","Card","data-component","cx","ReactAntdFormSchema","index_default","React","useEffect","useState","Form","message","nx","useEffect","useKeyboardSave","__name","callback","handler","e","ctrlKey","metaKey","key","preventDefault","useEffect","document","addEventListener","removeEventListener","locales","create","update","create_title","update_title","create_success","update_success","defaultProps","lang","disableHotkeySave","ReactAntResourceFormApi","__name","props","_a","__spreadValues","name","params","transformRequest","transformResponse","rest","resourceEdit","resourceCreate","resourceShow","form","Form","useForm","isEdit","Boolean","id","t","key","loading","setLoading","useState","handleStateRequest","stagePayload","payload","handleStateResponse","res","_b","nx","$event","emit","data","handleFinish","values","_payload","stage","$api","then","message","success","finally","useKeyboardSave","submit","useEffect","setFieldsValue","okText","title","React","ReactAntResourceForm","onFinish","api_default"]}
|
package/package.json
CHANGED
package/src/api.tsx
CHANGED
|
@@ -2,10 +2,12 @@ import React, { FC, useEffect, useState } from 'react';
|
|
|
2
2
|
import ReactAntResourceForm, { ReactAntResourceFormProps } from '.';
|
|
3
3
|
import { Form, message } from 'antd';
|
|
4
4
|
import nx from '@jswork/next';
|
|
5
|
+
import { useKeyboardSave } from './hooks';
|
|
5
6
|
|
|
6
7
|
declare global {
|
|
7
8
|
interface NxStatic {
|
|
8
9
|
$api: Record<string, any>;
|
|
10
|
+
$event: any;
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
|
|
@@ -22,6 +24,7 @@ type StageData = {
|
|
|
22
24
|
export type ReactAntResourceFormApiProps = ReactAntResourceFormProps & {
|
|
23
25
|
lang?: string;
|
|
24
26
|
params?: Record<string, any>;
|
|
27
|
+
disableHotkeySave?: boolean;
|
|
25
28
|
transformRequest?: (payload: StagePayload) => any;
|
|
26
29
|
transformResponse?: (res: StageData) => any;
|
|
27
30
|
};
|
|
@@ -47,10 +50,11 @@ const locales = {
|
|
|
47
50
|
|
|
48
51
|
const defaultProps = {
|
|
49
52
|
lang: 'zh-CN',
|
|
53
|
+
disableHotkeySave: false,
|
|
50
54
|
};
|
|
51
55
|
|
|
52
56
|
const ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {
|
|
53
|
-
const { name, params, lang, transformRequest, transformResponse, ...rest } = {
|
|
57
|
+
const { name, params, lang, transformRequest, transformResponse, disableHotkeySave, ...rest } = {
|
|
54
58
|
...defaultProps,
|
|
55
59
|
...props,
|
|
56
60
|
};
|
|
@@ -66,8 +70,10 @@ const ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {
|
|
|
66
70
|
setLoading(true);
|
|
67
71
|
return transformRequest?.(stagePayload) || stagePayload.payload;
|
|
68
72
|
};
|
|
73
|
+
|
|
69
74
|
const handleStateResponse = (res: StageData) => {
|
|
70
75
|
setLoading(false);
|
|
76
|
+
nx.$event?.emit?.(`${name}:refetch`);
|
|
71
77
|
return transformResponse?.(res) || res.data;
|
|
72
78
|
};
|
|
73
79
|
|
|
@@ -95,6 +101,11 @@ const ReactAntResourceFormApi: FC<ReactAntResourceFormApiProps> = (props) => {
|
|
|
95
101
|
}
|
|
96
102
|
};
|
|
97
103
|
|
|
104
|
+
// hotkey save
|
|
105
|
+
useKeyboardSave(() => {
|
|
106
|
+
if (!disableHotkeySave) form.submit();
|
|
107
|
+
});
|
|
108
|
+
|
|
98
109
|
// init detail
|
|
99
110
|
useEffect(() => {
|
|
100
111
|
if (isEdit) {
|
package/src/hooks.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
export const useKeyboardSave = (callback: (e: KeyboardEvent) => void) => {
|
|
4
|
+
const handler = function (e: KeyboardEvent) {
|
|
5
|
+
// 检查是否按下了 Ctrl+S (Windows/Linux) 或 Cmd+S (macOS)
|
|
6
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 's') {
|
|
7
|
+
e.preventDefault();
|
|
8
|
+
callback(e);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
document.addEventListener('keydown', handler);
|
|
14
|
+
return () => {
|
|
15
|
+
document.removeEventListener('keydown', handler);
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
};
|