dinocollab-core 1.0.30 → 1.1.1

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.
Files changed (42) hide show
  1. package/dist/filter-bar/create.filter-bar.js.map +1 -1
  2. package/dist/filter-bar/create.filter-menu.js.map +1 -1
  3. package/dist/filter-bar/create.filter-panel.js.map +1 -1
  4. package/dist/filter-bar/create.filtered.js.map +1 -1
  5. package/dist/filter-bar/types.js.map +1 -1
  6. package/dist/form/create.form-base.js +1 -1
  7. package/dist/form/create.form-base.js.map +1 -1
  8. package/dist/form/create.form-grid-layout.js +1 -1
  9. package/dist/form/create.form-grid-layout.js.map +1 -1
  10. package/dist/form/create.input.image-file.js +2 -0
  11. package/dist/form/create.input.image-file.js.map +1 -0
  12. package/dist/form/dino-form.js +1 -1
  13. package/dist/form/dino-form.js.map +1 -1
  14. package/dist/form/helpers.js +1 -1
  15. package/dist/form/helpers.js.map +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/table-grid/create.table-grid.js +1 -1
  18. package/dist/table-grid/create.table-grid.js.map +1 -1
  19. package/dist/table-grid/dino.js +1 -1
  20. package/dist/table-grid/dino.js.map +1 -1
  21. package/dist/table-grid/helpers.js +1 -1
  22. package/dist/table-grid/helpers.js.map +1 -1
  23. package/dist/table-grid/url-query-param.js +1 -1
  24. package/dist/table-grid/url-query-param.js.map +1 -1
  25. package/dist/types/filter-bar/create.filter-bar.d.ts +2 -2
  26. package/dist/types/filter-bar/create.filter-menu.d.ts +2 -2
  27. package/dist/types/filter-bar/create.filter-panel.d.ts +2 -2
  28. package/dist/types/filter-bar/create.filtered.d.ts +2 -2
  29. package/dist/types/filter-bar/types.d.ts +1 -1
  30. package/dist/types/form/create.form-grid-layout.d.ts +3 -3
  31. package/dist/types/form/create.input.image-file.d.ts +44 -0
  32. package/dist/types/form/dino-form.d.ts +2 -0
  33. package/dist/types/form/helpers.d.ts +1 -0
  34. package/dist/types/form/types.d.ts +2 -2
  35. package/dist/types/table-grid/dino.d.ts +3 -2
  36. package/dist/types/table-grid/helpers.d.ts +2 -0
  37. package/dist/types/table-grid/types.d.ts +5 -5
  38. package/dist/types/table-grid/url-query-param.d.ts +6 -2
  39. package/dist/types/utils/helpers.d.ts +4 -0
  40. package/dist/utils/helpers.js +1 -1
  41. package/dist/utils/helpers.js.map +1 -1
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"create.filter-bar.js","sources":["../../src/filter-bar/create.filter-bar.tsx"],"sourcesContent":["import React, { ComponentType } from 'react'\r\nimport { Box, ClickAwayListener, IconButton, InputBase, styled } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport { ButtonClear, FilterNotes } from './ui.units'\r\nimport { IFilterReason, IFilterState, IFilterBarParams, IFilterBarProps, IFilterBarState, IFilterSubmitFunc } from './types'\r\nimport FilterBarBase, { IFilterChange } from './base'\r\nimport CreateFiltered from './create.filtered'\r\nimport CreateFilterPanel from './create.filter-panel'\r\n\r\nfunction CreateFilterBar<T>(params: IFilterBarParams<T>): ComponentType<IFilterBarProps<T>> {\r\n const FilterPanelInstance = CreateFilterPanel<T>(params)\r\n const FilteredInstance = CreateFiltered<T>(params)\r\n\r\n class FilterBar extends FilterBarBase<IFilterBarProps<T>, IFilterBarState, T> {\r\n defaultState: IFilterBarState = { keyword: '', panelState: { anchorEl: null } }\r\n constructor(props: IFilterBarProps<T>) {\r\n super(props)\r\n this.state = this.defaultState\r\n }\r\n\r\n filterStateStore: IFilterState<T> = { filter: {} }\r\n get filterState(): IFilterState<T> {\r\n return this.props.value ?? this.filterStateStore\r\n }\r\n\r\n setFilterState = (filterState: IFilterState<T>) => {\r\n if (!this.props.value) {\r\n this.filterStateStore = filterState\r\n }\r\n this.props.onChange && this.props.onChange(filterState)\r\n }\r\n\r\n get configs() {\r\n return {\r\n id: this.props.id ?? params.id ?? new Date().getTime().toString(),\r\n placeholder: this.props.placeholder ?? params.placeholder ?? 'Filter',\r\n notes: params.notes\r\n }\r\n }\r\n\r\n refFilterButton: HTMLButtonElement | null = null\r\n refSortButton: HTMLButtonElement | null = null\r\n render() {\r\n return (\r\n <ClickAwayListener onClickAway={this.closePanel}>\r\n <Wrapper>\r\n <IconButton ref={(ref) => (this.refFilterButton = ref)} onClick={() => this.showPanel('filterButton')}>\r\n <FilterListIcon />\r\n </IconButton>\r\n <Content>\r\n <FilteredInstance filterState={this.filterState} onRemove={this.handleRemove} />\r\n {this.renderTextField()}\r\n </Content>\r\n <ButtonClear visibled={!this.isFilterEmpty(this.filterState)} onClick={this.handleClear} />\r\n {/* <IconButton ref={(ref) => (this.refSortButton = ref)} onClick={() => this.showPanel('sortButton')}>\r\n <SwapVertIcon />\r\n </IconButton> */}\r\n {this.configs.notes && <FilterNotes {...this.configs.notes} />}\r\n <FilterPanelInstance {...this.state.panelState} keyword={this.state.keyword} onSubmit={this.handleAdd} onClose={this.closePanel} />\r\n </Wrapper>\r\n </ClickAwayListener>\r\n )\r\n }\r\n\r\n refInput: HTMLInputElement | null = null\r\n refBeforeInput: HTMLElement | null = null\r\n renderTextField = () => (\r\n <Box component='label' htmlFor={this.configs.id} sx={{ flex: 1, display: 'flex', alignItems: 'flex-end' }}>\r\n <Box ref={(ref: HTMLElement) => (this.refBeforeInput = ref)} sx={{ height: '100%' }} />\r\n <InputBase\r\n id={this.configs.id}\r\n placeholder={this.configs.placeholder}\r\n fullWidth\r\n autoComplete='off'\r\n inputRef={(ref: HTMLInputElement) => (this.refInput = ref)}\r\n onChange={(event) => this.setState({ keyword: event.target.value })}\r\n value={this.state.keyword}\r\n onFocus={() => this.showPanel('searchInput')}\r\n onKeyDown={this.handleKeyDown}\r\n />\r\n </Box>\r\n )\r\n\r\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n const keyCode: number = event.keyCode\r\n if (keyCode === 13) {\r\n if (!this.state.keyword) return\r\n const temp = this.addQuickSearch(this.filterState, params.quickSearch, this.state.keyword)\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n } else if (keyCode === 27) {\r\n this.refInput?.blur()\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleAdd: IFilterSubmitFunc<T> = (mode, data) => {\r\n let temp: IFilterChange<T> = { isChanged: false, filterState: this.filterState }\r\n if (mode === 'field' && !!data) {\r\n temp = this.patchFilterWithKey(this.filterState, data)\r\n } else if (mode === 'quickSearch') {\r\n temp = this.addQuickSearch(this.filterState, params.quickSearch, this.state.keyword)\r\n }\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleRemove: IFilterSubmitFunc<T> = (mode, data) => {\r\n let temp: IFilterChange<T> = { isChanged: false, filterState: this.filterState }\r\n if (mode === 'field' && !!data) {\r\n temp = this.deleteFilterWithKey(this.filterState, data)\r\n } else if (mode === 'quickSearch') {\r\n temp = this.removeQuickSearch(this.filterState)\r\n }\r\n temp.filterState.details = 'remove'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n handleClear = () => {\r\n this.setFilterState({ filter: {}, details: 'remove' })\r\n this.setState(this.defaultState)\r\n }\r\n\r\n showPanel = (reason: IFilterReason) => {\r\n let anchorEl = null\r\n switch (reason) {\r\n case 'searchInput':\r\n anchorEl = this.refBeforeInput\r\n break\r\n case 'filterButton':\r\n anchorEl = this.refFilterButton\r\n break\r\n // case 'sortButton':\r\n // anchorEl = this.refSortButton\r\n // break\r\n default:\r\n break\r\n }\r\n this.setState({ panelState: { anchorEl, reason } })\r\n }\r\n\r\n closePanel = () => this.setState({ panelState: { anchorEl: null } })\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nexport default CreateFilterBar\r\n\r\nconst Wrapper = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n width: '100%',\r\n borderRadius: '6px',\r\n transition: 'all linear 0.2s',\r\n padding: '2px',\r\n backgroundColor: '#fafafa',\r\n '&:hover': { backgroundColor: '#ededed' }\r\n})\r\n\r\nconst Content = styled(Box)({\r\n flex: 1,\r\n minHeight: '40px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: '6px'\r\n})\r\n"],"names":["CreateFilterBar","params","FilterPanelInstance","CreateFilterPanel","FilteredInstance","CreateFiltered","FilterBar","props","_this","_classCallCheck","_callSuper","_defineProperty","keyword","panelState","anchorEl","filter","filterState","value","filterStateStore","onChange","_jsxs","Box","component","htmlFor","configs","id","sx","flex","display","alignItems","children","_jsx","ref","refBeforeInput","height","InputBase","placeholder","fullWidth","autoComplete","inputRef","refInput","event","setState","target","state","onFocus","showPanel","onKeyDown","handleKeyDown","keyCode","_this$refInput","temp","addQuickSearch","quickSearch","details","isChanged","blur","setFilterState","defaultState","_this$refInput2","mode","data","_this$refInput3","patchFilterWithKey","_this$refInput4","deleteFilterWithKey","removeQuickSearch","forceUpdate","reason","refFilterButton","_inherits","FilterBarBase","_createClass","key","get","_this$props$value","this","_ref2","_this$props$id","_ref3","_this$props$placehold","Date","getTime","toString","notes","_this2","ClickAwayListener","onClickAway","closePanel","Wrapper","IconButton","onClick","FilterListIcon","Content","onRemove","handleRemove","renderTextField","ButtonClear","visibled","isFilterEmpty","handleClear","FilterNotes","_objectSpread","onSubmit","handleAdd","onClose","styled","gap","width","borderRadius","transition","padding","backgroundColor","minHeight","flexWrap"],"mappings":"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"}
1
+ {"version":3,"file":"create.filter-bar.js","sources":["../../src/filter-bar/create.filter-bar.tsx"],"sourcesContent":["import React, { ComponentType } from 'react'\r\nimport { Box, ClickAwayListener, IconButton, InputBase, styled } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport { ButtonClear, FilterNotes } from './ui.units'\r\nimport { IFilterReason, IFilterState, IFilterBarConfigs, IFilterBarProps, IFilterBarState, IFilterSubmitFunc } from './types'\r\nimport FilterBarBase, { IFilterChange } from './base'\r\nimport CreateFiltered from './create.filtered'\r\nimport CreateFilterPanel from './create.filter-panel'\r\n\r\nfunction CreateFilterBar<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterBarProps<T>> {\r\n const FilterPanelInstance = CreateFilterPanel<T>(params)\r\n const FilteredInstance = CreateFiltered<T>(params)\r\n\r\n class FilterBar extends FilterBarBase<IFilterBarProps<T>, IFilterBarState, T> {\r\n defaultState: IFilterBarState = { keyword: '', panelState: { anchorEl: null } }\r\n constructor(props: IFilterBarProps<T>) {\r\n super(props)\r\n this.state = this.defaultState\r\n }\r\n\r\n filterStateStore: IFilterState<T> = { filter: {} }\r\n get filterState(): IFilterState<T> {\r\n return this.props.value ?? this.filterStateStore\r\n }\r\n\r\n setFilterState = (filterState: IFilterState<T>) => {\r\n if (!this.props.value) {\r\n this.filterStateStore = filterState\r\n }\r\n this.props.onChange && this.props.onChange(filterState)\r\n }\r\n\r\n get configs() {\r\n return {\r\n id: this.props.id ?? params.id ?? new Date().getTime().toString(),\r\n placeholder: this.props.placeholder ?? params.placeholder ?? 'Filter',\r\n notes: params.notes\r\n }\r\n }\r\n\r\n refFilterButton: HTMLButtonElement | null = null\r\n refSortButton: HTMLButtonElement | null = null\r\n render() {\r\n return (\r\n <ClickAwayListener onClickAway={this.closePanel}>\r\n <Wrapper>\r\n <IconButton ref={(ref) => (this.refFilterButton = ref)} onClick={() => this.showPanel('filterButton')}>\r\n <FilterListIcon />\r\n </IconButton>\r\n <Content>\r\n <FilteredInstance filterState={this.filterState} onRemove={this.handleRemove} />\r\n {this.renderTextField()}\r\n </Content>\r\n <ButtonClear visibled={!this.isFilterEmpty(this.filterState)} onClick={this.handleClear} />\r\n {/* <IconButton ref={(ref) => (this.refSortButton = ref)} onClick={() => this.showPanel('sortButton')}>\r\n <SwapVertIcon />\r\n </IconButton> */}\r\n {this.configs.notes && <FilterNotes {...this.configs.notes} />}\r\n <FilterPanelInstance {...this.state.panelState} keyword={this.state.keyword} onSubmit={this.handleAdd} onClose={this.closePanel} />\r\n </Wrapper>\r\n </ClickAwayListener>\r\n )\r\n }\r\n\r\n refInput: HTMLInputElement | null = null\r\n refBeforeInput: HTMLElement | null = null\r\n renderTextField = () => (\r\n <Box component='label' htmlFor={this.configs.id} sx={{ flex: 1, display: 'flex', alignItems: 'flex-end' }}>\r\n <Box ref={(ref: HTMLElement) => (this.refBeforeInput = ref)} sx={{ height: '100%' }} />\r\n <InputBase\r\n id={this.configs.id}\r\n placeholder={this.configs.placeholder}\r\n fullWidth\r\n autoComplete='off'\r\n inputRef={(ref: HTMLInputElement) => (this.refInput = ref)}\r\n onChange={(event) => this.setState({ keyword: event.target.value })}\r\n value={this.state.keyword}\r\n onFocus={() => this.showPanel('searchInput')}\r\n onKeyDown={this.handleKeyDown}\r\n />\r\n </Box>\r\n )\r\n\r\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n const keyCode: number = event.keyCode\r\n if (keyCode === 13) {\r\n if (!this.state.keyword) return\r\n const temp = this.addQuickSearch(this.filterState, params.quickSearch, this.state.keyword)\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n } else if (keyCode === 27) {\r\n this.refInput?.blur()\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleAdd: IFilterSubmitFunc<T> = (mode, data) => {\r\n let temp: IFilterChange<T> = { isChanged: false, filterState: this.filterState }\r\n if (mode === 'field' && !!data) {\r\n temp = this.patchFilterWithKey(this.filterState, data)\r\n } else if (mode === 'quickSearch') {\r\n temp = this.addQuickSearch(this.filterState, params.quickSearch, this.state.keyword)\r\n }\r\n temp.filterState.details = 'add'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.setState(this.defaultState)\r\n }\r\n }\r\n\r\n handleRemove: IFilterSubmitFunc<T> = (mode, data) => {\r\n let temp: IFilterChange<T> = { isChanged: false, filterState: this.filterState }\r\n if (mode === 'field' && !!data) {\r\n temp = this.deleteFilterWithKey(this.filterState, data)\r\n } else if (mode === 'quickSearch') {\r\n temp = this.removeQuickSearch(this.filterState)\r\n }\r\n temp.filterState.details = 'remove'\r\n if (!!temp.isChanged) {\r\n this.refInput?.blur()\r\n this.setFilterState(temp.filterState)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n handleClear = () => {\r\n this.setFilterState({ filter: {}, details: 'remove' })\r\n this.setState(this.defaultState)\r\n }\r\n\r\n showPanel = (reason: IFilterReason) => {\r\n let anchorEl = null\r\n switch (reason) {\r\n case 'searchInput':\r\n anchorEl = this.refBeforeInput\r\n break\r\n case 'filterButton':\r\n anchorEl = this.refFilterButton\r\n break\r\n // case 'sortButton':\r\n // anchorEl = this.refSortButton\r\n // break\r\n default:\r\n break\r\n }\r\n this.setState({ panelState: { anchorEl, reason } })\r\n }\r\n\r\n closePanel = () => this.setState({ panelState: { anchorEl: null } })\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nexport default CreateFilterBar\r\n\r\nconst Wrapper = styled(Box)({\r\n display: 'flex',\r\n gap: '8px',\r\n width: '100%',\r\n borderRadius: '6px',\r\n transition: 'all linear 0.2s',\r\n padding: '2px',\r\n backgroundColor: '#fafafa',\r\n '&:hover': { backgroundColor: '#ededed' }\r\n})\r\n\r\nconst Content = styled(Box)({\r\n flex: 1,\r\n minHeight: '40px',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: '6px'\r\n})\r\n"],"names":["CreateFilterBar","params","FilterPanelInstance","CreateFilterPanel","FilteredInstance","CreateFiltered","FilterBar","props","_this","_classCallCheck","_callSuper","_defineProperty","keyword","panelState","anchorEl","filter","filterState","value","filterStateStore","onChange","_jsxs","Box","component","htmlFor","configs","id","sx","flex","display","alignItems","children","_jsx","ref","refBeforeInput","height","InputBase","placeholder","fullWidth","autoComplete","inputRef","refInput","event","setState","target","state","onFocus","showPanel","onKeyDown","handleKeyDown","keyCode","_this$refInput","temp","addQuickSearch","quickSearch","details","isChanged","blur","setFilterState","defaultState","_this$refInput2","mode","data","_this$refInput3","patchFilterWithKey","_this$refInput4","deleteFilterWithKey","removeQuickSearch","forceUpdate","reason","refFilterButton","_inherits","FilterBarBase","_createClass","key","get","_this$props$value","this","_ref2","_this$props$id","_ref3","_this$props$placehold","Date","getTime","toString","notes","_this2","ClickAwayListener","onClickAway","closePanel","Wrapper","IconButton","onClick","FilterListIcon","Content","onRemove","handleRemove","renderTextField","ButtonClear","visibled","isFilterEmpty","handleClear","FilterNotes","_objectSpread","onSubmit","handleAdd","onClose","styled","gap","width","borderRadius","transition","padding","backgroundColor","minHeight","flexWrap"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.filter-menu.js","sources":["../../src/filter-bar/create.filter-menu.tsx"],"sourcesContent":["import React, { ComponentType, Fragment } from 'react'\r\nimport { Box, Button, ButtonProps, Divider } from '@mui/material'\r\nimport { FormControlLabel, MenuItem, MenuList, Radio, RadioGroup, styled, TextField, Typography } from '@mui/material'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport { IFilterBarParams, IFilterModel, IFilterSubmitFunc } from './types'\r\nimport { convertFormDataToJson } from '../form'\r\n\r\nexport interface IFilterMenuProps<T> {\r\n onSubmit?: IFilterSubmitFunc<T>\r\n onCancel?: ButtonProps['onClick']\r\n}\r\n\r\nexport interface IFilterMenuState<T> {\r\n fieldSelected: keyof IFilterModel<T> | null\r\n messageError?: string\r\n}\r\n\r\nfunction CreateFilterMenu<T>(params: IFilterBarParams<T>): ComponentType<IFilterMenuProps<T>> {\r\n class FilterMenu extends FilterBarBase<IFilterMenuProps<T>, IFilterMenuState<T>, T> {\r\n constructor(props: IFilterMenuProps<T>) {\r\n super(props)\r\n this.state = { fieldSelected: null }\r\n }\r\n\r\n render() {\r\n const { fieldSelected } = this.state\r\n if (!!fieldSelected) return this.renderFrom(fieldSelected)\r\n const keys = (Object.keys(params.fields) as (keyof IFilterModel<T>)[]).filter((x) => !!x && x !== 'Search')\r\n return (\r\n <MenuList className={filterPanelClasses.list} sx={{ minWidth: '200px' }}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n if (!item) return <Fragment key={x.toString() + i} />\r\n return (\r\n <MenuItem\r\n key={x.toString() + i}\r\n className={filterPanelClasses.item}\r\n onClick={() => this.setState({ fieldSelected: x, messageError: undefined })}\r\n >\r\n {item?.label ?? x.toString()}\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuList>\r\n )\r\n }\r\n\r\n renderFrom = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const label = fieldConfig?.label ?? fieldSelected.toString()\r\n return (\r\n <form onSubmit={(e) => this.handleSubmit(fieldSelected, e)}>\r\n <WrapPanelFilterMode>\r\n <Box className='top-bar'>\r\n <Typography variant='subtitle2'>{label}</Typography>\r\n </Box>\r\n <Box className='content'>{this.renderWithMode(fieldSelected)}</Box>\r\n {fieldConfig?.type === 'select' && <Divider variant='middle' />}\r\n <Box className='actions'>\r\n <Button size='small' color='inherit' onClick={this.props.onCancel}>\r\n Cancel\r\n </Button>\r\n <Button size='small' color='primary' type='submit' sx={{ fontWeight: 700 }}>\r\n Apply\r\n </Button>\r\n </Box>\r\n </WrapPanelFilterMode>\r\n </form>\r\n )\r\n }\r\n\r\n renderWithMode = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const { messageError } = this.state\r\n switch (fieldConfig?.type) {\r\n case 'select':\r\n return (\r\n <CustomRadioGroup\r\n name={fieldSelected.toString()}\r\n className={messageError ? 'error' : ''}\r\n onChange={() => this.setState({ messageError: undefined })}\r\n >\r\n {fieldConfig.options.map((x, i) => (\r\n <FormControlLabel key={x.value.toString() + i} value={x.value} control={<Radio />} label={x.label ?? x.value} />\r\n ))}\r\n </CustomRadioGroup>\r\n )\r\n case 'string':\r\n default:\r\n return <TextField autoFocus name={fieldSelected.toString()} size='small' error={!!messageError} helperText={messageError} />\r\n }\r\n }\r\n\r\n handleSubmit = (fieldSelected: keyof IFilterModel<T>, event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n const formData = new FormData(event.currentTarget as HTMLFormElement)\r\n const obj = convertFormDataToJson<T>(formData)\r\n const value = obj[fieldSelected as keyof T]?.toString()\r\n\r\n const fieldConfig = params.fields[fieldSelected]\r\n const validate = this.validated(value ?? '', fieldSelected, fieldConfig)\r\n if (validate.error) {\r\n this.setState({ messageError: validate.message })\r\n return\r\n }\r\n\r\n let label: string | undefined = undefined\r\n if (fieldConfig?.type === 'select') {\r\n label = fieldConfig.options.find((x) => x.value === value)?.label\r\n }\r\n\r\n this.props.onSubmit && this.props.onSubmit('field', { field: fieldSelected, value, label })\r\n }\r\n }\r\n\r\n return FilterMenu\r\n}\r\n\r\nexport default CreateFilterMenu\r\n\r\nconst WrapPanelFilterMode = styled(Box)({\r\n minWidth: '200px',\r\n borderRadius: '4px',\r\n overflow: 'hidden',\r\n '.top-bar': {\r\n background: '#000',\r\n padding: '8px',\r\n '.MuiTypography-root': {\r\n color: '#fff'\r\n }\r\n },\r\n '.content': {\r\n padding: '8px'\r\n },\r\n '.actions': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '8px'\r\n }\r\n})\r\n\r\nconst CustomRadioGroup = styled(RadioGroup)({\r\n marginLeft: '-8px',\r\n marginRight: '-8px',\r\n '&.error .MuiRadio-root': {\r\n color: '#d32f2f'\r\n },\r\n '.MuiFormControlLabel-root': {\r\n margin: 0\r\n },\r\n '.MuiFormControlLabel-root:hover': {\r\n backgroundColor: 'rgba(25, 118, 210, 0.04)'\r\n }\r\n})\r\n"],"names":["CreateFilterMenu","params","FilterMenu","props","_this","_classCallCheck","_callSuper","_defineProperty","fieldSelected","_fieldConfig$label","fieldConfig","fields","label","toString","_jsx","onSubmit","e","handleSubmit","children","_jsxs","WrapPanelFilterMode","Box","className","Typography","variant","renderWithMode","type","Divider","Button","size","color","onClick","onCancel","sx","fontWeight","messageError","state","CustomRadioGroup","name","onChange","setState","undefined","options","map","x","i","_x$label","FormControlLabel","value","control","Radio","TextField","autoFocus","error","helperText","event","_obj$fieldSelected","preventDefault","stopPropagation","formData","FormData","currentTarget","convertFormDataToJson","validate","validated","message","_fieldConfig$options$","find","field","_inherits","FilterBarBase","_createClass","key","_this2","this","renderFrom","keys","Object","filter","MenuList","filterPanelClasses","list","minWidth","_item$label","item","MenuItem","Fragment","styled","borderRadius","overflow","background","padding","display","alignItems","justifyContent","RadioGroup","marginLeft","marginRight","margin","backgroundColor"],"mappings":"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"}
1
+ {"version":3,"file":"create.filter-menu.js","sources":["../../src/filter-bar/create.filter-menu.tsx"],"sourcesContent":["import React, { ComponentType, Fragment } from 'react'\r\nimport { Box, Button, ButtonProps, Divider } from '@mui/material'\r\nimport { FormControlLabel, MenuItem, MenuList, Radio, RadioGroup, styled, TextField, Typography } from '@mui/material'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport { IFilterBarConfigs, IFilterModel, IFilterSubmitFunc } from './types'\r\nimport { convertFormDataToJson } from '../form'\r\n\r\nexport interface IFilterMenuProps<T> {\r\n onSubmit?: IFilterSubmitFunc<T>\r\n onCancel?: ButtonProps['onClick']\r\n}\r\n\r\nexport interface IFilterMenuState<T> {\r\n fieldSelected: keyof IFilterModel<T> | null\r\n messageError?: string\r\n}\r\n\r\nfunction CreateFilterMenu<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterMenuProps<T>> {\r\n class FilterMenu extends FilterBarBase<IFilterMenuProps<T>, IFilterMenuState<T>, T> {\r\n constructor(props: IFilterMenuProps<T>) {\r\n super(props)\r\n this.state = { fieldSelected: null }\r\n }\r\n\r\n render() {\r\n const { fieldSelected } = this.state\r\n if (!!fieldSelected) return this.renderFrom(fieldSelected)\r\n const keys = (Object.keys(params.fields) as (keyof IFilterModel<T>)[]).filter((x) => !!x && x !== 'Search')\r\n return (\r\n <MenuList className={filterPanelClasses.list} sx={{ minWidth: '200px' }}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n if (!item) return <Fragment key={x.toString() + i} />\r\n return (\r\n <MenuItem\r\n key={x.toString() + i}\r\n className={filterPanelClasses.item}\r\n onClick={() => this.setState({ fieldSelected: x, messageError: undefined })}\r\n >\r\n {item?.label ?? x.toString()}\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuList>\r\n )\r\n }\r\n\r\n renderFrom = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const label = fieldConfig?.label ?? fieldSelected.toString()\r\n return (\r\n <form onSubmit={(e) => this.handleSubmit(fieldSelected, e)}>\r\n <WrapPanelFilterMode>\r\n <Box className='top-bar'>\r\n <Typography variant='subtitle2'>{label}</Typography>\r\n </Box>\r\n <Box className='content'>{this.renderWithMode(fieldSelected)}</Box>\r\n {fieldConfig?.type === 'select' && <Divider variant='middle' />}\r\n <Box className='actions'>\r\n <Button size='small' color='inherit' onClick={this.props.onCancel}>\r\n Cancel\r\n </Button>\r\n <Button size='small' color='primary' type='submit' sx={{ fontWeight: 700 }}>\r\n Apply\r\n </Button>\r\n </Box>\r\n </WrapPanelFilterMode>\r\n </form>\r\n )\r\n }\r\n\r\n renderWithMode = (fieldSelected: keyof IFilterModel<T>) => {\r\n const fieldConfig = params.fields[fieldSelected]\r\n const { messageError } = this.state\r\n switch (fieldConfig?.type) {\r\n case 'select':\r\n return (\r\n <CustomRadioGroup\r\n name={fieldSelected.toString()}\r\n className={messageError ? 'error' : ''}\r\n onChange={() => this.setState({ messageError: undefined })}\r\n >\r\n {fieldConfig.options.map((x, i) => (\r\n <FormControlLabel key={x.value.toString() + i} value={x.value} control={<Radio />} label={x.label ?? x.value} />\r\n ))}\r\n </CustomRadioGroup>\r\n )\r\n case 'string':\r\n default:\r\n return <TextField autoFocus name={fieldSelected.toString()} size='small' error={!!messageError} helperText={messageError} />\r\n }\r\n }\r\n\r\n handleSubmit = (fieldSelected: keyof IFilterModel<T>, event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n const formData = new FormData(event.currentTarget as HTMLFormElement)\r\n const obj = convertFormDataToJson<T>(formData)\r\n const value = obj[fieldSelected as keyof T]?.toString()\r\n\r\n const fieldConfig = params.fields[fieldSelected]\r\n const validate = this.validated(value ?? '', fieldSelected, fieldConfig)\r\n if (validate.error) {\r\n this.setState({ messageError: validate.message })\r\n return\r\n }\r\n\r\n let label: string | undefined = undefined\r\n if (fieldConfig?.type === 'select') {\r\n label = fieldConfig.options.find((x) => x.value === value)?.label\r\n }\r\n\r\n this.props.onSubmit && this.props.onSubmit('field', { field: fieldSelected, value, label })\r\n }\r\n }\r\n\r\n return FilterMenu\r\n}\r\n\r\nexport default CreateFilterMenu\r\n\r\nconst WrapPanelFilterMode = styled(Box)({\r\n minWidth: '200px',\r\n borderRadius: '4px',\r\n overflow: 'hidden',\r\n '.top-bar': {\r\n background: '#000',\r\n padding: '8px',\r\n '.MuiTypography-root': {\r\n color: '#fff'\r\n }\r\n },\r\n '.content': {\r\n padding: '8px'\r\n },\r\n '.actions': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '8px'\r\n }\r\n})\r\n\r\nconst CustomRadioGroup = styled(RadioGroup)({\r\n marginLeft: '-8px',\r\n marginRight: '-8px',\r\n '&.error .MuiRadio-root': {\r\n color: '#d32f2f'\r\n },\r\n '.MuiFormControlLabel-root': {\r\n margin: 0\r\n },\r\n '.MuiFormControlLabel-root:hover': {\r\n backgroundColor: 'rgba(25, 118, 210, 0.04)'\r\n }\r\n})\r\n"],"names":["CreateFilterMenu","params","FilterMenu","props","_this","_classCallCheck","_callSuper","_defineProperty","fieldSelected","_fieldConfig$label","fieldConfig","fields","label","toString","_jsx","onSubmit","e","handleSubmit","children","_jsxs","WrapPanelFilterMode","Box","className","Typography","variant","renderWithMode","type","Divider","Button","size","color","onClick","onCancel","sx","fontWeight","messageError","state","CustomRadioGroup","name","onChange","setState","undefined","options","map","x","i","_x$label","FormControlLabel","value","control","Radio","TextField","autoFocus","error","helperText","event","_obj$fieldSelected","preventDefault","stopPropagation","formData","FormData","currentTarget","convertFormDataToJson","validate","validated","message","_fieldConfig$options$","find","field","_inherits","FilterBarBase","_createClass","key","_this2","this","renderFrom","keys","Object","filter","MenuList","filterPanelClasses","list","minWidth","_item$label","item","MenuItem","Fragment","styled","borderRadius","overflow","background","padding","display","alignItems","justifyContent","RadioGroup","marginLeft","marginRight","margin","backgroundColor"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.filter-panel.js","sources":["../../src/filter-bar/create.filter-panel.tsx"],"sourcesContent":["import React, { ComponentType, PropsWithChildren } from 'react'\r\nimport { Popper, Fade, Box, styled, MenuList, MenuItem, Typography } from '@mui/material'\r\nimport { FilterNotes } from './ui.units'\r\nimport { IFilterModel, IFilterReason, IFilterSubmitFunc, IFilterBarParams } from './types'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport CreateFilterMenu from './create.filter-menu'\r\n\r\nexport interface IFilterPanelState {\r\n anchorEl: HTMLElement | null\r\n reason?: IFilterReason\r\n}\r\n\r\ninterface IFilterPanelProps<T> extends IFilterPanelState, PropsWithChildren {\r\n keyword?: string\r\n onSubmit?: IFilterSubmitFunc<T>\r\n onClose?: () => void\r\n}\r\n\r\nfunction CreateFilterPanel<T>(params: IFilterBarParams<T>): ComponentType<IFilterPanelProps<T>> {\r\n const FilterMenuInstance = CreateFilterMenu<T>(params)\r\n // const SortMenuInstance = CreateFilterSort<T>(params)\r\n\r\n class FilterPanel extends FilterBarBase<IFilterPanelProps<T>, {}, T> {\r\n render() {\r\n const isOpen = Boolean(this.props.anchorEl) && (!!this.props.keyword || this.props.reason !== 'searchInput')\r\n return (\r\n <Popper anchorEl={this.props.anchorEl} open={isOpen} placement='bottom-start' transition sx={{ zIndex: 1350 }}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={0}>\r\n <Wrapper className={filterPanelClasses.root}>{this.renderContent()}</Wrapper>\r\n </Fade>\r\n )}\r\n </Popper>\r\n )\r\n }\r\n\r\n renderContent = () => {\r\n switch (this.props.reason) {\r\n case 'searchInput':\r\n return this.renderSearchInput()\r\n case 'filterButton':\r\n return (\r\n <FilterMenuInstance\r\n onCancel={this.props.onClose}\r\n onSubmit={(f, v) => {\r\n this.props.onSubmit && this.props.onSubmit(f, v)\r\n this.props.onClose && this.props.onClose()\r\n }}\r\n />\r\n )\r\n // case 'sortButton':\r\n // return <SortMenuInstance />\r\n default:\r\n break\r\n }\r\n }\r\n\r\n renderSearchInput = () => {\r\n if (this.props.reason !== 'searchInput') return <></>\r\n const fields = this.getFieldsMatches(params.fields, this.props.keyword ?? '')\r\n const keys = Object.keys(fields).filter((x) => !!x) as (keyof IFilterModel<T>)[]\r\n return (\r\n <MenuList className={filterPanelClasses.list}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n const label = item?.label ?? x.toString()\r\n return (\r\n <MenuItem key={x.toString() + i} className={filterPanelClasses.item} onClick={() => this.handleClick(x)}>\r\n <Typography variant='body2' component='span' sx={{ flex: 1 }}>\r\n {label} \"{this.props.keyword}\"\r\n </Typography>\r\n {item?.notes && <FilterNotes title={`The ${label} includes`} disabledSize {...item.notes} />}\r\n </MenuItem>\r\n )\r\n })}\r\n {this.renderQuickSearch()}\r\n </MenuList>\r\n )\r\n }\r\n\r\n renderQuickSearch = () => {\r\n if (!params.quickSearch) return <></>\r\n const quickSearch = params.quickSearch\r\n const label = quickSearch.label ?? 'Quick search'\r\n return (\r\n <MenuItem className={filterPanelClasses.item} onClick={this.handleQuickSearchClick}>\r\n <Typography variant='body2' component='span' sx={{ flex: 1 }}>\r\n {label} \"{this.props.keyword}\"\r\n </Typography>\r\n {quickSearch.notes && <FilterNotes title={`The ${label.toLocaleLowerCase()} includes`} disabledSize {...quickSearch.notes} />}\r\n </MenuItem>\r\n )\r\n }\r\n\r\n handleClick = (field: keyof T) => {\r\n if (!this.props.onSubmit) return\r\n this.props.onSubmit('field', { field, value: this.props.keyword })\r\n }\r\n\r\n handleQuickSearchClick = () => {\r\n if (!this.props.onSubmit) return\r\n this.props.onSubmit('quickSearch')\r\n }\r\n }\r\n return FilterPanel\r\n}\r\n\r\nexport default CreateFilterPanel\r\n\r\nconst Wrapper = styled(Box)({\r\n borderRadius: '4px',\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: '#fff'\r\n})\r\n"],"names":["CreateFilterPanel","params","FilterMenuInstance","CreateFilterMenu","FilterPanel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","props","reason","renderSearchInput","_jsx","onCancel","onClose","onSubmit","f","v","_this$props$keyword","fields","getFieldsMatches","keyword","keys","Object","filter","x","_jsxs","MenuList","className","filterPanelClasses","list","map","i","_item$label","item","label","toString","MenuItem","onClick","handleClick","children","Typography","variant","component","sx","flex","notes","FilterNotes","_objectSpread","title","disabledSize","renderQuickSearch","_quickSearch$label","quickSearch","handleQuickSearchClick","toLocaleLowerCase","field","value","_inherits","FilterBarBase","_createClass","key","_this2","isOpen","Boolean","anchorEl","Popper","open","placement","transition","zIndex","TransitionProps","_ref","Fade","timeout","Wrapper","root","renderContent","styled","Box","borderRadius","boxShadow","backgroundColor"],"mappings":"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"}
1
+ {"version":3,"file":"create.filter-panel.js","sources":["../../src/filter-bar/create.filter-panel.tsx"],"sourcesContent":["import React, { ComponentType, PropsWithChildren } from 'react'\r\nimport { Popper, Fade, Box, styled, MenuList, MenuItem, Typography } from '@mui/material'\r\nimport { FilterNotes } from './ui.units'\r\nimport { IFilterModel, IFilterReason, IFilterSubmitFunc, IFilterBarConfigs } from './types'\r\nimport FilterBarBase, { filterPanelClasses } from './base'\r\nimport CreateFilterMenu from './create.filter-menu'\r\n\r\nexport interface IFilterPanelState {\r\n anchorEl: HTMLElement | null\r\n reason?: IFilterReason\r\n}\r\n\r\ninterface IFilterPanelProps<T> extends IFilterPanelState, PropsWithChildren {\r\n keyword?: string\r\n onSubmit?: IFilterSubmitFunc<T>\r\n onClose?: () => void\r\n}\r\n\r\nfunction CreateFilterPanel<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterPanelProps<T>> {\r\n const FilterMenuInstance = CreateFilterMenu<T>(params)\r\n // const SortMenuInstance = CreateFilterSort<T>(params)\r\n\r\n class FilterPanel extends FilterBarBase<IFilterPanelProps<T>, {}, T> {\r\n render() {\r\n const isOpen = Boolean(this.props.anchorEl) && (!!this.props.keyword || this.props.reason !== 'searchInput')\r\n return (\r\n <Popper anchorEl={this.props.anchorEl} open={isOpen} placement='bottom-start' transition sx={{ zIndex: 1350 }}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={0}>\r\n <Wrapper className={filterPanelClasses.root}>{this.renderContent()}</Wrapper>\r\n </Fade>\r\n )}\r\n </Popper>\r\n )\r\n }\r\n\r\n renderContent = () => {\r\n switch (this.props.reason) {\r\n case 'searchInput':\r\n return this.renderSearchInput()\r\n case 'filterButton':\r\n return (\r\n <FilterMenuInstance\r\n onCancel={this.props.onClose}\r\n onSubmit={(f, v) => {\r\n this.props.onSubmit && this.props.onSubmit(f, v)\r\n this.props.onClose && this.props.onClose()\r\n }}\r\n />\r\n )\r\n // case 'sortButton':\r\n // return <SortMenuInstance />\r\n default:\r\n break\r\n }\r\n }\r\n\r\n renderSearchInput = () => {\r\n if (this.props.reason !== 'searchInput') return <></>\r\n const fields = this.getFieldsMatches(params.fields, this.props.keyword ?? '')\r\n const keys = Object.keys(fields).filter((x) => !!x) as (keyof IFilterModel<T>)[]\r\n return (\r\n <MenuList className={filterPanelClasses.list}>\r\n {keys.map((x, i) => {\r\n const item = params.fields[x]\r\n const label = item?.label ?? x.toString()\r\n return (\r\n <MenuItem key={x.toString() + i} className={filterPanelClasses.item} onClick={() => this.handleClick(x)}>\r\n <Typography variant='body2' component='span' sx={{ flex: 1 }}>\r\n {label} \"{this.props.keyword}\"\r\n </Typography>\r\n {item?.notes && <FilterNotes title={`The ${label} includes`} disabledSize {...item.notes} />}\r\n </MenuItem>\r\n )\r\n })}\r\n {this.renderQuickSearch()}\r\n </MenuList>\r\n )\r\n }\r\n\r\n renderQuickSearch = () => {\r\n if (!params.quickSearch) return <></>\r\n const quickSearch = params.quickSearch\r\n const label = quickSearch.label ?? 'Quick search'\r\n return (\r\n <MenuItem className={filterPanelClasses.item} onClick={this.handleQuickSearchClick}>\r\n <Typography variant='body2' component='span' sx={{ flex: 1 }}>\r\n {label} \"{this.props.keyword}\"\r\n </Typography>\r\n {quickSearch.notes && <FilterNotes title={`The ${label.toLocaleLowerCase()} includes`} disabledSize {...quickSearch.notes} />}\r\n </MenuItem>\r\n )\r\n }\r\n\r\n handleClick = (field: keyof T) => {\r\n if (!this.props.onSubmit) return\r\n this.props.onSubmit('field', { field, value: this.props.keyword })\r\n }\r\n\r\n handleQuickSearchClick = () => {\r\n if (!this.props.onSubmit) return\r\n this.props.onSubmit('quickSearch')\r\n }\r\n }\r\n return FilterPanel\r\n}\r\n\r\nexport default CreateFilterPanel\r\n\r\nconst Wrapper = styled(Box)({\r\n borderRadius: '4px',\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: '#fff'\r\n})\r\n"],"names":["CreateFilterPanel","params","FilterMenuInstance","CreateFilterMenu","FilterPanel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","props","reason","renderSearchInput","_jsx","onCancel","onClose","onSubmit","f","v","_this$props$keyword","fields","getFieldsMatches","keyword","keys","Object","filter","x","_jsxs","MenuList","className","filterPanelClasses","list","map","i","_item$label","item","label","toString","MenuItem","onClick","handleClick","children","Typography","variant","component","sx","flex","notes","FilterNotes","_objectSpread","title","disabledSize","renderQuickSearch","_quickSearch$label","quickSearch","handleQuickSearchClick","toLocaleLowerCase","field","value","_inherits","FilterBarBase","_createClass","key","_this2","isOpen","Boolean","anchorEl","Popper","open","placement","transition","zIndex","TransitionProps","_ref","Fade","timeout","Wrapper","root","renderContent","styled","Box","borderRadius","boxShadow","backgroundColor"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.filtered.js","sources":["../../src/filter-bar/create.filtered.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Chip, Typography } from '@mui/material'\r\nimport { IFilterBarParams, IFilterState, IFilterSubmitFunc } from './types'\r\n\r\ninterface IProps<T> {\r\n filterState: IFilterState<T>\r\n onRemove?: IFilterSubmitFunc<T>\r\n}\r\n\r\nfunction CreateFiltered<T>(params: IFilterBarParams<T>) {\r\n class Filtered extends Component<IProps<T>> {\r\n render() {\r\n const keys = Object.keys(this.props.filterState.filter ?? {}) as (keyof T)[]\r\n return (\r\n <>\r\n {this.renderQuickSearch()}\r\n {keys.map((key, i) => {\r\n const item = this.props.filterState.filter?.[key]\r\n const config = params.fields[key]\r\n return (\r\n <Chip\r\n key={`${key?.toString()}${i}`}\r\n onDelete={() => this.handleRemove(key)}\r\n size='small'\r\n label={\r\n <Typography component='span' variant='caption'>\r\n {config?.label ?? key?.toString() ?? 'Search'} {item?.map((x) => `\"${x.label ?? x.value}\"`).join(' ')}\r\n </Typography>\r\n }\r\n />\r\n )\r\n })}\r\n </>\r\n )\r\n }\r\n\r\n renderQuickSearch = () => {\r\n if (!this.props.filterState.quickSearch) return <></>\r\n const temp = this.props.filterState.quickSearch.values ?? []\r\n const items = Array.isArray(temp) ? temp : [temp]\r\n const label = params.quickSearch?.label ?? 'Quick search'\r\n return (\r\n <Chip\r\n onDelete={this.handleQuickSearchRemove}\r\n size='small'\r\n label={\r\n <Typography component='span' variant='caption'>\r\n {label} {items?.map((x) => `\"${x}\"`).join(' ')}\r\n </Typography>\r\n }\r\n />\r\n )\r\n }\r\n\r\n handleRemove = (field: keyof T) => {\r\n if (!this.props.onRemove) return\r\n this.props.onRemove('field', { field })\r\n }\r\n\r\n handleQuickSearchRemove = () => {\r\n if (!this.props.onRemove) return\r\n this.props.onRemove('quickSearch')\r\n }\r\n }\r\n return Filtered\r\n}\r\n\r\nexport default CreateFiltered\r\n"],"names":["CreateFiltered","params","Filtered","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_this$props$filterSta","_params$quickSearch$l","_params$quickSearch","props","filterState","quickSearch","_jsx","temp","values","items","isArray","label","Chip","onDelete","handleQuickSearchRemove","size","_jsxs","Typography","component","variant","children","map","x","join","field","onRemove","_inherits","Component","_createClass","key","value","_this$props$filterSta2","_this2","keys","Object","filter","_Fragment","renderQuickSearch","i","_this2$props$filterSt","_ref","_config$label","item","config","fields","handleRemove","toString","_x$label"],"mappings":"mSASA,SAASA,EAAkBC,GAA2B,IAC9CC,aAAS,SAAAA,IAAA,IAAAC,EAAAC,OAAAF,GAAA,IAAA,IAAAG,EAAAC,UAAAC,OAAAC,EAAAC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAoDZ,OApDYP,EAAAQ,EAAAC,KAAAV,EAAAW,GAAAA,OAAAL,IAAAM,EAAAX,EAAA,qBA0BO,WAAK,IAAAY,EAAAC,EAAAC,EACvB,IAAKd,EAAKe,MAAMC,YAAYC,YAAa,OAAOC,QAChD,IAAMC,EAAgD,QAA5CP,EAAGZ,EAAKe,MAAMC,YAAYC,YAAYG,cAAMR,IAAAA,EAAAA,EAAI,GACpDS,EAAQf,MAAMgB,QAAQH,GAAQA,EAAO,CAACA,GACtCI,EAAiC,QAA5BV,EAAqB,QAArBC,EAAGhB,EAAOmB,mBAAPH,IAAkBA,OAAlBA,EAAAA,EAAoBS,aAAKV,IAAAA,EAAAA,EAAI,eAC3C,OACEK,EAACM,EAAI,CACHC,SAAUzB,EAAK0B,wBACfC,KAAK,QACLJ,MACEK,EAACC,GAAWC,UAAU,OAAOC,QAAQ,UAClCC,SAAA,CAAAT,MAAQF,eAAAA,EAAOY,KAAI,SAACC,GAAC,MAAAxB,IAAAA,OAASwB,EAAC,IAAA,IAAKC,KAAK,aAKnDxB,EAAAX,EAEc,gBAAA,SAACoC,GACTpC,EAAKe,MAAMsB,UAChBrC,EAAKe,MAAMsB,SAAS,QAAS,CAAED,MAAAA,OAChCzB,EAAAX,EAAA,2BAEyB,WACnBA,EAAKe,MAAMsB,UAChBrC,EAAKe,MAAMsB,SAAS,kBACrBrC,CAAA,CAAA,OAAAsC,EAAAvC,EApDoBwC,GAoDpBC,EAAAzC,EAAA,CAAA,CAAA0C,IAAA,SAAAC,MAnDD,WAAM,IAAAC,EAAAC,EAAAnC,KACEoC,EAAOC,OAAOD,KAAkCF,QAA9BA,EAAClC,KAAKM,MAAMC,YAAY+B,kBAAMJ,EAAAA,EAAI,CAAA,GAC1D,OACEf,EACGoB,EAAA,CAAAhB,SAAA,CAAAvB,KAAKwC,oBACLJ,EAAKZ,KAAI,SAACQ,EAAKS,GAAK,IAAAC,EAAAC,EAAAC,EACbC,EAAoCH,QAAhCA,EAAGP,EAAK7B,MAAMC,YAAY+B,kBAAMI,SAA7BA,EAAgCV,GACvCc,EAASzD,EAAO0D,OAAOf,GAC7B,OACEvB,EAACM,EAEC,CAAAC,SAAU,WAAF,OAAQmB,EAAKa,aAAahB,EAAI,EACtCd,KAAK,QACLJ,MACEK,EAACC,EAAW,CAAAC,UAAU,OAAOC,QAAQ,UAClCC,SAAA,CAAgC,QAAhCoB,UAAAC,EAAAE,aAAM,EAANA,EAAQhC,aAAK,IAAA8B,EAAAA,EAAIZ,aAAG,EAAHA,EAAKiB,kBAAUN,IAAAA,EAAAA,EAAI,SAAW,IAAAE,aAAI,EAAJA,EAAMrB,KAAI,SAACC,GAAC,IAAAyB,EAAA,MAAA,IAAAjD,OAAgBiD,QAAhBA,EAASzB,EAAEX,aAAKoC,IAAAA,EAAAA,EAAIzB,EAAEQ,MAAK,IAAA,IAAKP,KAAK,YALhGzB,OAAG+B,aAAAA,EAAAA,EAAKiB,YAAUhD,OAAGwC,GAUhC,MAGN,IAAC,IA8BH,OAAOnD,CACT"}
1
+ {"version":3,"file":"create.filtered.js","sources":["../../src/filter-bar/create.filtered.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Chip, Typography } from '@mui/material'\r\nimport { IFilterBarConfigs, IFilterState, IFilterSubmitFunc } from './types'\r\n\r\ninterface IProps<T> {\r\n filterState: IFilterState<T>\r\n onRemove?: IFilterSubmitFunc<T>\r\n}\r\n\r\nfunction CreateFiltered<T>(params: IFilterBarConfigs<T>) {\r\n class Filtered extends Component<IProps<T>> {\r\n render() {\r\n const keys = Object.keys(this.props.filterState.filter ?? {}) as (keyof T)[]\r\n return (\r\n <>\r\n {this.renderQuickSearch()}\r\n {keys.map((key, i) => {\r\n const item = this.props.filterState.filter?.[key]\r\n const config = params.fields[key]\r\n return (\r\n <Chip\r\n key={`${key?.toString()}${i}`}\r\n onDelete={() => this.handleRemove(key)}\r\n size='small'\r\n label={\r\n <Typography component='span' variant='caption'>\r\n {config?.label ?? key?.toString() ?? 'Search'} {item?.map((x) => `\"${x.label ?? x.value}\"`).join(' ')}\r\n </Typography>\r\n }\r\n />\r\n )\r\n })}\r\n </>\r\n )\r\n }\r\n\r\n renderQuickSearch = () => {\r\n if (!this.props.filterState.quickSearch) return <></>\r\n const temp = this.props.filterState.quickSearch.values ?? []\r\n const items = Array.isArray(temp) ? temp : [temp]\r\n const label = params.quickSearch?.label ?? 'Quick search'\r\n return (\r\n <Chip\r\n onDelete={this.handleQuickSearchRemove}\r\n size='small'\r\n label={\r\n <Typography component='span' variant='caption'>\r\n {label} {items?.map((x) => `\"${x}\"`).join(' ')}\r\n </Typography>\r\n }\r\n />\r\n )\r\n }\r\n\r\n handleRemove = (field: keyof T) => {\r\n if (!this.props.onRemove) return\r\n this.props.onRemove('field', { field })\r\n }\r\n\r\n handleQuickSearchRemove = () => {\r\n if (!this.props.onRemove) return\r\n this.props.onRemove('quickSearch')\r\n }\r\n }\r\n return Filtered\r\n}\r\n\r\nexport default CreateFiltered\r\n"],"names":["CreateFiltered","params","Filtered","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_this$props$filterSta","_params$quickSearch$l","_params$quickSearch","props","filterState","quickSearch","_jsx","temp","values","items","isArray","label","Chip","onDelete","handleQuickSearchRemove","size","_jsxs","Typography","component","variant","children","map","x","join","field","onRemove","_inherits","Component","_createClass","key","value","_this$props$filterSta2","_this2","keys","Object","filter","_Fragment","renderQuickSearch","i","_this2$props$filterSt","_ref","_config$label","item","config","fields","handleRemove","toString","_x$label"],"mappings":"mSASA,SAASA,EAAkBC,GAA4B,IAC/CC,aAAS,SAAAA,IAAA,IAAAC,EAAAC,OAAAF,GAAA,IAAA,IAAAG,EAAAC,UAAAC,OAAAC,EAAAC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAoDZ,OApDYP,EAAAQ,EAAAC,KAAAV,EAAAW,GAAAA,OAAAL,IAAAM,EAAAX,EAAA,qBA0BO,WAAK,IAAAY,EAAAC,EAAAC,EACvB,IAAKd,EAAKe,MAAMC,YAAYC,YAAa,OAAOC,QAChD,IAAMC,EAAgD,QAA5CP,EAAGZ,EAAKe,MAAMC,YAAYC,YAAYG,cAAMR,IAAAA,EAAAA,EAAI,GACpDS,EAAQf,MAAMgB,QAAQH,GAAQA,EAAO,CAACA,GACtCI,EAAiC,QAA5BV,EAAqB,QAArBC,EAAGhB,EAAOmB,mBAAPH,IAAkBA,OAAlBA,EAAAA,EAAoBS,aAAKV,IAAAA,EAAAA,EAAI,eAC3C,OACEK,EAACM,EAAI,CACHC,SAAUzB,EAAK0B,wBACfC,KAAK,QACLJ,MACEK,EAACC,GAAWC,UAAU,OAAOC,QAAQ,UAClCC,SAAA,CAAAT,MAAQF,eAAAA,EAAOY,KAAI,SAACC,GAAC,MAAAxB,IAAAA,OAASwB,EAAC,IAAA,IAAKC,KAAK,aAKnDxB,EAAAX,EAEc,gBAAA,SAACoC,GACTpC,EAAKe,MAAMsB,UAChBrC,EAAKe,MAAMsB,SAAS,QAAS,CAAED,MAAAA,OAChCzB,EAAAX,EAAA,2BAEyB,WACnBA,EAAKe,MAAMsB,UAChBrC,EAAKe,MAAMsB,SAAS,kBACrBrC,CAAA,CAAA,OAAAsC,EAAAvC,EApDoBwC,GAoDpBC,EAAAzC,EAAA,CAAA,CAAA0C,IAAA,SAAAC,MAnDD,WAAM,IAAAC,EAAAC,EAAAnC,KACEoC,EAAOC,OAAOD,KAAkCF,QAA9BA,EAAClC,KAAKM,MAAMC,YAAY+B,kBAAMJ,EAAAA,EAAI,CAAA,GAC1D,OACEf,EACGoB,EAAA,CAAAhB,SAAA,CAAAvB,KAAKwC,oBACLJ,EAAKZ,KAAI,SAACQ,EAAKS,GAAK,IAAAC,EAAAC,EAAAC,EACbC,EAAoCH,QAAhCA,EAAGP,EAAK7B,MAAMC,YAAY+B,kBAAMI,SAA7BA,EAAgCV,GACvCc,EAASzD,EAAO0D,OAAOf,GAC7B,OACEvB,EAACM,EAEC,CAAAC,SAAU,WAAF,OAAQmB,EAAKa,aAAahB,EAAI,EACtCd,KAAK,QACLJ,MACEK,EAACC,EAAW,CAAAC,UAAU,OAAOC,QAAQ,UAClCC,SAAA,CAAgC,QAAhCoB,UAAAC,EAAAE,aAAM,EAANA,EAAQhC,aAAK,IAAA8B,EAAAA,EAAIZ,aAAG,EAAHA,EAAKiB,kBAAUN,IAAAA,EAAAA,EAAI,SAAW,IAAAE,aAAI,EAAJA,EAAMrB,KAAI,SAACC,GAAC,IAAAyB,EAAA,MAAA,IAAAjD,OAAgBiD,QAAhBA,EAASzB,EAAEX,aAAKoC,IAAAA,EAAAA,EAAIzB,EAAEQ,MAAK,IAAA,IAAKP,KAAK,YALhGzB,OAAG+B,aAAAA,EAAAA,EAAKiB,YAAUhD,OAAGwC,GAUhC,MAGN,IAAC,IA8BH,OAAOnD,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../src/filter-bar/types.ts"],"sourcesContent":["import { IFilterPanelState } from './create.filter-panel'\r\nimport { IFilterNotesProps } from './ui.units'\r\n\r\nexport type IFilterReason = 'searchInput' | 'filterButton'\r\n\r\n// type Dictionary<T, V, E = any> = {\r\n// [key in keyof T | keyof E]?: V\r\n// }\r\n\r\ntype SingleOrArray<T> = T | T[]\r\n\r\n//#region Search Match\r\nexport enum ESearchMatch {\r\n AlwaysVisible = 'AlwaysVisible',\r\n MatchOnly = 'MatchOnly',\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Guid = 'Guid'\r\n}\r\n\r\ninterface ISearchMatchBase {\r\n rule: ESearchMatch\r\n}\r\n\r\ninterface ISearchMatchMatchOnly extends ISearchMatchBase {\r\n rule: ESearchMatch.MatchOnly\r\n match: (value: string) => boolean\r\n}\r\n\r\ninterface ISearchMatchQuickly extends ISearchMatchBase {\r\n rule: ESearchMatch.AlwaysVisible | ESearchMatch.LinkYoutube | ESearchMatch.Link | ESearchMatch.Guid\r\n}\r\n\r\ntype IFieldSearchMatch = ISearchMatchMatchOnly | ISearchMatchQuickly\r\n//#endregion\r\n\r\n//#region Validate\r\nexport enum EFieldValidate {\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Custom = 'Custom'\r\n}\r\n\r\ninterface IFieldValidateBase {\r\n rule: EFieldValidate\r\n}\r\ninterface IFieldValidateCustom extends IFieldValidateBase {\r\n rule: EFieldValidate.Custom\r\n custom: (value: string) => boolean\r\n}\r\n\r\ninterface IFieldValidateQuickly extends IFieldValidateBase {\r\n rule: EFieldValidate.Link | EFieldValidate.LinkYoutube\r\n}\r\n\r\ntype IFieldValidate = IFieldValidateQuickly | IFieldValidateCustom\r\n//#endregion\r\n\r\n//#region Filter Field\r\nexport interface IQuickSearchDef<T> {\r\n fields: SingleOrArray<keyof T>\r\n label?: string\r\n notes?: IFilterNotesProps\r\n}\r\n\r\ninterface IFilterFieldDef {\r\n label?: string\r\n /** @default string */\r\n type?: 'string' | 'select'\r\n searchMatches?: SingleOrArray<IFieldSearchMatch>\r\n notes?: IFilterNotesProps\r\n // TODO thay vì required thì validate này sẽ chỉ hiện với field nào tồn tại validate\r\n /** @default Required */\r\n validate?: SingleOrArray<IFieldValidate>\r\n}\r\n\r\nexport interface IFilterFieldString extends IFilterFieldDef {\r\n type?: 'string'\r\n}\r\n\r\nexport interface IFilterFieldSelect extends IFilterFieldDef {\r\n type: 'select'\r\n options: { value: string; label?: string }[]\r\n}\r\n\r\nexport type IFilterField = IFilterFieldString | IFilterFieldSelect\r\n\r\n// export type IFilterFields<T> = Dictionary<T, IFilterField, IFilterValid>\r\nexport type IFilterFields<T> = { [key in keyof T]?: IFilterField }\r\n\r\n// ========= ========= ========= State ========= ========= =========\r\nexport interface IFilterItemModel {\r\n value?: string | number | boolean\r\n label?: string\r\n}\r\nexport interface IFilterItemChangeModel<T> extends IFilterItemModel {\r\n field: keyof T\r\n}\r\n\r\n// export type IFilterModel<T> = Dictionary<T, IFilterItemModel[], { Search?: string }>\r\nexport type IFilterModel<T> = { [key in keyof T]?: IFilterItemModel[] }\r\n\r\nexport interface IQuickSearchModel<T> {\r\n fields: SingleOrArray<keyof T>\r\n values?: SingleOrArray<string>\r\n}\r\n\r\nexport interface IFilterState<T> {\r\n filter?: IFilterModel<T>\r\n quickSearch?: IQuickSearchModel<T>\r\n details?: 'add' | 'remove'\r\n}\r\n//#endregion\r\n\r\n//#region For Component\r\nexport interface IFilterBarParams<T> {\r\n fields: IFilterFields<T>\r\n quickSearch?: IQuickSearchDef<T>\r\n id?: string\r\n placeholder?: string\r\n notes?: IFilterNotesProps\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n id?: string\r\n placeholder?: string\r\n value?: IFilterState<T>\r\n onChange?: (value: IFilterState<T>) => void\r\n}\r\n\r\nexport interface IFilterBarState {\r\n panelState: IFilterPanelState\r\n keyword: string\r\n}\r\n\r\nexport type IFilterSubmitFunc<T> = (mode: 'field' | 'quickSearch', data?: IFilterItemChangeModel<T>) => void\r\n//#endregion\r\n"],"names":["ESearchMatch","EFieldValidate"],"mappings":"IAYYA,EAyBAC,GAzBZ,SAAYD,GACVA,EAAA,cAAA,gBACAA,EAAA,UAAA,YACAA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,KAAA,MACD,CAND,CAAYA,IAAAA,EAMX,CAAA,IAmBD,SAAYC,GACVA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,OAAA,QACD,CAJD,CAAYA,IAAAA,EAIX,CAAA"}
1
+ {"version":3,"file":"types.js","sources":["../../src/filter-bar/types.ts"],"sourcesContent":["import { IFilterPanelState } from './create.filter-panel'\r\nimport { IFilterNotesProps } from './ui.units'\r\n\r\nexport type IFilterReason = 'searchInput' | 'filterButton'\r\n\r\n// type Dictionary<T, V, E = any> = {\r\n// [key in keyof T | keyof E]?: V\r\n// }\r\n\r\ntype SingleOrArray<T> = T | T[]\r\n\r\n//#region Search Match\r\nexport enum ESearchMatch {\r\n AlwaysVisible = 'AlwaysVisible',\r\n MatchOnly = 'MatchOnly',\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Guid = 'Guid'\r\n}\r\n\r\ninterface ISearchMatchBase {\r\n rule: ESearchMatch\r\n}\r\n\r\ninterface ISearchMatchMatchOnly extends ISearchMatchBase {\r\n rule: ESearchMatch.MatchOnly\r\n match: (value: string) => boolean\r\n}\r\n\r\ninterface ISearchMatchQuickly extends ISearchMatchBase {\r\n rule: ESearchMatch.AlwaysVisible | ESearchMatch.LinkYoutube | ESearchMatch.Link | ESearchMatch.Guid\r\n}\r\n\r\ntype IFieldSearchMatch = ISearchMatchMatchOnly | ISearchMatchQuickly\r\n//#endregion\r\n\r\n//#region Validate\r\nexport enum EFieldValidate {\r\n LinkYoutube = 'LinkYoutube',\r\n Link = 'Link',\r\n Custom = 'Custom'\r\n}\r\n\r\ninterface IFieldValidateBase {\r\n rule: EFieldValidate\r\n}\r\ninterface IFieldValidateCustom extends IFieldValidateBase {\r\n rule: EFieldValidate.Custom\r\n custom: (value: string) => boolean\r\n}\r\n\r\ninterface IFieldValidateQuickly extends IFieldValidateBase {\r\n rule: EFieldValidate.Link | EFieldValidate.LinkYoutube\r\n}\r\n\r\ntype IFieldValidate = IFieldValidateQuickly | IFieldValidateCustom\r\n//#endregion\r\n\r\n//#region Filter Field\r\nexport interface IQuickSearchDef<T> {\r\n fields: SingleOrArray<keyof T>\r\n label?: string\r\n notes?: IFilterNotesProps\r\n}\r\n\r\ninterface IFilterFieldDef {\r\n label?: string\r\n /** @default string */\r\n type?: 'string' | 'select'\r\n searchMatches?: SingleOrArray<IFieldSearchMatch>\r\n notes?: IFilterNotesProps\r\n // TODO thay vì required thì validate này sẽ chỉ hiện với field nào tồn tại validate\r\n /** @default Required */\r\n validate?: SingleOrArray<IFieldValidate>\r\n}\r\n\r\nexport interface IFilterFieldString extends IFilterFieldDef {\r\n type?: 'string'\r\n}\r\n\r\nexport interface IFilterFieldSelect extends IFilterFieldDef {\r\n type: 'select'\r\n options: { value: string; label?: string }[]\r\n}\r\n\r\nexport type IFilterField = IFilterFieldString | IFilterFieldSelect\r\n\r\n// export type IFilterFields<T> = Dictionary<T, IFilterField, IFilterValid>\r\nexport type IFilterFields<T> = { [key in keyof T]?: IFilterField }\r\n\r\n// ========= ========= ========= State ========= ========= =========\r\nexport interface IFilterItemModel {\r\n value?: string | number | boolean\r\n label?: string\r\n}\r\nexport interface IFilterItemChangeModel<T> extends IFilterItemModel {\r\n field: keyof T\r\n}\r\n\r\n// export type IFilterModel<T> = Dictionary<T, IFilterItemModel[], { Search?: string }>\r\nexport type IFilterModel<T> = { [key in keyof T]?: IFilterItemModel[] }\r\n\r\nexport interface IQuickSearchModel<T> {\r\n fields: SingleOrArray<keyof T>\r\n values?: SingleOrArray<string>\r\n}\r\n\r\nexport interface IFilterState<T> {\r\n filter?: IFilterModel<T>\r\n quickSearch?: IQuickSearchModel<T>\r\n details?: 'add' | 'remove'\r\n}\r\n//#endregion\r\n\r\n//#region For Component\r\nexport interface IFilterBarConfigs<T> {\r\n fields: IFilterFields<T>\r\n quickSearch?: IQuickSearchDef<T>\r\n id?: string\r\n placeholder?: string\r\n notes?: IFilterNotesProps\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n id?: string\r\n placeholder?: string\r\n value?: IFilterState<T>\r\n onChange?: (value: IFilterState<T>) => void\r\n}\r\n\r\nexport interface IFilterBarState {\r\n panelState: IFilterPanelState\r\n keyword: string\r\n}\r\n\r\nexport type IFilterSubmitFunc<T> = (mode: 'field' | 'quickSearch', data?: IFilterItemChangeModel<T>) => void\r\n//#endregion\r\n"],"names":["ESearchMatch","EFieldValidate"],"mappings":"IAYYA,EAyBAC,GAzBZ,SAAYD,GACVA,EAAA,cAAA,gBACAA,EAAA,UAAA,YACAA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,KAAA,MACD,CAND,CAAYA,IAAAA,EAMX,CAAA,IAmBD,SAAYC,GACVA,EAAA,YAAA,cACAA,EAAA,KAAA,OACAA,EAAA,OAAA,QACD,CAJD,CAAYA,IAAAA,EAIX,CAAA"}
@@ -1,2 +1,2 @@
1
- import{inherits as r,createClass as e,classCallCheck as t,callSuper as a,defineProperty as s,asyncToGenerator as o,regenerator as n,objectSpread2 as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l}from"react/jsx-runtime";import u,{Component as m}from"react";import{Box as c}from"@mui/material";import{validateMerge as f,convertFormDataToJson as d,singleValidate as p,getErrorFromResponse as v}from"./helpers.js";import S,{SingleRuleValidate as g}from"./validator.js";var E=function(E){var h=u.createContext({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},clearErrorAll:function(){}}),b=function(){function u(r){var e;return t(this,u),e=a(this,u,[r]),s(e,"refForm",null),s(e,"mapContext",(function(){var r=e,t=r.setError,a=r.setModelState,s=r.clearErrorAll,o=r.onBlur,n=e.state;return{modelState:n.modelState,messageErrors:n.messageErrors,setError:t,onBlur:o,clearErrorAll:s,setModelState:a}})),s(e,"setError",(function(r,t){var a=s({},r,[{rule:g.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,a)})})),s(e,"setModelState",(function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})})),s(e,"getValidate",(function(){var r=new S({});return f(r,null==E?void 0:E.validate,e.props.validate)})),s(e,"clearErrorAll",(function(){e.setState({messageErrors:{}})})),s(e,"onSubmit",function(){var r=o(n().m((function r(t){var a,s,o;return n().w((function(r){for(;;)switch(r.n){case 0:if(t.preventDefault(),a=new FormData(t.currentTarget),s=d(a),e.setState({modelState:s}),!(o=e.validate.run(s))){r.n=1;break}if(e.setState({messageErrors:o}),!(Object.keys(o).length>0)){r.n=1;break}return r.a(2);case 1:return r.n=2,e.props.onSubmit(s,t).catch((function(r){var t=v(r,s);e.setState({messageErrors:i(i({},e.state.messageErrors),t||{})})}));case 2:return r.a(2)}}),r)})));return function(e){return r.apply(this,arguments)}}()),s(e,"onBlur",(function(r){if(e.refForm){var t=e.state.messageErrors,a=new FormData(e.refForm),s=d(a);e.setState({modelState:s});var o=p(r,s,t,e.validate)||{};e.setState({messageErrors:o})}})),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(u,m),e(u,[{key:"render",value:function(){var r=this;return l(c,{component:"form",sx:this.props.sx,ref:function(e){return r.refForm=e},onSubmit:this.onSubmit,children:l(h.Provider,{value:this.mapContext(),children:this.props.children})})}}])}();return{Form:b,Validator:null==E?void 0:E.validate,Context:h,mapContext:function(r){return l(h.Consumer,{children:r})}}};export{E as default};
1
+ import{inherits as r,createClass as e,classCallCheck as t,callSuper as a,defineProperty as o,objectSpread2 as s,asyncToGenerator as n,regenerator as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l}from"react/jsx-runtime";import u,{Component as m}from"react";import{Box as c}from"@mui/material";import{validateMerge as f,convertFormDataToJson as d,trimAllStrings as v,singleValidate as p,getErrorFromResponse as E}from"./helpers.js";import S,{SingleRuleValidate as g}from"./validator.js";var h=function(h){var b=u.createContext({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),C=function(){function u(r){var e;return t(this,u),e=a(this,u,[r]),o(e,"refForm",null),o(e,"mapContext",(function(){var r=e,t=r.setError,a=r.removeError,o=r.setModelState,s=r.clearErrorAll,n=r.onBlur,i=e.state;return{modelState:i.modelState,messageErrors:i.messageErrors,setError:t,onBlur:n,clearErrorAll:s,setModelState:o,removeError:a}})),o(e,"setModelState",(function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})})),o(e,"getValidate",(function(){var r=new S({});return f(r,null==h?void 0:h.validate,e.props.validate)})),o(e,"setError",(function(r,t){var a=o({},r,[{rule:g.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,a)})})),o(e,"removeError",(function(r){var t=s({},e.state.messageErrors);t[r]&&delete t[r],e.setState({messageErrors:t})})),o(e,"clearErrorAll",(function(){e.setState({messageErrors:{}})})),o(e,"onSubmit",function(){var r=n(i().m((function r(t){var a,o,n,l;return i().w((function(r){for(;;)switch(r.n){case 0:if(t.preventDefault(),a=new FormData(t.currentTarget),o=d(a),n=v(o),e.setState({modelState:n}),!(l=e.validate.run(n))){r.n=1;break}if(e.setState({messageErrors:l}),!(Object.keys(l).length>0)){r.n=1;break}return r.a(2);case 1:return r.n=2,e.props.onSubmit(n,t).catch((function(r){var t=E(r,n);e.setState({messageErrors:s(s({},e.state.messageErrors),t||{})})}));case 2:return r.a(2)}}),r)})));return function(e){return r.apply(this,arguments)}}()),o(e,"onBlur",(function(r){if(e.refForm){var t=e.state.messageErrors,a=new FormData(e.refForm),o=d(a),s=v(o);e.setState({modelState:s});var n=p(r,s,t,e.validate)||{};e.setState({messageErrors:n})}})),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(u,m),e(u,[{key:"render",value:function(){var r=this;return l(c,{component:"form",sx:this.props.sx,ref:function(e){return r.refForm=e},onSubmit:this.onSubmit,children:l(b.Provider,{value:this.mapContext(),children:this.props.children})})}}])}();return{Form:C,Validator:null==h?void 0:h.validate,Context:b,mapContext:function(r){return l(b.Consumer,{children:r})}}};export{h as default};
2
2
  //# sourceMappingURL=create.form-base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.form-base.js","sources":["../../src/form/create.form-base.tsx"],"sourcesContent":["import React, { Component, ComponentType, PropsWithChildren, ReactNode } from 'react'\r\nimport { Box, SxProps, Theme } from '@mui/material'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorFromResponse, singleValidate, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseParams<T> {\r\n validate?: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren {\r\n sx?: SxProps<Theme>\r\n validate?: FormValidator<Partial<T>>\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst CreateFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = React.createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n return (\r\n <Box component='form' sx={this.props.sx} ref={(ref: HTMLFormElement) => (this.refForm = ref)} onSubmit={this.onSubmit}>\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState }\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n clearErrorAll = () => {\r\n this.setState({ messageErrors: {} })\r\n }\r\n\r\n private validate: FormValidator<Partial<T>>\r\n onSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\r\n e.preventDefault()\r\n const formData = new FormData(e.currentTarget as HTMLFormElement)\r\n const model = convertFormDataToJson<T>(formData)\r\n this.setState({ modelState: model })\r\n const messageErrors = this.validate.run(model) as IPartialError<T>\r\n if (messageErrors) {\r\n this.setState({ messageErrors: messageErrors })\r\n if (Object.keys(messageErrors).length > 0) return\r\n }\r\n await this.props.onSubmit(model, e).catch((error) => {\r\n const messageError = getErrorFromResponse(error, model)\r\n this.setState({ messageErrors: { ...this.state.messageErrors, ...(messageError || {}) } })\r\n })\r\n }\r\n\r\n onBlur = (keyName: keyof T) => {\r\n if (!this.refForm) return\r\n const { messageErrors } = this.state\r\n const formData = new FormData(this.refForm)\r\n const model = convertFormDataToJson(formData)\r\n this.setState({ modelState: model })\r\n const error = singleValidate<T, Partial<T>>(keyName, model, messageErrors, this.validate) || {}\r\n this.setState({ messageErrors: error as IPartialError<T> })\r\n }\r\n }\r\n\r\n return {\r\n Form: FormBase,\r\n Validator: params?.validate,\r\n Context: FormBaseContext,\r\n mapContext: (params: (context: IFormBaseContext<T>) => ReactNode) => <FormBaseContext.Consumer>{params}</FormBaseContext.Consumer>\r\n }\r\n}\r\nexport default CreateFormBase\r\n"],"names":["CreateFormBase","params","FormBaseContext","React","createContext","setModelState","messageErrors","onBlur","setError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","keyName","message","error","rule","SingleRuleValidate","Custom","setState","Object","assign","obj","defaultValidate","FormValidator","validateMerge","validate","_ref","_asyncToGenerator","_regenerator","m","_callee","e","formData","model","w","_context","n","preventDefault","FormData","currentTarget","convertFormDataToJson","run","keys","length","a","onSubmit","messageError","getErrorFromResponse","_objectSpread","_x","apply","this","arguments","refForm","singleValidate","getValidate","_inherits","Component","_createClass","key","value","_this3","_jsx","Box","component","sx","ref","children","Provider","mapContext","Form","Validator","Context","Consumer"],"mappings":"oeA4BA,IAAMA,EAAiB,SAAaC,GAClC,IAAMC,EAAkBC,EAAMC,cAAmC,CAC/DC,cAAe,WAAQ,EACvBC,cAAe,CAAE,EACjBC,OAAQ,WAAQ,EAChBC,SAAU,WAAQ,EAClBC,cAAe,WAAK,IAEhBC,aAEJ,SAAAA,EAAYC,GAAwB,IAAAC,EAGA,OAHAC,OAAAH,GAClCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EAAA,UAFoB,MAAIG,EAAAH,EAAA,cAejB,WACnB,IAAAI,EAAAJ,EAAQJ,EAAQQ,EAARR,SAAUH,EAAaW,EAAbX,cAAeI,EAAaO,EAAbP,cAAeF,EAAMS,EAANT,OAChDU,EAAsCL,EAAKM,MAC3C,MAAO,CAAEC,WADSF,EAAVE,WACab,cADYW,EAAbX,cACgBE,SAAAA,EAAUD,OAAAA,EAAQE,cAAAA,EAAeJ,cAAAA,MACtEU,EAAAH,EAAA,YAEU,SAACQ,EAAkBC,GAC5B,IAAMC,EAAKP,EAAMK,CAAAA,EAAAA,EAAU,CAAC,CAAEG,KAAMC,EAAmBC,OAAQJ,QAAAA,KAC/DT,EAAKc,SAAS,CAAEpB,cAAeqB,OAAOC,OAAO,CAAA,EAAIhB,EAAKM,MAAMZ,cAAegB,QAC5EP,EAAAH,EAEsC,iBAAA,SAACM,GACtC,IAAMW,EAAMF,OAAOC,OAAO,CAAA,EAAIhB,EAAKM,MAAMC,WAAYD,GACrDN,EAAKc,SAAS,CAAEP,WAAYU,OAC7Bd,EAAAH,EAAA,eAEa,WACZ,IAAMkB,EAAkB,IAAIC,EAA0B,IACtD,OAAOC,EAAcF,EAAiB7B,aAAM,EAANA,EAAQgC,SAAUrB,EAAKD,MAAMsB,aACpElB,EAAAH,EAAA,iBAEe,WACdA,EAAKc,SAAS,CAAEpB,cAAe,CAAA,OAChCS,EAAAH,EAAA,WAAA,WAAA,IAAAsB,EAAAC,EAAAC,IAAAC,GAGmD,SAAAC,EAAOC,GAAC,IAAAC,EAAAC,EAAAnC,EAAA,OAAA8B,IAAAM,GAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAKQ,GAJlEL,EAAEM,iBACIL,EAAW,IAAIM,SAASP,EAAEQ,eAC1BN,EAAQO,EAAyBR,GACvC5B,EAAKc,SAAS,CAAEP,WAAYsB,MACtBnC,EAAgBM,EAAKqB,SAASgB,IAAIR,IACvB,CAAAE,EAAAC,EAAA,EAAA,KAAA,CACgC,GAA/ChC,EAAKc,SAAS,CAAEpB,cAAeA,MAC3BqB,OAAOuB,KAAK5C,GAAe6C,OAAS,GAAC,CAAAR,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAS,EAAA,GAAA,KAAA,EAAA,OAAAT,EAAAC,EAAA,EAErChC,EAAKD,MAAM0C,SAASZ,EAAOF,GAAE,OAAO,SAACjB,GACzC,IAAMgC,EAAeC,EAAqBjC,EAAOmB,GACjD7B,EAAKc,SAAS,CAAEpB,cAAakD,EAAAA,KAAO5C,EAAKM,MAAMZ,eAAmBgD,GAAgB,CAAE,IACtF,IAAE,KAAA,EAAA,OAAAX,EAAAS,EAAA,GAAA,GAAAd,OACH,OAAA,SAAAmB,GAAA,OAAAvB,EAAAwB,MAAAC,KAAAC,UAAA,CAAA,CAjBA,IAiBA7C,EAAAH,EAEQ,UAAA,SAACQ,GACR,GAAKR,EAAKiD,QAAV,CACA,IAAQvD,EAAkBM,EAAKM,MAAvBZ,cACFkC,EAAW,IAAIM,SAASlC,EAAKiD,SAC7BpB,EAAQO,EAAsBR,GACpC5B,EAAKc,SAAS,CAAEP,WAAYsB,IAC5B,IAAMnB,EAAQwC,EAA8B1C,EAASqB,EAAOnC,EAAeM,EAAKqB,WAAa,CAAE,EAC/FrB,EAAKc,SAAS,CAAEpB,cAAegB,GANZ,KAvDnBV,EAAKqB,SAAWrB,EAAKmD,cACrBnD,EAAKM,MAAQ,CAAEZ,cAAe,CAAA,GAAIM,CACpC,CAAC,OAAAoD,EAAAtD,EANoBuD,GAMpBC,EAAAxD,EAAA,CAAA,CAAAyD,IAAA,SAAAC,MAED,WAAM,IAAAC,EAAAV,KACJ,OACEW,EAACC,EAAI,CAAAC,UAAU,OAAOC,GAAId,KAAKhD,MAAM8D,GAAIC,IAAK,SAACA,GAAoB,OAAML,EAAKR,QAAUa,CAAI,EAAErB,SAAUM,KAAKN,SAAQsB,SACnHL,EAACpE,EAAgB0E,SAAS,CAAAR,MAAOT,KAAKkB,aAAYF,SAAGhB,KAAKhD,MAAMgE,YAGtE,IAAC,IAuDH,MAAO,CACLG,KAAMpE,EACNqE,UAAW9E,aAAAA,EAAAA,EAAQgC,SACnB+C,QAAS9E,EACT2E,WAAY,SAAC5E,GAAmD,OAAKqE,EAACpE,EAAgB+E,SAAU,CAAAN,SAAA1E,GAAkC,EAEtI"}
