@jswork/react-ant-resource-form 1.0.7 → 1.0.9

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 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 B=Object.defineProperty;var b=Object.getOwnPropertySymbols;var K=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var N=(a,t,e)=>t in a?B(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,c=(a,t)=>{for(var e in t||(t={}))K.call(t,e)&&N(a,e,t[e]);if(b)for(var e of b(t))M.call(t,e)&&N(a,e,t[e]);return a};var s=(a,t)=>B(a,"name",{value:t,configurable:!0});var C=(a,t)=>{var e={};for(var o in a)K.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&b)for(var o of b(a))t.indexOf(o)<0&&M.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={"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"}},T={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}};var U="react-ant-resource-form",Q={lang:"zh-CN"},W=s(a=>{let A=c(c({},Q),a),{className:t,meta:e,children:o,lang:p,title:f,loading:g,extra:x,size:F,okText:L,backText:k,okProps:_,backProps:l}=A,m=C(A,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps"]),h=s(v=>T[p][v],"t"),d=s(()=>history.back(),"handleBack"),S=x||_react2.default.createElement(_antd.Button,c({size:"small",icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:d},l),k||h("back")),y=o||_react2.default.createElement(_antd.Space,null,_react2.default.createElement(_antd.Button,c({htmlType:"submit",type:"primary",icon:_react2.default.createElement(_icons.SaveOutlined,null)},_),L||h("submit")),_react2.default.createElement(_antd.Button,c({icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:d},l),k||h("back")));return _react2.default.createElement(_antd.Card,{title:f,size:F,loading:g,"data-component":U,className:_classnames2.default.call(void 0, U,t),extra:S},_react2.default.createElement(_reactantformschema2.default,c({meta:e},m),y))},"ReactAntResourceForm"),$= exports.ReactAntResourceForm =W;var _next = require('@jswork/next'); var _next2 = _interopRequireDefault(_next);var w=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 ae={lang:"zh-CN",disableHotkeySave:!1},oe=s(a=>{let z=c(c({},ae),a),{name:t,params:e,lang:o,transformRequest:p,transformResponse:f,disableHotkeySave:g}=z,x=C(z,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),F=`${t}_update`,L=`${t}_create`,k=`${t}_show`,[_]=_antd.Form.useForm(),l=!!(e!=null&&e.id),m=s(r=>P[o][r],"t"),[h,d]=_react.useState.call(void 0, !1),S=s(r=>(d(!0),(p==null?void 0:p(r))||r.payload),"handleStateRequest"),y=s(r=>{var n,u;return d(!1),(u=(n=_next2.default.$event)==null?void 0:n.emit)==null||u.call(n,`${t}:refetch`),(f==null?void 0:f(r))||r.data},"handleStateResponse"),A=s(r=>{if(l){let n=c({id:e.id},r),u=S({stage:"update",payload:n});_next2.default.$api[F](u).then(E=>{_antd.message.success(m("update_success")),y({stage:"update",data:E})}).finally(()=>d(!1))}else{let n=c({},r),u=S({stage:"create",payload:n});_next2.default.$api[L](u).then(E=>{_antd.message.success(m("create_success")),y({stage:"create",data:E})}).finally(()=>d(!1))}},"handleFinish");w(()=>{g||_.submit()}),_react.useEffect.call(void 0, ()=>{if(l){let r={id:e.id},n=S({stage:"show",payload:r});_next2.default.$api[k](n).then(u=>{let E=y({stage:"show",data:u});_.setFieldsValue(E)}).finally(()=>d(!1))}},[l,e==null?void 0:e.id]);let v=m(l?"update":"create"),D=m(l?"update_title":"create_title");return _react2.default.createElement($,c({loading:h,form:_,onFinish:A,okText:v,title:D},x))},"ReactAntResourceFormApi"),ce= exports.ReactAntResourceFormApi =oe;exports.ReactAntResourceForm = $; exports.ReactAntResourceFormApi = ce; exports.useKeyboardSave = w;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var K=Object.defineProperty;var A=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var B=(a,t,e)=>t in a?K(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,s=(a,t)=>{for(var e in t||(t={}))M.call(t,e)&&B(a,e,t[e]);if(A)for(var e of A(t))P.call(t,e)&&B(a,e,t[e]);return a};var r=(a,t)=>K(a,"name",{value:t,configurable:!0});var C=(a,t)=>{var e={};for(var o in a)M.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&A)for(var o of A(a))t.indexOf(o)<0&&P.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 T={"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"}},I={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}};var H="react-ant-resource-form",Q={lang:"zh-CN"},W=r(a=>{let k=s(s({},Q),a),{className:t,meta:e,children:o,lang:f,title:_,loading:R,extra:g,size:x,okText:F,backText:E,okProps:S,backProps:m,classNames:d}=k,L=C(k,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps","classNames"]),l=r(O=>I[f][O],"t"),p=r(()=>history.back(),"handleBack"),h=g||_react2.default.createElement(_antd.Button,s({size:"small",icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:p},m),E||l("back")),v=o||_react2.default.createElement(_antd.Space,null,_react2.default.createElement(_antd.Button,s({htmlType:"submit",type:"primary",icon:_react2.default.createElement(_icons.SaveOutlined,null)},S),F||l("submit")),_react2.default.createElement(_antd.Button,s({icon:_react2.default.createElement(_icons.ArrowLeftOutlined,null),onClick:p},m),E||l("back")));return _react2.default.createElement(_antd.Card,{title:_,size:x,loading:R,classNames:d,"data-component":H,className:_classnames2.default.call(void 0, H,t),extra:h},_react2.default.createElement(_reactantformschema2.default,s({meta:e},L),v))},"ReactAntResourceForm"),$= exports.ReactAntResourceForm =W;var _next = require('@jswork/next'); var _next2 = _interopRequireDefault(_next);var w=r(a=>{let t=_react.useCallback.call(void 0, e=>{(e.ctrlKey||e.metaKey)&&e.code==="KeyS"&&(e.preventDefault(),a(e))},[a]);_react.useEffect.call(void 0, ()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}),[t])},"useKeyboardSave");var oe={lang:"zh-CN",disableHotkeySave:!1},se=r(a=>{let z=s(s({},oe),a),{name:t,params:e,lang:o,transformRequest:f,transformResponse:_,disableHotkeySave:R}=z,g=C(z,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),x=`${t}_update`,F=`${t}_create`,E=`${t}_show`,[S]=_antd.Form.useForm(),m=!!(e!=null&&e.id),d=r(c=>T[o][c],"t"),[L,l]=_react.useState.call(void 0, !1),p=r(c=>(l(!0),(f==null?void 0:f(c))||c.payload),"handleStateRequest"),h=r(c=>{var n,u;return l(!1),(u=(n=_next2.default.$event)==null?void 0:n.emit)==null||u.call(n,`${t}:refetch`),(_==null?void 0:_(c))||c.data},"handleStateResponse"),v=r(c=>{if(m){let n=s({id:e.id},c),u=p({stage:"update",payload:n});_next2.default.$api[x](u).then(y=>{_antd.message.success(d("update_success")),h({stage:"update",data:y})}).finally(()=>l(!1))}else{let n=s({},c),u=p({stage:"create",payload:n});_next2.default.$api[F](u).then(y=>{_antd.message.success(d("create_success")),h({stage:"create",data:y})}).finally(()=>l(!1))}},"handleFinish");w(()=>{R||S.submit()}),_react.useEffect.call(void 0, ()=>{if(m){let c={id:e.id},n=p({stage:"show",payload:c});_next2.default.$api[E](n).then(u=>{let y=h({stage:"show",data:u});S.setFieldsValue(y)}).finally(()=>l(!1))}},[m,e==null?void 0:e.id]);let k=d(m?"update":"create"),O=d(m?"update_title":"create_title");return _react2.default.createElement($,s({loading:L,form:S,onFinish:v,okText:k,title:O},g))},"ReactAntResourceFormApi"),ce= exports.ReactAntResourceFormApi =se;exports.ReactAntResourceForm = $; exports.ReactAntResourceFormApi = ce; exports.useKeyboardSave = w;
2
2
  //# sourceMappingURL=main.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aric/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","../src/index.tsx","../src/locales.ts","../src/api.tsx","../src/hooks.ts"],"names":["API_FORM_LOCALES","create","update","create_title","update_title","create_success","update_success","BASIC_FORM_LOCALES","submit","back","CLASS_NAME","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","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';\nimport { BASIC_FORM_LOCALES } from './locales';\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';\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\n const t = (key: string) => BASIC_FORM_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\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","export const API_FORM_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\nexport const BASIC_FORM_LOCALES = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\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';\nimport { API_FORM_LOCALES } from './locales';\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 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) => API_FORM_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"]}
