dinocollab-core 2.1.53 → 2.1.55
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/src/form/create.input.js +1 -1
- package/dist/src/form/create.input.js.map +1 -1
- package/dist/src/form/decorator.form.js +1 -1
- package/dist/src/form/decorator.form.js.map +1 -1
- package/dist/src/form/helpers.js +1 -1
- package/dist/src/form/helpers.js.map +1 -1
- package/dist/src/form/modal-wrapper.js +1 -1
- package/dist/src/form/modal-wrapper.js.map +1 -1
- package/dist/src/http-service/graphql/request-param.js.map +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/create.table.js.map +1 -1
- package/dist/src/table/toolbar-pannel.js +1 -1
- package/dist/src/table/toolbar-pannel.js.map +1 -1
- package/dist/types/form/create.input.d.ts +2 -2
- package/dist/types/form/decorator.form.d.ts +4 -1
- package/dist/types/form/modal-wrapper.d.ts +2 -1
- package/dist/types/http-service/graphql/request-param.d.ts +2 -2
- package/dist/types/table/create.table.d.ts +4 -1
- package/dist/types/table/toolbar-pannel.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as e,createClass as t,objectSpread2 as r,classCallCheck as o,callSuper as a,defineProperty as l,objectWithoutProperties as i,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{ImageWithFallback as P}from"../components/image-with-fallback.js";import{RichTooltip as j,HelpOutlinePulseIcon as L}from"../components/rich-tooltip.js";var C=["
|
|
1
|
+
import{inherits as e,createClass as t,objectSpread2 as r,classCallCheck as o,callSuper as a,defineProperty as l,objectWithoutProperties as i,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{ImageWithFallback as P}from"../components/image-with-fallback.js";import{RichTooltip as j,HelpOutlinePulseIcon as L}from"../components/rich-tooltip.js";var C=["src","element","alt","fallbackSrc","debounceDelay"],I=function(m){return function(){function x(e){var t,c;return o(this,x),c=a(this,x,[e]),l(c,"_cachedSlots",{}),l(c,"mapTextFieldProps",function(){var e,t,o,a,l=y(c.props.messageErrors,c.props.name),i={fullWidth:!0,variant:"outlined",name:null===(e=c.props.name)||void 0===e?void 0:e.toString(),error:l.error,helperText:l.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 i.InputProps||(i.InputProps={}),i.InputProps.endAdornment=u(f,{position:"end",children:[c.slots.pastenable&&p(g,{onClick:c.handlePaste,edge:"end",children:p(S,{})}),c.slots.tooltip&&p(j,{panel:c.slots.tooltip,children:p(L,{fontSize:"small"})})]}),null!==(o=c.slots)&&void 0!==o&&o.maxLength&&(i.inputProps=r(r({},i.inputProps),{},{maxLength:c.slots.maxLength})),k({},i,null===(a=c.slots)||void 0===a?void 0:a.textFieldProps)}),l(c,"renderImageSide",function(e){var t="left"===e?c.slots.imageLeft:c.slots.imageRight;if(!t)return p(d,{});var o=t.src,a=t.element,l=t.alt,n=void 0===l?"input-image":l,s=t.fallbackSrc,u=void 0===s?"":s,m=t.debounceDelay,h=void 0===m?700:m,v=i(t,C);if(a)return p(z,{children:p(a,{value:c.state.value,model:c.props.data})});var f="function"==typeof o?o(c.state.value,c.props.data):null!=o?o:c.state.value,g={src:f,alt:n,fallbackSrc:u,debounceDelay:h};return p(b,{sx:{mx:"10px"},in:!!f,unmountOnExit:!0,orientation:"horizontal",children:p(z,{children:p(P,r(r(r({},v),g),{},{loading:p(w,{})}))})})}),l(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}),l(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}),l(c,"handleChange",function(e){c.setState({value:e.target.value})}),l(c,"handlePaste",n(s().m(function e(){var t,r;return s().w(function(e){for(;;)switch(e.p=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=o&&a?null===(t=o[a])||void 0===t?void 0:t.toString():void 0)&&void 0!==e?e:this.props.defaultValue}},{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,l,i,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!==(l=null===(i=e.data)||void 0===i||null===(i=i[r])||void 0===i?void 0:i.toString())&&void 0!==l?l:"";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:"flex-start"},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/image-with-fallback'\r\nimport { IRichTooltipPanelConfig, RichTooltip, HelpOutlinePulseIcon } from '../components/rich-tooltip'\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 (!!data && !!name ? data[name]?.toString() : undefined) ?? this.props.defaultValue\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: 'flex-start' }}>\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","p","n","navigator","clipboard","readText","v","console","a","_cachedSlots","mergeSlots","defaulValue","_inherits","Component","_createClass","key","get","this","_ref2","_data$name","_this$props","undefined","defaultValue","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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"}
|
|
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/image-with-fallback'\r\nimport { IRichTooltipPanelConfig, RichTooltip, HelpOutlinePulseIcon } from '../components/rich-tooltip'\r\n\r\nexport interface InputBaseImage<T> extends Omit<Partial<IImageWithFallbackPropsOwner>, 'src'> {\r\n src?: string | ((value: any, model?: Partial<T>) => string | undefined)\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 (!!data && !!name ? data[name]?.toString() : undefined) ?? this.props.defaultValue\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: 'flex-start' }}>\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 { src, 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 finalSrc = typeof src === 'function' ? src(this.state.value, this.props.data) : (src ?? this.state.value)\r\n const imageProps: IImageWithFallbackPropsOwner = { src: finalSrc, alt, fallbackSrc, debounceDelay }\r\n return (\r\n <Collapse sx={{ mx: '10px' }} in={!!finalSrc} 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","image","imageLeft","imageRight","src","element","_image$alt","alt","_image$fallbackSrc","fallbackSrc","_image$debounceDelay","debounceDelay","imageOther","_objectWithoutProperties","_excluded","WrapImage","model","data","finalSrc","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","p","n","navigator","clipboard","readText","v","console","a","_cachedSlots","mergeSlots","defaulValue","_inherits","Component","_createClass","key","get","this","_ref2","_data$name","_this$props","undefined","defaultValue","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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{objectSpread2 as r,objectWithoutProperties as o,asyncToGenerator as e,regenerator as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as a}from"react/jsx-runtime";import{useRef as i,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 p}from"./helpers.js";import{getFormFields as m,getFormValidators as v,getFormPreSubmit as b,isFormRegistered as g}from"./decorator.js";import h from"./validator.js";import x from"./create.form-base.js";import y from"./create.input.js";var C=["type","renderInput"],S=["disabled","visible","size"],k=x({}),j=y({}),B=function(e){var n,i,l=e.type,s=e.renderInput,u=o(e,C),d=(null===(n=u.name)||void 0===n?void 0:n.toString())||"",c=(null===(i=u.data)||void 0===i?void 0:i[d])||u.defaultValue;return k.mapContext(function(o){var e=o.messageErrors,n=o.onBlur,i=p(o.messageErrors,u.name);if(s)return a(s,r(r({},u),{},{messageErrors:e,onBlur:n,formContext:o}));switch(l){case String:return a(j,r(r({},u),{},{messageErrors:e,onBlur:n,formContext:o}));case Number:return a(j,r(r({},u),{},{slots:r({textFieldProps:{type:"number"}},u.slots),messageErrors:e,onBlur:n,formContext:o}));case Boolean:return t("div",{children:[t("label",{children:[u.label||d,": "]}),a("input",{name:d,type:"checkbox",defaultChecked:c}),a("span",{style:{color:"red"},children:i.error?i.message:""})]});default:return t("div",{children:["Unsupported field type for ",d]})}})},w=function(s){var p,x,y=s.slots,C=m(s.configClass),j=v(s.configClass),w=b(s.configClass),E=i(null);if(!g(s.configClass)){var P,z=(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:[a(d,{variant:"subtitle1",sx:{fontWeight:600,marginBottom:6},children:"Form configuration not registered"}),t(d,{variant:"body1",children:['Configuration for "',z,'" was not found. Did you forget to add ',a("code",{children:"@registerForm"})," to the class?"]})]})}var I=function(){var r=e(n().m(function r(o){var e,t,a,i;return n().w(function(r){for(;;)switch(r.p=r.n){case 0:if(e=new AbortController,E.current=e,t=e.signal,a=o,r.p=1,null==w||!w.handler){r.n=3;break}return r.n=2,w.handler(o,s.data);case 2:null==(a=r.v)&&(a=o);case 3:if(!s.onSubmit){r.n=5;break}return r.n=4,s.onSubmit(a,t);case 4:s.onSuccess&&s.onSuccess(a);case 5:r.n=7;break;case 6:throw r.p=6,i=r.v,s.onError&&s.onError(i),i;case 7:return r.a(2)}},r,null,[[1,6]])}));return function(o){return r.apply(this,arguments)}}();return l(function(){return function(){var r;null===(r=E.current)||void 0===r||r.abort()}},[]),t(k.Form,{onSubmit:I,validate:new h(j),onError:s.onSubmitError,slots:null==y?void 0:y.formBase,children:[null===(p=s.slots)||void 0===p?void 0:p.top,a(c,r(r({container:!0,spacing:2},null==y?void 0:y.contentProps),{},{children:C.map(function(e){var n=e.disabled,t=e.visible,i=e.size,l=o(e,S);if(!("function"==typeof t?t(s.data):!1!==t))return null;var u="function"==typeof n?n(s.data):!0===n;return a(c,r(r({item:!0,xs:12},i),{},{children:a(B,r(r({data:s.data},l),{},{disabled:u}))}),e.name.toString())})})),function(){var o,e,n;if(!1===(null==y?void 0:y.isFooter))return null;if(null!=y&&y.footer){var i=y.footer;return a(i,{})}var l=[null==y||null===(o=y.footerProps)||void 0===o?void 0:o.className];return s.enableStickyFooter&&l.push("sticky-footer"),t(F,r(r({},null==y?void 0:y.footerProps),{},{className:l.filter(Boolean).join(" "),children:[null==y||null===(e=y.footerSlots)||void 0===e?void 0:e.before,a(f,{variant:"contained",color:"primary",type:"submit",size:"small",sx:{flex:"0 0 auto"},children:"Submit"}),null==y||null===(n=y.footerSlots)||void 0===n?void 0:n.after]}))}(),null===(x=s.slots)||void 0===x?void 0:x.bottom]})},E=function(o,e){return function(n){return a(w,r(r({configClass:o},e),n))}},F=s(u)(function(r){var o=r.theme;return{display:"flex",justifyContent:"flex-end",padding:o.spacing(1),"&.sticky-footer":{position:"sticky",bottom:0,backgroundColor:o.palette.background.paper,zIndex:o.zIndex.appBar,boxShadow:"rgba(145, 158, 171, 0.1) 0px 0px 2px 0px, rgba(145, 158, 171, 0.12) 0px 0px 24px -4px"}}});export{B as DecoratorField,w as DecoratorForm,E as createDecoratorForm,w 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, 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 createFormBase, { IFormBaseSlots } from './create.form-base'\r\nimport createInput from './create.input'\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 const abortController = new AbortController()\r\n abortControllerRef.current = abortController\r\n const signal = abortController.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' size='small' 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, size, ...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} {...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\ntype IDecoratorFormOptions<T> = Partial<Omit<IDecoratorFormProps<T>, 'configClass'>>\r\n\r\nexport const createDecoratorForm = function <T>(configClass: any, params?: IDecoratorFormOptions<T>): ComponentType<IDecoratorFormProps<T>> {\r\n const DecoratorFormComp: FC<IDecoratorFormProps<T>> = (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","abortController","signal","processedData","_t","w","_context","p","n","AbortController","current","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","size","fieldOther","_excluded2","isDisabled","item","xs","_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
|
+
{"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, GridProps, 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 createFormBase, { IFormBaseSlots } from './create.form-base'\r\nimport createInput from './create.input'\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 contentProps?: GridProps\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 onSuccess?: (data: Partial<T>) => void\r\n enableStickyFooter?: boolean\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 const abortController = new AbortController()\r\n abortControllerRef.current = abortController\r\n const signal = abortController.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 if (props.onSuccess) {\r\n props.onSuccess(processedData)\r\n }\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 const footerClassName = [slots?.footerProps?.className]\r\n if (props.enableStickyFooter) footerClassName.push('sticky-footer')\r\n return (\r\n <FooterStyled {...slots?.footerProps} className={footerClassName.filter(Boolean).join(' ')}>\r\n {slots?.footerSlots?.before}\r\n <Button variant='contained' color='primary' type='submit' size='small' 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} {...slots?.contentProps}>\r\n {fields.map((field) => {\r\n const { disabled, visible, size, ...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} {...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\ntype IDecoratorFormOptions<T> = Partial<Omit<IDecoratorFormProps<T>, 'configClass'>>\r\n\r\nexport const createDecoratorForm = function <T>(configClass: any, params?: IDecoratorFormOptions<T>): ComponentType<IDecoratorFormProps<T>> {\r\n const DecoratorFormComp: FC<IDecoratorFormProps<T>> = (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),\r\n '&.sticky-footer': {\r\n position: 'sticky',\r\n bottom: 0,\r\n backgroundColor: theme.palette.background.paper,\r\n zIndex: theme.zIndex.appBar,\r\n boxShadow: 'rgba(145, 158, 171, 0.1) 0px 0px 2px 0px, rgba(145, 158, 171, 0.12) 0px 0px 24px -4px'\r\n }\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","abortController","signal","processedData","_t","w","_context","p","n","AbortController","current","handler","v","onSubmit","onSuccess","onError","a","_x","apply","this","arguments","useEffect","_abortControllerRef$c","abort","Form","validate","FormValidator","onSubmitError","formBase","top","Grid","container","spacing","contentProps","map","field","disabled","visible","size","fieldOther","_excluded2","isDisabled","item","xs","_slots$footerProps","_slots$footerSlots","_slots$footerSlots2","isFooter","footer","FooterComponent","footerClassName","footerProps","className","enableStickyFooter","push","FooterStyled","filter","join","footerSlots","before","Button","flex","after","renderFooter","bottom","createDecoratorForm","params","styled","_ref3","theme","display","justifyContent","position","backgroundColor","palette","paper","zIndex","appBar","boxShadow"],"mappings":"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"}
|
package/dist/src/form/helpers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toConsumableArray as r,typeof as n,objectSpread2 as
|
|
1
|
+
import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";var o=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter(function(r){return r}).reduce(function(r,n){return r=Object.assign(r,n)},r)},a=function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),u=1;u<t;u++)i[u-1]=arguments[u];if((i=i.filter(function(r){return!!r})).length<1)return e;for(var f=[e].concat(r(i)).filter(function(r){return r}),c=f.reduce(function(e,t){if(!t)return e;var i=Object.keys(t).filter(function(r){return"object"===n(t[r])&&!Array.isArray(t[r])});return e.push.apply(e,r(i)),e},[]),l=o.apply(void 0,[e].concat(r(f.slice(1)))),s=l,v=f.slice(1).filter(function(r){return!!r}),p=function(){var n=c[y];s[n]=a.apply(void 0,[{},s[n]].concat(r(v.map(function(r){return r[n]}))))},y=0;y<c.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},f=function(r){var n=Array.from(r).reduce(function(r,n){return r[n[0]]?Array.isArray(r[n[0]])?r[n[0]].push(n[1]):r[n[0]]=[r[n[0]],n[1]]:r[n[0]]=n[1],r},{});return Object.keys(n).forEach(function(r){var e=n[r];"string"!=typeof e||"true"!==e.toString().toLocaleLowerCase()&&"false"!==e.toString().toLocaleLowerCase()||(n[r]="true"===e.toString().toLocaleLowerCase())}),n},c=function(r){if("string"==typeof r)return r.startsWith("#")&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(r)?r:r.trim();if(Array.isArray(r))return r.map(function(r){return c(r)});if(r instanceof File)return r;if(r instanceof FileList)return r;if(r instanceof Date)return r;if("number"==typeof r||"boolean"==typeof r||null==r)return r;if(r instanceof HTMLElement)return r;if("function"==typeof r)return r;if(r&&"object"===n(r)){var e={};return Object.keys(r).forEach(function(n){e[n]=c(r[n])}),e}return r},l=function(r,n,e,t){var i=t.run(n);if(i){var o=e||{},a=Object.keys(n).filter(function(r){return!!n[r]}).filter(function(r){return n[r]instanceof File&&!!n[r].size});return a.push(r),a.forEach(function(r){i[r]?o[r]=i[r]:delete o[r]}),o}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data,i=(null==t?void 0:t.errors)||t;if(i){var o=Object.keys(n),a={};return o.forEach(function(r){var n=i[r];Array.isArray(n)&&n.length>0&&(a[r]=[{message:n[0]}])}),a}},v=function(r){var n,e=null===(n=r.response)||void 0===n?void 0:n.data,t=(null==e?void 0:e.errors)||e;if(t&&t[""]){var i=t[""];if(Array.isArray(i))return i.filter(function(r){return r&&"string"==typeof r&&""!==r.trim()})}return[]},p=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var o=e.map(function(r){return null==r?void 0:r.configs}).filter(function(r){return!!r}),u=Object.assign.apply(Object,[{}].concat(r(o))),f=function(){var n=Object.keys(u)[c];u[n]=a.apply(void 0,[{}].concat(r(o.map(function(r){return r?r[n]:{Rules:[]}})))),u[n].Rules=o.map(function(r){return r?r[n]:{Rules:[]}}).reduce(function(n,e){var t;return n.push.apply(n,r(null!==(t=null==e?void 0:e.Rules)&&void 0!==t?t:[])),n},[])},c=0;c<Object.keys(u).length;c++)f();return new i(u)},y=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),i=n.filter(function(r){return!e.includes(r)});if(i.length>0)return{valid:!1,message:"Missing required columns: ".concat(i.join(", "))};for(var o=0;o<r.length;o++){var a,u=r[o],f=t(n);try{for(f.s();!(a=f.n()).done;){var c=a.value,l=u[c];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(c.toString(),'" at row ').concat(o+2)}}}catch(r){f.e(r)}finally{f.f()}}return{valid:!0}};export{f as convertFormDataToJson,v as getErrorCommonFromResponse,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,c as trimAllStrings,y as validateCsvModel,p as validateMerge};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n if (typeof obj === 'string') {\r\n // Don't trim color values (hex colors start with #)\r\n if (obj.startsWith('#') && /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(obj)) {\r\n return obj as any\r\n }\r\n return obj.trim() as any\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\r\n }\r\n\r\n // Skip File objects to preserve file data\r\n if (obj instanceof File) {\r\n return obj as any\r\n }\r\n\r\n // Skip FileList objects (multiple file inputs)\r\n if (obj instanceof FileList) {\r\n return obj as any\r\n }\r\n\r\n // Skip Date objects to preserve date data\r\n if (obj instanceof Date) {\r\n return obj as any\r\n }\r\n\r\n // Skip numeric values, booleans, null, undefined\r\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null || obj === undefined) {\r\n return obj as any\r\n }\r\n\r\n // Skip DOM elements\r\n if (obj instanceof HTMLElement) {\r\n return obj as any\r\n }\r\n\r\n // Skip functions\r\n if (typeof obj === 'function') {\r\n return obj as any\r\n }\r\n\r\n if (obj && typeof obj === 'object') {\r\n const result: any = {}\r\n Object.keys(obj).forEach((key) => {\r\n result[key] = trimAllStrings((obj as any)[key])\r\n })\r\n return result\r\n }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, modelRender: TModel) {\r\n const data = error.response?.data as any\r\n if (data) {\r\n const keys = Object.keys(modelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = data[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const getErrorCommonFromResponse = function <TModel>(error: AxiosError): string[] {\r\n const data = error.response?.data as any\r\n if (data && data['']) {\r\n const messages = data['']\r\n if (Array.isArray(messages)) {\r\n return messages.filter((msg) => msg && typeof msg === 'string' && msg.trim() !== '')\r\n }\r\n }\r\n return []\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","startsWith","test","trim","item","File","FileList","Date","HTMLElement","result","singleValidate","modelState","Validator","messageErrors","run","errors","size","getErrorFromResponse","modelRender","_error$response","response","messages","getErrorCommonFromResponse","_error$response2","msg","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","err","e","f"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n if (typeof obj === 'string') {\r\n // Don't trim color values (hex colors start with #)\r\n if (obj.startsWith('#') && /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(obj)) {\r\n return obj as any\r\n }\r\n return obj.trim() as any\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\r\n }\r\n\r\n // Skip File objects to preserve file data\r\n if (obj instanceof File) {\r\n return obj as any\r\n }\r\n\r\n // Skip FileList objects (multiple file inputs)\r\n if (obj instanceof FileList) {\r\n return obj as any\r\n }\r\n\r\n // Skip Date objects to preserve date data\r\n if (obj instanceof Date) {\r\n return obj as any\r\n }\r\n\r\n // Skip numeric values, booleans, null, undefined\r\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null || obj === undefined) {\r\n return obj as any\r\n }\r\n\r\n // Skip DOM elements\r\n if (obj instanceof HTMLElement) {\r\n return obj as any\r\n }\r\n\r\n // Skip functions\r\n if (typeof obj === 'function') {\r\n return obj as any\r\n }\r\n\r\n if (obj && typeof obj === 'object') {\r\n const result: any = {}\r\n Object.keys(obj).forEach((key) => {\r\n result[key] = trimAllStrings((obj as any)[key])\r\n })\r\n return result\r\n }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, modelRender: TModel) {\r\n const data = error.response?.data as any\r\n const finalData = data?.errors || data\r\n if (finalData) {\r\n const keys = Object.keys(modelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = finalData[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const getErrorCommonFromResponse = function <TModel>(error: AxiosError): string[] {\r\n const data = error.response?.data as any\r\n const finalData = data?.errors || data\r\n if (finalData && finalData['']) {\r\n const messages = finalData['']\r\n if (Array.isArray(messages)) {\r\n return messages.filter((msg) => msg && typeof msg === 'string' && msg.trim() !== '')\r\n }\r\n }\r\n return []\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","startsWith","test","trim","item","File","FileList","Date","HTMLElement","result","singleValidate","modelState","Validator","messageErrors","run","errors","size","getErrorFromResponse","modelRender","_error$response","response","finalData","messages","getErrorCommonFromResponse","_error$response2","msg","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","err","e","f"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i,Fragment as
|
|
1
|
+
import{defineProperty as o,objectSpread2 as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i,Fragment as t}from"react/jsx-runtime";import{styled as r,Paper as n,IconButton as a,Box as s,Typography as p}from"@mui/material";import c from"@mui/icons-material/Close";import{mapGlobalModalContext as d}from"../api-context/global-modal.js";var x=function(o){return d(function(r){var n,a,d,x,v=[u.root,null===(n=o.slots)||void 0===n||null===(n=n.wrapProps)||void 0===n?void 0:n.className];return o.fullHeight&&v.push(u.fullHeight),e(f,l(l({size:o.size},null===(a=o.slots)||void 0===a?void 0:a.wrapProps),{},{className:v.filter(Boolean).join(" "),children:[e(m,{sx:null===(d=o.slots)||void 0===d?void 0:d.sxTopbarProps,children:[(null===(x=o.slots)||void 0===x?void 0:x.beforeTitle)&&e(t,{children:[o.slots.beforeTitle,i(s,{flex:1})]}),i(p,{component:"h3",variant:"subtitle1",sx:{mt:"2px",ml:"8px",fontWeight:700},children:o.title}),i(s,{flex:1}),i(h,{onClick:function(){o.onCloseClick&&o.onCloseClick(),r.close()},children:i(c,{})})]}),i("div",{className:u.content,children:o.children})]}))})},u={root:"Dino-ModalWrapper-root",content:"Dino-ModalWrapper-content",fullHeight:"Dino-ModalWrapper-fullHeight"},f=r(n)(function(l){var e=l.theme,i=l.size;return o(o(o({maxHeight:"calc(100vh - 24px)",overflow:"hidden",display:"flex",flexDirection:"column",position:"relative",maxWidth:"calc(100vw - 24px)",width:e.breakpoints.values[null!=i?i:"lg"]},e.breakpoints.down("sm"),{width:"calc(100vw - 24px)"}),"&.".concat(u.fullHeight),{height:"calc(100vh - 24px)"}),".".concat(u.content),{overflowY:"auto",flex:"1 1 auto",minHeight:0})}),h=r(a)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:"#ff200c"}}),m=r(s)({display:"flex",alignItems:"center",padding:"0 8px 0 8px",gap:"6px",flex:"0 0 auto",boxShadow:"rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px",height:"48px"});export{x as default};
|
|
2
2
|
//# sourceMappingURL=modal-wrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal-wrapper.js","sources":["../../../src/form/modal-wrapper.tsx"],"sourcesContent":["import React, { FC, PropsWithChildren } from 'react'\r\nimport { Box, Breakpoint, IconButton, Paper, styled, SxProps, Theme, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport { mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormModalWrapperProps extends PropsWithChildren {\r\n title: string\r\n size?: Breakpoint\r\n fullHeight?: boolean\r\n onCloseClick?: () => void\r\n slots?: {\r\n sxTopbarProps?: SxProps<Theme>\r\n beforeTitle?: JSX.Element\r\n }\r\n}\r\n\r\nconst FormModalWrapper: FC<IFormModalWrapperProps> = (props) => {\r\n return mapGlobalModalContext((context) => (\r\n <
|
|
1
|
+
{"version":3,"file":"modal-wrapper.js","sources":["../../../src/form/modal-wrapper.tsx"],"sourcesContent":["import React, { ComponentType, FC, Fragment, PropsWithChildren } from 'react'\r\nimport { Box, Breakpoint, IconButton, Paper, PaperProps, styled, SxProps, Theme, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport { mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormModalWrapperProps extends PropsWithChildren {\r\n title: string\r\n size?: Breakpoint\r\n fullHeight?: boolean\r\n onCloseClick?: () => void\r\n slots?: {\r\n wrapProps?: Partial<PaperProps>\r\n sxTopbarProps?: SxProps<Theme>\r\n beforeTitle?: JSX.Element\r\n }\r\n}\r\n\r\nconst FormModalWrapper: FC<IFormModalWrapperProps> = (props) => {\r\n return mapGlobalModalContext((context) => {\r\n const rootClasses = [modalWrapperClasses.root, props.slots?.wrapProps?.className]\r\n if (props.fullHeight) rootClasses.push(modalWrapperClasses.fullHeight)\r\n return (\r\n <ModalWrapperStyled size={props.size} {...props.slots?.wrapProps} className={rootClasses.filter(Boolean).join(' ')}>\r\n <TopBar sx={props.slots?.sxTopbarProps}>\r\n {props.slots?.beforeTitle && (\r\n <>\r\n {props.slots.beforeTitle}\r\n <Box flex={1} />\r\n </>\r\n )}\r\n <Typography component='h3' variant='subtitle1' sx={{ mt: '2px', ml: '8px', fontWeight: 700 }}>\r\n {props.title}\r\n </Typography>\r\n <Box flex={1} />\r\n <BtnClose\r\n onClick={() => {\r\n props.onCloseClick && props.onCloseClick()\r\n context.close()\r\n }}\r\n >\r\n <CloseIcon />\r\n </BtnClose>\r\n </TopBar>\r\n <div className={modalWrapperClasses.content}>{props.children}</div>\r\n </ModalWrapperStyled>\r\n )\r\n })\r\n}\r\nexport default FormModalWrapper\r\n\r\nconst modalWrapperClasses = {\r\n root: 'Dino-ModalWrapper-root',\r\n content: 'Dino-ModalWrapper-content',\r\n fullHeight: 'Dino-ModalWrapper-fullHeight'\r\n}\r\n\r\nconst ModalWrapperStyled = styled(Paper)<{ size?: Breakpoint }>(({ theme, size }) => ({\r\n maxHeight: 'calc(100vh - 24px)',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n maxWidth: 'calc(100vw - 24px)',\r\n width: theme.breakpoints.values[size ?? 'lg'],\r\n [theme.breakpoints.down('sm')]: { width: 'calc(100vw - 24px)' },\r\n [`&.${modalWrapperClasses.fullHeight}`]: {\r\n height: 'calc(100vh - 24px)'\r\n },\r\n [`.${modalWrapperClasses.content}`]: {\r\n overflowY: 'auto',\r\n flex: '1 1 auto',\r\n minHeight: 0\r\n }\r\n}))\r\n\r\nconst BtnClose = styled(IconButton)({\r\n flex: '0 0 auto',\r\n color: '#3c3c3c',\r\n '& svg': { transition: 'all 0.2s' },\r\n '&:hover svg': { color: '#ff200c' }\r\n})\r\n\r\nconst TopBar = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 8px 0 8px',\r\n gap: '6px',\r\n flex: '0 0 auto',\r\n boxShadow: 'rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px',\r\n height: '48px'\r\n})\r\n"],"names":["FormModalWrapper","props","mapGlobalModalContext","context","_props$slots","_props$slots2","_props$slots3","_props$slots4","rootClasses","modalWrapperClasses","root","slots","wrapProps","className","fullHeight","push","_jsxs","ModalWrapperStyled","_objectSpread","size","filter","Boolean","join","children","TopBar","sx","sxTopbarProps","beforeTitle","_Fragment","_jsx","Box","flex","Typography","component","variant","mt","ml","fontWeight","title","BtnClose","onClick","onCloseClick","close","CloseIcon","content","styled","Paper","_ref","theme","_defineProperty","maxHeight","overflow","display","flexDirection","position","maxWidth","width","breakpoints","values","down","concat","height","overflowY","minHeight","IconButton","color","transition","alignItems","padding","gap","boxShadow"],"mappings":"2WAiBA,IAAMA,EAA+C,SAACC,GACpD,OAAOC,EAAsB,SAACC,GAAW,IAAAC,EAAAC,EAAAC,EAAAC,EACjCC,EAAc,CAACC,EAAoBC,KAAiB,QAAbN,EAAEH,EAAMU,aAAKP,IAAAA,GAAWA,QAAXA,EAAXA,EAAaQ,iBAAbR,IAAsBA,OAAtBA,EAAAA,EAAwBS,WAEvE,OADIZ,EAAMa,YAAYN,EAAYO,KAAKN,EAAoBK,YAEzDE,EAACC,EAAkBC,EAAAA,EAAA,CAACC,KAAMlB,EAAMkB,cAAId,EAAMJ,EAAMU,aAAK,IAAAN,OAAA,EAAXA,EAAaO,WAAS,CAAA,EAAA,CAAEC,UAAWL,EAAYY,OAAOC,SAASC,KAAK,KAC5GC,SAAA,CAAAP,EAACQ,EAAM,CAACC,GAAe,QAAbnB,EAAEL,EAAMU,aAAK,IAAAL,OAAA,EAAXA,EAAaoB,yBACX,QAAXnB,EAAAN,EAAMU,aAAK,IAAAJ,OAAA,EAAXA,EAAaoB,cACZX,EAAAY,EAAA,CAAAL,SAAA,CACGtB,EAAMU,MAAMgB,YACbE,EAACC,EAAG,CAACC,KAAM,OAGfF,EAACG,EAAW,CAAAC,UAAU,KAAKC,QAAQ,YAAYT,GAAI,CAAEU,GAAI,MAAOC,GAAI,MAAOC,WAAY,cACpFpC,EAAMqC,QAETT,EAACC,EAAI,CAAAC,KAAM,IACXF,EAACU,EACC,CAAAC,QAAS,WACPvC,EAAMwC,cAAgBxC,EAAMwC,eAC5BtC,EAAQuC,OACT,EAAAnB,SAEDM,EAACc,EAAS,CAAA,QAGdd,SAAKhB,UAAWJ,EAAoBmC,iBAAU3C,EAAMsB,cAG1D,EACF,EAGMd,EAAsB,CAC1BC,KAAM,yBACNkC,QAAS,4BACT9B,WAAY,gCAGRG,EAAqB4B,EAAOC,EAAPD,CAAqC,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAO7B,EAAI4B,EAAJ5B,KAAI,OAAA8B,EAAAA,EAAAA,EAAA,CAC5EC,UAAW,qBACXC,SAAU,SACVC,QAAS,OACTC,cAAe,SACfC,SAAU,WACVC,SAAU,qBACVC,MAAOR,EAAMS,YAAYC,OAAOvC,QAAAA,EAAQ,OACvC6B,EAAMS,YAAYE,KAAK,MAAQ,CAAEH,MAAO,4BAAsBI,OACzDnD,EAAoBK,YAAe,CACvC+C,OAAQ,2BACTD,OACInD,EAAoBmC,SAAY,CACnCkB,UAAW,OACX/B,KAAM,WACNgC,UAAW,GACZ,GAGGxB,EAAWM,EAAOmB,EAAPnB,CAAmB,CAClCd,KAAM,WACNkC,MAAO,UACP,QAAS,CAAEC,WAAY,YACvB,cAAe,CAAED,MAAO,aAGpBzC,EAASqB,EAAOf,EAAPe,CAAY,CACzBO,QAAS,OACTe,WAAY,SACZC,QAAS,cACTC,IAAK,MACLtC,KAAM,WACNuC,UAAW,uFACXT,OAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-param.js","sources":["../../../../src/http-service/graphql/request-param.ts"],"sourcesContent":["export type IVariable<T extends object> = keyof T\r\n\r\nexport type ILogic = 'Or' | 'And'\r\n\r\nexport type ISortDirection = 'ASC' | 'DESC'\r\n\r\nexport interface ISeedModel<T> {\r\n key: string\r\n field: keyof T\r\n}\r\n\r\nexport interface IFilterOption {\r\n logic: ILogic\r\n ignoreEmpty: boolean\r\n}\r\n\r\nexport interface IRequestParamOption {\r\n ignoreEmpty: boolean\r\n}\r\n\r\nexport interface ISortOption {\r\n direction: ISortDirection\r\n}\r\n\r\nexport type ISortStore<T extends object> = { [key in keyof T]?: ISortDirection }\r\n\r\nexport type IAllOptions = IFilterOption & IRequestParamOption & ISortOption\r\n\r\nexport type IRequestParamResult<T extends object> = {\r\n sort?: ISortStore<T>[]\r\n skip: number\r\n take: number\r\n filter?: string\r\n noTotal?: boolean\r\n seedKey?: string\r\n seedField?: string\r\n}\r\n\r\nexport class RequestParam<T extends object = any> {\r\n private readonly _option?: Partial<IRequestParamOption>\r\n constructor(option?: Partial<IRequestParamOption>) {\r\n this._option = option\r\n }\r\n\r\n private mergeOptions = (...p: any[]): Partial<IAllOptions> => {\r\n return p.reduce((a, b) => {\r\n return Object.assign(a, b ?? {})\r\n }, {})\r\n }\r\n\r\n private ignoreEmpty = (field2: string, option?: Partial<IFilterOption>) => {\r\n const mOption = this.mergeOptions(this._option, option)\r\n return !field2 && mOption?.ignoreEmpty === true\r\n }\r\n\r\n private _filter: string[] = []\r\n private _filterBase = (field1: IVariable<T>, operation: string, field2: string, option?: Partial<IFilterOption>) => {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}${field1 as string}${operation}${field2 as string}`)\r\n return this\r\n }\r\n filter = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '==', typeof field2 === 'string' ? `\"${field2}\"` : field2.toString(), option)\r\n }\r\n filterNotEquals = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '!=', typeof field2 === 'string' ? `\"${field2}\"` : field2.toString(), option)\r\n }\r\n filterEnum = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '==', typeof field2 === 'string' ? field2 : field2.toString(), option)\r\n }\r\n filterStartsWith = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.startsWith(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterContains = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.Contains(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterLast = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.endsWith(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterNumber = (field1: IVariable<T>, operator: string, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, ` ${operator} ` + (field2 as string), '', option)\r\n }\r\n filterGreater = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, \" > '\" + (field2 as string) + \"'\", '', option)\r\n }\r\n filterLess = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, \" < '\" + (field2 as string) + \"'\", '', option)\r\n }\r\n filterCustom = (field1: string, option?: Partial<IFilterOption>) => {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}${field1 as string}`)\r\n return this\r\n }\r\n\r\n scope = (action: (crd: RequestParam<T>) => RequestParam<T>, option?: Partial<IFilterOption>) => {\r\n const crd = action(new RequestParam(this._option))\r\n const temp = crd.buildFilter()\r\n if (temp) {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}(${crd.buildFilter()})`)\r\n }\r\n return this\r\n }\r\n\r\n private seedStore?: ISeedModel<T>\r\n seed = (field: keyof T, key: string) => {\r\n this.seedStore = { field, key }\r\n return this\r\n }\r\n\r\n private _skip?: number\r\n skip = (skip: number) => {\r\n this._skip = skip\r\n return this\r\n }\r\n\r\n private _take?: number\r\n take = (take: number) => {\r\n this._take = take\r\n return this\r\n }\r\n\r\n private sortStore: ISortStore<T>[] = []\r\n private sortBase = (field1: IVariable<T>, direction: ISortDirection, option?: Partial<ISortOption>) => {\r\n const temp = {} as ISortStore<T>\r\n temp[field1] = direction\r\n if (!this.sortStore.some((item) => Object.keys(item)[0] === Object.keys(temp)[0])) {\r\n this.sortStore.push(temp)\r\n }\r\n return this\r\n }\r\n sort = (field1: IVariable<T>, option?: Partial<ISortOption>) => {\r\n this.sortBase(field1, option?.direction ? option.direction : 'ASC')\r\n return this\r\n }\r\n\r\n private _noTotal?: boolean\r\n noTotal = (value: boolean = true) => {\r\n this._noTotal = value\r\n return this\r\n }\r\n\r\n private buildFilter = () => {\r\n return this._filter.join('')\r\n }\r\n\r\n private buildPage = () => {\r\n const temp = {} as any\r\n if (this._skip) {\r\n temp.skip = this._skip\r\n }\r\n if (this._take) {\r\n temp.take = this._take\r\n }\r\n return temp as { skip: number; take: number }\r\n }\r\n\r\n private buildRandomWithSeedKey = (): Partial<ISeedModel<T>> => {\r\n if (this.seedStore?.field && !this.seedStore?.key) {\r\n console.warn('RandomWithSeedKey missing seedKey.')\r\n }\r\n if (this.seedStore?.key && !this.seedStore?.field) {\r\n console.warn('RandomWithSeedKey missing seedField.')\r\n }\r\n if (!this.seedStore?.key && !this.seedStore?.field) {\r\n return {}\r\n }\r\n return this.seedStore\r\n }\r\n\r\n build = (): IRequestParamResult<T> => {\r\n const obj: IRequestParamResult<T> = { ...this.buildPage() }\r\n if (this.sortStore.length > 0) obj.sort = this.sortStore\r\n const filter = this.buildFilter()\r\n if (filter) obj.filter = filter\r\n if (this._noTotal) obj.noTotal = this._noTotal\r\n const seedInfo = this.buildRandomWithSeedKey()\r\n if (!!seedInfo.key && !!seedInfo.field) {\r\n obj.seedField = seedInfo.field.toString()\r\n obj.seedKey = seedInfo.key\r\n }\r\n return obj\r\n }\r\n}\r\n\r\nexport const createRequestBuilder = <T extends object>(option?: Partial<IRequestParamOption>) => {\r\n return new RequestParam<T>(option)\r\n}\r\n"],"names":["RequestParam","_createClass","option","_this","this","_classCallCheck","_defineProperty","_len","arguments","length","p","Array","_key","reduce","a","b","Object","assign","field2","mOption","mergeOptions","_option","ignoreEmpty","field1","operation","logicStr","_filter","logic","push","concat","_filterBase","toString","operator","action","crd","buildFilter","field","key","seedStore","skip","_skip","take","_take","direction","temp","sortStore","some","item","keys","sortBase","value","undefined","_noTotal","join","_this$seedStore","_this$seedStore2","_this$seedStore3","_this$seedStore4","_this$seedStore5","_this$seedStore6","console","warn","obj","_objectSpread","buildPage","sort","filter","noTotal","seedInfo","buildRandomWithSeedKey","seedField","seedKey","createRequestBuilder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"request-param.js","sources":["../../../../src/http-service/graphql/request-param.ts"],"sourcesContent":["export type IVariable<T extends object> = keyof T\r\n\r\nexport type ILogic = 'Or' | 'And'\r\n\r\nexport type ISortDirection = 'ASC' | 'DESC'\r\n\r\nexport interface ISeedModel<T> {\r\n key: string\r\n field: keyof T\r\n}\r\n\r\nexport interface IFilterOption {\r\n logic: ILogic\r\n ignoreEmpty: boolean\r\n}\r\n\r\nexport interface IRequestParamOption {\r\n ignoreEmpty: boolean\r\n}\r\n\r\nexport interface ISortOption {\r\n direction: ISortDirection\r\n}\r\n\r\nexport type ISortStore<T extends object> = { [key in keyof T]?: ISortDirection }\r\n\r\nexport type IAllOptions = IFilterOption & IRequestParamOption & ISortOption\r\n\r\nexport type IRequestParamResult<T extends object> = {\r\n sort?: ISortStore<T>[]\r\n skip?: number\r\n take?: number\r\n filter?: string\r\n noTotal?: boolean\r\n seedKey?: string\r\n seedField?: string\r\n}\r\n\r\nexport class RequestParam<T extends object = any> {\r\n private readonly _option?: Partial<IRequestParamOption>\r\n constructor(option?: Partial<IRequestParamOption>) {\r\n this._option = option\r\n }\r\n\r\n private mergeOptions = (...p: any[]): Partial<IAllOptions> => {\r\n return p.reduce((a, b) => {\r\n return Object.assign(a, b ?? {})\r\n }, {})\r\n }\r\n\r\n private ignoreEmpty = (field2: string, option?: Partial<IFilterOption>) => {\r\n const mOption = this.mergeOptions(this._option, option)\r\n return !field2 && mOption?.ignoreEmpty === true\r\n }\r\n\r\n private _filter: string[] = []\r\n private _filterBase = (field1: IVariable<T>, operation: string, field2: string, option?: Partial<IFilterOption>) => {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}${field1 as string}${operation}${field2 as string}`)\r\n return this\r\n }\r\n filter = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '==', typeof field2 === 'string' ? `\"${field2}\"` : field2.toString(), option)\r\n }\r\n filterNotEquals = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '!=', typeof field2 === 'string' ? `\"${field2}\"` : field2.toString(), option)\r\n }\r\n filterEnum = (field1: IVariable<T>, field2: string | number, option?: Partial<IFilterOption>) => {\r\n if (typeof field2 === 'string' && this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '==', typeof field2 === 'string' ? field2 : field2.toString(), option)\r\n }\r\n filterStartsWith = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.startsWith(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterContains = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.Contains(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterLast = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, '.endsWith(\"' + (field2 as string) + '\")', '', option)\r\n }\r\n filterNumber = (field1: IVariable<T>, operator: string, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, ` ${operator} ` + (field2 as string), '', option)\r\n }\r\n filterGreater = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, \" > '\" + (field2 as string) + \"'\", '', option)\r\n }\r\n filterLess = (field1: IVariable<T>, field2: string, option?: Partial<IFilterOption>) => {\r\n if (this.ignoreEmpty(field2, option)) return this\r\n return this._filterBase(field1, \" < '\" + (field2 as string) + \"'\", '', option)\r\n }\r\n filterCustom = (field1: string, option?: Partial<IFilterOption>) => {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}${field1 as string}`)\r\n return this\r\n }\r\n\r\n scope = (action: (crd: RequestParam<T>) => RequestParam<T>, option?: Partial<IFilterOption>) => {\r\n const crd = action(new RequestParam(this._option))\r\n const temp = crd.buildFilter()\r\n if (temp) {\r\n const logicStr = this._filter.length ? ' ' + (option?.logic === 'And' ? '&&' : '||') + ' ' : ''\r\n this._filter.push(`${logicStr}(${crd.buildFilter()})`)\r\n }\r\n return this\r\n }\r\n\r\n private seedStore?: ISeedModel<T>\r\n seed = (field: keyof T, key: string) => {\r\n this.seedStore = { field, key }\r\n return this\r\n }\r\n\r\n private _skip?: number\r\n skip = (skip: number) => {\r\n this._skip = skip\r\n return this\r\n }\r\n\r\n private _take?: number\r\n take = (take: number) => {\r\n this._take = take\r\n return this\r\n }\r\n\r\n private sortStore: ISortStore<T>[] = []\r\n private sortBase = (field1: IVariable<T>, direction: ISortDirection, option?: Partial<ISortOption>) => {\r\n const temp = {} as ISortStore<T>\r\n temp[field1] = direction\r\n if (!this.sortStore.some((item) => Object.keys(item)[0] === Object.keys(temp)[0])) {\r\n this.sortStore.push(temp)\r\n }\r\n return this\r\n }\r\n sort = (field1: IVariable<T>, option?: Partial<ISortOption>) => {\r\n this.sortBase(field1, option?.direction ? option.direction : 'ASC')\r\n return this\r\n }\r\n\r\n private _noTotal?: boolean\r\n noTotal = (value: boolean = true) => {\r\n this._noTotal = value\r\n return this\r\n }\r\n\r\n private buildFilter = () => {\r\n return this._filter.join('')\r\n }\r\n\r\n private buildPage = () => {\r\n const temp = {} as any\r\n if (this._skip) {\r\n temp.skip = this._skip\r\n }\r\n if (this._take) {\r\n temp.take = this._take\r\n }\r\n return temp as { skip: number; take: number }\r\n }\r\n\r\n private buildRandomWithSeedKey = (): Partial<ISeedModel<T>> => {\r\n if (this.seedStore?.field && !this.seedStore?.key) {\r\n console.warn('RandomWithSeedKey missing seedKey.')\r\n }\r\n if (this.seedStore?.key && !this.seedStore?.field) {\r\n console.warn('RandomWithSeedKey missing seedField.')\r\n }\r\n if (!this.seedStore?.key && !this.seedStore?.field) {\r\n return {}\r\n }\r\n return this.seedStore\r\n }\r\n\r\n build = (): IRequestParamResult<T> => {\r\n const obj: IRequestParamResult<T> = { ...this.buildPage() }\r\n if (this.sortStore.length > 0) obj.sort = this.sortStore\r\n const filter = this.buildFilter()\r\n if (filter) obj.filter = filter\r\n if (this._noTotal) obj.noTotal = this._noTotal\r\n const seedInfo = this.buildRandomWithSeedKey()\r\n if (!!seedInfo.key && !!seedInfo.field) {\r\n obj.seedField = seedInfo.field.toString()\r\n obj.seedKey = seedInfo.key\r\n }\r\n return obj\r\n }\r\n}\r\n\r\nexport const createRequestBuilder = <T extends object>(option?: Partial<IRequestParamOption>) => {\r\n return new RequestParam<T>(option)\r\n}\r\n"],"names":["RequestParam","_createClass","option","_this","this","_classCallCheck","_defineProperty","_len","arguments","length","p","Array","_key","reduce","a","b","Object","assign","field2","mOption","mergeOptions","_option","ignoreEmpty","field1","operation","logicStr","_filter","logic","push","concat","_filterBase","toString","operator","action","crd","buildFilter","field","key","seedStore","skip","_skip","take","_take","direction","temp","sortStore","some","item","keys","sortBase","value","undefined","_noTotal","join","_this$seedStore","_this$seedStore2","_this$seedStore3","_this$seedStore4","_this$seedStore5","_this$seedStore6","console","warn","obj","_objectSpread","buildPage","sort","filter","noTotal","seedInfo","buildRandomWithSeedKey","seedField","seedKey","createRequestBuilder"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as a,classCallCheck as t,callSuper as l,toConsumableArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Component as d,Fragment as u}from"react";import{styled as p,Box as c}from"@mui/material";import{DataGrid as g}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{TableBaseContext as h}from"./context.js";import{customFilterOperators as f}from"./custom.filter-operators.js";import v,{dinoTableClasses as b}from"./helpers.js";import y from"./toolbar-pannel.js";import{GlobalModal as C,mapGlobalModalContext as P}from"../api-context/global-modal.js";var w=["children"];function S(e){return function(){function p(r){var a;return t(this,p),a=l(this,p,[r]),i(a,"setTableQueryParams",function(e){a.tableQueryParams=m({},a.tableQueryParams,e)}),i(a,"renderWrapContext",function(o){var i=e.disableGlobalModalProvider?u:C;return s(i,{children:P(function(e){return s(h.Provider,{value:{showModal:e.show,closeModal:e.close},children:o})})})}),i(a,"getDataGridProps",function(){var o,i,r,t,l=a.mergeConfig,n={getRowId:e.getRowId,columns:a.columns,rows:null!==(o=null===(i=a.props.data)||void 0===i?void 0:i.items)&&void 0!==o?o:[],checkboxSelection:!0,pagination:!0,density:null!==(r=null===(t=a.props.slots)||void 0===t?void 0:t.density)&&void 0!==r?r:"standard",initialState:v.mapInitialState(a.props.query,{columns:{columnVisibilityModel:e.columnVisibilityModel}}),filterDebounceMs:800,sx:{border:0},slots:{toolbar:l.toolbar},rowSelectionModel:a.rowSelecteds,onRowSelectionModelChange:a.handleRowSelectionChange};if("server"===e.featureMode){var s,d,u={filterMode:"server",sortingMode:"server",paginationMode:"server",onPaginationModelChange:a.onPaginationModelChange,onFilterModelChange:a.onFilterModelChange,onSortModelChange:a.onSortModelChange,rowCount:null!==(s=null===(d=a.props.data)||void 0===d?void 0:d.rowTotal)&&void 0!==s?s:0,paginationModel:a.tableQueryParams.pagination,filterModel:a.tableQueryParams.filter,sortModel:v.mapSortModel(a.tableQueryParams.sort),loading:a.mergeConfig.loading};Object.assign(n,u)}return m(n,a.mergeConfig.dataGridProps)}),i(a,"initialColumns",function(){var i,r,t=a.mergeConfig,l=t.ActionRow,d=t.disableActionRow,u=[];return l&&!0!==d&&u.push(o({field:"Actions",minWidth:100,headerAlign:"right",align:"right",filterable:!1,sortable:!1,renderCell:function(e){return s(l,{value:e.row})}},e.actionRow)),i=u,r=Object.keys(e.columns).map(function(i){var r=o({field:i},e.columns[i]);return r.filterOperators=e.filterOperators?e.filterOperators(r):f(r),r}),i&&i.length>0&&r.push.apply(r,n(i)),r}),i(a,"onPaginationModelChange",function(e,o){a.mergeConfig.loading||(a.setTableQueryParams({pagination:e,detail:"pagination"}),a.handleChange())}),i(a,"onFilterModelChange",function(e,o){var i;if(!a.mergeConfig.loading){var r=a.tableQueryParams.pagination;a.setTableQueryParams({filter:e,pagination:{page:0,pageSize:null!==(i=null==r?void 0:r.pageSize)&&void 0!==i?i:25},detail:v.detectSearchType(e)}),a.handleChange()}}),i(a,"onSortModelChange",function(e,o){if(!a.mergeConfig.loading){var i,r,t,l,n,s=e,d=a.tableQueryParams.sort;if(null!=d&&d.length&&!s.length)if((null==d||null===(i=d[0])||void 0===i?void 0:i.field)===(null===(r=a.defaultTableQueryParams.sort)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.field))s=[{field:null===(t=d[0])||void 0===t?void 0:t.field,sort:"desc"===(null===(l=d[0])||void 0===l?void 0:l.sort)?"asc":"desc"}];else s=null!==(n=a.defaultTableQueryParams.sort)&&void 0!==n?n:[];a.setTableQueryParams({sort:s,detail:"sort"}),a.handleChange()}}),i(a,"handleChange",function(){a.changeTimeout&&clearTimeout(a.changeTimeout),a.changeTimeout=setTimeout(function(){a.props.onChange&&a.props.onChange(a.tableQueryParams)},300)}),i(a,"handleRowSelectionChange",function(e,o){a.mergeConfig.maxSelcion&&e.length>a.mergeConfig.maxSelcion?a.rowSelecteds=e.slice(0,a.mergeConfig.maxSelcion):a.rowSelecteds=e,a.props.onRowSelectionChange&&a.props.onRowSelectionChange(a.rowSelecteds,o),a.forceUpdate()}),a.columns=a.initialColumns(),a.tableQueryParams=o({},r.query),a.defaultTableQueryParams=a.tableQueryParams,a.rowSelecteds=[],a}return r(p,d),a(p,[{key:"mergeConfig",get:function(){var i,r,a,t,l,n,d,u,p,c,g=m({},null==e?void 0:e.toolbarProps,null===(i=this.props.slots)||void 0===i?void 0:i.toolbarProps);return{toolbar:null!==(r=null===(a=this.props.slots)||void 0===a?void 0:a.toolbar)&&void 0!==r?r:function(){return s(y,o({},g))},ActionRow:null===(t=this.props.slots)||void 0===t?void 0:t.actionRow,disableActionRow:e.disableActionRow,columnVisibilityModel:e.columnVisibilityModel,maxSelcion:null!==(l=null===(n=this.props.slots)||void 0===n?void 0:n.maxSelection)&&void 0!==l?l:e.maxSelection,dataGridProps:m({},e.dataGridProps,null===(d=this.props.slots)||void 0===d?void 0:d.dataGridProps),wrapProps:m({},e.wrapProps,null===(u=this.props.slots)||void 0===u?void 0:u.wrapProps),loading:null!==(p=void 0!==this.props.loading?this.props.loading:null===(c=this.tableQueryParams)||void 0===c?void 0:c.loading)&&void 0!==p&&p}}},{key:"componentWillUnmount",value:function(){this.changeTimeout&&clearTimeout(this.changeTimeout)}},{key:"shouldComponentUpdate",value:function(o){var i;return"server"!==e.featureMode||(v.equalTableQueryParams(o.query,this.props.query)?JSON.stringify(o.data)!==JSON.stringify(this.props.data)||o.loading!==this.props.loading:(this.setTableQueryParams(null!==(i=o.query)&&void 0!==i?i:{}),!0))}},{key:"render",value:function(){return this.renderWrapContext(s(M,o(o({},this.mergeConfig.wrapProps),{},{children:s(g,o({loading:this.props.loading},this.getDataGridProps()))})))}}])}()}var M=p(function(i){var r=i.children,a=e(i,w);return s(c,o(o({},a),{},{children:s("div",{children:r})}))})(i(i({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},".MuiDataGrid-root":{"--unstable_DataGrid-radius":0,overflow:"hidden"}},".MuiDataGrid-cell.".concat(b.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}),".MuiTablePagination-root p",{marginBottom:0}));export{S as CreateTable,S as default};
|
|
2
2
|
//# sourceMappingURL=create.table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.table.js","sources":["../../../src/table/create.table.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport type { ComponentType, ReactNode } from 'react'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper, { dinoTableClasses } from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: ComponentType<IToolbarPannelProps>\r\n actionRow?: ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n loading?: boolean\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n disableGlobalModalProvider?: boolean\r\n}\r\n\r\nexport function CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n private changeTimeout?: ReturnType<typeof setTimeout>\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps),\r\n loading: (this.props.loading !== undefined ? this.props.loading : this.tableQueryParams?.loading) ?? false\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.changeTimeout) {\r\n clearTimeout(this.changeTimeout)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server') {\r\n // Check if query changed\r\n if (!TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n }\r\n // Check if data or loading changed\r\n if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data) || nextProps.loading !== this.props.loading) {\r\n return true\r\n }\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n\r\n render() {\r\n return this.renderWrapContext(\r\n <Wrap>\r\n <DataGrid loading={this.props.loading} {...this.getDataGridProps()} />\r\n </Wrap>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: ReactNode) => {\r\n const WrapComponent = params.disableGlobalModalProvider ? Fragment : GlobalModal\r\n return (\r\n <WrapComponent>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </WrapComponent>\r\n )\r\n }\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const mergeConfig = this.mergeConfig\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n initialState: TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n }),\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.mergeConfig.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n if (this.mergeConfig.loading) return\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n if (this.mergeConfig.loading) return\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n if (this.mergeConfig.loading) return\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n if (this.changeTimeout) clearTimeout(this.changeTimeout)\r\n this.changeTimeout = setTimeout(() => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }, 300)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n\r\nconst Wrap = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '& .MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0,\r\n overflow: 'hidden'\r\n },\r\n [`& .MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n }\r\n})\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","WrapComponent","disableGlobalModalProvider","Fragment","GlobalModal","_jsx","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","mergeConfig","obj","getRowId","columns","rows","data","items","checkboxSelection","pagination","density","slots","initialState","TableHelper","mapInitialState","query","columnVisibilityModel","filterDebounceMs","sx","border","toolbar","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","ActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","changeTimeout","clearTimeout","setTimeout","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","_ref","_this$tableQueryParam","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","undefined","nextProps","_nextProps$query","equalTableQueryParams","JSON","stringify","renderWrapContext","Wrap","DataGrid","getDataGridProps","styled","_ref2","p","_objectWithoutProperties","_excluded","Box","flex","position","top","left","width","height","overflowY","overflow","concat","dinoTableClasses","whiteSpacePre","whiteSpace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.table.js","sources":["../../../src/table/create.table.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { Box, BoxProps, styled, tablePaginationClasses } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport type { ComponentType, ReactNode } from 'react'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper, { dinoTableClasses } from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: ComponentType<IToolbarPannelProps>\r\n actionRow?: ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n wrapProps?: BoxProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps' | 'wrapProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n loading?: boolean\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n disableActionRow?: boolean\r\n disableGlobalModalProvider?: boolean\r\n}\r\n\r\nexport function CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n private changeTimeout?: ReturnType<typeof setTimeout>\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n disableActionRow: params.disableActionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps),\r\n wrapProps: mergeObjects({}, params.wrapProps, this.props.slots?.wrapProps),\r\n loading: (this.props.loading !== undefined ? this.props.loading : this.tableQueryParams?.loading) ?? false\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.changeTimeout) {\r\n clearTimeout(this.changeTimeout)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server') {\r\n // Check if query changed\r\n if (!TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n }\r\n // Check if data or loading changed\r\n if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data) || nextProps.loading !== this.props.loading) {\r\n return true\r\n }\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n\r\n render() {\r\n return this.renderWrapContext(\r\n <Wrap {...this.mergeConfig.wrapProps}>\r\n <DataGrid loading={this.props.loading} {...this.getDataGridProps()} />\r\n </Wrap>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: ReactNode) => {\r\n const WrapComponent = params.disableGlobalModalProvider ? Fragment : GlobalModal\r\n return (\r\n <WrapComponent>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </WrapComponent>\r\n )\r\n }\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const mergeConfig = this.mergeConfig\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n initialState: TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n }),\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.mergeConfig.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow, disableActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow && disableActionRow !== true) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n if (this.mergeConfig.loading) return\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n if (this.mergeConfig.loading) return\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n if (this.mergeConfig.loading) return\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n if (this.changeTimeout) clearTimeout(this.changeTimeout)\r\n this.changeTimeout = setTimeout(() => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }, 300)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n\r\nconst Wrap = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '.MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0,\r\n overflow: 'hidden'\r\n },\r\n [`.MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n },\r\n [`.MuiTablePagination-root p`]: {\r\n marginBottom: 0\r\n }\r\n})\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","WrapComponent","disableGlobalModalProvider","Fragment","GlobalModal","_jsx","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","mergeConfig","obj","getRowId","columns","rows","data","items","checkboxSelection","pagination","density","slots","initialState","TableHelper","mapInitialState","query","columnVisibilityModel","filterDebounceMs","sx","border","toolbar","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","_this$mergeConfig","ActionRow","disableActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","changeTimeout","clearTimeout","setTimeout","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","_this$props$slots7","_ref","_this$tableQueryParam","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","wrapProps","undefined","nextProps","_nextProps$query","equalTableQueryParams","JSON","stringify","renderWrapContext","Wrap","DataGrid","getDataGridProps","styled","_ref2","p","_objectWithoutProperties","_excluded","Box","flex","position","top","left","width","height","overflowY","overflow","concat","dinoTableClasses","whiteSpacePre","whiteSpace","marginBottom"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{defineProperty as e,inherits as t,createClass as a,classCallCheck as r,callSuper as n,objectSpread2 as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as l,Fragment as s}from"react/jsx-runtime";import{Component as c}from"react";import{GridToolbar as p,GridToolbarQuickFilter as d}from"@mui/x-data-grid";import{styled as m,Box as u,Typography as h}from"@mui/material";import{BtnFormCreate as f}from"./ui.buttons.js";import{Breadcrumbs as g}from"../components/breadcrumbs.js";import{HelpTooltip as b}from"../components/help-tooltip.js";var x=function(){function m(){var t;r(this,m);for(var a=arguments.length,c=new Array(a),p=0;p<a;p++)c[p]=arguments[p];return t=n(this,m,[].concat(c)),e(t,"renderTitle",function(){var e,a=t.props,r=a.title,n=a.afterTitle,c=a.breadcrumbs,p=a.icon,d="".concat(T.titleWrap).concat(null!==(e=t.props.titleProps)&&void 0!==e&&e.className?" ".concat(t.props.titleProps.className):"");if(!(!!r||!!c||!!n))return l(s,{});var m=r;return"string"==typeof r&&(m=l(h,{noWrap:!0,variant:"subtitle1",className:T.titleText,children:r})),c&&(m=l(g,{value:c})),o(u,i(i({},t.props.titleProps),{},{className:d,children:[p&&l("div",{className:T.icon,children:p}),m,n]}))}),e(t,"renderEndAdornment",function(){return!t.props.searchInclude||t.props.searchInclude.length<=0?l(s,{}):l(b,{title:"The search includes",small:!0,children:l("ul",{className:T.searchHelp,children:t.props.searchInclude.map(function(e,t){return l("li",{children:l(h,{variant:"body2",children:e})},t)})})})}),t}return t(m,c),a(m,[{key:"render",value:function(){return o(v,{className:T.root,children:[this.renderTitle(),o(u,{className:T.actionsRow,children:[o(u,{className:T.actionsLeft,children:[l(p,{className:T.gridToolbar}),this.props.formCreate&&l(f,{children:this.props.formCreate}),this.props.afterAction]}),l(u,{className:T.actionsRight,children:o(u,{className:T.quickFilterWrap,children:[l(d,{fullWidth:!0,variant:"standard",size:"small",debounceMs:800,quickFilterParser:function(e){return[e]}}),this.renderEndAdornment()]})})]})]})}}])}(),T={root:"Dino-ToolbarPannel-root",actionsRow:"Dino-ToolbarPannel-actionsRow",actionsLeft:"Dino-ToolbarPannel-actionsLeft",actionsRight:"Dino-ToolbarPannel-actionsRight",quickFilterWrap:"Dino-ToolbarPannel-quickFilterWrap",gridToolbar:"Dino-ToolbarPannel-gridToolbar",titleWrap:"Dino-ToolbarPannel-titleWrap",titleText:"Dino-ToolbarPannel-titleText",searchHelp:"Dino-ToolbarPannel-searchHelp",icon:"Dino-ToolbarPannel-icon"},v=m(u)(function(t){var a=t.theme;return e(e(e(e(e(e(e(e(e(e({padding:a.spacing(1,2,0)},".".concat(T.actionsRow),{display:"flex",flexWrap:"wrap"}),".".concat(T.actionsLeft),{flex:1,display:"flex",alignItems:"center",flexWrap:"wrap"}),".".concat(T.actionsRight),e({display:"flex",gap:"8px",alignItems:"center",width:"auto"},a.breakpoints.down("md"),{width:"100%"})),".".concat(T.quickFilterWrap),{display:"flex",alignItems:"center"}),".".concat(T.gridToolbar),{padding:0}),".".concat(T.titleWrap),{height:"var(--height-table-topbar, 48px)",display:"flex",alignItems:"center"}),".".concat(T.titleText),{fontWeight:700,flex:1}),".".concat(T.icon),{marginRight:8,display:"flex",alignItems:"center",justifyContent:"center",flex:"0 0 auto"}),".".concat(T.searchHelp),{margin:"0 0 0 18px",padding:0,li:{position:"relative"},"li::after":{content:'"►"',display:"inline-block",top:"50%",transform:"translateY(-50%)",position:"absolute",left:"-18px"}}),a.breakpoints.down("md"),{padding:a.spacing(1,1,0)})});export{x as default};
|
|
2
2
|
//# sourceMappingURL=toolbar-pannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-pannel.js","sources":["../../../src/table/toolbar-pannel.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { GridToolbar, GridToolbarQuickFilter } from '@mui/x-data-grid'\r\nimport { Box, BoxProps, styled, Typography
|
|
1
|
+
{"version":3,"file":"toolbar-pannel.js","sources":["../../../src/table/toolbar-pannel.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { GridToolbar, GridToolbarQuickFilter } from '@mui/x-data-grid'\r\nimport { Box, BoxProps, styled, Typography } from '@mui/material'\r\nimport { BtnFormCreate } from './ui.buttons'\r\nimport { Breadcrumbs, IBreadcrumbConfig, HelpTooltip } from '../components'\r\n\r\nexport interface IToolbarPannelOptions {\r\n searchInclude?: string[]\r\n formCreate?: React.ReactNode\r\n afterAction?: React.ReactNode\r\n breadcrumbs?: IBreadcrumbConfig[]\r\n}\r\n\r\nexport interface IToolbarPannelProps extends IToolbarPannelOptions {\r\n title?: React.ReactNode\r\n titleProps?: BoxProps\r\n icon?: React.ReactNode\r\n afterTitle?: React.ReactNode\r\n}\r\n\r\nclass ToolbarPannel extends Component<React.PropsWithChildren<IToolbarPannelProps>> {\r\n render() {\r\n return (\r\n <ToolbarPannelStyled className={toolbarPannelClasses.root}>\r\n {this.renderTitle()}\r\n <Box className={toolbarPannelClasses.actionsRow}>\r\n <Box className={toolbarPannelClasses.actionsLeft}>\r\n <GridToolbar className={toolbarPannelClasses.gridToolbar} />\r\n {this.props.formCreate && <BtnFormCreate>{this.props.formCreate}</BtnFormCreate>}\r\n {this.props.afterAction}\r\n </Box>\r\n <Box className={toolbarPannelClasses.actionsRight}>\r\n <Box className={toolbarPannelClasses.quickFilterWrap}>\r\n <GridToolbarQuickFilter fullWidth variant='standard' size='small' debounceMs={800} quickFilterParser={(x: any) => [x]} />\r\n {this.renderEndAdornment()}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </ToolbarPannelStyled>\r\n )\r\n }\r\n\r\n renderTitle = () => {\r\n const { title, afterTitle, breadcrumbs, icon } = this.props\r\n const titleClassName = `${toolbarPannelClasses.titleWrap}${this.props.titleProps?.className ? ` ${this.props.titleProps.className}` : ''}`\r\n\r\n const isVisible = !!title || !!breadcrumbs || !!afterTitle\r\n if (!isVisible) return <></>\r\n\r\n let titleElm = title\r\n if (typeof title === 'string') {\r\n titleElm = (\r\n <Typography noWrap variant='subtitle1' className={toolbarPannelClasses.titleText}>\r\n {title}\r\n </Typography>\r\n )\r\n }\r\n if (breadcrumbs) titleElm = <Breadcrumbs value={breadcrumbs} />\r\n\r\n return (\r\n <Box {...this.props.titleProps} className={titleClassName}>\r\n {icon && <div className={toolbarPannelClasses.icon}>{icon}</div>}\r\n {titleElm}\r\n {afterTitle}\r\n </Box>\r\n )\r\n }\r\n\r\n renderEndAdornment = () => {\r\n if (!this.props.searchInclude || this.props.searchInclude.length <= 0) return <></>\r\n return (\r\n <HelpTooltip title='The search includes' small>\r\n <ul className={toolbarPannelClasses.searchHelp}>\r\n {this.props.searchInclude.map((item, index) => (\r\n <li key={index}>\r\n <Typography variant='body2'>{item}</Typography>\r\n </li>\r\n ))}\r\n </ul>\r\n </HelpTooltip>\r\n )\r\n }\r\n}\r\nexport default ToolbarPannel\r\n\r\nconst toolbarPannelClasses = {\r\n root: 'Dino-ToolbarPannel-root',\r\n actionsRow: 'Dino-ToolbarPannel-actionsRow',\r\n actionsLeft: 'Dino-ToolbarPannel-actionsLeft',\r\n actionsRight: 'Dino-ToolbarPannel-actionsRight',\r\n quickFilterWrap: 'Dino-ToolbarPannel-quickFilterWrap',\r\n gridToolbar: 'Dino-ToolbarPannel-gridToolbar',\r\n titleWrap: 'Dino-ToolbarPannel-titleWrap',\r\n titleText: 'Dino-ToolbarPannel-titleText',\r\n searchHelp: 'Dino-ToolbarPannel-searchHelp',\r\n icon: 'Dino-ToolbarPannel-icon'\r\n}\r\n\r\nconst ToolbarPannelStyled = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(1, 2, 0),\r\n [`.${toolbarPannelClasses.actionsRow}`]: { display: 'flex', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsLeft}`]: { flex: 1, display: 'flex', alignItems: 'center', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsRight}`]: {\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n width: 'auto',\r\n [theme.breakpoints.down('md')]: { width: '100%' }\r\n },\r\n [`.${toolbarPannelClasses.quickFilterWrap}`]: { display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.gridToolbar}`]: { padding: 0 },\r\n [`.${toolbarPannelClasses.titleWrap}`]: { height: 'var(--height-table-topbar, 48px)', display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.titleText}`]: { fontWeight: 700, flex: 1 },\r\n [`.${toolbarPannelClasses.icon}`]: {\r\n marginRight: 8,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: '0 0 auto'\r\n },\r\n [`.${toolbarPannelClasses.searchHelp}`]: {\r\n margin: '0 0 0 18px',\r\n padding: 0,\r\n li: { position: 'relative' },\r\n 'li::after': {\r\n content: '\"►\"',\r\n display: 'inline-block',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n position: 'absolute',\r\n left: '-18px'\r\n }\r\n },\r\n [theme.breakpoints.down('md')]: { padding: theme.spacing(1, 1, 0) }\r\n}))\r\n"],"names":["ToolbarPannel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_this$props$titleProp","_this$props","props","title","afterTitle","breadcrumbs","icon","titleClassName","toolbarPannelClasses","titleWrap","titleProps","className","_jsx","titleElm","Typography","noWrap","variant","titleText","Breadcrumbs","value","_jsxs","Box","_objectSpread","children","searchInclude","HelpTooltip","small","searchHelp","map","item","index","_inherits","Component","_createClass","key","ToolbarPannelStyled","root","renderTitle","actionsRow","actionsLeft","GridToolbar","gridToolbar","formCreate","BtnFormCreate","afterAction","actionsRight","quickFilterWrap","GridToolbarQuickFilter","fullWidth","size","debounceMs","quickFilterParser","x","renderEndAdornment","styled","_ref","theme","padding","spacing","display","flexWrap","flex","alignItems","gap","width","breakpoints","down","height","fontWeight","marginRight","justifyContent","margin","li","position","content","top","transform","left"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { TextFieldProps } from '@mui/material';
|
|
|
3
3
|
import { IFormInputBase } from './types';
|
|
4
4
|
import { IImageWithFallbackPropsOwner } from '../components/image-with-fallback';
|
|
5
5
|
import { IRichTooltipPanelConfig } from '../components/rich-tooltip';
|
|
6
|
-
export interface InputBaseImage<T> extends Partial<IImageWithFallbackPropsOwner> {
|
|
7
|
-
|
|
6
|
+
export interface InputBaseImage<T> extends Omit<Partial<IImageWithFallbackPropsOwner>, 'src'> {
|
|
7
|
+
src?: string | ((value: any, model?: Partial<T>) => string | undefined);
|
|
8
8
|
element?: React.ComponentType<{
|
|
9
9
|
value: any;
|
|
10
10
|
model?: Partial<T>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentType, FC } from 'react';
|
|
2
|
-
import { BoxProps } from '@mui/material';
|
|
2
|
+
import { BoxProps, GridProps } from '@mui/material';
|
|
3
3
|
import { IFormInputBase } from './types';
|
|
4
4
|
import { IPartialError } from './validator';
|
|
5
5
|
import { IFormBaseSlots } from './create.form-base';
|
|
@@ -13,6 +13,7 @@ export interface IDecoratorFormSlots {
|
|
|
13
13
|
top?: React.ReactNode;
|
|
14
14
|
bottom?: React.ReactNode;
|
|
15
15
|
isFooter?: React.ReactNode | boolean;
|
|
16
|
+
contentProps?: GridProps;
|
|
16
17
|
formBase?: IFormBaseSlots;
|
|
17
18
|
footer?: ComponentType<any>;
|
|
18
19
|
footerProps?: BoxProps & {
|
|
@@ -29,6 +30,8 @@ export interface IDecoratorFormProps<T = any> {
|
|
|
29
30
|
onSubmit?: (data: Partial<T>, signal?: AbortSignal) => Promise<void>;
|
|
30
31
|
onError?: (error: any) => void;
|
|
31
32
|
onSubmitError?: (error: IPartialError<T>) => void;
|
|
33
|
+
onSuccess?: (data: Partial<T>) => void;
|
|
34
|
+
enableStickyFooter?: boolean;
|
|
32
35
|
slots?: IDecoratorFormSlots;
|
|
33
36
|
}
|
|
34
37
|
export declare const DecoratorForm: FC<IDecoratorFormProps>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { FC, PropsWithChildren } from 'react';
|
|
2
|
-
import { Breakpoint, SxProps, Theme } from '@mui/material';
|
|
2
|
+
import { Breakpoint, PaperProps, SxProps, Theme } from '@mui/material';
|
|
3
3
|
export interface IFormModalWrapperProps extends PropsWithChildren {
|
|
4
4
|
title: string;
|
|
5
5
|
size?: Breakpoint;
|
|
6
6
|
fullHeight?: boolean;
|
|
7
7
|
onCloseClick?: () => void;
|
|
8
8
|
slots?: {
|
|
9
|
+
wrapProps?: Partial<PaperProps>;
|
|
9
10
|
sxTopbarProps?: SxProps<Theme>;
|
|
10
11
|
beforeTitle?: JSX.Element;
|
|
11
12
|
};
|
|
@@ -21,8 +21,8 @@ export type ISortStore<T extends object> = {
|
|
|
21
21
|
export type IAllOptions = IFilterOption & IRequestParamOption & ISortOption;
|
|
22
22
|
export type IRequestParamResult<T extends object> = {
|
|
23
23
|
sort?: ISortStore<T>[];
|
|
24
|
-
skip
|
|
25
|
-
take
|
|
24
|
+
skip?: number;
|
|
25
|
+
take?: number;
|
|
26
26
|
filter?: string;
|
|
27
27
|
noTotal?: boolean;
|
|
28
28
|
seedKey?: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BoxProps } from '@mui/material';
|
|
1
2
|
import { DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid';
|
|
2
3
|
import { GridValidRowModel, GridRowIdGetter } from '@mui/x-data-grid';
|
|
3
4
|
import { GridDensity } from '@mui/x-data-grid';
|
|
@@ -12,8 +13,9 @@ export interface ITableSlots<T> {
|
|
|
12
13
|
actionRow?: ComponentType<IActionRowProps<T>>;
|
|
13
14
|
toolbarProps?: IToolbarPannelProps;
|
|
14
15
|
dataGridProps?: DataGridProps;
|
|
16
|
+
wrapProps?: BoxProps;
|
|
15
17
|
}
|
|
16
|
-
export type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps'>;
|
|
18
|
+
export type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps' | 'wrapProps'>;
|
|
17
19
|
export interface ITableProps<T> {
|
|
18
20
|
data?: ITableData<T>;
|
|
19
21
|
query?: ITableQueryParams<T>;
|
|
@@ -29,6 +31,7 @@ export interface ITableParams<T extends GridValidRowModel> extends ITableParamsS
|
|
|
29
31
|
filterOperators?: (config: GridColDef) => GridFilterOperator[];
|
|
30
32
|
columnVisibilityModel?: Partial<Record<keyof T, boolean>>;
|
|
31
33
|
actionRow?: Omit<GridColDef, 'field'>;
|
|
34
|
+
disableActionRow?: boolean;
|
|
32
35
|
disableGlobalModalProvider?: boolean;
|
|
33
36
|
}
|
|
34
37
|
export declare function CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>>;
|
|
@@ -10,6 +10,7 @@ export interface IToolbarPannelOptions {
|
|
|
10
10
|
export interface IToolbarPannelProps extends IToolbarPannelOptions {
|
|
11
11
|
title?: React.ReactNode;
|
|
12
12
|
titleProps?: BoxProps;
|
|
13
|
+
icon?: React.ReactNode;
|
|
13
14
|
afterTitle?: React.ReactNode;
|
|
14
15
|
}
|
|
15
16
|
declare class ToolbarPannel extends Component<React.PropsWithChildren<IToolbarPannelProps>> {
|