1
+ {"version":3,"file":"create.form-base.js","sources":["../../src/form/create.form-base.tsx"],"sourcesContent":["import React, { Component, ComponentType, PropsWithChildren, ReactNode } from 'react'\r\nimport { Box, SxProps, Theme } from '@mui/material'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorFromResponse, singleValidate, trimAllStrings, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseParams<T> {\r\n validate?: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren {\r\n sx?: SxProps<Theme>\r\n validate?: FormValidator<Partial<T>>\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst CreateFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = React.createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n removeError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n return (\r\n <Box component='form' sx={this.props.sx} ref={(ref: HTMLFormElement) => (this.refForm = ref)} onSubmit={this.onSubmit}>\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, removeError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState, removeError }\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n removeError = (keyName: keyof T) => {\r\n const newErrors = { ...this.state.messageErrors }\r\n if (newErrors[keyName]) delete newErrors[keyName]\r\n this.setState({ messageErrors: newErrors })\r\n }\r\n\r\n clearErrorAll = () => {\r\n this.setState({ messageErrors: {} })\r\n }\r\n\r\n private validate: FormValidator<Partial<T>>\r\n onSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\r\n e.preventDefault()\r\n const formData = new FormData(e.currentTarget as HTMLFormElement)\r\n const raw = convertFormDataToJson<T>(formData)\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const messageErrors = this.validate.run(trimmed) as IPartialError<T>\r\n if (messageErrors) {\r\n this.setState({ messageErrors: messageErrors })\r\n if (Object.keys(messageErrors).length > 0) return\r\n }\r\n await this.props.onSubmit(trimmed, e).catch((error) => {\r\n const messageError = getErrorFromResponse(error, trimmed)\r\n this.setState({ messageErrors: { ...this.state.messageErrors, ...(messageError || {}) } })\r\n })\r\n }\r\n\r\n onBlur = (keyName: keyof T) => {\r\n if (!this.refForm) return\r\n const { messageErrors } = this.state\r\n const formData = new FormData(this.refForm)\r\n const raw = convertFormDataToJson(formData)\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const error = singleValidate<T, Partial<T>>(keyName, trimmed, messageErrors, this.validate) || {}\r\n this.setState({ messageErrors: error as IPartialError<T> })\r\n }\r\n }\r\n\r\n return {\r\n Form: FormBase,\r\n Validator: params?.validate,\r\n Context: FormBaseContext,\r\n mapContext: (params: (context: IFormBaseContext<T>) => ReactNode) => <FormBaseContext.Consumer>{params}</FormBaseContext.Consumer>\r\n }\r\n}\r\nexport default CreateFormBase\r\n"],"names":["CreateFormBase","params","FormBaseContext","React","createContext","setModelState","messageErrors","onBlur","setError","removeError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","obj","Object","assign","setState","defaultValidate","FormValidator","validateMerge","validate","keyName","message","error","rule","SingleRuleValidate","Custom","newErrors","_objectSpread","_ref","_asyncToGenerator","_regenerator","m","_callee","e","formData","raw","trimmed","w","_context","n","preventDefault","FormData","currentTarget","convertFormDataToJson","trimAllStrings","run","keys","length","a","onSubmit","messageError","getErrorFromResponse","_x","apply","this","arguments","refForm","singleValidate","getValidate","_inherits","Component","_createClass","key","value","_this3","_jsx","Box","component","sx","ref","children","Provider","mapContext","Form","Validator","Context","Consumer"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{inherits as o,createClass as t,objectSpread2 as r,classCallCheck as n,callSuper as e,defineProperty as i,asyncToGenerator as l,regenerator as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as s,jsx as u}from"react/jsx-runtime";import{Fragment as p,Component as d}from"react";import{Grid as c}from"@mui/material";import{cleanObject as v}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react-router-dom";import"../utils/query-param.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import{mapGlobalModalContext as m}from"../api-context/global-modal.js";import{ContentWrap as f,CreateFormBottomBar as g}from"./create.form-grid-layout.units.js";import b from"./create.input.js";import h from"./create.form-base.js";var y=function(y){var S=h(),C=g(),j=b({maxLength:250}),x=function(){function g(o){var t;return n(this,g),t=e(this,g,[o]),i(t,"renderFormFieldElement",(function(o){var n,e=t.props.data,l=null!==(n=o.inputElement)&&void 0!==n?n:j;return S.mapContext((function(n){var a,s,p={formData:n.modelState,data:e,onBlur:n.onBlur,messageErrors:n.messageErrors,name:o.key,label:o.label,placeholder:o.placeholder,disabled:!(null===(a=t.configMerged.inputDisabled)||void 0===a||!a[o.key])||void 0,defaultValue:null!==(s=null==e?void 0:e[o.key])&&void 0!==s?s:null==o?void 0:o.defaultValue,onObservedChange:function(o,t){return n.setModelState(i({},o,t))}};return u(l,r({},v(p)))}))})),i(t,"loading",(function(){return t.setState({loadding:!0})})),i(t,"unloading",(function(){return t.setState({loadding:!1})})),i(t,"onSubmit",function(){var o=l(a().m((function o(r,n){var e,i,l,s,u,p,d,c,v;return a().w((function(o){for(;;)switch(o.n){case 0:return s=t.props.slots,u=null!==(e=null!==(i=null===(l=t.props.slots)||void 0===l?void 0:l.submitMapping)&&void 0!==i?i:y.submitMapping)&&void 0!==e?e:t.submitMapping,p=u(r,t.props.data),o.p=1,t.loading(),null===(d=t.abortController)||void 0===d||d.abort(),t.abortController=new AbortController,o.n=2,t.props.onSubmit(p,null===(c=t.abortController)||void 0===c?void 0:c.signal);case 2:null!=s&&s.closeState&&!1===s.closeState.Success||(n&&n(),t.props.onClose&&t.props.onClose()),o.n=4;break;case 3:o.p=3,v=o.v,null!=s&&s.closeState&&!0===s.closeState.Fail&&(n&&n(),t.props.onClose&&t.props.onClose()),t.props.onError&&t.props.onError(v);case 4:return o.p=4,t.unloading(),o.f(4);case 5:return o.a(2)}}),o,null,[[1,3,4,5]])})));return function(t,r){return o.apply(this,arguments)}}()),i(t,"submitMapping",(function(o){return o})),i(t,"getSxProps",(function(){var o=t.state.loadding;return r(r({},t.props.sx),{},{opacity:o?.7:1,pointerEvents:o?"none":"auto"})})),t.state={loadding:!1},t}return o(g,d),t(g,[{key:"configMerged",get:function(){var o,t,r,n;return{inputVisibility:null!==(o=null===(t=this.props.slots)||void 0===t?void 0:t.inputVisibility)&&void 0!==o?o:y.inputVisibility,inputDisabled:null!==(r=null===(n=this.props.slots)||void 0===n?void 0:n.inputDisabled)&&void 0!==r?r:y.inputDisabled}}},{key:"render",value:function(){var o,t,n,e=this,i=this.props.slots,l=null!==(o=null!==(t=null==y?void 0:y.action)&&void 0!==t?t:null===(n=this.props.slots)||void 0===n?void 0:n.action)&&void 0!==o?o:C;return m((function(o){var t,n=o.close;return s(S.Form,{validate:y.validate,onSubmit:function(o){return e.onSubmit(o,n)},sx:e.getSxProps(),children:[s(f,r(r({},null===(t=e.props)||void 0===t||null===(t=t.slots)||void 0===t?void 0:t.contentProps),{},{children:[(null==i?void 0:i.contentBefore)&&(null==i?void 0:i.contentBefore),null==y?void 0:y.contentBefore,u(c,{container:!0,spacing:2,children:y.configs.map((function(o,t){var n,i=!(null===(n=e.configMerged.inputVisibility)||void 0===n||!n[o.key])||void 0;return u(p,i?{}:{children:u(c,r(r({item:!0,xs:12},o.reponsives),{},{children:e.renderFormFieldElement(o)}))},o.key.toString()+t)}))}),null==y?void 0:y.contentAfter,(null==i?void 0:i.contentAfter)&&(null==i?void 0:i.contentAfter)]})),S.mapContext((function(o){var t;return u(l,{data:e.props.data,onBlur:o.onBlur,messageErrors:o.messageErrors,before:null===(t=e.props.slots)||void 0===t?void 0:t.actionBefore})}))]})}))}},{key:"componentWillUnmount",value:function(){var o;null===(o=this.abortController)||void 0===o||o.abort()}}])}();return x};export{y as default};
1
+ import{inherits as o,createClass as r,objectSpread2 as t,classCallCheck as n,callSuper as e,defineProperty as i,asyncToGenerator as l,regenerator as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as s,jsx as u}from"react/jsx-runtime";import{Fragment as p,Component as d}from"react";import{Grid as c}from"@mui/material";import{cleanObject as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react-router-dom";import"../utils/query-param.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import{mapGlobalModalContext as v}from"../api-context/global-modal.js";import{ContentWrap as f,CreateFormBottomBar as g}from"./create.form-grid-layout.units.js";import b from"./create.input.js";import h from"./create.form-base.js";var y=function(y){var S=h(),C=g(),x=b({maxLength:250}),j=function(){function g(o){var r;return n(this,g),r=e(this,g,[o]),i(r,"renderFormFieldElement",(function(o){var n,e=r.props.data,i=null!==(n=o.inputElement)&&void 0!==n?n:x;return S.mapContext((function(n){var l,a,s={data:e,onBlur:n.onBlur,messageErrors:n.messageErrors,name:o.key,label:o.label,placeholder:o.placeholder,disabled:!(null===(l=r.configMerged.inputDisabled)||void 0===l||!l[o.key])||void 0,defaultValue:null!==(a=null==e?void 0:e[o.key])&&void 0!==a?a:null==o?void 0:o.defaultValue,formContext:n};return u(i,t({},m(s)))}))})),i(r,"loading",(function(){return r.setState({loadding:!0})})),i(r,"unloading",(function(){return r.setState({loadding:!1})})),i(r,"onSubmit",function(){var o=l(a().m((function o(t,n){var e,i,l,s,u,p,d,c,m;return a().w((function(o){for(;;)switch(o.n){case 0:return s=r.props.slots,u=null!==(e=null!==(i=null===(l=r.props.slots)||void 0===l?void 0:l.submitMapping)&&void 0!==i?i:y.submitMapping)&&void 0!==e?e:r.submitMapping,p=u(t,r.props.data),o.p=1,r.loading(),null===(d=r.abortController)||void 0===d||d.abort(),r.abortController=new AbortController,o.n=2,r.props.onSubmit(p,null===(c=r.abortController)||void 0===c?void 0:c.signal);case 2:null!=s&&s.closeState&&!1===s.closeState.Success||(n&&n(),r.props.onClose&&r.props.onClose()),o.n=4;break;case 3:o.p=3,m=o.v,null!=s&&s.closeState&&!0===s.closeState.Fail&&(n&&n(),r.props.onClose&&r.props.onClose()),r.props.onError&&r.props.onError(m);case 4:return o.p=4,r.unloading(),o.f(4);case 5:return o.a(2)}}),o,null,[[1,3,4,5]])})));return function(r,t){return o.apply(this,arguments)}}()),i(r,"submitMapping",(function(o){return o})),i(r,"getSxProps",(function(){var o=r.state.loadding;return t(t({},r.props.sx),{},{opacity:o?.7:1,pointerEvents:o?"none":"auto"})})),r.state={loadding:!1},r}return o(g,d),r(g,[{key:"configMerged",get:function(){var o,r,t,n;return{inputVisibility:null!==(o=null===(r=this.props.slots)||void 0===r?void 0:r.inputVisibility)&&void 0!==o?o:y.inputVisibility,inputDisabled:null!==(t=null===(n=this.props.slots)||void 0===n?void 0:n.inputDisabled)&&void 0!==t?t:y.inputDisabled}}},{key:"render",value:function(){var o,r,n,e=this,i=this.props.slots,l=null!==(o=null!==(r=null==y?void 0:y.action)&&void 0!==r?r:null===(n=this.props.slots)||void 0===n?void 0:n.action)&&void 0!==o?o:C;return v((function(o){var r,n=o.close;return s(S.Form,{validate:y.validate,onSubmit:function(o){return e.onSubmit(o,n)},sx:e.getSxProps(),children:[s(f,t(t({},null===(r=e.props)||void 0===r||null===(r=r.slots)||void 0===r?void 0:r.contentProps),{},{children:[(null==i?void 0:i.contentBefore)&&(null==i?void 0:i.contentBefore),null==y?void 0:y.contentBefore,u(c,{container:!0,spacing:2,children:y.configs.map((function(o,r){var n,i=!(null===(n=e.configMerged.inputVisibility)||void 0===n||!n[o.key])||void 0;return u(p,i?{}:{children:u(c,t(t({item:!0,xs:12},o.sizes),{},{children:e.renderFormFieldElement(o)}))},o.key.toString()+r)}))}),null==y?void 0:y.contentAfter,(null==i?void 0:i.contentAfter)&&(null==i?void 0:i.contentAfter)]})),S.mapContext((function(o){var r;return u(l,{data:e.props.data,onBlur:o.onBlur,messageErrors:o.messageErrors,before:null===(r=e.props.slots)||void 0===r?void 0:r.actionBefore})}))]})}))}},{key:"componentWillUnmount",value:function(){var o;null===(o=this.abortController)||void 0===o||o.abort()}}])}();return j};export{y as default};
2
2
  //# sourceMappingURL=create.form-grid-layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.form-grid-layout.js","sources":["../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport { cleanObject } from '../utils'\r\nimport { IFormBase, IFormInputBase } from './types'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { ContentWrap, CreateFormBottomBar } from './create.form-grid-layout.units'\r\nimport FormValidator from './validator'\r\nimport CreateInput from './create.input'\r\nimport CreateFormBase from './create.form-base'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n reponsives?: RegularBreakpoints\r\n defaultValue?: any\r\n inputElement?: React.ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type SubmitMappingEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutSlots<T> {\r\n action?: React.ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n inputVisibility?: Partial<Record<keyof T, boolean>>\r\n // inputVisibilityGetter?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n inputDisabled?: Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n contentProps?: BoxProps\r\n submitMapping?: SubmitMappingEvent<T>\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = CreateFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = CreateInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged() {\r\n return {\r\n inputVisibility: this.props.slots?.inputVisibility ?? params.inputVisibility,\r\n inputDisabled: this.props.slots?.inputDisabled ?? params.inputDisabled\r\n }\r\n }\r\n\r\n render() {\r\n const { slots } = this.props\r\n const BottomBar = params?.action ?? this.props.slots?.action ?? BottomBarInstance\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormBaseInstance.Form validate={params.validate} onSubmit={(v) => this.onSubmit(v, close)} sx={this.getSxProps()}>\r\n <ContentWrap {...this.props?.slots?.contentProps}>\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const visibility: boolean | undefined = this.configMerged.inputVisibility?.[config.key] ? true : undefined\r\n if (visibility) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.reponsives}>\r\n {this.renderFormFieldElement(config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n </ContentWrap>\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={this.props.data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={this.props.slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n return FormBaseInstance.mapContext((context) => {\r\n const obj: IFormInputBase<T, any> = {\r\n formData: context.modelState,\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: this.configMerged.inputDisabled?.[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n onObservedChange: (name, value) => context.setModelState({ [name]: value } as Pick<T, keyof T>)\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n })\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.submitMapping ?? params.submitMapping ?? this.submitMapping\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n submitMapping: SubmitMappingEvent<T> = (value) => value\r\n\r\n getSxProps = (): SxProps<Theme> => {\r\n const isLoading = this.state.loadding\r\n return { ...this.props.sx, opacity: isLoading ? 0.7 : 1, pointerEvents: isLoading ? 'none' : 'auto' }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","CreateFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","CreateInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","config","_config$inputElement","data","ElementComponent","inputElement","mapContext","context","_this$configMerged$in","_data$config$key","obj","formData","modelState","onBlur","messageErrors","name","key","label","placeholder","disabled","configMerged","inputDisabled","undefined","defaultValue","onObservedChange","value","setModelState","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","close","_ref2","_this$props$slots$sub","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","n","submitMapping","p","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","isLoading","state","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_this$props$slots$inp","_this$props$slots2","_this$props$slots$inp2","_this$props$slots3","inputVisibility","_ref3","_params$action","_this$props$slots4","_this2","BottomBar","action","mapGlobalModalContext","_ref4","_this2$props","_jsxs","Form","validate","getSxProps","children","ContentWrap","contentProps","contentBefore","Grid","container","spacing","configs","map","index","_this2$configMerged$i","visibility","Fragment","item","xs","reponsives","renderFormFieldElement","toString","contentAfter","_this2$props$slots","before","actionBefore","_this$abortController3"],"mappings":"+wBAoDA,IAAMA,EAAuB,SAAaC,GACxC,IAAMC,EAAmBC,IACnBC,EAAoBC,IACpBC,EAAoBC,EAAe,CAAEC,UAAW,MAEhDC,aAEJ,SAAAA,EAAYC,GAA8B,IAAAC,EAER,OAFQC,OAAAH,GACxCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EA0CW,0BAAA,SAACI,GAAoC,IAAAC,EACpDC,EAASN,EAAKD,MAAdO,KACFC,EAAsC,QAAtBF,EAAGD,EAAOI,oBAAY,IAAAH,EAAAA,EAAIV,EAChD,OAAOJ,EAAiBkB,YAAW,SAACC,GAAW,IAAAC,EAAAC,EACvCC,EAA8B,CAClCC,SAAUJ,EAAQK,WAClBT,KAAAA,EACAU,OAAQN,EAAQM,OAChBC,cAAeP,EAAQO,cACvBC,KAAMd,EAAOe,IACbC,MAAOhB,EAAOgB,MACdC,YAAajB,EAAOiB,YACpBC,WAAyC,QAA/BX,EAAAX,EAAKuB,aAAaC,qBAAlBb,IAA+BA,IAA/BA,EAAkCP,EAAOe,YAAcM,EACjEC,aAAgCd,QAApBA,EAAEN,aAAAA,EAAAA,EAAOF,EAAOe,YAAIP,IAAAA,EAAAA,EAAIR,aAAM,EAANA,EAAQsB,aAC5CC,iBAAkB,SAACT,EAAMU,GAAK,OAAKlB,EAAQmB,cAAa1B,KAAIe,EAAOU,GAA4B,GAEjG,OAAOE,EAACvB,EAAgBwB,EAAKC,CAAAA,EAAAA,EAAYnB,IAC3C,OACDV,EAAAH,EAES,WAAA,WAAA,OAAMA,EAAKiC,SAAS,CAAEC,UAAU,GAAO,IAAA/B,EAAAH,EAErC,aAAA,WAAA,OAAMA,EAAKiC,SAAS,CAAEC,UAAU,GAAQ,IAAA/B,EAAAH,EAAA,WAAA,WAAA,IAAAmC,EAAAC,EAAAC,IAAAC,GAMzC,SAAAC,EAAOX,EAAmBY,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvC,EAAAwC,EAAAC,EAAAC,EAAA,OAAAX,IAAAY,GAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAOP,OANtCP,EAAU5C,EAAKD,MAAf6C,MACFC,EAAiE,QAA1DJ,EAAkCC,QAAlCA,EAAmB,QAAnBC,EAAG3C,EAAKD,MAAM6C,aAAXD,IAAgBA,OAAhBA,EAAAA,EAAkBS,qBAAaV,IAAAA,EAAAA,EAAIpD,EAAO8D,qBAAaX,IAAAA,EAAAA,EAAIzC,EAAKoD,cAC1E9C,EAAOuC,EAAQjB,EAAO5B,EAAKD,MAAMO,MAAK4C,EAAAG,EAAA,EAE1CrD,EAAKsD,UACe,QAApBR,EAAA9C,EAAKuD,uBAAe,IAAAT,GAApBA,EAAsBU,QACtBxD,EAAKuD,gBAAkB,IAAIE,gBAAiBP,EAAAC,EAAA,EACtCnD,EAAKD,MAAM2D,SAASpD,EAA0ByC,QAAtBA,EAAE/C,EAAKuD,2BAAeR,SAApBA,EAAsBY,QAAO,KAAA,EACxDf,SAAAA,EAAOgB,aAA2C,IAA7BhB,EAAMgB,WAAWC,UACzCrB,GAASA,IACTxC,EAAKD,MAAM+D,SAAW9D,EAAKD,MAAM+D,WAClCZ,EAAAC,EAAA,EAAA,MAAA,KAAA,EAAAD,EAAAG,EAAA,EAAAL,EAAAE,EAAAa,EAEGnB,SAAAA,EAAOgB,aAAwC,IAA1BhB,EAAMgB,WAAWI,OACxCxB,GAASA,IACTxC,EAAKD,MAAM+D,SAAW9D,EAAKD,MAAM+D,WAE/B9D,EAAKD,MAAMkE,SAASjE,EAAKD,MAAMkE,QAAOjB,GAAO,KAAA,EAEjC,OAFiCE,EAAAG,EAAA,EAEjDrD,EAAKkE,YAAWhB,EAAAiB,EAAA,GAAA,KAAA,EAAA,OAAAjB,EAAAkB,EAAA,GAAA,GAAA7B,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,SAEnB,OAAA8B,SAAAA,EAAAC,GAAA,OAAAnC,EAAAoC,MAAAC,KAAAC,UAAA,CAAA,CA5BmD,IA4BnDtE,EAAAH,EAEsC,iBAAA,SAAC4B,GAAK,OAAKA,CAAK,IAAAzB,EAAAH,EAAA,cAE1C,WACX,IAAM0E,EAAY1E,EAAK2E,MAAMzC,SAC7B,OAAAH,EAAAA,EAAA,CAAA,EAAY/B,EAAKD,MAAM6E,IAAE,GAAA,CAAEC,QAASH,EAAY,GAAM,EAAGI,cAAeJ,EAAY,OAAS,YAjG7F1E,EAAK2E,MAAQ,CAAEzC,UAAU,GAAOlC,CAClC,CAAC,OAAA+E,EAAAjF,EAL0BkF,GAK1BC,EAAAnF,EAAA,CAAA,CAAAqB,IAAA,eAAA+D,IAED,WAAgB,IAAAC,EAAAC,EAAAC,EAAAC,EACd,MAAO,CACLC,gBAAkDJ,QAAnCA,EAAkB,QAAlBC,EAAEZ,KAAKzE,MAAM6C,aAAXwC,IAAgBA,OAAhBA,EAAAA,EAAkBG,2BAAeJ,EAAAA,EAAI7F,EAAOiG,gBAC7D/D,cAA8C,QAAjC6D,EAAkB,QAAlBC,EAAEd,KAAKzE,MAAM6C,aAAX0C,IAAgBA,OAAhBA,EAAAA,EAAkB9D,qBAAa6D,IAAAA,EAAAA,EAAI/F,EAAOkC,cAE7D,GAAC,CAAAL,IAAA,SAAAS,MAED,WAAM,IAAA4D,EAAAC,EAAAC,EAAAC,EAAAnB,KACI5B,EAAU4B,KAAKzE,MAAf6C,MACFgD,EAAsDJ,QAA7CA,EAAiBC,QAAjBA,EAAGnG,aAAM,EAANA,EAAQuG,kBAAMJ,EAAAA,UAAAC,EAAIlB,KAAKzE,MAAM6C,aAAK,IAAA8C,OAAA,EAAhBA,EAAkBG,cAAML,IAAAA,EAAAA,EAAI/F,EAChE,OAAOqG,GAAsB,SAAAC,GAAA,IAAAC,EAAGxD,EAAKuD,EAALvD,MAAK,OACnCyD,EAAC1G,EAAiB2G,MAAKC,SAAU7G,EAAO6G,SAAUzC,SAAU,SAACK,GAAC,OAAK4B,EAAKjC,SAASK,EAAGvB,EAAM,EAAEoC,GAAIe,EAAKS,aACnGC,SAAA,CAAAJ,EAACK,EAAWvE,EAAAA,EAAA,CAAA,EAAe,QAAfiE,EAAKL,EAAK5F,aAAK,IAAAiG,GAAO,QAAPA,EAAVA,EAAYpD,aAAK,IAAAoD,OAAA,EAAjBA,EAAmBO,cAAY,CAAA,EAAA,YAC7C3D,aAAAA,EAAAA,EAAO4D,iBAAiB5D,aAAK,EAALA,EAAO4D,eAC/BlH,aAAM,EAANA,EAAQkH,cACT1E,EAAC2E,EAAK,CAAAC,aAAUC,QAAS,EACtBN,SAAA/G,EAAOsH,QAAQC,KAAI,SAACzG,EAAQ0G,GAAS,IAAAC,EAC9BC,IAAmE,QAAjCD,EAAApB,EAAKpE,aAAagE,uBAAlBwB,IAAiCA,IAAjCA,EAAoC3G,EAAOe,YAAcM,EACjG,OAAuBK,EAACmF,EAApBD,EAAkC,CAAA,EAE3B,CAAAX,SACPvE,EAAC2E,EAAI1E,EAAAA,EAAA,CAACmF,MAAI,EAACC,GAAI,IAAQ/G,EAAOgH,YAAU,GAAA,CAAAf,SACrCV,EAAK0B,uBAAuBjH,OAJGA,EAAOe,IAAImG,WAAaR,EAQ/D,MAEFxH,eAAAA,EAAQiI,cACR3E,aAAK,EAALA,EAAO2E,gBAAgB3E,aAAK,EAALA,EAAO2E,kBAEhChI,EAAiBkB,YAAW,SAACC,GAAO,IAAA8G,EAAA,OACnC1F,EAAC8D,EAAS,CAACtF,KAAMqF,EAAK5F,MAAMO,KAAMU,OAAQN,EAAQM,OAAQC,cAAeP,EAAQO,cAAewG,OAAwBD,QAAlBA,EAAE7B,EAAK5F,MAAM6C,aAAX4E,IAAgBA,OAAhBA,EAAAA,EAAkBE,cAAgB,MAEtH,GAE5B,GAAC,CAAAvG,IAAA,uBAAAS,MA0BD,WAAoB,IAAA+F,EACE,QAApBA,EAAInD,KAACjB,uBAAe,IAAAoE,GAApBA,EAAsBnE,OACxB,IAAC,IAiCH,OAAO1D,CACT"}
1
+ {"version":3,"file":"create.form-grid-layout.js","sources":["../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport { cleanObject } from '../utils'\r\nimport { IFormBase, IFormInputBase } from './types'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { ContentWrap, CreateFormBottomBar } from './create.form-grid-layout.units'\r\nimport FormValidator from './validator'\r\nimport CreateInput from './create.input'\r\nimport CreateFormBase from './create.form-base'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n sizes?: RegularBreakpoints\r\n defaultValue?: any\r\n inputElement?: React.ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type ISubmitMappingEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutSlots<T> {\r\n action?: React.ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n inputVisibility?: Partial<Record<keyof T, boolean>>\r\n // inputVisibilityGetter?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n inputDisabled?: Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n contentProps?: BoxProps\r\n submitMapping?: ISubmitMappingEvent<T>\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = CreateFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = CreateInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged() {\r\n return {\r\n inputVisibility: this.props.slots?.inputVisibility ?? params.inputVisibility,\r\n inputDisabled: this.props.slots?.inputDisabled ?? params.inputDisabled\r\n }\r\n }\r\n\r\n render() {\r\n const { slots } = this.props\r\n const BottomBar = params?.action ?? this.props.slots?.action ?? BottomBarInstance\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormBaseInstance.Form validate={params.validate} onSubmit={(v) => this.onSubmit(v, close)} sx={this.getSxProps()}>\r\n <ContentWrap {...this.props?.slots?.contentProps}>\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const visibility: boolean | undefined = this.configMerged.inputVisibility?.[config.key] ? true : undefined\r\n if (visibility) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.sizes}>\r\n {this.renderFormFieldElement(config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n </ContentWrap>\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={this.props.data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={this.props.slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n return FormBaseInstance.mapContext((context) => {\r\n const obj: IFormInputBase<T, any> = {\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: this.configMerged.inputDisabled?.[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n formContext: context\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n })\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.submitMapping ?? params.submitMapping ?? this.submitMapping\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n submitMapping: ISubmitMappingEvent<T> = (value) => value\r\n\r\n getSxProps = (): SxProps<Theme> => {\r\n const isLoading = this.state.loadding\r\n return { ...this.props.sx, opacity: isLoading ? 0.7 : 1, pointerEvents: isLoading ? 'none' : 'auto' }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","CreateFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","CreateInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","config","_config$inputElement","data","ElementComponent","inputElement","mapContext","context","_this$configMerged$in","_data$config$key","obj","onBlur","messageErrors","name","key","label","placeholder","disabled","configMerged","inputDisabled","undefined","defaultValue","formContext","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","value","close","_ref2","_this$props$slots$sub","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","n","submitMapping","p","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","isLoading","state","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_this$props$slots$inp","_this$props$slots2","_this$props$slots$inp2","_this$props$slots3","inputVisibility","_ref3","_params$action","_this$props$slots4","_this2","BottomBar","action","mapGlobalModalContext","_ref4","_this2$props","_jsxs","Form","validate","getSxProps","children","ContentWrap","contentProps","contentBefore","Grid","container","spacing","configs","map","index","_this2$configMerged$i","visibility","Fragment","item","xs","sizes","renderFormFieldElement","toString","contentAfter","_this2$props$slots","before","actionBefore","_this$abortController3"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as i,callSuper as o,defineProperty as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as a,jsx as s}from"react/jsx-runtime";import{Component as l}from"react";import{styled as p,Box as u,TextField as m,Collapse as h}from"@mui/material";import{getErrorMessage as d}from"./helpers.js";function c(p){return function(){function c(r){var e;return i(this,c),e=o(this,c,[r]),n(e,"handleChange",(function(r){var t,i=null===(t=r.target.files)||void 0===t?void 0:t[0];if(i){var o=URL.createObjectURL(i);e.setState({imageUrl:o},(function(){e.props.name&&e.props.onBlur&&e.props.onBlur(e.props.name)}))}})),n(e,"getImageUrl",(function(){var r=e.props.data,t=null!=p&&p.imageGetter?p.imageGetter(r):void 0;return e.state.imageUrl||t||""})),e.state={},e}return r(c,l),e(c,[{key:"render",value:function(){var r,e,i=this,o=this.props.name,n=d(this.props.messageErrors,this.props.name),l=this.getImageUrl();return a(g,t(t({},null===(r=this.props.slots)||void 0===r?void 0:r.wrapProps),{},{children:[s(u,{sx:{flex:1},children:s(m,t({name:null==o?void 0:o.toString(),error:n.error,helperText:n.message,variant:"outlined",type:"file",fullWidth:!0,inputProps:t({},{accept:"image/*",multiple:!1}),onBlur:function(){o&&i.props.onBlur&&i.props.onBlur(o)},onChange:this.handleChange},null===(e=this.props.slots)||void 0===e?void 0:e.inputProps))}),s(h,{in:!!l,orientation:"horizontal",unmountOnExit:!0,children:s(f,{children:s("img",{src:l,alt:"berlintomek-image"})})})]}))}}])}()}var g=p(u)({display:"flex",gap:"9px",alignItems:"center"}),f=p(u)({height:"56px",width:"56px",marginRight:"6px",borderRadius:"4px",overflow:"hidden",border:"1px solid rgba(145, 158, 171, .16)","& > img":{width:"100%",height:"100%",objectFit:"cover"}});export{c as default};
2
+ //# sourceMappingURL=create.input.image-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.input.image-file.js","sources":["../../src/form/create.input.image-file.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Box, BoxProps, Collapse, styled, TextField, TextFieldProps } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\n\r\nexport interface IInputImageFileSlots {\r\n wrapProps?: BoxProps\r\n inputProps?: TextFieldProps\r\n}\r\n\r\nexport interface IInputImageFileProps<T> extends IFormInputBase<T, IInputImageFileSlots> {}\r\n\r\nexport interface IInputImageFileState {\r\n imageUrl?: string\r\n}\r\n\r\nexport interface IInputImageFileParams<T> {\r\n imageGetter?: (data?: Partial<T>) => string | undefined\r\n}\r\n\r\nfunction createInputImageFile<T>(params?: IInputImageFileParams<T>) {\r\n class InputImageFile extends Component<IInputImageFileProps<T>, IInputImageFileState> {\r\n constructor(props: IInputImageFileProps<T>) {\r\n super(props)\r\n this.state = {}\r\n }\r\n render() {\r\n const { name } = this.props\r\n const eMessage = getErrorMessage(this.props.messageErrors, this.props.name)\r\n const url = this.getImageUrl()\r\n return (\r\n <Wrap {...this.props.slots?.wrapProps}>\r\n <Box sx={{ flex: 1 }}>\r\n <TextField\r\n name={name?.toString()}\r\n error={eMessage.error}\r\n helperText={eMessage.message}\r\n variant='outlined'\r\n type='file'\r\n fullWidth\r\n inputProps={{ ...{ accept: 'image/*', multiple: false } }}\r\n onBlur={() => {\r\n if (!name) return\r\n this.props.onBlur && this.props.onBlur(name)\r\n }}\r\n onChange={this.handleChange}\r\n {...this.props.slots?.inputProps}\r\n />\r\n </Box>\r\n <Collapse in={!!url} orientation='horizontal' unmountOnExit>\r\n <ImageWrap>\r\n <img src={url} alt='berlintomek-image' />\r\n </ImageWrap>\r\n </Collapse>\r\n </Wrap>\r\n )\r\n }\r\n\r\n handleChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\r\n const file = event.target.files?.[0]\r\n if (file) {\r\n const imageUrl = URL.createObjectURL(file)\r\n this.setState({ imageUrl }, () => {\r\n if (!this.props.name) return\r\n this.props.onBlur && this.props.onBlur(this.props.name)\r\n })\r\n }\r\n }\r\n\r\n getImageUrl = () => {\r\n const { data } = this.props\r\n const value = params?.imageGetter ? params.imageGetter(data) : undefined\r\n return this.state.imageUrl || value || ''\r\n }\r\n }\r\n return InputImageFile\r\n}\r\nexport default createInputImageFile\r\n\r\nconst Wrap = styled(Box)({\r\n display: 'flex',\r\n gap: '9px',\r\n alignItems: 'center'\r\n})\r\n\r\nconst ImageWrap = styled(Box)({\r\n height: '56px',\r\n width: '56px',\r\n marginRight: '6px',\r\n borderRadius: '4px',\r\n overflow: 'hidden',\r\n border: '1px solid rgba(145, 158, 171, .16)',\r\n '& > img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }\r\n})\r\n"],"names":["createInputImageFile","params","InputImageFile","props","_this","_classCallCheck","_callSuper","_defineProperty","event","_event$target$files","file","target","files","imageUrl","URL","createObjectURL","setState","name","onBlur","data","value","imageGetter","undefined","state","_inherits","Component","_createClass","key","_this$props$slots","_this$props$slots2","_this2","this","eMessage","getErrorMessage","messageErrors","url","getImageUrl","_jsxs","Wrap","_objectSpread","slots","wrapProps","children","_jsx","Box","sx","flex","TextField","toString","error","helperText","message","variant","type","fullWidth","inputProps","accept","multiple","onChange","handleChange","Collapse","in","orientation","unmountOnExit","ImageWrap","src","alt","styled","display","gap","alignItems","height","width","marginRight","borderRadius","overflow","border","objectFit"],"mappings":"+WAoBA,SAASA,EAAwBC,GAuD/B,kBArDE,SAAAC,EAAYC,GAA8B,IAAAC,EAEzB,OAFyBC,OAAAH,GACxCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EAmC6C,gBAAA,SAACI,GAAS,IAAAC,EAC7DC,UAAID,EAAGD,EAAMG,OAAOC,aAAK,IAAAH,OAAA,EAAlBA,EAAqB,GAClC,GAAIC,EAAM,CACR,IAAMG,EAAWC,IAAIC,gBAAgBL,GACrCN,EAAKY,SAAS,CAAEH,SAAAA,IAAY,WACrBT,EAAKD,MAAMc,MAChBb,EAAKD,MAAMe,QAAUd,EAAKD,MAAMe,OAAOd,EAAKD,MAAMc,KACpD,GACD,KACFV,EAAAH,EAAA,eAEa,WACZ,IAAQe,EAASf,EAAKD,MAAdgB,KACFC,EAAQnB,SAAAA,EAAQoB,YAAcpB,EAAOoB,YAAYF,QAAQG,EAC/D,OAAOlB,EAAKmB,MAAMV,UAAYO,GAAS,MAhDvChB,EAAKmB,MAAQ,CAAE,EAAAnB,CACjB,CAAC,OAAAoB,EAAAtB,EAJ0BuB,GAI1BC,EAAAxB,EAAA,CAAA,CAAAyB,IAAA,SAAAP,MACD,WAAM,IAAAQ,EAAAC,EAAAC,EAAAC,KACId,EAASc,KAAK5B,MAAdc,KACFe,EAAWC,EAAgBF,KAAK5B,MAAM+B,cAAeH,KAAK5B,MAAMc,MAChEkB,EAAMJ,KAAKK,cACjB,OACEC,EAACC,EAAIC,EAAAA,KAAqB,QAArBX,EAAKG,KAAK5B,MAAMqC,aAAXZ,IAAgBA,OAAhBA,EAAAA,EAAkBa,WAAS,GAAA,CAAAC,SAAA,CACnCC,EAACC,GAAIC,GAAI,CAAEC,KAAM,GAAGJ,SAClBC,EAACI,EAASR,EAAA,CACRtB,KAAMA,eAAAA,EAAM+B,WACZC,MAAOjB,EAASiB,MAChBC,WAAYlB,EAASmB,QACrBC,QAAQ,WACRC,KAAK,OACLC,WAAS,EACTC,WAAUhB,EAAO,GAAA,CAAEiB,OAAQ,UAAWC,UAAU,IAChDvC,OAAQ,WACDD,GACLa,EAAK3B,MAAMe,QAAUY,EAAK3B,MAAMe,OAAOD,EACxC,EACDyC,SAAU3B,KAAK4B,cACK,QADO9B,EACvBE,KAAK5B,MAAMqC,aAAK,IAAAX,OAAA,EAAhBA,EAAkB0B,eAG1BZ,EAACiB,EAAQ,CAACC,KAAM1B,EAAK2B,YAAY,aAAaC,eAC5C,EAAArB,SAAAC,EAACqB,EAAS,CAAAtB,SACRC,EAAK,MAAA,CAAAsB,IAAK9B,EAAK+B,IAAI,6BAK7B,IAAC,GAoBL,CAGA,IAAM5B,EAAO6B,EAAOvB,EAAPuB,CAAY,CACvBC,QAAS,OACTC,IAAK,MACLC,WAAY,WAGRN,EAAYG,EAAOvB,EAAPuB,CAAY,CAC5BI,OAAQ,OACRC,MAAO,OACPC,YAAa,MACbC,aAAc,MACdC,SAAU,SACVC,OAAQ,qCACR,UAAW,CACTJ,MAAO,OACPD,OAAQ,OACRM,UAAW"}
@@ -1,2 +1,2 @@
1
- import{createClass as t,classCallCheck as e,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";import a from"./modal-wrapper.js";import o from"./create.form-base.js";import s from"./create.input.file.js";import m from"./create.input.js";import c from"./create.date-picker.js";import p from"./create.text-editor.js";import l from"./create.date-expired.js";import f from"./create.form-comfirm.js";import h from"./create.select-simple.js";import u from"./create.select-with-api.js";import d from"./create.form-grid-layout.js";import j from"./create.autocomplete.chips.js";import{FormBottomBarWrap as n}from"./create.form-grid-layout.units.js";import{createInputFileCsvLocalParser as v}from"./create.input-file.csv-local-parser.js";var C=new(t((function t(){e(this,t),r(this,"ModalWrap",a),r(this,"BottomBarWrap",n),r(this,"FormValidator",i),r(this,"validator",i.initial),r(this,"createFormBase",o),r(this,"createFormComfirm",f),r(this,"createFormGridLayout",d),r(this,"createDateExpired",l),r(this,"createDatePicker",c),r(this,"createAutocompleteChip",j),r(this,"createInputFileCsvLocalParser",v),r(this,"createInputFile",s),r(this,"createInput",m),r(this,"createSelectSimple",h),r(this,"createSelectWithApi",u),r(this,"createTextEditor",p)})));export{C as default};
1
+ import{createClass as e,classCallCheck as t,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";import a from"./modal-wrapper.js";import o from"./create.form-base.js";import s from"./create.input.file.js";import m from"./create.input.js";import p from"./create.date-picker.js";import c from"./create.text-editor.js";import l from"./create.date-expired.js";import f from"./create.form-comfirm.js";import h from"./create.select-simple.js";import u from"./create.select-with-api.js";import j from"./create.form-grid-layout.js";import d from"./create.input.image-file.js";import n from"./create.autocomplete.chips.js";import{FormBottomBarWrap as F}from"./create.form-grid-layout.units.js";import{createInputFileCsvLocalParser as v}from"./create.input-file.csv-local-parser.js";var C=new(e((function e(){t(this,e),r(this,"ModalWrap",a),r(this,"BottomBarWrap",F),r(this,"FormValidator",i),r(this,"validator",i.initial),r(this,"createFormBase",o),r(this,"createFormComfirm",f),r(this,"createFormGridLayout",j),r(this,"createDateExpired",l),r(this,"createDatePicker",p),r(this,"createAutocompleteChip",n),r(this,"createInputFileCsvLocalParser",v),r(this,"createInputFile",s),r(this,"createInputImageFile",d),r(this,"createInput",m),r(this,"createSelectSimple",h),r(this,"createSelectWithApi",u),r(this,"createTextEditor",c)})));export{C as default};
2
2
  //# sourceMappingURL=dino-form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dino-form.js","sources":["../../src/form/dino-form.tsx"],"sourcesContent":["import FormValidator from './validator'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport CreateFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateInput from './create.input'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\nimport { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = CreateFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n //#endregion\r\n\r\n //#region Inputs\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInput = CreateInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","CreateFormBase","CreateFormComfirm","CreateFormGridLayout","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","CreateInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"swBAcoF,IA0B9EA,EAAW,IAxBCC,GAAA,SAAAC,IAAAC,OAAAD,GAChBE,mBACYC,GAAgBD,uBACZE,GAAiBF,uBACjBG,GAAaH,EAAAI,KAAA,YACjBD,EAAcE,SAAOL,wBAChBM,GAAcN,2BACXO,GAAiBP,8BACdQ,GAGvBR,2BACoBS,GAAiBT,0BAClBU,GAAgBV,gCACVW,GAAsBX,uCACfY,GAA6BZ,yBAC3Ca,GAAeb,qBACnBc,GAAWd,4BACJe,GAAkBf,6BACjBgB,GAAmBhB,0BACtBiB,EAAgB"}
1
+ {"version":3,"file":"dino-form.js","sources":["../../src/form/dino-form.tsx"],"sourcesContent":["import FormValidator from './validator'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport CreateFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateInput from './create.input'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport createInputImageFile from './create.input.image-file'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\nimport { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = CreateFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n //#endregion\r\n\r\n //#region Inputs\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInputImageFile = createInputImageFile\r\n createInput = CreateInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","CreateFormBase","CreateFormComfirm","CreateFormGridLayout","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","createInputImageFile","CreateInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"kzBAeoF,IA2B9EA,EAAW,IAzBCC,GAAA,SAAAC,IAAAC,OAAAD,GAChBE,mBACYC,GAAgBD,uBACZE,GAAiBF,uBACjBG,GAAaH,EAAAI,KAAA,YACjBD,EAAcE,SAAOL,wBAChBM,GAAcN,2BACXO,GAAiBP,8BACdQ,GAGvBR,2BACoBS,GAAiBT,0BAClBU,GAAgBV,gCACVW,GAAsBX,uCACfY,GAA6BZ,yBAC3Ca,GAAeb,8BACVc,GAAoBd,qBAC7Be,GAAWf,4BACJgB,GAAkBhB,6BACjBiB,GAAmBjB,0BACtBkB,EAAgB"}
@@ -1,2 +1,2 @@
1
- import{toConsumableArray as r,objectSpread2 as e,typeof as n,createForOfIteratorHelper as t}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"./validator.js";var a=function(r){for(var e=arguments.length,n=new Array(e>1?e-1:0),t=1;t<e;t++)n[t-1]=arguments[t];return n.length<1?r:n.filter((function(r){return r})).reduce((function(r,e){return r=Object.assign(r,e)}),r)},i=function(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),u=1;u<t;u++)o[u-1]=arguments[u];if((o=o.filter((function(r){return!!r}))).length<1)return e;for(var c=[e].concat(r(o)).filter((function(r){return r})),f=c.reduce((function(e,t){if(!t)return e;var o=Object.keys(t).filter((function(r){return"object"===n(t[r])&&!Array.isArray(t[r])}));return e.push.apply(e,r(o)),e}),[]),l=a.apply(void 0,[e].concat(r(c.slice(1)))),s=l,v=c.slice(1).filter((function(r){return!!r})),p=function(){var e=f[y];s[e]=i.apply(void 0,[{},s[e]].concat(r(v.map((function(r){return r[e]})))))},y=0;y<f.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},c=function(r){var e=Array.from(r).reduce((function(r,e){return r[e[0]]?Array.isArray(r[e[0]])?r[e[0]].push(e[1]):r[e[0]]=[r[e[0]],e[1]]:r[e[0]]=e[1],r}),{});return Object.keys(e).forEach((function(r){var n=e[r];"string"!=typeof n||"true"!==n.toString().toLocaleLowerCase()&&"false"!==n.toString().toLocaleLowerCase()||(e[r]="true"===n.toString().toLocaleLowerCase())})),e},f=function(r,e,n,t){var o=t.run(e);if(o){var a=n||{},i=Object.keys(e).filter((function(r){return!!e[r]})).filter((function(r){return e[r]instanceof File&&!!e[r].size}));return i.push(r),i.forEach((function(r){o[r]?a[r]=o[r]:delete a[r]})),a}return null},l=function(r,e){var n,t=null===(n=r.response)||void 0===n?void 0:n.data;if(t){var o=Object.keys(e),a={};return o.forEach((function(r){var e=t[r];Array.isArray(e)&&e.length>0&&(a[r]=[{message:e[0]}])})),a}},s=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];for(var a=n.map((function(r){return null==r?void 0:r.configs})).filter((function(r){return!!r})),u=Object.assign.apply(Object,[{}].concat(r(a))),c=function(){var e=Object.keys(u)[f];u[e]=i.apply(void 0,[{}].concat(r(a.map((function(r){return r?r[e]:{Rules:[]}}))))),u[e].Rules=a.map((function(r){return r?r[e]:{Rules:[]}})).reduce((function(e,n){var t;return e.push.apply(e,r(null!==(t=null==n?void 0:n.Rules)&&void 0!==t?t:[])),e}),[])},f=0;f<Object.keys(u).length;f++)c();return new o(u)},v=function(r,e){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var n=Object.keys(r[0]),o=e.filter((function(r){return!n.includes(r)}));if(o.length>0)return{valid:!1,message:"Missing required columns: ".concat(o.join(", "))};for(var a=0;a<r.length;a++){var i,u=r[a],c=t(e);try{for(c.s();!(i=c.n()).done;){var f=i.value,l=u[f];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(f.toString(),'" at row ').concat(a+2)}}}catch(r){c.e(r)}finally{c.f()}}return{valid:!0}};export{c as convertFormDataToJson,l as getErrorFromResponse,u as getErrorMessage,f as singleValidate,v as validateCsvModel,s as validateMerge};
1
+ import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"./validator.js";var i=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,o=new Array(t>1?t-1:0),u=1;u<t;u++)o[u-1]=arguments[u];if((o=o.filter((function(r){return!!r}))).length<1)return e;for(var c=[e].concat(r(o)).filter((function(r){return r})),f=c.reduce((function(e,t){if(!t)return e;var o=Object.keys(t).filter((function(r){return"object"===n(t[r])&&!Array.isArray(t[r])}));return e.push.apply(e,r(o)),e}),[]),l=i.apply(void 0,[e].concat(r(c.slice(1)))),s=l,v=c.slice(1).filter((function(r){return!!r})),p=function(){var n=f[y];s[n]=a.apply(void 0,[{},s[n]].concat(r(v.map((function(r){return r[n]})))))},y=0;y<f.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},c=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},f=function(r){if("string"==typeof r)return r.trim();if(Array.isArray(r))return r.map((function(r){return f(r)}));if(r&&"object"===n(r)){var e={};return Object.keys(r).forEach((function(n){e[n]=f(r[n])})),e}return r},l=function(r,n,e,t){var o=t.run(n);if(o){var i=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){o[r]?i[r]=o[r]:delete i[r]})),i}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data;if(t){var o=Object.keys(n),i={};return o.forEach((function(r){var n=t[r];Array.isArray(n)&&n.length>0&&(i[r]=[{message:n[0]}])})),i}},v=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var i=e.map((function(r){return null==r?void 0:r.configs})).filter((function(r){return!!r})),u=Object.assign.apply(Object,[{}].concat(r(i))),c=function(){var n=Object.keys(u)[f];u[n]=a.apply(void 0,[{}].concat(r(i.map((function(r){return r?r[n]:{Rules:[]}}))))),u[n].Rules=i.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}),[])},f=0;f<Object.keys(u).length;f++)c();return new o(u)},p=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),o=n.filter((function(r){return!e.includes(r)}));if(o.length>0)return{valid:!1,message:"Missing required columns: ".concat(o.join(", "))};for(var i=0;i<r.length;i++){var a,u=r[i],c=t(n);try{for(c.s();!(a=c.n()).done;){var f=a.value,l=u[f];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(f.toString(),'" at row ').concat(i+2)}}}catch(r){c.e(r)}finally{c.f()}}return{valid:!0}};export{c as convertFormDataToJson,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,f as trimAllStrings,p as validateCsvModel,v 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 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 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","singleValidate","modelState","Validator","messageErrors","run","errors","File","size","getErrorFromResponse","ModelRender","_error$response","response","messages","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","trim","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 return obj.trim() as any\r\n }\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\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 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","trim","item","result","singleValidate","modelState","Validator","messageErrors","run","errors","File","size","getErrorFromResponse","ModelRender","_error$response","response","messages","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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"}