dinocollab-core 2.1.34 → 2.1.36

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.
@@ -1,2 +1,2 @@
1
- import{objectWithoutProperties as r,objectSpread2 as e,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as i}from"react/jsx-runtime";import{useRef as a,useEffect as l}from"react";import{Box as s,Typography as u,Grid as d,Button as c}from"@mui/material";import{getErrorMessage as f}from"./helpers.js";import{getFormFields as m,getFormValidators as p,getFormPreSubmit as v,isFormRegistered as b}from"./decorator.js";import g from"./validator.js";import h from"./create.input.js";import x from"./create.form-base.js";var y=["type","renderInput"],C=["disabled","visible"],S=x({}),j=h({}),B=function(n){var o,a,l=n.type,s=n.renderInput,u=r(n,y),d=(null===(o=u.name)||void 0===o?void 0:o.toString())||"",c=(null===(a=u.data)||void 0===a?void 0:a[d])||u.defaultValue;return S.mapContext(function(r){var n=r.messageErrors,o=r.onBlur,a=f(r.messageErrors,u.name);if(s)return i(s,e(e({},u),{},{messageErrors:n,onBlur:o,formContext:r}));switch(l){case String:return i(j,e(e({},u),{},{messageErrors:n,onBlur:o,formContext:r}));case Number:return i(j,e(e({},u),{},{slots:e({textFieldProps:{type:"number"}},u.slots),messageErrors:n,onBlur:o,formContext:r}));case Boolean:return t("div",{children:[t("label",{children:[u.label||d,": "]}),i("input",{name:d,type:"checkbox",defaultChecked:c}),i("span",{style:{color:"red"},children:a.error?a.message:""})]});default:return t("div",{children:["Unsupported field type for ",d]})}})},E=function(f){var h,x=f.slots,y=m(f.configClass),j=p(f.configClass),E=v(f.configClass),w=a(null);if(!b(f.configClass)){var k,F=(null===(k=f.configClass)||void 0===k?void 0:k.name)||"Unknown";return t(s,{sx:{border:"1px dashed #ccc",padding:12,borderRadius:4,color:"#333",background:"#fafafa"},children:[i(u,{variant:"subtitle1",sx:{fontWeight:600,marginBottom:6},children:"Form configuration not registered"}),t(u,{variant:"body1",children:['Configuration for "',F,'" was not found. Did you forget to add ',i("code",{children:"@registerForm"})," to the class?"]})]})}var P,I=function(){var r=n(o().m(function r(e){var n,t,i;return o().w(function(r){for(;;)switch(r.p=r.n){case 0:if(w.current=new AbortController,n=w.current.signal,t=e,r.p=1,null==E||!E.handler){r.n=3;break}return r.n=2,E.handler(e,f.data);case 2:null==(t=r.v)&&(t=e);case 3:if(!f.onSubmit){r.n=4;break}return r.n=4,f.onSubmit(t,n);case 4:r.n=6;break;case 5:throw r.p=5,i=r.v,f.onError&&f.onError(i),i;case 6:return r.a(2)}},r,null,[[1,5]])}));return function(e){return r.apply(this,arguments)}}();return l(function(){return function(){var r;null===(r=w.current)||void 0===r||r.abort()}},[]),t(S.Form,{onSubmit:I,validate:new g(j),onError:f.onSubmitError,slots:null==x?void 0:x.formBase,children:[i(d,{container:!0,spacing:2,children:y.map(function(n){var o=n.disabled,t=n.visible,a=r(n,C);if(!("function"==typeof t?t(f.data):!1!==t))return null;var l="function"==typeof o?o(f.data):!0===o;return i(d,e(e({item:!0,xs:12},n.size),{},{children:i(B,e(e({data:f.data},a),{},{disabled:l}))}),n.name.toString())})}),!1===(null==x?void 0:x.isFooter)?null:null!=x&&x.renderSubmitButton?x.renderSubmitButton():i(s,e(e({},null==x?void 0:x.footerProps),{},{sx:e({display:"flex",justifyContent:"flex-end"},(null==x||null===(P=x.footerProps)||void 0===P?void 0:P.sx)||{}),children:i(c,{variant:"contained",color:"primary",type:"submit",sx:{mt:2,flex:"0 0 auto"},children:"Submit"})})),null===(h=f.slots)||void 0===h?void 0:h.bottom]})},w=function(r,n){return function(o){return i(E,e(e({configClass:r},n),o))}};export{B as DecoratorField,E as DecoratorForm,w as createDecoratorForm,E as default};
1
+ import{objectWithoutProperties as r,objectSpread2 as e,asyncToGenerator as o,regenerator as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as i}from"react/jsx-runtime";import{useRef as a,useEffect as l}from"react";import{styled as s,Box as u,Typography as d,Grid as c,Button as f}from"@mui/material";import{getErrorMessage as m}from"./helpers.js";import{getFormFields as p,getFormValidators as v,getFormPreSubmit as b,isFormRegistered as g}from"./decorator.js";import h from"./validator.js";import x from"./create.input.js";import y from"./create.form-base.js";var C=["type","renderInput"],S=["disabled","visible"],j=y({}),E=x({}),w=function(o){var n,a,l=o.type,s=o.renderInput,u=r(o,C),d=(null===(n=u.name)||void 0===n?void 0:n.toString())||"",c=(null===(a=u.data)||void 0===a?void 0:a[d])||u.defaultValue;return j.mapContext(function(r){var o=r.messageErrors,n=r.onBlur,a=m(r.messageErrors,u.name);if(s)return i(s,e(e({},u),{},{messageErrors:o,onBlur:n,formContext:r}));switch(l){case String:return i(E,e(e({},u),{},{messageErrors:o,onBlur:n,formContext:r}));case Number:return i(E,e(e({},u),{},{slots:e({textFieldProps:{type:"number"}},u.slots),messageErrors:o,onBlur:n,formContext:r}));case Boolean:return t("div",{children:[t("label",{children:[u.label||d,": "]}),i("input",{name:d,type:"checkbox",defaultChecked:c}),i("span",{style:{color:"red"},children:a.error?a.message:""})]});default:return t("div",{children:["Unsupported field type for ",d]})}})},B=function(s){var m,x,y=s.slots,C=p(s.configClass),E=v(s.configClass),B=b(s.configClass),k=a(null);if(!g(s.configClass)){var P,I=(null===(P=s.configClass)||void 0===P?void 0:P.name)||"Unknown";return t(u,{sx:{border:"1px dashed #ccc",padding:12,borderRadius:4,color:"#333",background:"#fafafa"},children:[i(d,{variant:"subtitle1",sx:{fontWeight:600,marginBottom:6},children:"Form configuration not registered"}),t(d,{variant:"body1",children:['Configuration for "',I,'" was not found. Did you forget to add ',i("code",{children:"@registerForm"})," to the class?"]})]})}var U=function(){var r=o(n().m(function r(e){var o,t,i;return n().w(function(r){for(;;)switch(r.p=r.n){case 0:if(k.current=new AbortController,o=k.current.signal,t=e,r.p=1,null==B||!B.handler){r.n=3;break}return r.n=2,B.handler(e,s.data);case 2:null==(t=r.v)&&(t=e);case 3:if(!s.onSubmit){r.n=4;break}return r.n=4,s.onSubmit(t,o);case 4:r.n=6;break;case 5:throw r.p=5,i=r.v,s.onError&&s.onError(i),i;case 6:return r.a(2)}},r,null,[[1,5]])}));return function(e){return r.apply(this,arguments)}}();return l(function(){return function(){var r;null===(r=k.current)||void 0===r||r.abort()}},[]),t(j.Form,{onSubmit:U,validate:new h(E),onError:s.onSubmitError,slots:null==y?void 0:y.formBase,children:[null===(m=s.slots)||void 0===m?void 0:m.top,i(c,{container:!0,spacing:2,children:C.map(function(o){var n=o.disabled,t=o.visible,a=r(o,S);if(!("function"==typeof t?t(s.data):!1!==t))return null;var l="function"==typeof n?n(s.data):!0===n;return i(c,e(e({item:!0,xs:12},o.size),{},{children:i(w,e(e({data:s.data},a),{},{disabled:l}))}),o.name.toString())})}),function(){var r,o;if(!1===(null==y?void 0:y.isFooter))return null;if(null!=y&&y.footer){var n=y.footer;return i(n,{})}return t(F,e(e({},null==y?void 0:y.footerProps),{},{children:[null==y||null===(r=y.footerSlots)||void 0===r?void 0:r.before,i(f,{variant:"contained",color:"primary",type:"submit",sx:{flex:"0 0 auto"},children:"Submit"}),null==y||null===(o=y.footerSlots)||void 0===o?void 0:o.after]}))}(),null===(x=s.slots)||void 0===x?void 0:x.bottom]})},k=function(r,o){return function(n){return i(B,e(e({configClass:r},o),n))}},F=s(u)(function(r){return{display:"flex",justifyContent:"flex-end",padding:r.theme.spacing(1,0)}});export{w as DecoratorField,B as DecoratorForm,k as createDecoratorForm,B as default};
2
2
  //# sourceMappingURL=decorator.form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorator.form.js","sources":["../../../src/form/decorator.form.tsx"],"sourcesContent":["import { ComponentType, FC, useEffect, useRef } from 'react'\r\nimport { Box, BoxProps, Button, Grid, Typography } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { getFormFields, getFormPreSubmit, getFormValidators, isFormRegistered } from './decorator'\r\nimport FormValidator, { IPartialError } from './validator'\r\nimport createInput from './create.input'\r\nimport createFormBase, { IFormBaseSlots } from './create.form-base'\r\n\r\nconst FormBase = createFormBase<any>({})\r\nconst InputInstance = createInput<any>({})\r\n\r\nexport interface IDecoratorFieldProps<T = any> extends IFormInputBase<T> {\r\n type?: any\r\n visible?: boolean | ((data: T) => boolean)\r\n renderInput?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport const DecoratorField: FC<IDecoratorFieldProps> = ({ type: inputType, renderInput, ...props }) => {\r\n const name = props.name?.toString() || ''\r\n const defaultValue = props.data?.[name] || props.defaultValue\r\n\r\n return FormBase.mapContext((context) => {\r\n const { messageErrors, onBlur } = context\r\n const err = getErrorMessage(context.messageErrors, props.name as any)\r\n if (renderInput) {\r\n const InputComp = renderInput\r\n return <InputComp {...props} messageErrors={messageErrors} onBlur={onBlur} formContext={context} />\r\n }\r\n switch (inputType) {\r\n case String:\r\n return <InputInstance {...props} messageErrors={messageErrors} onBlur={onBlur} formContext={context} />\r\n case Number:\r\n return (\r\n <InputInstance\r\n {...props}\r\n slots={{ textFieldProps: { type: 'number' }, ...props.slots }}\r\n messageErrors={messageErrors}\r\n onBlur={onBlur}\r\n formContext={context}\r\n />\r\n )\r\n case Boolean:\r\n return (\r\n <div>\r\n <label>{props.label || name}: </label>\r\n <input name={name} type='checkbox' defaultChecked={defaultValue} />\r\n <span style={{ color: 'red' }}>{err.error ? err.message : ''}</span>\r\n </div>\r\n )\r\n default:\r\n return <div>Unsupported field type for {name}</div>\r\n }\r\n })\r\n}\r\n\r\nexport interface IDecoratorFormSlots {\r\n bottom?: React.ReactNode\r\n isFooter?: React.ReactNode | boolean\r\n renderSubmitButton?: () => React.ReactNode\r\n formBase?: IFormBaseSlots\r\n footerProps?: BoxProps & { [key: string]: any }\r\n}\r\n\r\nexport interface IDecoratorFormProps<T = any> {\r\n configClass: any\r\n data?: Partial<T>\r\n onSubmit?: (data: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onSubmitError?: (error: IPartialError<T>) => void\r\n slots?: IDecoratorFormSlots\r\n}\r\n\r\nexport const DecoratorForm: FC<IDecoratorFormProps> = (props) => {\r\n const { slots } = props\r\n const fields = getFormFields(props.configClass)\r\n const validators = getFormValidators(props.configClass)\r\n const preSubmitConfig = getFormPreSubmit(props.configClass)\r\n const abortControllerRef = useRef<AbortController | null>(null)\r\n\r\n // If the provided configClass isn't registered via @registerForm,\r\n // show a simple, friendly error UI instead of throwing.\r\n if (!isFormRegistered(props.configClass)) {\r\n const name = props.configClass?.name || 'Unknown'\r\n return (\r\n <Box sx={{ border: '1px dashed #ccc', padding: 12, borderRadius: 4, color: '#333', background: '#fafafa' }}>\r\n <Typography variant='subtitle1' sx={{ fontWeight: 600, marginBottom: 6 }}>\r\n Form configuration not registered\r\n </Typography>\r\n <Typography variant='body1'>\r\n Configuration for \"{name}\" was not found. Did you forget to add <code>@registerForm</code> to the class?\r\n </Typography>\r\n </Box>\r\n )\r\n }\r\n\r\n const handleSubmit = async (data: any) => {\r\n // Create new AbortController for this submit\r\n abortControllerRef.current = new AbortController()\r\n const signal = abortControllerRef.current.signal\r\n\r\n let processedData = data\r\n try {\r\n // Execute presubmit handler if exists\r\n if (preSubmitConfig?.handler) {\r\n processedData = await preSubmitConfig.handler(data, props.data)\r\n // If handler returns null/undefined, use original data\r\n if (processedData === null || processedData === undefined) {\r\n processedData = data\r\n }\r\n }\r\n\r\n // Call the original onSubmit with processed data and abort signal\r\n if (props.onSubmit) {\r\n await props.onSubmit(processedData, signal)\r\n }\r\n } catch (error) {\r\n if (props.onError) {\r\n props.onError(error)\r\n }\r\n throw error\r\n }\r\n }\r\n\r\n const renderFooter = () => {\r\n if (slots?.isFooter === false) return null\r\n if (slots?.renderSubmitButton) {\r\n return slots.renderSubmitButton()\r\n }\r\n return (\r\n <Box {...slots?.footerProps} sx={{ display: 'flex', justifyContent: 'flex-end', ...(slots?.footerProps?.sx || {}) }}>\r\n <Button variant='contained' color='primary' type='submit' sx={{ mt: 2, flex: '0 0 auto' }}>\r\n Submit\r\n </Button>\r\n </Box>\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n // Abort any pending request when component unmounts\r\n abortControllerRef.current?.abort()\r\n }\r\n }, [])\r\n\r\n return (\r\n <FormBase.Form onSubmit={handleSubmit} validate={new FormValidator(validators)} onError={props.onSubmitError} slots={slots?.formBase}>\r\n <Grid container spacing={2}>\r\n {fields.map((field) => {\r\n const { disabled, visible, ...fieldOther } = field\r\n // Check visibility, default is visible (true or undefined)\r\n const isVisible = typeof visible === 'function' ? visible(props.data) : visible !== false\r\n if (!isVisible) return null\r\n // Check disabled state, default is enabled (false or undefined)\r\n const isDisabled = typeof disabled === 'function' ? disabled(props.data) : disabled === true\r\n return (\r\n <Grid item key={field.name.toString()} xs={12} {...field.size}>\r\n <DecoratorField data={props.data} {...fieldOther} disabled={isDisabled} />\r\n </Grid>\r\n )\r\n })}\r\n </Grid>\r\n {renderFooter()}\r\n {props.slots?.bottom}\r\n </FormBase.Form>\r\n )\r\n}\r\nexport default DecoratorForm\r\n\r\nexport const createDecoratorForm = function <T>(\r\n configClass: any,\r\n params?: Partial<Omit<IDecoratorFormProps<T>, 'configClass'>>\r\n): ComponentType<Omit<IDecoratorFormProps<T>, 'configClass'>> {\r\n const DecoratorFormComp: FC<Omit<IDecoratorFormProps<T>, 'configClass'>> = (props) => {\r\n return <DecoratorForm configClass={configClass} {...params} {...props} />\r\n }\r\n return DecoratorFormComp\r\n}\r\n"],"names":["FormBase","createFormBase","InputInstance","createInput","DecoratorField","_ref","_props$name","_props$data","inputType","type","renderInput","props","_objectWithoutProperties","_excluded","name","toString","defaultValue","data","mapContext","context","messageErrors","onBlur","err","getErrorMessage","_jsx","_objectSpread","formContext","String","Number","slots","textFieldProps","Boolean","_jsxs","children","label","defaultChecked","style","color","error","message","DecoratorForm","_props$slots","fields","getFormFields","configClass","validators","getFormValidators","preSubmitConfig","getFormPreSubmit","abortControllerRef","useRef","isFormRegistered","_props$configClass","Box","sx","border","padding","borderRadius","background","Typography","variant","fontWeight","marginBottom","_slots$footerProps","handleSubmit","_ref2","_asyncToGenerator","_regenerator","m","_callee","signal","processedData","_t","w","_context","p","n","current","AbortController","handler","v","onSubmit","onError","a","_x","apply","this","arguments","useEffect","_abortControllerRef$c","abort","Form","validate","FormValidator","onSubmitError","formBase","Grid","container","spacing","map","field","disabled","visible","fieldOther","_excluded2","isDisabled","item","xs","size","isFooter","renderSubmitButton","footerProps","display","justifyContent","Button","mt","flex","bottom","createDecoratorForm","params"],"mappings":"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"}