1
+ {"version":3,"sources":["/Users/aric/github/react-ant-resource-form/packages/lib/dist/main.cjs.js","../src/index.tsx","../src/locales.ts","../src/api.tsx","../src/hooks.ts"],"names":["API_FORM_LOCALES","create","update","create_title","update_title","create_success","update_success","BASIC_FORM_LOCALES","submit","back","CLASS_NAME","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","classNames","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","useCallback","e","ctrlKey","metaKey","code","preventDefault","useEffect","document","addEventListener","removeEventListener","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';\nimport { BASIC_FORM_LOCALES } from './locales';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n classNames?: CardProps['classNames'];\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\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 classNames,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n\n const t = (key: string) => BASIC_FORM_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\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 classNames={classNames}\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","export const API_FORM_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\nexport const BASIC_FORM_LOCALES = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\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';\nimport { API_FORM_LOCALES } from './locales';\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 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) => API_FORM_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, useCallback } from 'react';\n\nexport const useKeyboardSave = (callback: (e: KeyboardEvent) => void) => {\n const handler = useCallback(\n (e: KeyboardEvent) => {\n // 使用 code 更可靠(不受键盘布局或大小写影响)\n if ((e.ctrlKey || e.metaKey) && e.code === 'KeyS') {\n e.preventDefault();\n callback(e);\n }\n },\n [callback] // 确保 handler 随 callback 更新而更新\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handler);\n return () => {\n document.removeEventListener('keydown', handler);\n };\n }, [handler]); // handler 是 useCallback 包装的,稳定依赖\n};\n"]}
package/dist/main.d.mts CHANGED
@@ -9,6 +9,7 @@ type ReactAntResourceFormProps = {
9
9
  backText?: string;
10
10
  okProps?: ButtonProps;
11
11
  backProps?: ButtonProps;
12
+ classNames?: CardProps['classNames'];
12
13
  size?: CardProps['size'];
13
14
  extra?: CardProps['extra'];
14
15
  title?: CardProps['title'];
package/dist/main.d.ts CHANGED
@@ -9,6 +9,7 @@ type ReactAntResourceFormProps = {
9
9
  backText?: string;
10
10
  okProps?: ButtonProps;
11
11
  backProps?: ButtonProps;
12
+ classNames?: CardProps['classNames'];
12
13
  size?: CardProps['size'];
13
14
  extra?: CardProps['extra'];
14
15
  title?: CardProps['title'];
package/dist/main.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- var B=Object.defineProperty;var b=Object.getOwnPropertySymbols;var K=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var N=(a,t,e)=>t in a?B(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,c=(a,t)=>{for(var e in t||(t={}))K.call(t,e)&&N(a,e,t[e]);if(b)for(var e of b(t))M.call(t,e)&&N(a,e,t[e]);return a};var s=(a,t)=>B(a,"name",{value:t,configurable:!0});var C=(a,t)=>{var e={};for(var o in a)K.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&b)for(var o of b(a))t.indexOf(o)<0&&M.call(a,o)&&(e[o]=a[o]);return e};import V from"classnames";import i from"react";import{Button as O,Card as j,Space as q}from"antd";import G from"@jswork/react-ant-form-schema";import{ArrowLeftOutlined as I,SaveOutlined as J}from"@ant-design/icons";var P={"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"}},T={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}};var U="react-ant-resource-form",Q={lang:"zh-CN"},W=s(a=>{let A=c(c({},Q),a),{className:t,meta:e,children:o,lang:p,title:f,loading:g,extra:x,size:F,okText:L,backText:k,okProps:_,backProps:l}=A,m=C(A,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps"]),h=s(v=>T[p][v],"t"),d=s(()=>history.back(),"handleBack"),S=x||i.createElement(O,c({size:"small",icon:i.createElement(I,null),onClick:d},l),k||h("back")),y=o||i.createElement(q,null,i.createElement(O,c({htmlType:"submit",type:"primary",icon:i.createElement(J,null)},_),L||h("submit")),i.createElement(O,c({icon:i.createElement(I,null),onClick:d},l),k||h("back")));return i.createElement(j,{title:f,size:F,loading:g,"data-component":U,className:V(U,t),extra:S},i.createElement(G,c({meta:e},m),y))},"ReactAntResourceForm"),$=W;import Y,{useEffect as Z,useState as ee}from"react";import{Form as te,message as H}from"antd";import R from"@jswork/next";import{useEffect as X}from"react";var w=s(a=>{let t=s(function(e){(e.ctrlKey||e.metaKey)&&e.key==="s"&&(e.preventDefault(),a(e))},"handler");X(()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}),[])},"useKeyboardSave");var ae={lang:"zh-CN",disableHotkeySave:!1},oe=s(a=>{let z=c(c({},ae),a),{name:t,params:e,lang:o,transformRequest:p,transformResponse:f,disableHotkeySave:g}=z,x=C(z,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),F=`${t}_update`,L=`${t}_create`,k=`${t}_show`,[_]=te.useForm(),l=!!(e!=null&&e.id),m=s(r=>P[o][r],"t"),[h,d]=ee(!1),S=s(r=>(d(!0),(p==null?void 0:p(r))||r.payload),"handleStateRequest"),y=s(r=>{var n,u;return d(!1),(u=(n=R.$event)==null?void 0:n.emit)==null||u.call(n,`${t}:refetch`),(f==null?void 0:f(r))||r.data},"handleStateResponse"),A=s(r=>{if(l){let n=c({id:e.id},r),u=S({stage:"update",payload:n});R.$api[F](u).then(E=>{H.success(m("update_success")),y({stage:"update",data:E})}).finally(()=>d(!1))}else{let n=c({},r),u=S({stage:"create",payload:n});R.$api[L](u).then(E=>{H.success(m("create_success")),y({stage:"create",data:E})}).finally(()=>d(!1))}},"handleFinish");w(()=>{g||_.submit()}),Z(()=>{if(l){let r={id:e.id},n=S({stage:"show",payload:r});R.$api[k](n).then(u=>{let E=y({stage:"show",data:u});_.setFieldsValue(E)}).finally(()=>d(!1))}},[l,e==null?void 0:e.id]);let v=m(l?"update":"create"),D=m(l?"update_title":"create_title");return Y.createElement($,c({loading:h,form:_,onFinish:A,okText:v,title:D},x))},"ReactAntResourceFormApi"),ce=oe;export{$ as ReactAntResourceForm,ce as ReactAntResourceFormApi,w as useKeyboardSave};
1
+ var K=Object.defineProperty;var A=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var B=(a,t,e)=>t in a?K(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,s=(a,t)=>{for(var e in t||(t={}))M.call(t,e)&&B(a,e,t[e]);if(A)for(var e of A(t))P.call(t,e)&&B(a,e,t[e]);return a};var r=(a,t)=>K(a,"name",{value:t,configurable:!0});var C=(a,t)=>{var e={};for(var o in a)M.call(a,o)&&t.indexOf(o)<0&&(e[o]=a[o]);if(a!=null&&A)for(var o of A(a))t.indexOf(o)<0&&P.call(a,o)&&(e[o]=a[o]);return e};import V from"classnames";import i from"react";import{Button as N,Card as j,Space as q}from"antd";import G from"@jswork/react-ant-form-schema";import{ArrowLeftOutlined as U,SaveOutlined as J}from"@ant-design/icons";var T={"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"}},I={"zh-CN":{submit:"\u63D0\u4EA4",back:"\u8FD4\u56DE"},"en-US":{submit:"Submit",back:"Back"}};var H="react-ant-resource-form",Q={lang:"zh-CN"},W=r(a=>{let k=s(s({},Q),a),{className:t,meta:e,children:o,lang:f,title:_,loading:R,extra:g,size:x,okText:F,backText:E,okProps:S,backProps:m,classNames:d}=k,L=C(k,["className","meta","children","lang","title","loading","extra","size","okText","backText","okProps","backProps","classNames"]),l=r(O=>I[f][O],"t"),p=r(()=>history.back(),"handleBack"),h=g||i.createElement(N,s({size:"small",icon:i.createElement(U,null),onClick:p},m),E||l("back")),v=o||i.createElement(q,null,i.createElement(N,s({htmlType:"submit",type:"primary",icon:i.createElement(J,null)},S),F||l("submit")),i.createElement(N,s({icon:i.createElement(U,null),onClick:p},m),E||l("back")));return i.createElement(j,{title:_,size:x,loading:R,classNames:d,"data-component":H,className:V(H,t),extra:h},i.createElement(G,s({meta:e},L),v))},"ReactAntResourceForm"),$=W;import Z,{useEffect as ee,useState as te}from"react";import{Form as ae,message as D}from"antd";import b from"@jswork/next";import{useEffect as X,useCallback as Y}from"react";var w=r(a=>{let t=Y(e=>{(e.ctrlKey||e.metaKey)&&e.code==="KeyS"&&(e.preventDefault(),a(e))},[a]);X(()=>(document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}),[t])},"useKeyboardSave");var oe={lang:"zh-CN",disableHotkeySave:!1},se=r(a=>{let z=s(s({},oe),a),{name:t,params:e,lang:o,transformRequest:f,transformResponse:_,disableHotkeySave:R}=z,g=C(z,["name","params","lang","transformRequest","transformResponse","disableHotkeySave"]),x=`${t}_update`,F=`${t}_create`,E=`${t}_show`,[S]=ae.useForm(),m=!!(e!=null&&e.id),d=r(c=>T[o][c],"t"),[L,l]=te(!1),p=r(c=>(l(!0),(f==null?void 0:f(c))||c.payload),"handleStateRequest"),h=r(c=>{var n,u;return l(!1),(u=(n=b.$event)==null?void 0:n.emit)==null||u.call(n,`${t}:refetch`),(_==null?void 0:_(c))||c.data},"handleStateResponse"),v=r(c=>{if(m){let n=s({id:e.id},c),u=p({stage:"update",payload:n});b.$api[x](u).then(y=>{D.success(d("update_success")),h({stage:"update",data:y})}).finally(()=>l(!1))}else{let n=s({},c),u=p({stage:"create",payload:n});b.$api[F](u).then(y=>{D.success(d("create_success")),h({stage:"create",data:y})}).finally(()=>l(!1))}},"handleFinish");w(()=>{R||S.submit()}),ee(()=>{if(m){let c={id:e.id},n=p({stage:"show",payload:c});b.$api[E](n).then(u=>{let y=h({stage:"show",data:u});S.setFieldsValue(y)}).finally(()=>l(!1))}},[m,e==null?void 0:e.id]);let k=d(m?"update":"create"),O=d(m?"update_title":"create_title");return Z.createElement($,s({loading:L,form:S,onFinish:v,okText:k,title:O},g))},"ReactAntResourceFormApi"),ce=se;export{$ as ReactAntResourceForm,ce as ReactAntResourceFormApi,w as useKeyboardSave};
2
2
  //# sourceMappingURL=main.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/locales.ts","../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';\nimport { BASIC_FORM_LOCALES } from './locales';\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';\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\n const t = (key: string) => BASIC_FORM_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\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","export const API_FORM_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\nexport const BASIC_FORM_LOCALES = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\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';\nimport { API_FORM_LOCALES } from './locales';\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 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) => API_FORM_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","API_FORM_LOCALES","create","update","create_title","update_title","create_success","update_success","BASIC_FORM_LOCALES","submit","back","CLASS_NAME","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","rest","t","key","BASIC_FORM_LOCALES","handleBack","history","back","_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","defaultProps","lang","disableHotkeySave","ReactAntResourceFormApi","__name","props","_a","__spreadValues","name","params","transformRequest","transformResponse","rest","resourceEdit","resourceCreate","resourceShow","form","Form","useForm","isEdit","Boolean","id","t","key","API_FORM_LOCALES","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"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/locales.ts","../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';\nimport { BASIC_FORM_LOCALES } from './locales';\n\nexport type ReactAntResourceFormProps = {\n lang?: string;\n loading?: boolean;\n okText?: string;\n backText?: string;\n okProps?: ButtonProps;\n backProps?: ButtonProps;\n classNames?: CardProps['classNames'];\n size?: CardProps['size'];\n extra?: CardProps['extra'];\n title?: CardProps['title'];\n} & ReactAntdFormSchemaProps;\n\nconst CLASS_NAME = 'react-ant-resource-form';\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 classNames,\n ...rest\n } = {\n ...defaultProps,\n ...props,\n };\n\n const t = (key: string) => BASIC_FORM_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\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 classNames={classNames}\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","export const API_FORM_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\nexport const BASIC_FORM_LOCALES = {\n 'zh-CN': {\n submit: '提交',\n back: '返回',\n },\n 'en-US': {\n submit: 'Submit',\n back: 'Back',\n },\n};\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';\nimport { API_FORM_LOCALES } from './locales';\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 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) => API_FORM_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, useCallback } from 'react';\n\nexport const useKeyboardSave = (callback: (e: KeyboardEvent) => void) => {\n const handler = useCallback(\n (e: KeyboardEvent) => {\n // 使用 code 更可靠(不受键盘布局或大小写影响)\n if ((e.ctrlKey || e.metaKey) && e.code === 'KeyS') {\n e.preventDefault();\n callback(e);\n }\n },\n [callback] // 确保 handler 随 callback 更新而更新\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handler);\n return () => {\n document.removeEventListener('keydown', handler);\n };\n }, [handler]); // handler 是 useCallback 包装的,稳定依赖\n};\n"],"mappings":"8iBACA,OAAOA,MAAQ,aACf,OAAOC,MAAmB,QAC1B,OAASC,UAAAA,EAAqBC,QAAAA,EAAiBC,SAAAA,MAAa,OAC5D,OAAOC,MAAuD,gCAC9D,OAASC,qBAAAA,EAAmBC,gBAAAA,MAAoB,oBCLzC,IAAMC,EAAmB,CAC9B,QAAS,CACPC,OAAQ,eACRC,OAAQ,eACRC,aAAc,eACdC,aAAc,eACdC,eAAgB,2BAChBC,eAAgB,0BAClB,EACA,QAAS,CACPL,OAAQ,SACRC,OAAQ,OACRC,aAAc,SACdC,aAAc,SACdC,eAAgB,iBAChBC,eAAgB,gBAClB,CACF,EAEaC,EAAqB,CAChC,QAAS,CACPC,OAAQ,eACRC,KAAM,cACR,EACA,QAAS,CACPD,OAAQ,SACRC,KAAM,MACR,CACF,EDPA,IAAMC,EAAa,0BAEbC,EAAe,CACnBC,KAAM,OACR,EAEMC,EAAsDC,EAACC,GAAAA,CAC3D,IAeIC,EAAAC,IAAA,GACCN,GACAI,GAhBHG,WAAAA,EACAC,KAAAA,EACAC,SAAAA,EACAR,KAAAA,EACAS,MAAAA,EACAC,QAAAA,EACAC,MAAAA,EACAC,KAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAC,UAAAA,EACAC,WAAAA,CAzCJ,EA2CMb,EADCc,EAAAA,EACDd,EADCc,CAbHZ,YACAC,OACAC,WACAR,OACAS,QACAC,UACAC,QACAC,OACAC,SACAC,WACAC,UACAC,YACAC,eAOIE,EAAIjB,EAACkB,GAAgBC,EAAmBrB,CAAAA,EAAMoB,CAAAA,EAA1C,KACJE,EAAapB,EAAA,IAAMqB,QAAQC,KAAI,EAAlB,cACbC,EAASd,GACbe,EAAA,cAACC,EAAAA,EAAAA,CAAOf,KAAK,QAAQgB,KAAMF,EAAA,cAACG,EAAAA,IAAAA,EAAsBC,QAASR,GAAgBN,GACxEF,GAAYK,EAAE,MAAA,CAAA,EAIbY,EAAYvB,GAChBkB,EAAA,cAACM,EAAAA,KACCN,EAAA,cAACC,EAAAA,EAAAA,CAAOM,SAAS,SAASC,KAAK,UAAUN,KAAMF,EAAA,cAACS,EAAAA,IAAAA,GAAqBpB,GAClEF,GAAUM,EAAE,QAAA,CAAA,EAEfO,EAAA,cAACC,EAAAA,EAAAA,CAAOC,KAAMF,EAAA,cAACG,EAAAA,IAAAA,EAAsBC,QAASR,GAAgBN,GAC3DF,GAAYK,EAAE,MAAA,CAAA,CAAA,EAKrB,OACEO,EAAA,cAACU,EAAAA,CACC3B,MAAOA,EACPG,KAAMA,EACNF,QAASA,EACTO,WAAYA,EACZoB,iBAAgBvC,EAChBQ,UAAWgC,EAAGxC,EAAYQ,CAAAA,EAC1BK,MAAOc,GACPC,EAAA,cAACa,EAAAA,EAAAA,CAAoBhC,KAAMA,GAAUW,GAClCa,CAAAA,CAAAA,CAIT,EAtD4D,wBAwD5DS,EAAevC,EEnFf,OAAOwC,GAAaC,aAAAA,GAAWC,YAAAA,OAAgB,QAE/C,OAASC,QAAAA,GAAMC,WAAAA,MAAe,OAC9B,OAAOC,MAAQ,eCHf,OAASC,aAAAA,EAAWC,eAAAA,MAAmB,QAEhC,IAAMC,EAAkBC,EAACC,GAAAA,CAC9B,IAAMC,EAAUC,EACbC,GAAAA,EAEMA,EAAEC,SAAWD,EAAEE,UAAYF,EAAEG,OAAS,SACzCH,EAAEI,eAAc,EAChBP,EAASG,CAAAA,EAEb,EACA,CAACH,IAGHQ,EAAU,KACRC,SAASC,iBAAiB,UAAWT,CAAAA,EAC9B,IAAA,CACLQ,SAASE,oBAAoB,UAAWV,CAAAA,CAC1C,GACC,CAACA,EAAQ,CACd,EAlB+B,mBD8B/B,IAAMW,GAAe,CACnBC,KAAM,QACNC,kBAAmB,EACrB,EAEMC,GAA4DC,EAACC,GAAAA,CACjE,IAAgGC,EAAAC,IAAA,GAC3FP,IACAK,GAFGG,MAAAA,EAAMC,OAAAA,EAAQR,KAAAA,EAAMS,iBAAAA,EAAkBC,kBAAAA,EAAmBT,kBAAAA,CAtCnE,EAsCkGI,EAATM,EAAAA,EAASN,EAATM,CAA/EJ,OAAMC,SAAQR,OAAMS,mBAAkBC,oBAAmBT,sBAK3DW,EAAe,GAAGL,CAAAA,UAClBM,EAAiB,GAAGN,CAAAA,UACpBO,EAAe,GAAGP,CAAAA,QAClB,CAACQ,CAAAA,EAAQC,GAAKC,QAAO,EACrBC,EAASC,GAAQX,GAAAA,MAAAA,EAAQY,IACzBC,EAAIlB,EAACmB,GAAgBC,EAAiBvB,CAAAA,EAAOsB,CAAAA,EAAzC,KACJ,CAACE,EAASC,CAAAA,EAAcC,GAAS,EAAA,EACjCC,EAAqBxB,EAACyB,IAC1BH,EAAW,EAAA,GACJhB,GAAAA,YAAAA,EAAmBmB,KAAiBA,EAAaC,SAF/B,sBAKrBC,EAAsB3B,EAAC4B,GAAAA,CAvD/B,IAAA1B,EAAA2B,EAwDIP,OAAAA,EAAW,EAAA,GACXQ,GAAAA,EAAAA,EAAGC,SAAHD,YAAAA,EAAWE,OAAXF,MAAAA,EAAAA,KAAAA,EAAkB,GAAG1B,CAAAA,aACdG,GAAAA,YAAAA,EAAoBqB,KAAQA,EAAIK,IACzC,EAJ4B,uBAMtBC,EAAelC,EAACmC,GAAAA,CACpB,GAAIpB,EAAQ,CACV,IAAMW,EAAUvB,EAAA,CAAEc,GAAIZ,EAAQY,IAAOkB,GAC/BC,EAAWZ,EAAmB,CAAEa,MAAO,SAAUX,QAAAA,CAAQ,CAAA,EAE/DI,EAAGQ,KAAK7B,CAAAA,EAAc2B,CAAAA,EACnBG,KAAMX,GAAAA,CACLY,EAAQC,QAAQvB,EAAE,gBAAA,CAAA,EAClBS,EAAoB,CAAEU,MAAO,SAAUJ,KAAML,CAAI,CAAA,CACnD,CAAA,EACCc,QAAQ,IAAMpB,EAAW,EAAA,CAAA,CAC9B,KAAO,CACL,IAAMI,EAAUvB,EAAA,GAAKgC,GACfC,EAAWZ,EAAmB,CAAEa,MAAO,SAAUX,QAAAA,CAAQ,CAAA,EAE/DI,EAAGQ,KAAK5B,CAAAA,EAAgB0B,CAAAA,EACrBG,KAAMX,GAAAA,CACLY,EAAQC,QAAQvB,EAAE,gBAAA,CAAA,EAClBS,EAAoB,CAAEU,MAAO,SAAUJ,KAAML,CAAI,CAAA,CACnD,CAAA,EACCc,QAAQ,IAAMpB,EAAW,EAAA,CAAA,CAC9B,CACF,EAtBqB,gBAyBrBqB,EAAgB,IAAA,CACT7C,GAAmBc,EAAKgC,OAAM,CACrC,CAAA,EAGAC,GAAU,IAAA,CACR,GAAI9B,EAAQ,CACV,IAAMW,EAAU,CAAET,GAAIZ,EAAQY,EAAG,EAC3BmB,EAAWZ,EAAmB,CAAEa,MAAO,OAAQX,QAAAA,CAAQ,CAAA,EAC7DI,EAAGQ,KAAK3B,CAAAA,EAAcyB,CAAAA,EACnBG,KAAMX,GAAAA,CACL,IAAMK,EAAON,EAAoB,CAAEU,MAAO,OAAQJ,KAAML,CAAI,CAAA,EAC5DhB,EAAKkC,eAAeb,CAAAA,CACtB,CAAA,EACCS,QAAQ,IAAMpB,EAAW,EAAA,CAAA,CAC9B,CACF,EAAG,CAACP,EAAQV,GAAAA,YAAAA,EAAQY,GAAG,EAEvB,IAAM8B,EAAkB7B,EAATH,EAAW,SAAc,QAAd,EACpBiC,EAAiB9B,EAATH,EAAW,eAAoB,cAApB,EAEzB,OACEkC,EAAA,cAACC,EAAAA,EAAAA,CACC7B,QAASA,EACTT,KAAMA,EACNuC,SAAUjB,EACVa,OAAQA,EACRC,MAAOA,GACHxC,GAGV,EAhFkE,2BAkFlE4C,GAAerD","names":["cx","React","Button","Card","Space","ReactAntdFormSchema","ArrowLeftOutlined","SaveOutlined","API_FORM_LOCALES","create","update","create_title","update_title","create_success","update_success","BASIC_FORM_LOCALES","submit","back","CLASS_NAME","defaultProps","lang","ReactAntResourceForm","__name","props","_a","__spreadValues","className","meta","children","title","loading","extra","size","okText","backText","okProps","backProps","classNames","rest","t","key","BASIC_FORM_LOCALES","handleBack","history","back","_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","useCallback","useKeyboardSave","__name","callback","handler","useCallback","e","ctrlKey","metaKey","code","preventDefault","useEffect","document","addEventListener","removeEventListener","defaultProps","lang","disableHotkeySave","ReactAntResourceFormApi","__name","props","_a","__spreadValues","name","params","transformRequest","transformResponse","rest","resourceEdit","resourceCreate","resourceShow","form","Form","useForm","isEdit","Boolean","id","t","key","API_FORM_LOCALES","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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jswork/react-ant-resource-form",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.esm.js",
6
6
  "types": "dist/main.d.ts",
package/src/hooks.ts CHANGED
@@ -1,18 +1,21 @@
1
- import { useEffect } from 'react';
1
+ import { useEffect, useCallback } from 'react';
2
2
 
3
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
- };
4
+ const handler = useCallback(
5
+ (e: KeyboardEvent) => {
6
+ // 使用 code 更可靠(不受键盘布局或大小写影响)
7
+ if ((e.ctrlKey || e.metaKey) && e.code === 'KeyS') {
8
+ e.preventDefault();
9
+ callback(e);
10
+ }
11
+ },
12
+ [callback] // 确保 handler 随 callback 更新而更新
13
+ );
11
14
 
12
15
  useEffect(() => {
13
16
  document.addEventListener('keydown', handler);
14
17
  return () => {
15
18
  document.removeEventListener('keydown', handler);
16
19
  };
17
- }, []);
20
+ }, [handler]); // handler 是 useCallback 包装的,稳定依赖
18
21
  };
package/src/index.tsx CHANGED
@@ -13,6 +13,7 @@ export type ReactAntResourceFormProps = {
13
13
  backText?: string;
14
14
  okProps?: ButtonProps;
15
15
  backProps?: ButtonProps;
16
+ classNames?: CardProps['classNames'];
16
17
  size?: CardProps['size'];
17
18
  extra?: CardProps['extra'];
18
19
  title?: CardProps['title'];
@@ -38,6 +39,7 @@ const ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {
38
39
  backText,
39
40
  okProps,
40
41
  backProps,
42
+ classNames,
41
43
  ...rest
42
44
  } = {
43
45
  ...defaultProps,
@@ -68,6 +70,7 @@ const ReactAntResourceForm: FC<ReactAntResourceFormProps> = (props) => {
68
70
  title={title}
69
71
  size={size}
70
72
  loading={loading}
73
+ classNames={classNames}
71
74
  data-component={CLASS_NAME}
72
75
  className={cx(CLASS_NAME, className)}
73
76
  extra={_extra}>