dinocollab-core 2.1.6 → 2.1.8
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/form/create.color-picker.js +2 -0
- package/dist/form/create.color-picker.js.map +1 -0
- package/dist/form/create.form-base.js +1 -1
- package/dist/form/create.form-base.js.map +1 -1
- package/dist/form/create.form-grid-layout.js +1 -1
- package/dist/form/create.form-grid-layout.js.map +1 -1
- package/dist/form/create.input.js +1 -1
- package/dist/form/create.input.js.map +1 -1
- package/dist/form/dino-form.js +1 -1
- package/dist/form/dino-form.js.map +1 -1
- package/dist/types/form/create.color-picker.d.ts +38 -0
- package/dist/types/form/create.form-grid-layout.d.ts +6 -4
- package/dist/types/form/create.input.d.ts +2 -1
- package/dist/types/form/dino-form.d.ts +2 -0
- package/dist/types/form/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defineProperty as t,inherits as e,createClass as a,classCallCheck as n,callSuper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o}from"react/jsx-runtime";import{Component as l}from"react";import{styled as i,TextField as u,InputAdornment as s}from"@mui/material";function c(){return function(){function i(e){var a;return n(this,i),a=r(this,i,[e]),t(a,"handleColorChange",(function(t){var e=t.target.value;a.setState({value:e})})),t(a,"handleInputChange",(function(t){var e=t.target.value;e.startsWith("#")||(e="#"+e.replace(/[^a-fA-F0-9]/g,"")),a.setState({value:e})})),t(a,"handleBlur",(function(){var t=a.state.value.trim();/^#[0-9A-Fa-f]{6}$/.test(t)||a.setState({value:a.getDefaultValue(a.props)})})),a.state={value:a.getDefaultValue(e)},a}return e(i,l),a(i,[{key:"shouldComponentUpdate",value:function(t){var e=this.getDefaultValue(this.props),a=this.getDefaultValue(t);return e===a||(this.setState({value:a}),!1)}},{key:"render",value:function(){var t,e=null===(t=this.props.name)||void 0===t?void 0:t.toString();return o(p,{name:e,label:this.props.label,value:this.state.value,onChange:this.handleInputChange,onBlur:this.handleBlur,variant:"outlined",fullWidth:!0,className:h.root,inputProps:{maxLength:7,style:{paddingLeft:0}},InputProps:{startAdornment:o(s,{position:"start",children:o("div",{className:h.icon,children:o("input",{type:"color",value:this.state.value,onChange:this.handleColorChange,style:{}})})})}})}},{key:"getDefaultValue",value:function(t){var e,a=t.name,n=t.data;return a&&(null==n||null===(e=n[a])||void 0===e?void 0:e.toString())||"#000000"}}])}()}var h={root:"DinoColorPicker-root",icon:"DinoColorPicker-icon"},p=i(u)((function(e){var a,n=e.theme,r=e.value,o="var(--color-picker-icon-size, ".concat(n.spacing(3.5),")"),l=r||"#000000";return t({},(a="icon","".concat("",".").concat(h[a]).concat("")),{width:o,height:o,backgroundColor:l,borderRadius:"50%",boxShadow:"rgba(99, 99, 99, 0.2) 0px 2px 8px 0px",'input[type="color"]':{width:"100%",height:"100%",border:"none",outline:"none",padding:0,background:"none",opacity:0,cursor:"pointer"}})}));export{c as createColorPicker,c as default};
|
|
2
|
+
//# sourceMappingURL=create.color-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.color-picker.js","sources":["../../src/form/create.color-picker.tsx"],"sourcesContent":["import { ChangeEventHandler, Component } from 'react'\r\nimport { TextField, InputAdornment, styled } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\n\r\nexport interface IColorPickerProps<T> extends IFormInputBase<T> {}\r\n\r\nexport interface IColorPickerState {\r\n value: string\r\n}\r\n\r\nexport function createColorPicker<T>() {\r\n class ColorPicker extends Component<IColorPickerProps<T>, IColorPickerState> {\r\n constructor(props: IColorPickerProps<T>) {\r\n super(props)\r\n this.state = { value: this.getDefaultValue(props) }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<IColorPickerProps<T>>): boolean {\r\n const value = this.getDefaultValue(this.props)\r\n const nextValue = this.getDefaultValue(nextProps)\r\n if (value !== nextValue) {\r\n this.setState({ value: nextValue })\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n render() {\r\n const name = this.props.name?.toString()\r\n return (\r\n <TextFieldStyled\r\n name={name}\r\n label={this.props.label}\r\n value={this.state.value}\r\n onChange={this.handleInputChange}\r\n onBlur={this.handleBlur}\r\n variant='outlined'\r\n fullWidth\r\n className={colorPickerClasses.root}\r\n inputProps={{ maxLength: 7, style: { paddingLeft: 0 } }}\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position='start'>\r\n <div className={colorPickerClasses.icon}>\r\n <input type='color' value={this.state.value} onChange={this.handleColorChange} style={{}} />\r\n </div>\r\n </InputAdornment>\r\n )\r\n }}\r\n />\r\n )\r\n }\r\n\r\n getDefaultValue(currentProps: IColorPickerProps<T>) {\r\n const { name, data } = currentProps\r\n return name ? data?.[name]?.toString() || '#000000' : '#000000'\r\n }\r\n\r\n handleColorChange: ChangeEventHandler<HTMLInputElement> = (event) => {\r\n const { value } = event.target\r\n this.setState({ value })\r\n }\r\n\r\n handleInputChange: ChangeEventHandler<HTMLInputElement> = (event) => {\r\n let value = event.target.value\r\n if (!value.startsWith('#')) value = '#' + value.replace(/[^a-fA-F0-9]/g, '')\r\n this.setState({ value })\r\n }\r\n\r\n handleBlur = () => {\r\n const v = this.state.value.trim()\r\n if (!/^#[0-9A-Fa-f]{6}$/.test(v)) {\r\n this.setState({ value: this.getDefaultValue(this.props) })\r\n }\r\n }\r\n }\r\n return ColorPicker\r\n}\r\nexport default createColorPicker\r\n\r\nconst colorPickerClasses = {\r\n root: 'DinoColorPicker-root',\r\n icon: 'DinoColorPicker-icon'\r\n}\r\n\r\nconst getColorPickerClasses = (key: keyof typeof colorPickerClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${colorPickerClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst TextFieldStyled = styled(TextField)(({ theme, value }) => {\r\n const size = `var(--color-picker-icon-size, ${theme.spacing(3.5)})`\r\n const color = value || '#000000'\r\n return {\r\n [getColorPickerClasses('icon')]: {\r\n width: size,\r\n height: size,\r\n backgroundColor: color,\r\n borderRadius: '50%',\r\n boxShadow: 'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px',\r\n 'input[type=\"color\"]': {\r\n width: '100%',\r\n height: '100%',\r\n border: 'none',\r\n outline: 'none',\r\n padding: 0,\r\n background: 'none',\r\n opacity: 0,\r\n cursor: 'pointer'\r\n }\r\n }\r\n }\r\n})\r\n"],"names":["createColorPicker","ColorPicker","props","_this","_classCallCheck","_callSuper","_defineProperty","event","value","target","setState","startsWith","replace","v","state","trim","test","getDefaultValue","_inherits","Component","_createClass","key","nextProps","this","nextValue","_this$props$name","name","toString","_jsx","TextFieldStyled","label","onChange","handleInputChange","onBlur","handleBlur","variant","fullWidth","className","colorPickerClasses","root","inputProps","maxLength","style","paddingLeft","InputProps","startAdornment","InputAdornment","position","children","icon","type","handleColorChange","currentProps","_data$name","data","styled","TextField","_ref","theme","size","concat","spacing","color","getColorPickerClasses","width","height","backgroundColor","borderRadius","boxShadow","border","outline","padding","background","opacity","cursor"],"mappings":"ySAUgBA,IAkEd,kBAhEE,SAAAC,EAAYC,GAA2B,IAAAC,EAEc,OAFdC,OAAAH,GACrCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EA6C4C,qBAAA,SAACI,GACzD,IAAQC,EAAUD,EAAME,OAAhBD,MACRL,EAAKO,SAAS,CAAEF,MAAAA,OACjBF,EAAAH,EAEyD,qBAAA,SAACI,GACzD,IAAIC,EAAQD,EAAME,OAAOD,MACpBA,EAAMG,WAAW,OAAMH,EAAQ,IAAMA,EAAMI,QAAQ,gBAAiB,KACzET,EAAKO,SAAS,CAAEF,MAAAA,OACjBF,EAAAH,EAAA,cAEY,WACX,IAAMU,EAAIV,EAAKW,MAAMN,MAAMO,OACtB,oBAAoBC,KAAKH,IAC5BV,EAAKO,SAAS,CAAEF,MAAOL,EAAKc,gBAAgBd,EAAKD,YA1DnDC,EAAKW,MAAQ,CAAEN,MAAOL,EAAKc,gBAAgBf,IAAQC,CACrD,CAAC,OAAAe,EAAAjB,EAJuBkB,GAIvBC,EAAAnB,EAAA,CAAA,CAAAoB,IAAA,wBAAAb,MAED,SAAsBc,GACpB,IAAMd,EAAQe,KAAKN,gBAAgBM,KAAKrB,OAClCsB,EAAYD,KAAKN,gBAAgBK,GACvC,OAAId,IAAUgB,IACZD,KAAKb,SAAS,CAAEF,MAAOgB,KAChB,EAGX,GAAC,CAAAH,IAAA,SAAAb,MAED,WAAM,IAAAiB,EACEC,EAAsB,QAAlBD,EAAGF,KAAKrB,MAAMwB,YAAXD,IAAeA,OAAfA,EAAAA,EAAiBE,WAC9B,OACEC,EAACC,EAAe,CACdH,KAAMA,EACNI,MAAOP,KAAKrB,MAAM4B,MAClBtB,MAAOe,KAAKT,MAAMN,MAClBuB,SAAUR,KAAKS,kBACfC,OAAQV,KAAKW,WACbC,QAAQ,WACRC,WAAS,EACTC,UAAWC,EAAmBC,KAC9BC,WAAY,CAAEC,UAAW,EAAGC,MAAO,CAAEC,YAAa,IAClDC,WAAY,CACVC,eACEjB,EAACkB,EAAe,CAAAC,SAAS,QAAOC,SAC9BpB,EAAK,MAAA,CAAAS,UAAWC,EAAmBW,KACjCD,SAAApB,EAAA,QAAA,CAAOsB,KAAK,QAAQ1C,MAAOe,KAAKT,MAAMN,MAAOuB,SAAUR,KAAK4B,kBAAmBT,MAAO,CAAA,UAOpG,GAAC,CAAArB,IAAA,kBAAAb,MAED,SAAgB4C,GAAkC,IAAAC,EACxC3B,EAAe0B,EAAf1B,KAAM4B,EAASF,EAATE,KACd,OAAO5B,IAAO4B,SAAYD,QAARA,EAAJC,EAAO5B,UAAP2B,IAAYA,OAAZA,EAAAA,EAAc1B,aAA0B,SACxD,IAAC,GAqBL,CAGA,IAAMW,EAAqB,CACzBC,KAAM,uBACNU,KAAM,wBAOFpB,EAAkB0B,EAAOC,EAAPD,EAAkB,SAAAE,GAAqB,IAJhCpC,EAIcqC,EAAKD,EAALC,MAAOlD,EAAKiD,EAALjD,MAC5CmD,EAAIC,iCAAAA,OAAoCF,EAAMG,QAAQ,KAAO,KAC7DC,EAAQtD,GAAS,UACvB,OAAAF,EACGyD,CAAAA,GAR0B1C,EAQJ,OAPzB,GAAAuC,OAA6B,QAAEA,OAAItB,EAAmBjB,IAAIuC,OAAsB,KAO7C,CAC/BI,MAAOL,EACPM,OAAQN,EACRO,gBAAiBJ,EACjBK,aAAc,MACdC,UAAW,wCACX,sBAAuB,CACrBJ,MAAO,OACPC,OAAQ,OACRI,OAAQ,OACRC,QAAS,OACTC,QAAS,EACTC,WAAY,OACZC,QAAS,EACTC,OAAQ,YAIhB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as r,createClass as e,classCallCheck as t,callSuper as a,defineProperty as o,objectSpread2 as s,asyncToGenerator as n,regenerator as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l}from"react/jsx-runtime";import u,{Component as m}from"react";import{Box as c}from"@mui/material";import{validateMerge as f,convertFormDataToJson as d,trimAllStrings as v,singleValidate as
|
|
1
|
+
import{inherits as r,createClass as e,classCallCheck as t,callSuper as a,defineProperty as o,objectSpread2 as s,asyncToGenerator as n,regenerator as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l}from"react/jsx-runtime";import u,{Component as m}from"react";import{Box as c}from"@mui/material";import{validateMerge as f,convertFormDataToJson as d,trimAllStrings as v,singleValidate as E,getErrorFromResponse as p}from"./helpers.js";import S,{SingleRuleValidate as g}from"./validator.js";var h=function(h){var b=u.createContext({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),C=function(){function u(r){var e;return t(this,u),e=a(this,u,[r]),o(e,"refForm",null),o(e,"mapContext",(function(){var r=e,t=r.setError,a=r.removeError,o=r.setModelState,s=r.clearErrorAll,n=r.onBlur,i=e.state;return{modelState:i.modelState,messageErrors:i.messageErrors,setError:t,onBlur:n,clearErrorAll:s,setModelState:o,removeError:a}})),o(e,"setModelState",(function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})})),o(e,"getValidate",(function(){var r=new S({});return f(r,null==h?void 0:h.validate,e.props.validate)})),o(e,"setError",(function(r,t){var a=o({},r,[{rule:g.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,a)})})),o(e,"removeError",(function(r){var t=s({},e.state.messageErrors);Array.isArray(r)?r.forEach((function(r){t[r]&&delete t[r]})):t[r]&&delete t[r],e.setState({messageErrors:t})})),o(e,"clearErrorAll",(function(){e.setState({messageErrors:{}})})),o(e,"onSubmit",function(){var r=n(i().m((function r(t){var a,o,n,l;return i().w((function(r){for(;;)switch(r.n){case 0:if(t.preventDefault(),a=new FormData(t.currentTarget),o=d(a),n=v(o),e.setState({modelState:n}),!(l=e.validate.run(n))){r.n=1;break}if(e.setState({messageErrors:l}),!(Object.keys(l).length>0)){r.n=1;break}return r.a(2);case 1:return r.n=2,e.props.onSubmit(n,t).catch((function(r){var t=p(r,n);e.setState({messageErrors:s(s({},e.state.messageErrors),t||{})})}));case 2:return r.a(2)}}),r)})));return function(e){return r.apply(this,arguments)}}()),o(e,"onBlur",(function(r){if(e.refForm){var t=e.state.messageErrors,a=new FormData(e.refForm),o=d(a),s=v(o);e.setState({modelState:s});var n=E(r,s,t,e.validate)||{};e.setState({messageErrors:n})}})),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(u,m),e(u,[{key:"render",value:function(){var r=this;return l(c,{component:"form",ref:function(e){return r.refForm=e},onSubmit:this.onSubmit,children:l(b.Provider,{value:this.mapContext(),children:this.props.children})})}}])}();return{Form:C,Validator:null==h?void 0:h.validate,Context:b,mapContext:function(r){return l(b.Consumer,{children:r})}}};export{h as default};
|
|
2
2
|
//# sourceMappingURL=create.form-base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.form-base.js","sources":["../../src/form/create.form-base.tsx"],"sourcesContent":["import React, { Component, ComponentType, PropsWithChildren, ReactNode } from 'react'\r\nimport { Box, BoxProps } from '@mui/material'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorFromResponse, singleValidate, trimAllStrings, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseSlots {\r\n formProps?: Omit<BoxProps, 'ref' | 'onSubmit' | 'component'>\r\n}\r\n\r\nexport interface IFormBaseConfigs<T> {\r\n validate?: FormValidator<Partial<T>>\r\n dataTrimed?: boolean\r\n dataGetter?: (data: Partial<T>) => Partial<T>\r\n}\r\n\r\nexport interface IFormBaseParams<T> extends IFormBaseConfigs<T> {}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren, IFormBaseConfigs<T> {\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n slots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst CreateFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = React.createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n removeError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n return (\r\n <Box component='form' ref={(ref: HTMLFormElement) => (this.refForm = ref)} onSubmit={this.onSubmit}>\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, removeError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState, removeError }\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n removeError = (
|
|
1
|
+
{"version":3,"file":"create.form-base.js","sources":["../../src/form/create.form-base.tsx"],"sourcesContent":["import React, { Component, ComponentType, PropsWithChildren, ReactNode } from 'react'\r\nimport { Box, BoxProps } from '@mui/material'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorFromResponse, singleValidate, trimAllStrings, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseSlots {\r\n formProps?: Omit<BoxProps, 'ref' | 'onSubmit' | 'component'>\r\n}\r\n\r\nexport interface IFormBaseConfigs<T> {\r\n validate?: FormValidator<Partial<T>>\r\n dataTrimed?: boolean\r\n dataGetter?: (data: Partial<T>) => Partial<T>\r\n}\r\n\r\nexport interface IFormBaseParams<T> extends IFormBaseConfigs<T> {}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren, IFormBaseConfigs<T> {\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n slots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst CreateFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = React.createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n removeError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n return (\r\n <Box component='form' ref={(ref: HTMLFormElement) => (this.refForm = ref)} onSubmit={this.onSubmit}>\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, removeError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState, removeError }\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n removeError = (keyNames: keyof T | (keyof T)[]) => {\r\n const newErrors = { ...this.state.messageErrors }\r\n if (Array.isArray(keyNames)) {\r\n keyNames.forEach((key) => {\r\n if (newErrors[key]) delete newErrors[key]\r\n })\r\n } else {\r\n if (newErrors[keyNames]) delete newErrors[keyNames]\r\n }\r\n this.setState({ messageErrors: newErrors })\r\n }\r\n\r\n clearErrorAll = () => {\r\n this.setState({ messageErrors: {} })\r\n }\r\n\r\n private validate: FormValidator<Partial<T>>\r\n onSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\r\n e.preventDefault()\r\n const formData = new FormData(e.currentTarget as HTMLFormElement)\r\n const raw = convertFormDataToJson<T>(formData)\r\n // TODO: validate raw data\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const messageErrors = this.validate.run(trimmed) as IPartialError<T>\r\n if (messageErrors) {\r\n this.setState({ messageErrors: messageErrors })\r\n if (Object.keys(messageErrors).length > 0) return\r\n }\r\n await this.props.onSubmit(trimmed, e).catch((error) => {\r\n const messageError = getErrorFromResponse(error, trimmed)\r\n this.setState({ messageErrors: { ...this.state.messageErrors, ...(messageError || {}) } })\r\n })\r\n }\r\n\r\n onBlur = (keyName: keyof T) => {\r\n if (!this.refForm) return\r\n const { messageErrors } = this.state\r\n const formData = new FormData(this.refForm)\r\n const raw = convertFormDataToJson(formData)\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const error = singleValidate<T, Partial<T>>(keyName, trimmed, messageErrors, this.validate) || {}\r\n this.setState({ messageErrors: error as IPartialError<T> })\r\n }\r\n }\r\n\r\n return {\r\n Form: FormBase,\r\n Validator: params?.validate,\r\n Context: FormBaseContext,\r\n mapContext: (params: (context: IFormBaseContext<T>) => ReactNode) => <FormBaseContext.Consumer>{params}</FormBaseContext.Consumer>\r\n }\r\n}\r\nexport default CreateFormBase\r\n"],"names":["CreateFormBase","params","FormBaseContext","React","createContext","setModelState","messageErrors","onBlur","setError","removeError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","obj","Object","assign","setState","defaultValidate","FormValidator","validateMerge","validate","keyName","message","error","rule","SingleRuleValidate","Custom","keyNames","newErrors","_objectSpread","Array","isArray","forEach","key","_ref","_asyncToGenerator","_regenerator","m","_callee","e","formData","raw","trimmed","w","_context","n","preventDefault","FormData","currentTarget","convertFormDataToJson","trimAllStrings","run","keys","length","a","onSubmit","messageError","getErrorFromResponse","_x","apply","this","arguments","refForm","singleValidate","getValidate","_inherits","Component","_createClass","value","_this3","_jsx","Box","component","ref","children","Provider","mapContext","Form","Validator","Context","Consumer"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as o,createClass as
|
|
1
|
+
import{inherits as o,createClass as e,objectSpread2 as r,classCallCheck as n,callSuper as t,defineProperty as l,asyncToGenerator as i,regenerator as s}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as a,jsx as d}from"react/jsx-runtime";import{Fragment as u,Component as p}from"react";import{Grid as c}from"@mui/material";import{cleanObject as v}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{ContentWrap as m,CreateFormBottomBar as f}from"./create.form-grid-layout.units.js";import g from"./create.input.js";import b from"./create.form-base.js";import{mapGlobalModalContext as h}from"../api-context/global-modal.js";var S=function(S){var F=b(),y=f(),C=g({maxLength:250}),j=function(){function f(o){var e;return n(this,f),e=t(this,f,[o]),l(e,"renderFormFieldElement",(function(o,n){var t,l,i,s=e.props.data,a=null!==(t=n.inputElement)&&void 0!==t?t:C,u={data:s,onBlur:o.onBlur,messageErrors:o.messageErrors,name:n.key,label:n.label,placeholder:n.placeholder,disabled:!(null===(l=e.configMerged.disabledFields)||void 0===l||!l[n.key])||void 0,defaultValue:null!==(i=null==s?void 0:s[n.key])&&void 0!==i?i:null==n?void 0:n.defaultValue,formContext:o};return d(a,r({},v(u)))})),l(e,"loading",(function(){return e.setState({loadding:!0})})),l(e,"unloading",(function(){return e.setState({loadding:!1})})),l(e,"onSubmit",function(){var o=i(s().m((function o(r,n){var t,l,i,a,d,u,p,c,v;return s().w((function(o){for(;;)switch(o.n){case 0:return a=e.props.slots,d=null!==(t=null!==(l=null===(i=e.props.slots)||void 0===i?void 0:i.preSubmit)&&void 0!==l?l:S.preSubmit)&&void 0!==t?t:e.preSubmit,u=d(r,e.props.data),o.p=1,e.loading(),null===(p=e.abortController)||void 0===p||p.abort(),e.abortController=new AbortController,o.n=2,e.props.onSubmit(u,null===(c=e.abortController)||void 0===c?void 0:c.signal);case 2:null!=a&&a.closeState&&!1===a.closeState.Success||(n&&n(),e.props.onClose&&e.props.onClose()),o.n=4;break;case 3:o.p=3,v=o.v,null!=a&&a.closeState&&!0===a.closeState.Fail&&(n&&n(),e.props.onClose&&e.props.onClose()),e.props.onError&&e.props.onError(v);case 4:return o.p=4,e.unloading(),o.f(4);case 5:return o.a(2)}}),o,null,[[1,3,4,5]])})));return function(e,r){return o.apply(this,arguments)}}()),l(e,"preSubmit",(function(o){return o})),l(e,"getFormSlots",(function(){var o,n=e.state.loadding,t=((null===(o=e.props.slots)||void 0===o?void 0:o.formSlots)||{}).formProps;return{formProps:r(r({},t),{},{sx:r(r({},e.props.sx),{},{opacity:n?.7:1,pointerEvents:n?"none":"auto"})})}})),e.state={loadding:!1},e}return o(f,p),e(f,[{key:"configMerged",get:function(){var o,e,r,n,t,l,i,s,a;return{getHiddenFields:null!==(o=null!==(e=null===(r=this.props.slots)||void 0===r?void 0:r.getHiddenFields)&&void 0!==e?e:S.getHiddenFields)&&void 0!==o?o:function(){return{}},hiddenFields:null!==(n=null!==(t=null===(l=this.props.slots)||void 0===l?void 0:l.hiddenFields)&&void 0!==t?t:S.hiddenFields)&&void 0!==n?n:{},disabledFields:null!==(i=null!==(s=null===(a=this.props.slots)||void 0===a?void 0:a.disabledFields)&&void 0!==s?s:S.disabledFields)&&void 0!==i?i:{}}}},{key:"render",value:function(){var o,e,n,t=this,l=this.props,i=l.slots,s=l.data,p=null!==(o=null!==(e=null==S?void 0:S.action)&&void 0!==e?e:null===(n=this.props.slots)||void 0===n?void 0:n.action)&&void 0!==o?o:y;return h((function(o){var e,n=o.close;return a(F.Form,{validate:S.validate,onSubmit:function(o){return t.onSubmit(o,n)},slots:t.getFormSlots(),children:[a(m,r(r({},null===(e=t.props)||void 0===e||null===(e=e.slots)||void 0===e?void 0:e.contentProps),{},{children:[(null==i?void 0:i.contentBefore)&&(null==i?void 0:i.contentBefore),null==S?void 0:S.contentBefore,F.mapContext((function(o){var e=t.configMerged,n=e.getHiddenFields,l=e.hiddenFields,i=r(r({},l),n(o.modelState||{},s));return d(c,{container:!0,spacing:2,children:S.configs.map((function(e,n){var l=!!i[e.key]||void 0;return d(u,l?{}:{children:d(c,r(r({item:!0,xs:12},e.sizes),{},{children:t.renderFormFieldElement(o,e)}))},e.key.toString()+n)}))})})),null==S?void 0:S.contentAfter,(null==i?void 0:i.contentAfter)&&(null==i?void 0:i.contentAfter)]})),F.mapContext((function(o){var e;return d(p,{data:t.props.data,onBlur:o.onBlur,messageErrors:o.messageErrors,before:null===(e=t.props.slots)||void 0===e?void 0:e.actionBefore})}))]})}))}},{key:"componentWillUnmount",value:function(){var o;null===(o=this.abortController)||void 0===o||o.abort()}}])}();return j};export{S as default};
|
|
2
2
|
//# sourceMappingURL=create.form-grid-layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.form-grid-layout.js","sources":["../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport { cleanObject } from '../utils'\r\nimport { IFormBase, IFormInputBase } from './types'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { ContentWrap, CreateFormBottomBar } from './create.form-grid-layout.units'\r\nimport FormValidator from './validator'\r\nimport CreateInput from './create.input'\r\nimport CreateFormBase, { IFormBaseSlots } from './create.form-base'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n sizes?: RegularBreakpoints\r\n defaultValue?: any\r\n inputElement?: React.ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type IPreSubmitEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutSlots<T> {\r\n action?: React.ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n hiddenFields?: Partial<Record<keyof T, boolean>>\r\n getHiddenFields?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n disabledFields?: Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n contentProps?: BoxProps\r\n preSubmit?: IPreSubmitEvent<T>\r\n formSlots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = CreateFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = CreateInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged() {\r\n return {\r\n hiddenFields: this.props.slots?.hiddenFields ?? params.hiddenFields,\r\n disabledFields: this.props.slots?.disabledFields ?? params.disabledFields\r\n }\r\n }\r\n\r\n render() {\r\n const { slots } = this.props\r\n const BottomBar = params?.action ?? this.props.slots?.action ?? BottomBarInstance\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormBaseInstance.Form validate={params.validate} onSubmit={(v) => this.onSubmit(v, close)} slots={this.getFormSlots()}>\r\n <ContentWrap {...this.props?.slots?.contentProps}>\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const isHidden: boolean | undefined = this.configMerged.hiddenFields?.[config.key] ? true : undefined\r\n if (isHidden) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.sizes}>\r\n {this.renderFormFieldElement(config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n </ContentWrap>\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={this.props.data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={this.props.slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n return FormBaseInstance.mapContext((context) => {\r\n const obj: IFormInputBase<T, any> = {\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: this.configMerged.disabledFields?.[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n formContext: context\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n })\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.preSubmit ?? params.preSubmit ?? this.preSubmit\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n preSubmit: IPreSubmitEvent<T> = (value) => value\r\n\r\n getFormSlots = (): IFormBaseSlots => {\r\n const isLoading = this.state.loadding\r\n const { formProps } = this.props.slots?.formSlots || {}\r\n return {\r\n formProps: {\r\n ...formProps,\r\n sx: {\r\n ...this.props.sx,\r\n opacity: isLoading ? 0.7 : 1,\r\n pointerEvents: isLoading ? 'none' : 'auto'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","CreateFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","CreateInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","config","_config$inputElement","data","ElementComponent","inputElement","mapContext","context","_this$configMerged$di","_data$config$key","obj","onBlur","messageErrors","name","key","label","placeholder","disabled","configMerged","disabledFields","undefined","defaultValue","formContext","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","value","close","_ref2","_this$props$slots$pre","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","n","preSubmit","p","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","_this$props$slots2","isLoading","state","formProps","formSlots","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_this$props$slots$hid","_this$props$slots3","_this$props$slots$dis","_this$props$slots4","hiddenFields","_ref4","_params$action","_this$props$slots5","_this2","BottomBar","action","mapGlobalModalContext","_ref5","_this2$props","_jsxs","Form","validate","getFormSlots","children","ContentWrap","contentProps","contentBefore","Grid","container","spacing","configs","map","index","_this2$configMerged$h","isHidden","Fragment","item","xs","sizes","renderFormFieldElement","toString","contentAfter","_this2$props$slots","before","actionBefore","_this$abortController3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.form-grid-layout.js","sources":["../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport { cleanObject } from '../utils'\r\nimport { IFormBase, IFormBaseContext, IFormInputBase } from './types'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { ContentWrap, CreateFormBottomBar } from './create.form-grid-layout.units'\r\nimport FormValidator from './validator'\r\nimport CreateInput from './create.input'\r\nimport CreateFormBase, { IFormBaseSlots } from './create.form-base'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n sizes?: RegularBreakpoints\r\n defaultValue?: any\r\n inputElement?: React.ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type IPreSubmitEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutMergedConfigs<T> {\r\n hiddenFields?: Partial<Record<keyof T, boolean>>\r\n getHiddenFields?: (state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n disabledFields?: Partial<Record<keyof T, boolean>>\r\n}\r\n\r\nexport interface IFormGridLayoutSlots<T> extends IFormGridLayoutMergedConfigs<T> {\r\n action?: React.ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n // getDisabledFields?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n contentProps?: BoxProps\r\n preSubmit?: IPreSubmitEvent<T>\r\n formSlots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = CreateFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = CreateInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged(): Required<IFormGridLayoutMergedConfigs<T>> {\r\n return {\r\n getHiddenFields: this.props.slots?.getHiddenFields ?? params.getHiddenFields ?? (() => ({})),\r\n hiddenFields: this.props.slots?.hiddenFields ?? params.hiddenFields ?? {},\r\n disabledFields: this.props.slots?.disabledFields ?? params.disabledFields ?? {}\r\n }\r\n }\r\n\r\n render() {\r\n const { slots, data } = this.props\r\n const BottomBar = params?.action ?? this.props.slots?.action ?? BottomBarInstance\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormBaseInstance.Form validate={params.validate} onSubmit={(v) => this.onSubmit(v, close)} slots={this.getFormSlots()}>\r\n <ContentWrap {...this.props?.slots?.contentProps}>\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n {FormBaseInstance.mapContext((context) => {\r\n const { getHiddenFields, hiddenFields } = this.configMerged\r\n const finalHiddenFields: Partial<Record<keyof T, boolean>> = { ...hiddenFields, ...getHiddenFields(context.modelState || {}, data) }\r\n return (\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const isHidden: boolean | undefined = finalHiddenFields[config.key] ? true : undefined\r\n if (isHidden) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.sizes}>\r\n {this.renderFormFieldElement(context, config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n )\r\n })}\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n </ContentWrap>\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={this.props.data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={this.props.slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (context: IFormBaseContext<T>, config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n const obj: IFormInputBase<T, any> = {\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: this.configMerged.disabledFields?.[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n formContext: context\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.preSubmit ?? params.preSubmit ?? this.preSubmit\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n preSubmit: IPreSubmitEvent<T> = (value) => value\r\n\r\n getFormSlots = (): IFormBaseSlots => {\r\n const isLoading = this.state.loadding\r\n const { formProps } = this.props.slots?.formSlots || {}\r\n return {\r\n formProps: {\r\n ...formProps,\r\n sx: {\r\n ...this.props.sx,\r\n opacity: isLoading ? 0.7 : 1,\r\n pointerEvents: isLoading ? 'none' : 'auto'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","CreateFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","CreateInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","context","config","_config$inputElement","_this$configMerged$di","_data$config$key","data","ElementComponent","inputElement","obj","onBlur","messageErrors","name","key","label","placeholder","disabled","configMerged","disabledFields","undefined","defaultValue","formContext","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","value","close","_ref2","_this$props$slots$pre","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","n","preSubmit","p","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","_this$props$slots2","isLoading","state","formProps","formSlots","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_ref4","_this$props$slots$get","_this$props$slots3","_ref5","_this$props$slots$hid","_this$props$slots4","_ref6","_this$props$slots$dis","_this$props$slots5","getHiddenFields","hiddenFields","_ref7","_params$action","_this$props$slots6","_this2","_this$props","BottomBar","action","mapGlobalModalContext","_ref8","_this2$props","_jsxs","Form","validate","getFormSlots","ContentWrap","contentProps","children","contentBefore","mapContext","_this2$configMerged","finalHiddenFields","modelState","Grid","container","spacing","configs","map","index","isHidden","Fragment","item","xs","sizes","renderFormFieldElement","toString","contentAfter","_this2$props$slots","before","actionBefore","_this$abortController3"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as e,createClass as t,objectSpread2 as r,classCallCheck as
|
|
1
|
+
import{inherits as e,createClass as t,objectSpread2 as r,classCallCheck as o,callSuper as a,defineProperty as i,objectWithoutProperties as l,asyncToGenerator as n,regenerator as s}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as u,jsx as p,Fragment as d}from"react/jsx-runtime";import{Component as c}from"react";import{styled as m,Box as h,TextField as v,InputAdornment as f,IconButton as g,Collapse as b,CircularProgress as x}from"@mui/material";import S from"@mui/icons-material/ContentPaste";import{mergeObjects as k}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{getErrorMessage as y}from"./helpers.js";import{RichTooltip as P,HelpOutlinePulseIcon as j}from"../components/rich-tooltip.js";import{ImageWithFallback as L}from"../components/image-with-fallback.js";var C=["srcGetter","element","alt","fallbackSrc","debounceDelay"],I=function(m){return function(){function x(e){var t,c;return o(this,x),c=a(this,x,[e]),i(c,"_cachedSlots",{}),i(c,"mapTextFieldProps",(function(){var e,t,o,a,i=y(c.props.messageErrors,c.props.name),l={fullWidth:!0,variant:"outlined",name:null===(e=c.props.name)||void 0===e?void 0:e.toString(),error:i.error,helperText:i.message,disabled:c.props.disabled,onBlur:function(){c.props.name&&c.props.onBlur&&c.props.onBlur(c.props.name)},label:c.getLabel(),placeholder:c.props.placeholder,InputLabelProps:c.state.value?{shrink:!0}:{},value:null!==(t=c.state.value)&&void 0!==t?t:"",onChange:c.handleChange};return l.InputProps||(l.InputProps={}),l.InputProps.endAdornment=u(f,{position:"end",children:[c.slots.pastenable&&p(g,{onClick:c.handlePaste,edge:"end",children:p(S,{})}),c.slots.tooltip&&p(P,{panel:c.slots.tooltip,children:p(j,{fontSize:"small"})})]}),null!==(o=c.slots)&&void 0!==o&&o.maxLength&&(l.inputProps=r(r({},l.inputProps),{},{maxLength:c.slots.maxLength})),k({},l,null===(a=c.slots)||void 0===a?void 0:a.textFieldProps)})),i(c,"renderImageSide",(function(e){var t,o="left"===e?c.slots.imageLeft:c.slots.imageRight;if(!o)return p(d,{});var a=o.srcGetter,i=o.element,n=o.alt,s=void 0===n?"input-image":n,u=o.fallbackSrc,m=void 0===u?"":u,h=o.debounceDelay,v=void 0===h?700:h,f=l(o,C);if(i)return p(z,{children:p(i,{value:c.state.value,model:c.props.data})});var g=a?a(c.state.value,c.props.data):null!==(t=f.src)&&void 0!==t?t:c.state.value,x={src:g,alt:s,fallbackSrc:m,debounceDelay:v};return p(b,{sx:{mx:"10px"},in:!!g,unmountOnExit:!0,orientation:"horizontal",children:p(z,{children:p(L,r(r(r({},f),x),{},{loading:p(w,{})}))})})})),i(c,"mergeSlots",(function(e){var t=k({},m,e),o=t.imageLeft,a=t.imageRight;return null!=o&&o.mirror&&!a?(t.imageRight=r({},o),delete t.imageRight.mirror):null!=a&&a.mirror&&!o&&(t.imageLeft=r({},a),delete t.imageLeft.mirror),t})),i(c,"getLabel",(function(){var e,t,r;if(c.props.label)return null!==(e=c.slots)&&void 0!==e&&e.maxLength?"".concat(c.props.label," (").concat(null!==(t=null===(r=c.state.value)||void 0===r?void 0:r.length)&&void 0!==t?t:0,"/").concat(c.slots.maxLength,")"):c.props.label})),i(c,"handleChange",(function(e){c.setState({value:e.target.value})})),i(c,"handlePaste",n(s().m((function e(){var t,r;return s().w((function(e){for(;;)switch(e.n){case 0:return e.p=0,e.n=1,navigator.clipboard.readText();case 1:t=e.v,c.setState({value:t}),e.n=3;break;case 2:e.p=2,r=e.v,console.error("Error clipboard:",r);case 3:return e.a(2)}}),e,null,[[0,2]])})))),c._cachedSlots=null!==(t=c.mergeSlots(e.slots))&&void 0!==t?t:{},c.state={value:c.defaulValue},c}return e(x,c),t(x,[{key:"slots",get:function(){return this._cachedSlots}},{key:"defaulValue",get:function(){var e,t,r=this.props,o=r.data,a=r.name;return null!==(e=this.props.defaultValue)&&void 0!==e?e:o&&a?null===(t=o[a])||void 0===t?void 0:t.toString():void 0}},{key:"componentDidUpdate",value:function(e){e.slots!==this.props.slots&&(this._cachedSlots=this.mergeSlots(this.props.slots))}},{key:"shouldComponentUpdate",value:function(e){var t=this.props,r=t.name;t.slots;if(r){var o,a,i,l,n=null!==(o=null===(a=this.props.data)||void 0===a||null===(a=a[r])||void 0===a?void 0:a.toString())&&void 0!==o?o:"",s=null!==(i=null===(l=e.data)||void 0===l||null===(l=l[r])||void 0===l?void 0:l.toString())&&void 0!==i?i:"";if(n!==s)return this.setState({value:s}),!1}return e.slots,!0}},{key:"render",value:function(){var e;return u(h,{sx:{display:"flex",alignItems:"center"},children:[!!this.props.disabled&&p("input",{hidden:!0,name:null===(e=this.props.name)||void 0===e?void 0:e.toString(),defaultValue:this.defaulValue}),this.renderImageSide("left"),p(v,r({},this.mapTextFieldProps())),this.renderImageSide("right")]})}}])}()},w=function(){return p("div",{children:p(x,{size:24})})},z=m(h)({fontSize:"1rem",height:"var(--input-base-image-size, 54px)",width:"var(--input-base-image-size, 54px)",position:"relative",borderRadius:"8px",boxShadow:"rgba(0, 0, 0, 0.16) 0px 1px 4px",overflow:"hidden","& > img":{position:"absolute",top:0,left:0,backgroundRepeat:"no-repeat",height:"100%",width:"100%",backgroundSize:"contain"},"& > div":{position:"absolute",top:0,left:0,height:"100%",width:"100%",background:"#fafafa",zIndex:1,display:"flex",alignItems:"center",justifyContent:"center"}});export{I as default};
|
|
2
2
|
//# sourceMappingURL=create.input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.input.js","sources":["../../src/form/create.input.tsx"],"sourcesContent":["import React, { Component, ComponentType, FC } from 'react'\r\nimport { Box, CircularProgress, Collapse, IconButton, InputAdornment, styled, TextField, TextFieldProps } from '@mui/material'\r\nimport ContentPasteIcon from '@mui/icons-material/ContentPaste'\r\nimport { mergeObjects } from '../utils'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { ImageWithFallback, IImageWithFallbackPropsOwner } from '../components'\r\n\r\nexport interface InputBaseImage<T> extends Partial<IImageWithFallbackPropsOwner> {\r\n srcGetter?: (value: any, model?: Partial<T>) => string\r\n element?: React.ComponentType<{ value: any; model?: Partial<T> }>\r\n mirror?: boolean\r\n}\r\n\r\nexport interface IInputSlots<T> {\r\n maxLength?: number\r\n textFieldProps?: TextFieldProps\r\n pastenable?: boolean\r\n imageLeft?: InputBaseImage<T>\r\n imageRight?: InputBaseImage<T>\r\n}\r\n\r\nexport interface IInputProps<T> extends IFormInputBase<T, IInputSlots<T>> {}\r\n\r\nexport interface IInputState {\r\n value?: string\r\n}\r\n\r\nexport interface IInputParams<T> extends IInputSlots<T> {}\r\n\r\nconst CreateInput = function <T>(params?: IInputParams<T>): ComponentType<IInputProps<T>> {\r\n class InputBase extends Component<IInputProps<T>, IInputState> {\r\n private _cachedSlots: IInputSlots<T> = {}\r\n constructor(props: IInputProps<T>) {\r\n super(props)\r\n this._cachedSlots = this.mergeSlots(props.slots) ?? {}\r\n this.state = { value: this.defaulValue }\r\n }\r\n\r\n get slots() {\r\n return this._cachedSlots\r\n }\r\n\r\n get defaulValue(): string {\r\n const { data, name } = this.props\r\n return this.props.defaultValue ?? (!!data && !!name ? data[name]?.toString() : undefined)\r\n }\r\n\r\n componentDidUpdate(prevProps: IInputProps<T>) {\r\n if (prevProps.slots !== this.props.slots) {\r\n this._cachedSlots = this.mergeSlots(this.props.slots)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<IInputProps<T>>): boolean {\r\n const { name, slots } = this.props\r\n if (!!name) {\r\n const currentDataValue = this.props.data?.[name]?.toString() ?? ''\r\n const nextDataValue = nextProps.data?.[name]?.toString() ?? ''\r\n if (currentDataValue !== nextDataValue) {\r\n this.setState({ value: nextDataValue })\r\n return false\r\n }\r\n }\r\n\r\n if (slots !== nextProps.slots) {\r\n return true\r\n }\r\n return true\r\n }\r\n\r\n mapTextFieldProps = (): TextFieldProps => {\r\n const errorMessage = getErrorMessage(this.props.messageErrors, this.props.name)\r\n const tfp: TextFieldProps = {\r\n fullWidth: true,\r\n variant: 'outlined',\r\n name: this.props.name?.toString(),\r\n error: errorMessage.error,\r\n helperText: errorMessage.message,\r\n disabled: this.props.disabled,\r\n onBlur: () => {\r\n if (!this.props.name) return\r\n this.props.onBlur && this.props.onBlur(this.props.name)\r\n },\r\n label: this.getLabel(),\r\n placeholder: this.props.placeholder,\r\n InputLabelProps: !!this.state.value ? { shrink: true } : {},\r\n value: this.state.value ?? '',\r\n onChange: this.handleChange\r\n }\r\n if (this.slots.pastenable === true) {\r\n tfp.InputProps = {\r\n endAdornment: (\r\n <InputAdornment position='end'>\r\n <IconButton onClick={this.handlePaste} edge='end'>\r\n <ContentPasteIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }\r\n }\r\n if (this.slots?.maxLength) tfp.inputProps = { ...tfp.inputProps, maxLength: this.slots.maxLength }\r\n return mergeObjects<TextFieldProps>({}, tfp, this.slots?.textFieldProps)\r\n }\r\n\r\n //#region Render\r\n render() {\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\r\n {!!this.props.disabled && <input hidden name={this.props.name?.toString()} defaultValue={this.defaulValue} />}\r\n {this.renderImageSide('left')}\r\n <TextField {...this.mapTextFieldProps()} />\r\n {this.renderImageSide('right')}\r\n </Box>\r\n )\r\n }\r\n\r\n renderImageSide = (side: 'left' | 'right') => {\r\n const image = side === 'left' ? this.slots.imageLeft : this.slots.imageRight\r\n if (!image) return <></>\r\n const { srcGetter, element, alt = 'input-image', fallbackSrc = '', debounceDelay = 700, ...imageOther } = image\r\n if (element) {\r\n const Element = element\r\n return (\r\n <WrapImage>\r\n <Element value={this.state.value} model={this.props.data} />\r\n </WrapImage>\r\n )\r\n }\r\n const src = srcGetter ? srcGetter(this.state.value, this.props.data) : imageOther.src ?? this.state.value\r\n const imageProps: IImageWithFallbackPropsOwner = { src, alt, fallbackSrc, debounceDelay }\r\n return (\r\n <Collapse sx={{ mx: '10px' }} in={!!src} unmountOnExit orientation='horizontal'>\r\n <WrapImage>\r\n <ImageWithFallback {...imageOther} {...imageProps} loading={<LoadingCircularProgress />} />\r\n </WrapImage>\r\n </Collapse>\r\n )\r\n }\r\n //#endregion\r\n\r\n private mergeSlots = (currentSlots?: IInputSlots<T>): IInputSlots<T> => {\r\n const base = mergeObjects<IInputSlots<T>>({}, params, currentSlots)\r\n const { imageLeft, imageRight } = base\r\n\r\n // mirror from left to right\r\n if (imageLeft?.mirror && !imageRight) {\r\n base.imageRight = { ...imageLeft }\r\n delete base.imageRight.mirror\r\n }\r\n // mirror from right to left\r\n else if (imageRight?.mirror && !imageLeft) {\r\n base.imageLeft = { ...imageRight }\r\n delete base.imageLeft.mirror\r\n }\r\n\r\n return base\r\n }\r\n\r\n getLabel = () => {\r\n if (!this.props.label) return\r\n if (!this.slots?.maxLength) return this.props.label\r\n return `${this.props.label} (${this.state.value?.length ?? 0}/${this.slots.maxLength})`\r\n }\r\n\r\n handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n this.setState({ value: event.target.value })\r\n }\r\n\r\n handlePaste = async () => {\r\n try {\r\n const clipboardText = await navigator.clipboard.readText()\r\n this.setState({ value: clipboardText })\r\n } catch (error) {\r\n console.error('Error clipboard:', error)\r\n }\r\n }\r\n }\r\n return InputBase\r\n}\r\n\r\nexport default CreateInput\r\n\r\n// export type InputTextType<T> = ReturnType<typeof CreateInputBase<T>>\r\n\r\nconst LoadingCircularProgress: FC = () => (\r\n <div>\r\n <CircularProgress size={24} />\r\n </div>\r\n)\r\n\r\nconst WrapImage = styled(Box)({\r\n fontSize: '1rem',\r\n height: 'var(--input-base-image-size, 54px)',\r\n width: 'var(--input-base-image-size, 54px)',\r\n position: 'relative',\r\n borderRadius: '8px',\r\n boxShadow: 'rgba(0, 0, 0, 0.16) 0px 1px 4px',\r\n overflow: 'hidden',\r\n '& > img': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n backgroundRepeat: 'no-repeat',\r\n height: '100%',\r\n width: '100%',\r\n backgroundSize: 'contain'\r\n },\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: '#fafafa',\r\n zIndex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }\r\n})\r\n"],"names":["CreateInput","params","InputBase","props","_this$mergeSlots","_this","_classCallCheck","_callSuper","_defineProperty","_this$props$name","_this$state$value","_this$slots","_this$slots2","errorMessage","getErrorMessage","messageErrors","name","tfp","fullWidth","variant","toString","error","helperText","message","disabled","onBlur","label","getLabel","placeholder","InputLabelProps","state","value","shrink","onChange","handleChange","slots","pastenable","InputProps","endAdornment","_jsx","InputAdornment","position","children","IconButton","onClick","handlePaste","edge","ContentPasteIcon","maxLength","inputProps","_objectSpread","mergeObjects","textFieldProps","side","_imageOther$src","image","imageLeft","imageRight","srcGetter","element","_image$alt","alt","_image$fallbackSrc","fallbackSrc","_image$debounceDelay","debounceDelay","imageOther","_objectWithoutProperties","_excluded","WrapImage","model","data","src","imageProps","Collapse","sx","mx","in","unmountOnExit","orientation","ImageWithFallback","loading","LoadingCircularProgress","currentSlots","base","mirror","_this$slots3","_this$state$value$len","_this$state$value2","concat","length","event","setState","target","_asyncToGenerator","_regenerator","m","_callee","clipboardText","_t","w","_context","n","p","navigator","clipboard","readText","v","console","a","_cachedSlots","mergeSlots","defaulValue","_inherits","Component","_createClass","key","get","this","_this$props$defaultVa","_data$name","_this$props","defaultValue","undefined","prevProps","nextProps","_this$props2","_this$props$data$name","_this$props$data","_nextProps$data$name$","_nextProps$data","currentDataValue","nextDataValue","_this$props$name2","_jsxs","Box","display","alignItems","hidden","renderImageSide","TextField","mapTextFieldProps","CircularProgress","size","styled","fontSize","height","width","borderRadius","boxShadow","overflow","top","left","backgroundRepeat","backgroundSize","background","zIndex","justifyContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.input.js","sources":["../../src/form/create.input.tsx"],"sourcesContent":["import React, { Component, ComponentType, FC } from 'react'\r\nimport { Box, CircularProgress, Collapse, IconButton, InputAdornment, styled, TextField, TextFieldProps } from '@mui/material'\r\nimport ContentPasteIcon from '@mui/icons-material/ContentPaste'\r\nimport { mergeObjects } from '../utils'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { ImageWithFallback, IImageWithFallbackPropsOwner, IRichTooltipPanelConfig, RichTooltip, HelpOutlinePulseIcon } from '../components'\r\n\r\nexport interface InputBaseImage<T> extends Partial<IImageWithFallbackPropsOwner> {\r\n srcGetter?: (value: any, model?: Partial<T>) => string\r\n element?: React.ComponentType<{ value: any; model?: Partial<T> }>\r\n mirror?: boolean\r\n}\r\n\r\nexport interface IInputSlots<T> {\r\n maxLength?: number\r\n textFieldProps?: TextFieldProps\r\n pastenable?: boolean\r\n imageLeft?: InputBaseImage<T>\r\n imageRight?: InputBaseImage<T>\r\n tooltip?: IRichTooltipPanelConfig\r\n}\r\n\r\nexport interface IInputProps<T> extends IFormInputBase<T, IInputSlots<T>> {}\r\n\r\nexport interface IInputState {\r\n value?: string\r\n}\r\n\r\nexport interface IInputParams<T> extends IInputSlots<T> {}\r\n\r\nconst CreateInput = function <T>(params?: IInputParams<T>): ComponentType<IInputProps<T>> {\r\n class InputBase extends Component<IInputProps<T>, IInputState> {\r\n private _cachedSlots: IInputSlots<T> = {}\r\n constructor(props: IInputProps<T>) {\r\n super(props)\r\n this._cachedSlots = this.mergeSlots(props.slots) ?? {}\r\n this.state = { value: this.defaulValue }\r\n }\r\n\r\n get slots() {\r\n return this._cachedSlots\r\n }\r\n\r\n get defaulValue(): string {\r\n const { data, name } = this.props\r\n return this.props.defaultValue ?? (!!data && !!name ? data[name]?.toString() : undefined)\r\n }\r\n\r\n componentDidUpdate(prevProps: IInputProps<T>) {\r\n if (prevProps.slots !== this.props.slots) {\r\n this._cachedSlots = this.mergeSlots(this.props.slots)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<IInputProps<T>>): boolean {\r\n const { name, slots } = this.props\r\n if (!!name) {\r\n const currentDataValue = this.props.data?.[name]?.toString() ?? ''\r\n const nextDataValue = nextProps.data?.[name]?.toString() ?? ''\r\n if (currentDataValue !== nextDataValue) {\r\n this.setState({ value: nextDataValue })\r\n return false\r\n }\r\n }\r\n\r\n if (slots !== nextProps.slots) {\r\n return true\r\n }\r\n return true\r\n }\r\n\r\n mapTextFieldProps = (): TextFieldProps => {\r\n const errorMessage = getErrorMessage(this.props.messageErrors, this.props.name)\r\n const tfp: TextFieldProps = {\r\n fullWidth: true,\r\n variant: 'outlined',\r\n name: this.props.name?.toString(),\r\n error: errorMessage.error,\r\n helperText: errorMessage.message,\r\n disabled: this.props.disabled,\r\n onBlur: () => {\r\n if (!this.props.name) return\r\n this.props.onBlur && this.props.onBlur(this.props.name)\r\n },\r\n label: this.getLabel(),\r\n placeholder: this.props.placeholder,\r\n InputLabelProps: !!this.state.value ? { shrink: true } : {},\r\n value: this.state.value ?? '',\r\n onChange: this.handleChange\r\n }\r\n if (!tfp.InputProps) tfp.InputProps = {}\r\n tfp.InputProps.endAdornment = (\r\n <InputAdornment position='end'>\r\n {this.slots.pastenable && (\r\n <IconButton onClick={this.handlePaste} edge='end'>\r\n <ContentPasteIcon />\r\n </IconButton>\r\n )}\r\n {this.slots.tooltip && (\r\n <RichTooltip panel={this.slots.tooltip}>\r\n <HelpOutlinePulseIcon fontSize='small' />\r\n </RichTooltip>\r\n )}\r\n </InputAdornment>\r\n )\r\n if (this.slots?.maxLength) tfp.inputProps = { ...tfp.inputProps, maxLength: this.slots.maxLength }\r\n return mergeObjects<TextFieldProps>({}, tfp, this.slots?.textFieldProps)\r\n }\r\n\r\n //#region Render\r\n render() {\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\r\n {!!this.props.disabled && <input hidden name={this.props.name?.toString()} defaultValue={this.defaulValue} />}\r\n {this.renderImageSide('left')}\r\n <TextField {...this.mapTextFieldProps()} />\r\n {this.renderImageSide('right')}\r\n </Box>\r\n )\r\n }\r\n\r\n renderImageSide = (side: 'left' | 'right') => {\r\n const image = side === 'left' ? this.slots.imageLeft : this.slots.imageRight\r\n if (!image) return <></>\r\n const { srcGetter, element, alt = 'input-image', fallbackSrc = '', debounceDelay = 700, ...imageOther } = image\r\n if (element) {\r\n const Element = element\r\n return (\r\n <WrapImage>\r\n <Element value={this.state.value} model={this.props.data} />\r\n </WrapImage>\r\n )\r\n }\r\n const src = srcGetter ? srcGetter(this.state.value, this.props.data) : imageOther.src ?? this.state.value\r\n const imageProps: IImageWithFallbackPropsOwner = { src, alt, fallbackSrc, debounceDelay }\r\n return (\r\n <Collapse sx={{ mx: '10px' }} in={!!src} unmountOnExit orientation='horizontal'>\r\n <WrapImage>\r\n <ImageWithFallback {...imageOther} {...imageProps} loading={<LoadingCircularProgress />} />\r\n </WrapImage>\r\n </Collapse>\r\n )\r\n }\r\n //#endregion\r\n\r\n private mergeSlots = (currentSlots?: IInputSlots<T>): IInputSlots<T> => {\r\n const base = mergeObjects<IInputSlots<T>>({}, params, currentSlots)\r\n const { imageLeft, imageRight } = base\r\n\r\n // mirror from left to right\r\n if (imageLeft?.mirror && !imageRight) {\r\n base.imageRight = { ...imageLeft }\r\n delete base.imageRight.mirror\r\n }\r\n // mirror from right to left\r\n else if (imageRight?.mirror && !imageLeft) {\r\n base.imageLeft = { ...imageRight }\r\n delete base.imageLeft.mirror\r\n }\r\n\r\n return base\r\n }\r\n\r\n getLabel = () => {\r\n if (!this.props.label) return\r\n if (!this.slots?.maxLength) return this.props.label\r\n return `${this.props.label} (${this.state.value?.length ?? 0}/${this.slots.maxLength})`\r\n }\r\n\r\n handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n this.setState({ value: event.target.value })\r\n }\r\n\r\n handlePaste = async () => {\r\n try {\r\n const clipboardText = await navigator.clipboard.readText()\r\n this.setState({ value: clipboardText })\r\n } catch (error) {\r\n console.error('Error clipboard:', error)\r\n }\r\n }\r\n }\r\n return InputBase\r\n}\r\n\r\nexport default CreateInput\r\n\r\n// export type InputTextType<T> = ReturnType<typeof CreateInputBase<T>>\r\n\r\nconst LoadingCircularProgress: FC = () => (\r\n <div>\r\n <CircularProgress size={24} />\r\n </div>\r\n)\r\n\r\nconst WrapImage = styled(Box)({\r\n fontSize: '1rem',\r\n height: 'var(--input-base-image-size, 54px)',\r\n width: 'var(--input-base-image-size, 54px)',\r\n position: 'relative',\r\n borderRadius: '8px',\r\n boxShadow: 'rgba(0, 0, 0, 0.16) 0px 1px 4px',\r\n overflow: 'hidden',\r\n '& > img': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n backgroundRepeat: 'no-repeat',\r\n height: '100%',\r\n width: '100%',\r\n backgroundSize: 'contain'\r\n },\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: '#fafafa',\r\n zIndex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }\r\n})\r\n"],"names":["CreateInput","params","InputBase","props","_this$mergeSlots","_this","_classCallCheck","_callSuper","_defineProperty","_this$props$name","_this$state$value","_this$slots","_this$slots2","errorMessage","getErrorMessage","messageErrors","name","tfp","fullWidth","variant","toString","error","helperText","message","disabled","onBlur","label","getLabel","placeholder","InputLabelProps","state","value","shrink","onChange","handleChange","InputProps","endAdornment","_jsxs","InputAdornment","position","children","slots","pastenable","_jsx","IconButton","onClick","handlePaste","edge","ContentPasteIcon","tooltip","RichTooltip","panel","HelpOutlinePulseIcon","fontSize","maxLength","inputProps","_objectSpread","mergeObjects","textFieldProps","side","_imageOther$src","image","imageLeft","imageRight","srcGetter","element","_image$alt","alt","_image$fallbackSrc","fallbackSrc","_image$debounceDelay","debounceDelay","imageOther","_objectWithoutProperties","_excluded","WrapImage","model","data","src","imageProps","Collapse","sx","mx","in","unmountOnExit","orientation","ImageWithFallback","loading","LoadingCircularProgress","currentSlots","base","mirror","_this$slots3","_this$state$value$len","_this$state$value2","concat","length","event","setState","target","_asyncToGenerator","_regenerator","m","_callee","clipboardText","_t","w","_context","n","p","navigator","clipboard","readText","v","console","a","_cachedSlots","mergeSlots","defaulValue","_inherits","Component","_createClass","key","get","this","_this$props$defaultVa","_data$name","_this$props","defaultValue","undefined","prevProps","nextProps","_this$props2","_this$props$data$name","_this$props$data","_nextProps$data$name$","_nextProps$data","currentDataValue","nextDataValue","_this$props$name2","Box","display","alignItems","hidden","renderImageSide","TextField","mapTextFieldProps","CircularProgress","size","styled","height","width","borderRadius","boxShadow","overflow","top","left","backgroundRepeat","backgroundSize","background","zIndex","justifyContent"],"mappings":"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"}
|
package/dist/form/dino-form.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as e,classCallCheck as t,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";import
|
|
1
|
+
import{createClass as e,classCallCheck as t,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";import o from"./modal-wrapper.js";import a from"./create.form-base.js";import s from"./create.input.file.js";import m from"./create.input.js";import c from"./create.date-picker.js";import p from"./create.text-editor.js";import{createColorPicker as l}from"./create.color-picker.js";import f from"./create.date-expired.js";import h from"./create.form-comfirm.js";import u from"./create.select-simple.js";import j from"./create.select-with-api.js";import d from"./create.form-grid-layout.js";import n from"./create.input.image-file.js";import C from"./create.autocomplete.chips.js";import{FormBottomBarWrap as F}from"./create.form-grid-layout.units.js";import{createInputFileCsvLocalParser as v}from"./create.input-file.csv-local-parser.js";var g=new(e((function e(){t(this,e),r(this,"ModalWrap",o),r(this,"BottomBarWrap",F),r(this,"FormValidator",i),r(this,"validator",i.initial),r(this,"createFormBase",a),r(this,"createFormComfirm",h),r(this,"createFormGridLayout",d),r(this,"createColorPicker",l),r(this,"createDateExpired",f),r(this,"createDatePicker",c),r(this,"createAutocompleteChip",C),r(this,"createInputFileCsvLocalParser",v),r(this,"createInputFile",s),r(this,"createInputImageFile",n),r(this,"createInput",m),r(this,"createSelectSimple",u),r(this,"createSelectWithApi",j),r(this,"createTextEditor",p)})));export{g as default};
|
|
2
2
|
//# sourceMappingURL=dino-form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dino-form.js","sources":["../../src/form/dino-form.tsx"],"sourcesContent":["import FormValidator from './validator'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport CreateFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateInput from './create.input'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport createInputImageFile from './create.input.image-file'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\nimport { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = CreateFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n //#endregion\r\n\r\n //#region Inputs\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInputImageFile = createInputImageFile\r\n createInput = CreateInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","CreateFormBase","CreateFormComfirm","CreateFormGridLayout","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","createInputImageFile","CreateInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"
|
|
1
|
+
{"version":3,"file":"dino-form.js","sources":["../../src/form/dino-form.tsx"],"sourcesContent":["import FormValidator from './validator'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport CreateFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateInput from './create.input'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport createColorPicker from './create.color-picker'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport createInputImageFile from './create.input.image-file'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\nimport { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = CreateFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n //#endregion\r\n\r\n //#region Inputs\r\n createColorPicker = createColorPicker\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInputImageFile = createInputImageFile\r\n createInput = CreateInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","CreateFormBase","CreateFormComfirm","CreateFormGridLayout","createColorPicker","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","createInputImageFile","CreateInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"+2BAgBoF,IA4B9EA,EAAW,IA1BCC,GAAA,SAAAC,IAAAC,OAAAD,GAChBE,mBACYC,GAAgBD,uBACZE,GAAiBF,uBACjBG,GAAaH,EAAAI,KAAA,YACjBD,EAAcE,SAAOL,wBAChBM,GAAcN,2BACXO,GAAiBP,8BACdQ,GAGvBR,2BACoBS,GAAiBT,2BACjBU,GAAiBV,0BAClBW,GAAgBX,gCACVY,GAAsBZ,uCACfa,GAA6Bb,yBAC3Cc,GAAed,8BACVe,GAAoBf,qBAC7BgB,GAAWhB,4BACJiB,GAAkBjB,6BACjBkB,GAAmBlB,0BACtBmB,EAAgB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ChangeEventHandler } from 'react';
|
|
2
|
+
import { IFormInputBase } from './types';
|
|
3
|
+
export interface IColorPickerProps<T> extends IFormInputBase<T> {
|
|
4
|
+
}
|
|
5
|
+
export interface IColorPickerState {
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function createColorPicker<T>(): {
|
|
9
|
+
new (props: IColorPickerProps<T>): {
|
|
10
|
+
shouldComponentUpdate(nextProps: Readonly<IColorPickerProps<T>>): boolean;
|
|
11
|
+
render(): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
getDefaultValue(currentProps: IColorPickerProps<T>): string;
|
|
13
|
+
handleColorChange: ChangeEventHandler<HTMLInputElement>;
|
|
14
|
+
handleInputChange: ChangeEventHandler<HTMLInputElement>;
|
|
15
|
+
handleBlur: () => void;
|
|
16
|
+
context: unknown;
|
|
17
|
+
setState<K extends "value">(state: IColorPickerState | ((prevState: Readonly<IColorPickerState>, props: Readonly<IColorPickerProps<T>>) => IColorPickerState | Pick<IColorPickerState, K> | null) | Pick<IColorPickerState, K> | null, callback?: (() => void) | undefined): void;
|
|
18
|
+
forceUpdate(callback?: (() => void) | undefined): void;
|
|
19
|
+
readonly props: Readonly<IColorPickerProps<T>>;
|
|
20
|
+
state: Readonly<IColorPickerState>;
|
|
21
|
+
refs: {
|
|
22
|
+
[key: string]: import("react").ReactInstance;
|
|
23
|
+
};
|
|
24
|
+
componentDidMount?(): void;
|
|
25
|
+
componentWillUnmount?(): void;
|
|
26
|
+
componentDidCatch?(error: Error, errorInfo: import("react").ErrorInfo): void;
|
|
27
|
+
getSnapshotBeforeUpdate?(prevProps: Readonly<IColorPickerProps<T>>, prevState: Readonly<IColorPickerState>): any;
|
|
28
|
+
componentDidUpdate?(prevProps: Readonly<IColorPickerProps<T>>, prevState: Readonly<IColorPickerState>, snapshot?: any): void;
|
|
29
|
+
componentWillMount?(): void;
|
|
30
|
+
UNSAFE_componentWillMount?(): void;
|
|
31
|
+
componentWillReceiveProps?(nextProps: Readonly<IColorPickerProps<T>>, nextContext: any): void;
|
|
32
|
+
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<IColorPickerProps<T>>, nextContext: any): void;
|
|
33
|
+
componentWillUpdate?(nextProps: Readonly<IColorPickerProps<T>>, nextState: Readonly<IColorPickerState>, nextContext: any): void;
|
|
34
|
+
UNSAFE_componentWillUpdate?(nextProps: Readonly<IColorPickerProps<T>>, nextState: Readonly<IColorPickerState>, nextContext: any): void;
|
|
35
|
+
};
|
|
36
|
+
contextType?: import("react").Context<any> | undefined;
|
|
37
|
+
};
|
|
38
|
+
export default createColorPicker;
|
|
@@ -12,14 +12,16 @@ export interface IFormGridLayoutConfig<T> {
|
|
|
12
12
|
inputElement?: React.ComponentType<IFormInputBase<T>>;
|
|
13
13
|
}
|
|
14
14
|
export type IPreSubmitEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>;
|
|
15
|
-
export interface
|
|
15
|
+
export interface IFormGridLayoutMergedConfigs<T> {
|
|
16
|
+
hiddenFields?: Partial<Record<keyof T, boolean>>;
|
|
17
|
+
getHiddenFields?: (state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>;
|
|
18
|
+
disabledFields?: Partial<Record<keyof T, boolean>>;
|
|
19
|
+
}
|
|
20
|
+
export interface IFormGridLayoutSlots<T> extends IFormGridLayoutMergedConfigs<T> {
|
|
16
21
|
action?: React.ComponentType<IFormBase<T>>;
|
|
17
22
|
actionBefore?: JSX.Element;
|
|
18
23
|
contentBefore?: JSX.Element;
|
|
19
24
|
contentAfter?: JSX.Element;
|
|
20
|
-
hiddenFields?: Partial<Record<keyof T, boolean>>;
|
|
21
|
-
getHiddenFields?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>;
|
|
22
|
-
disabledFields?: Partial<Record<keyof T, boolean>>;
|
|
23
25
|
closeState?: {
|
|
24
26
|
Success?: boolean;
|
|
25
27
|
Fail?: boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { ComponentType } from 'react';
|
|
2
2
|
import { TextFieldProps } from '@mui/material';
|
|
3
3
|
import { IFormInputBase } from './types';
|
|
4
|
-
import { IImageWithFallbackPropsOwner } from '../components';
|
|
4
|
+
import { IImageWithFallbackPropsOwner, IRichTooltipPanelConfig } from '../components';
|
|
5
5
|
export interface InputBaseImage<T> extends Partial<IImageWithFallbackPropsOwner> {
|
|
6
6
|
srcGetter?: (value: any, model?: Partial<T>) => string;
|
|
7
7
|
element?: React.ComponentType<{
|
|
@@ -16,6 +16,7 @@ export interface IInputSlots<T> {
|
|
|
16
16
|
pastenable?: boolean;
|
|
17
17
|
imageLeft?: InputBaseImage<T>;
|
|
18
18
|
imageRight?: InputBaseImage<T>;
|
|
19
|
+
tooltip?: IRichTooltipPanelConfig;
|
|
19
20
|
}
|
|
20
21
|
export interface IInputProps<T> extends IFormInputBase<T, IInputSlots<T>> {
|
|
21
22
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import FormValidator from './validator';
|
|
3
3
|
import CreateInputFile from './create.input.file';
|
|
4
4
|
import CreateTextEditor from './create.text-editor';
|
|
5
|
+
import createColorPicker from './create.color-picker';
|
|
5
6
|
import CreateDateExpired from './create.date-expired';
|
|
6
7
|
import CreateSelectSimple from './create.select-simple';
|
|
7
8
|
import createInputImageFile from './create.input.image-file';
|
|
@@ -17,6 +18,7 @@ declare class DinoFormBase {
|
|
|
17
18
|
createFormBase: <T>(params?: import("./create.form-base").IFormBaseParams<T> | undefined) => import("./create.form-base").IFormBaseResult<T>;
|
|
18
19
|
createFormComfirm: <T = any>(param?: import("./create.form-comfirm").IFormComfirmParam<T> | undefined) => import("react").ComponentType<import("react").PropsWithChildren<import("./create.form-comfirm").IFormComfirmProps<T>>>;
|
|
19
20
|
createFormGridLayout: <T>(params: import("./create.form-grid-layout").IFormGridLayoutParams<T>) => import("react").ComponentType<import("./create.form-grid-layout").IFormGridLayoutProps<T>>;
|
|
21
|
+
createColorPicker: typeof createColorPicker;
|
|
20
22
|
createDateExpired: typeof CreateDateExpired;
|
|
21
23
|
createDatePicker: <T extends Object>(params?: import("./create.date-picker").IDatePickerSlots | undefined) => import("react").ComponentType<import("./create.date-picker").IDatePickerProps<T>>;
|
|
22
24
|
createAutocompleteChip: typeof CreateAutocompleteChip;
|
|
@@ -7,7 +7,7 @@ export interface IFormBaseContext<T> {
|
|
|
7
7
|
messageErrors: IPartialError<T>;
|
|
8
8
|
onBlur: (keyName: keyof T) => void;
|
|
9
9
|
setError: (keyName: keyof T, message: string) => void;
|
|
10
|
-
removeError: (
|
|
10
|
+
removeError: (keyNames: keyof T | (keyof T)[]) => void;
|
|
11
11
|
clearErrorAll: (keyName: keyof T) => void;
|
|
12
12
|
}
|
|
13
13
|
export interface IFormBase<T> {
|