1
+ {"version":3,"file":"decorator.form.js","sources":["../../../src/form/decorator.form.tsx"],"sourcesContent":["import { ComponentType, FC, useEffect, useRef } from 'react'\r\nimport { Box, BoxProps, Button, Grid, styled, Typography } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { getFormFields, getFormPreSubmit, getFormValidators, isFormRegistered } from './decorator'\r\nimport FormValidator, { IPartialError } from './validator'\r\nimport createInput from './create.input'\r\nimport createFormBase, { IFormBaseSlots } from './create.form-base'\r\n\r\nconst FormBase = createFormBase<any>({})\r\nconst InputInstance = createInput<any>({})\r\n\r\nexport interface IDecoratorFieldProps<T = any> extends IFormInputBase<T> {\r\n type?: any\r\n visible?: boolean | ((data: T) => boolean)\r\n renderInput?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport const DecoratorField: FC<IDecoratorFieldProps> = ({ type: inputType, renderInput, ...props }) => {\r\n const name = props.name?.toString() || ''\r\n const defaultValue = props.data?.[name] || props.defaultValue\r\n\r\n return FormBase.mapContext((context) => {\r\n const { messageErrors, onBlur } = context\r\n const err = getErrorMessage(context.messageErrors, props.name as any)\r\n if (renderInput) {\r\n const InputComp = renderInput\r\n return <InputComp {...props} messageErrors={messageErrors} onBlur={onBlur} formContext={context} />\r\n }\r\n switch (inputType) {\r\n case String:\r\n return <InputInstance {...props} messageErrors={messageErrors} onBlur={onBlur} formContext={context} />\r\n case Number:\r\n return (\r\n <InputInstance\r\n {...props}\r\n slots={{ textFieldProps: { type: 'number' }, ...props.slots }}\r\n messageErrors={messageErrors}\r\n onBlur={onBlur}\r\n formContext={context}\r\n />\r\n )\r\n case Boolean:\r\n return (\r\n <div>\r\n <label>{props.label || name}: </label>\r\n <input name={name} type='checkbox' defaultChecked={defaultValue} />\r\n <span style={{ color: 'red' }}>{err.error ? err.message : ''}</span>\r\n </div>\r\n )\r\n default:\r\n return <div>Unsupported field type for {name}</div>\r\n }\r\n })\r\n}\r\n\r\nexport interface IDecoratorFormSlots {\r\n top?: React.ReactNode\r\n bottom?: React.ReactNode\r\n isFooter?: React.ReactNode | boolean\r\n formBase?: IFormBaseSlots\r\n footer?: ComponentType<any>\r\n footerProps?: BoxProps & { [key: string]: any }\r\n footerSlots?: { after?: React.ReactNode; before?: React.ReactNode }\r\n}\r\n\r\nexport interface IDecoratorFormProps<T = any> {\r\n configClass: any\r\n data?: Partial<T>\r\n onSubmit?: (data: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onSubmitError?: (error: IPartialError<T>) => void\r\n slots?: IDecoratorFormSlots\r\n}\r\n\r\nexport const DecoratorForm: FC<IDecoratorFormProps> = (props) => {\r\n const { slots } = props\r\n const fields = getFormFields(props.configClass)\r\n const validators = getFormValidators(props.configClass)\r\n const preSubmitConfig = getFormPreSubmit(props.configClass)\r\n const abortControllerRef = useRef<AbortController | null>(null)\r\n\r\n // If the provided configClass isn't registered via @registerForm,\r\n // show a simple, friendly error UI instead of throwing.\r\n if (!isFormRegistered(props.configClass)) {\r\n const name = props.configClass?.name || 'Unknown'\r\n return (\r\n <Box sx={{ border: '1px dashed #ccc', padding: 12, borderRadius: 4, color: '#333', background: '#fafafa' }}>\r\n <Typography variant='subtitle1' sx={{ fontWeight: 600, marginBottom: 6 }}>\r\n Form configuration not registered\r\n </Typography>\r\n <Typography variant='body1'>\r\n Configuration for \"{name}\" was not found. Did you forget to add <code>@registerForm</code> to the class?\r\n </Typography>\r\n </Box>\r\n )\r\n }\r\n\r\n const handleSubmit = async (data: any) => {\r\n // Create new AbortController for this submit\r\n abortControllerRef.current = new AbortController()\r\n const signal = abortControllerRef.current.signal\r\n\r\n let processedData = data\r\n try {\r\n // Execute presubmit handler if exists\r\n if (preSubmitConfig?.handler) {\r\n processedData = await preSubmitConfig.handler(data, props.data)\r\n // If handler returns null/undefined, use original data\r\n if (processedData === null || processedData === undefined) {\r\n processedData = data\r\n }\r\n }\r\n\r\n // Call the original onSubmit with processed data and abort signal\r\n if (props.onSubmit) {\r\n await props.onSubmit(processedData, signal)\r\n }\r\n } catch (error) {\r\n if (props.onError) {\r\n props.onError(error)\r\n }\r\n throw error\r\n }\r\n }\r\n\r\n const renderFooter = () => {\r\n if (slots?.isFooter === false) return null\r\n if (slots?.footer) {\r\n const FooterComponent = slots.footer\r\n return <FooterComponent />\r\n }\r\n return (\r\n <FooterStyled {...slots?.footerProps}>\r\n {slots?.footerSlots?.before}\r\n <Button variant='contained' color='primary' type='submit' sx={{ flex: '0 0 auto' }}>\r\n Submit\r\n </Button>\r\n {slots?.footerSlots?.after}\r\n </FooterStyled>\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n // Abort any pending request when component unmounts\r\n abortControllerRef.current?.abort()\r\n }\r\n }, [])\r\n\r\n return (\r\n <FormBase.Form onSubmit={handleSubmit} validate={new FormValidator(validators)} onError={props.onSubmitError} slots={slots?.formBase}>\r\n {props.slots?.top}\r\n <Grid container spacing={2}>\r\n {fields.map((field) => {\r\n const { disabled, visible, ...fieldOther } = field\r\n // Check visibility, default is visible (true or undefined)\r\n const isVisible = typeof visible === 'function' ? visible(props.data) : visible !== false\r\n if (!isVisible) return null\r\n // Check disabled state, default is enabled (false or undefined)\r\n const isDisabled = typeof disabled === 'function' ? disabled(props.data) : disabled === true\r\n return (\r\n <Grid item key={field.name.toString()} xs={12} {...field.size}>\r\n <DecoratorField data={props.data} {...fieldOther} disabled={isDisabled} />\r\n </Grid>\r\n )\r\n })}\r\n </Grid>\r\n {renderFooter()}\r\n {props.slots?.bottom}\r\n </FormBase.Form>\r\n )\r\n}\r\nexport default DecoratorForm\r\n\r\nexport const createDecoratorForm = function <T>(\r\n configClass: any,\r\n params?: Partial<Omit<IDecoratorFormProps<T>, 'configClass'>>\r\n): ComponentType<Omit<IDecoratorFormProps<T>, 'configClass'>> {\r\n const DecoratorFormComp: FC<Omit<IDecoratorFormProps<T>, 'configClass'>> = (props) => {\r\n return <DecoratorForm configClass={configClass} {...params} {...props} />\r\n }\r\n return DecoratorFormComp\r\n}\r\n\r\nconst FooterStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n padding: theme.spacing(1, 0)\r\n}))\r\n"],"names":["FormBase","createFormBase","InputInstance","createInput","DecoratorField","_ref","_props$name","_props$data","inputType","type","renderInput","props","_objectWithoutProperties","_excluded","name","toString","defaultValue","data","mapContext","context","messageErrors","onBlur","err","getErrorMessage","_jsx","_objectSpread","formContext","String","Number","slots","textFieldProps","Boolean","_jsxs","children","label","defaultChecked","style","color","error","message","DecoratorForm","_props$slots","_props$slots2","fields","getFormFields","configClass","validators","getFormValidators","preSubmitConfig","getFormPreSubmit","abortControllerRef","useRef","isFormRegistered","_props$configClass","Box","sx","border","padding","borderRadius","background","Typography","variant","fontWeight","marginBottom","handleSubmit","_ref2","_asyncToGenerator","_regenerator","m","_callee","signal","processedData","_t","w","_context","p","n","current","AbortController","handler","v","onSubmit","onError","a","_x","apply","this","arguments","useEffect","_abortControllerRef$c","abort","Form","validate","FormValidator","onSubmitError","formBase","top","Grid","container","spacing","map","field","disabled","visible","fieldOther","_excluded2","isDisabled","item","xs","size","_slots$footerSlots","_slots$footerSlots2","isFooter","footer","FooterComponent","FooterStyled","footerProps","footerSlots","before","Button","flex","after","renderFooter","bottom","createDecoratorForm","params","styled","_ref3","display","justifyContent","theme"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as n,callSuper as o,defineProperty as i,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a}from"react/jsx-runtime";import s,{Component as u}from"react";import{Box as c,Tooltip as p,IconButton as d}from"@mui/material";import f from"@mui/icons-material/Edit";import m from"@mui/icons-material/Delete";import{mergeObjects as v}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{MapTableBaseContext as g}from"./context.js";function h(h){var b=function(){function b(){var r;n(this,b);for(var e=arguments.length,u=new Array(e),c=0;c<e;c++)u[c]=arguments[c];return r=o(this,b,[].concat(u)),i(r,"getButtons",l().m(function r(e,n,o){var i,u,c,v,g,b,y,j,k,C,x,w,D,E;return l().w(function(r){for(;;)switch(r.n){case 0:if(!(k=null!==(i=null===(u=e.props)||void 0===u?void 0:u.before)&&void 0!==i?i:null==n?void 0:n.before)){r.n=1;break}return r.n=1,a(s.Fragment,{children:k(e.props.value,o)},"Before");case 1:if(C=null!==(c=null===(v=e.props)||void 0===v?void 0:v.formEdit)&&void 0!==c?c:null==n?void 0:n.formEdit,x=C?C(e.props.value,o):void 0,!C||!x){r.n=2;break}return r.n=2,a(p,{title:"Edit",arrow:!0,children:a(d,{color:"primary",onClick:function(){null==o||o.showModal(t({renderContent:function(){return x||a(s.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==h?void 0:h.buttonEditConfig))},children:a(f,{fontSize:"small"})})},"Edit");case 2:if(w=null!==(g=null===(b=e.props)||void 0===b?void 0:b.formDelete)&&void 0!==g?g:null==n?void 0:n.formDelete,D=w?w(e.props.value,o):void 0,!w||!D){r.n=3;break}return r.n=3,a(p,{title:"Delete",arrow:!0,children:a(d,{color:"error",onClick:function(){null==o||o.showModal(t({renderContent:function(){return D||a(s.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==h?void 0:h.buttonDeleteConfig))},children:a(m,{fontSize:"small"})})},"Delete");case 3:if(!(E=null!==(y=null===(j=e.props)||void 0===j?void 0:j.after)&&void 0!==y?y:null==n?void 0:n.after)){r.n=4;break}return r.n=4,a(s.Fragment,{children:E(e.props.value,o)},"After");case 4:return r.a(2)}},r)})),r}return r(b,u),e(b,[{key:"propsMerge",get:function(){return v(h,this.props)}},{key:"render",value:function(){var r=this;return g(function(e){return a(c,t(t({sx:{display:"flex",alignItems:"center",height:"100%"}},r.propsMerge.wrapProps),{},{children:Array.from(r.getButtons(r,r.propsMerge,e))}))})}}])}();return b}export{h as default};
1
+ import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as n,callSuper as o,defineProperty as i,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a}from"react/jsx-runtime";import u,{Component as s}from"react";import{Box as c,Tooltip as p,IconButton as d}from"@mui/material";import f from"@mui/icons-material/Edit";import m from"@mui/icons-material/Delete";import{mergeObjects as v}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{MapTableBaseContext as h}from"./context.js";function g(g){var b=function(){function b(){var r;n(this,b);for(var e=arguments.length,s=new Array(e),c=0;c<e;c++)s[c]=arguments[c];return r=o(this,b,[].concat(s)),i(r,"getButtons",l().m(function r(e,n,o){var i,s,c,v,h,b,y,k,C,j,x,w,D,E,A,M,P,B;return l().w(function(r){for(;;)switch(r.n){case 0:if(!(C=null!==(i=null===(s=e.props)||void 0===s?void 0:s.before)&&void 0!==i?i:null==n?void 0:n.before)){r.n=1;break}return r.n=1,a(u.Fragment,{children:C(e.props.value,o)},"Before");case 1:if(j=null!==(c=null===(v=e.props)||void 0===v?void 0:v.formEdit)&&void 0!==c?c:null==n?void 0:n.formEdit,x=j?j(e.props.value,o):void 0,!j||!x){r.n=2;break}return w=n.buttonEditProps,D="function"==typeof w?w(e.props.value):w,r.n=2,a(p,{title:"Edit",arrow:!0,children:a("span",{children:a(d,t(t({color:"primary"},D),{},{onClick:function(r){var e;null==o||o.showModal(t({renderContent:function(){return x||a(u.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==g?void 0:g.buttonEditConfig)),null==D||null===(e=D.onClick)||void 0===e||e.call(D,r)},children:a(f,{fontSize:"small"})}))})},"Edit");case 2:if(E=null!==(h=null===(b=e.props)||void 0===b?void 0:b.formDelete)&&void 0!==h?h:null==n?void 0:n.formDelete,A=E?E(e.props.value,o):void 0,!E||!A){r.n=3;break}return M=n.buttonDeleteProps,P="function"==typeof M?M(e.props.value):M,r.n=3,a(p,{title:"Delete",arrow:!0,children:a("span",{children:a(d,t(t({color:"error"},P),{},{onClick:function(r){var e;null==o||o.showModal(t({renderContent:function(){return A||a(u.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==g?void 0:g.buttonDeleteConfig)),null==P||null===(e=P.onClick)||void 0===e||e.call(P,r)},children:a(m,{fontSize:"small"})}))})},"Delete");case 3:if(!(B=null!==(y=null===(k=e.props)||void 0===k?void 0:k.after)&&void 0!==y?y:null==n?void 0:n.after)){r.n=4;break}return r.n=4,a(u.Fragment,{children:B(e.props.value,o)},"After");case 4:return r.a(2)}},r)})),r}return r(b,s),e(b,[{key:"propsMerge",get:function(){return v(g,this.props)}},{key:"render",value:function(){var r=this;return h(function(e){return a(c,t(t({sx:{display:"flex",alignItems:"center",height:"100%"}},r.propsMerge.wrapProps),{},{children:Array.from(r.getButtons(r,r.propsMerge,e))}))})}}])}();return b}export{g as default};
2
2
  //# sourceMappingURL=create.action-row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.action-row.js","sources":["../../../src/table/create.action-row.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, IconButton, Tooltip } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport { mergeObjects } from '../utils'\r\nimport { GlobalModalState } from '../api-context'\r\nimport { ITableBaseContext, MapTableBaseContext } from './context'\r\n\r\nexport interface IActionRowProps<T> {\r\n value: T\r\n formEdit?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n formDelete?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n after?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n before?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n wrapProps?: BoxProps\r\n buttonEditConfig?: GlobalModalState\r\n buttonDeleteConfig?: GlobalModalState\r\n}\r\n\r\nfunction CreateActionRow<T>(params?: Omit<IActionRowProps<T>, 'value'>): ComponentType<IActionRowProps<T>> {\r\n class ActionRow extends Component<IActionRowProps<T>> {\r\n get propsMerge() {\r\n return mergeObjects<IActionRowProps<T>>(params, this.props)\r\n }\r\n\r\n getButtons = function* (that: ActionRow, thatProps: Omit<IActionRowProps<T>, 'value'>, tableContext: ITableBaseContext) {\r\n const beforeFunc = that.props?.before ?? thatProps?.before\r\n if (beforeFunc) {\r\n yield <React.Fragment key='Before'>{beforeFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n const editFunc = that.props?.formEdit ?? thatProps?.formEdit\r\n const editContent = editFunc ? editFunc(that.props.value, tableContext) : undefined\r\n if (editFunc && !!editContent) {\r\n yield (\r\n <Tooltip title='Edit' arrow key='Edit'>\r\n <IconButton\r\n color='primary'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => editContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonEditConfig\r\n })\r\n }}\r\n >\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const deleteFunc = that.props?.formDelete ?? thatProps?.formDelete\r\n const deleteContent = deleteFunc ? deleteFunc(that.props.value, tableContext) : undefined\r\n if (deleteFunc && !!deleteContent) {\r\n yield (\r\n <Tooltip title='Delete' arrow key='Delete'>\r\n <IconButton\r\n color='error'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => deleteContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonDeleteConfig\r\n })\r\n }}\r\n >\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const afterFunc = that.props?.after ?? thatProps?.after\r\n if (afterFunc) {\r\n yield <React.Fragment key='After'>{afterFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n }\r\n\r\n render() {\r\n return MapTableBaseContext((context) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', height: '100%' }} {...this.propsMerge.wrapProps}>\r\n {Array.from(this.getButtons(this, this.propsMerge, context))}\r\n </Box>\r\n ))\r\n }\r\n }\r\n\r\n return ActionRow\r\n}\r\nexport default CreateActionRow\r\n"],"names":["CreateActionRow","params","ActionRow","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_regenerator","m","_callee","that","thatProps","tableContext","_that$props$before","_that$props","_that$props$formEdit","_that$props2","_that$props$formDelet","_that$props3","_that$props$after","_that$props4","beforeFunc","editFunc","editContent","deleteFunc","deleteContent","afterFunc","w","_context","n","props","before","_jsx","React","Fragment","children","value","formEdit","undefined","Tooltip","title","arrow","IconButton","color","onClick","showModal","_objectSpread","renderContent","sx","display","justifyContent","alignItems","backdropActivated","buttonEditConfig","EditIcon","fontSize","formDelete","buttonDeleteConfig","DeleteIcon","after","a","_inherits","Component","_createClass","key","get","mergeObjects","_this2","MapTableBaseContext","context","Box","height","propsMerge","wrapProps","from","getButtons"],"mappings":"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"}
1
+ {"version":3,"file":"create.action-row.js","sources":["../../../src/table/create.action-row.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, IconButton, IconButtonProps, Tooltip } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport { mergeObjects } from '../utils'\r\nimport { GlobalModalState } from '../api-context'\r\nimport { ITableBaseContext, MapTableBaseContext } from './context'\r\n\r\nexport interface IActionRowProps<T> {\r\n value: T\r\n formEdit?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n formDelete?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n after?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n before?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n wrapProps?: BoxProps\r\n buttonEditProps?: IconButtonProps | ((value: T) => IconButtonProps)\r\n buttonDeleteProps?: IconButtonProps | ((value: T) => IconButtonProps)\r\n buttonEditConfig?: GlobalModalState\r\n buttonDeleteConfig?: GlobalModalState\r\n}\r\n\r\nfunction CreateActionRow<T>(params?: Omit<IActionRowProps<T>, 'value'>): ComponentType<IActionRowProps<T>> {\r\n class ActionRow extends Component<IActionRowProps<T>> {\r\n get propsMerge() {\r\n return mergeObjects<IActionRowProps<T>>(params, this.props)\r\n }\r\n\r\n getButtons = function* (that: ActionRow, thatProps: Omit<IActionRowProps<T>, 'value'>, tableContext: ITableBaseContext) {\r\n const beforeFunc = that.props?.before ?? thatProps?.before\r\n if (beforeFunc) {\r\n yield <React.Fragment key='Before'>{beforeFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n const editFunc = that.props?.formEdit ?? thatProps?.formEdit\r\n const editContent = editFunc ? editFunc(that.props.value, tableContext) : undefined\r\n if (editFunc && !!editContent) {\r\n const { buttonEditProps } = thatProps\r\n const p = typeof buttonEditProps === 'function' ? buttonEditProps(that.props.value) : buttonEditProps\r\n yield (\r\n <Tooltip title='Edit' arrow key='Edit'>\r\n <span>\r\n <IconButton\r\n color='primary'\r\n {...p}\r\n onClick={(e) => {\r\n tableContext?.showModal({\r\n renderContent: () => editContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonEditConfig\r\n })\r\n p?.onClick?.(e)\r\n }}\r\n >\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n )\r\n }\r\n const deleteFunc = that.props?.formDelete ?? thatProps?.formDelete\r\n const deleteContent = deleteFunc ? deleteFunc(that.props.value, tableContext) : undefined\r\n if (deleteFunc && !!deleteContent) {\r\n const { buttonDeleteProps } = thatProps\r\n const p = typeof buttonDeleteProps === 'function' ? buttonDeleteProps(that.props.value) : buttonDeleteProps\r\n yield (\r\n <Tooltip title='Delete' arrow key='Delete'>\r\n <span>\r\n <IconButton\r\n color='error'\r\n {...p}\r\n onClick={(e) => {\r\n tableContext?.showModal({\r\n renderContent: () => deleteContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonDeleteConfig\r\n })\r\n p?.onClick?.(e)\r\n }}\r\n >\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n )\r\n }\r\n const afterFunc = that.props?.after ?? thatProps?.after\r\n if (afterFunc) {\r\n yield <React.Fragment key='After'>{afterFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n }\r\n\r\n render() {\r\n return MapTableBaseContext((context) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', height: '100%' }} {...this.propsMerge.wrapProps}>\r\n {Array.from(this.getButtons(this, this.propsMerge, context))}\r\n </Box>\r\n ))\r\n }\r\n }\r\n\r\n return ActionRow\r\n}\r\nexport default CreateActionRow\r\n"],"names":["CreateActionRow","params","ActionRow","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_regenerator","m","_callee","that","thatProps","tableContext","_that$props$before","_that$props","_that$props$formEdit","_that$props2","_that$props$formDelet","_that$props3","_that$props$after","_that$props4","beforeFunc","editFunc","editContent","buttonEditProps","p","deleteFunc","deleteContent","buttonDeleteProps","_p","afterFunc","w","_context","n","props","before","_jsx","React","Fragment","children","value","formEdit","undefined","Tooltip","title","arrow","IconButton","_objectSpread","color","onClick","e","_p$onClick","showModal","renderContent","sx","display","justifyContent","alignItems","backdropActivated","buttonEditConfig","call","EditIcon","fontSize","formDelete","_p$onClick2","buttonDeleteConfig","DeleteIcon","after","a","_inherits","Component","_createClass","key","get","mergeObjects","_this2","MapTableBaseContext","context","Box","height","propsMerge","wrapProps","from","getButtons"],"mappings":"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"}
@@ -10,13 +10,18 @@ export interface IDecoratorFieldProps<T = any> extends IFormInputBase<T> {
10
10
  }
11
11
  export declare const DecoratorField: FC<IDecoratorFieldProps>;
12
12
  export interface IDecoratorFormSlots {
13
+ top?: React.ReactNode;
13
14
  bottom?: React.ReactNode;
14
15
  isFooter?: React.ReactNode | boolean;
15
- renderSubmitButton?: () => React.ReactNode;
16
16
  formBase?: IFormBaseSlots;
17
+ footer?: ComponentType<any>;
17
18
  footerProps?: BoxProps & {
18
19
  [key: string]: any;
19
20
  };
21
+ footerSlots?: {
22
+ after?: React.ReactNode;
23
+ before?: React.ReactNode;
24
+ };
20
25
  }
21
26
  export interface IDecoratorFormProps<T = any> {
22
27
  configClass: any;
@@ -1,5 +1,5 @@
1
1
  import React, { ComponentType } from 'react';
2
- import { BoxProps } from '@mui/material';
2
+ import { BoxProps, IconButtonProps } from '@mui/material';
3
3
  import { GlobalModalState } from '../api-context';
4
4
  import { ITableBaseContext } from './context';
5
5
  export interface IActionRowProps<T> {
@@ -9,6 +9,8 @@ export interface IActionRowProps<T> {
9
9
  after?: (value: T, tableContext: ITableBaseContext) => React.ReactNode;
10
10
  before?: (value: T, tableContext: ITableBaseContext) => React.ReactNode;
11
11
  wrapProps?: BoxProps;
12
+ buttonEditProps?: IconButtonProps | ((value: T) => IconButtonProps);
13
+ buttonDeleteProps?: IconButtonProps | ((value: T) => IconButtonProps);
12
14
  buttonEditConfig?: GlobalModalState;
13
15
  buttonDeleteConfig?: GlobalModalState;
14
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-core",
3
- "version": "2.1.34",
3
+ "version": "2.1.36",
4
4
  "description": "Dinocollab core - libraries for building collaborative applications with React 18",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",