dinocollab-core 1.1.0 → 1.1.2

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 (32) 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/helpers.js +1 -1
  9. package/dist/form/helpers.js.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/table-grid/create.table-grid.js +1 -1
  12. package/dist/table-grid/create.table-grid.js.map +1 -1
  13. package/dist/table-grid/dino.js +1 -1
  14. package/dist/table-grid/dino.js.map +1 -1
  15. package/dist/table-grid/helpers.js +1 -1
  16. package/dist/table-grid/helpers.js.map +1 -1
  17. package/dist/table-grid/url-query-param.js +1 -1
  18. package/dist/table-grid/url-query-param.js.map +1 -1
  19. package/dist/types/filter-bar/create.filter-bar.d.ts +2 -2
  20. package/dist/types/filter-bar/create.filter-menu.d.ts +2 -2
  21. package/dist/types/filter-bar/create.filter-panel.d.ts +2 -2
  22. package/dist/types/filter-bar/create.filtered.d.ts +2 -2
  23. package/dist/types/filter-bar/types.d.ts +1 -1
  24. package/dist/types/form/helpers.d.ts +1 -0
  25. package/dist/types/table-grid/dino.d.ts +3 -2
  26. package/dist/types/table-grid/helpers.d.ts +2 -0
  27. package/dist/types/table-grid/types.d.ts +5 -5
  28. package/dist/types/table-grid/url-query-param.d.ts +6 -2
  29. package/dist/types/utils/helpers.d.ts +1 -0
  30. package/dist/utils/helpers.js +1 -1
  31. package/dist/utils/helpers.js.map +1 -1
  32. 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 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,singleValidate as v,getErrorFromResponse as p}from"./helpers.js";import E,{SingleRuleValidate as S}from"./validator.js";var g=function(g){var h=u.createContext({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),b=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,"setError",(function(r,t){var a=o({},r,[{rule:S.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,"setModelState",(function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})})),o(e,"getValidate",(function(){var r=new E({});return f(r,null==g?void 0:g.validate,e.props.validate)})),o(e,"clearErrorAll",(function(){e.setState({messageErrors:{}})})),o(e,"onSubmit",function(){var r=n(i().m((function r(t){var a,o,n;return i().w((function(r){for(;;)switch(r.n){case 0:if(t.preventDefault(),a=new FormData(t.currentTarget),o=d(a),e.setState({modelState:o}),!(n=e.validate.run(o))){r.n=1;break}if(e.setState({messageErrors:n}),!(Object.keys(n).length>0)){r.n=1;break}return r.a(2);case 1:return r.n=2,e.props.onSubmit(o,t).catch((function(r){var t=p(r,o);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);e.setState({modelState:o});var s=v(r,o,t,e.validate)||{};e.setState({messageErrors:s})}})),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==g?void 0:g.validate,Context:h,mapContext:function(r){return l(h.Consumer,{children:r})}}};export{g 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 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 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 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","removeError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","keyName","message","error","rule","SingleRuleValidate","Custom","setState","Object","assign","newErrors","_objectSpread","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","_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
+ {"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{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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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{default as ApiPopover,ApiPopoverContext,mapApiPopoverContext,withApiPopoverContext}from"./api-context/popover.js";export{AlertDialog,default as AlertGlobal,ApiAlertContext}from"./api-context/alert-global.js";export{default as DrawerGlobal}from"./api-context/drawer-global.js";export{default as GlobalModal,GlobalModalContext,mapGlobalModalContext,withApiGlobalModalConsumerContext,withApiGlobalModalContext}from"./api-context/global-modal.js";export{default as PopoverGlobal,PopoverGlobalApi,PopoverGlobalContext,PopoverGlobalProvider,mapPopoverGlobalContext,withPopoverGlobalContext}from"./api-context/popover-global.js";export{default as Breadcrumbs}from"./components/breadcrumbs.js";export{LoadingButton}from"./components/buttons.js";export{default as CopyToClipboard}from"./components/copy-to-clipboard.js";export{default as CreateMultiSelectDropdown}from"./components/create.multi-select-dropdown.js";export{default as ImageWithFallback}from"./components/image-with-fallback.js";export{default as HelpTooltip,HelpTooltipWrap}from"./components/help-tooltip.js";export{default as TextEditorPreview}from"./components/text-editor.preview.js";export{default as TextEditor,textEditorClasses}from"./components/text-editor.js";export{default as CreateFilterBar}from"./filter-bar/create.filter-bar.js";export{EFieldValidate,ESearchMatch}from"./filter-bar/types.js";export{default as FormValidator,SingleRuleValidate,createFormValidator,mapRuleOptions}from"./form/validator.js";export{default as DinoForm}from"./form/dino-form.js";export{convertFormDataToJson,getErrorMessage,validateCsvModel}from"./form/helpers.js";export{useCheckScrolled,useDebounce}from"./hooks/index.js";export{ELazyStatus}from"./redux/types.js";export{default as DinoRedux}from"./redux/dino.js";export{default as CreateHocLazy,EmptyComponent,defaultOptionHocLazy}from"./redux/create.hoc-lazy.js";export{ELogic,EOperator,EOrder}from"./table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";export{cleanObject,decodeBase64,encodeBase64,fetchDelay,formatCapitalizeFirstText,formatCurrency,formatDatetime,formatFileSize,formatNumberWithCommas,isGuid,isValidEmail,isValidPhoneNumber,isValidURL,mergeClasses,mergeObjects,sleep,tryParseArray,tryParseCsvFileToArray,tryParseIntRequired,tryParseObject,windowScrollToTop}from"./utils/helpers.js";import"./utils/dayjs-config.js";export{default as JObject}from"./utils/json-object.js";export{MFEventProvider,useMFEvent}from"./utils/mfe-events.js";export{QueryParam}from"./utils/query-param.js";export{default as CreateTable}from"./table/create.table.js";export{default as DinoTable}from"./table/dino.js";export{dinoTableClasses}from"./table/helpers.js";export{default as DinoTableGrid}from"./table-grid/dino.js";export{CreateTableGridItemActions}from"./table-grid/item-actions.js";export{default as dayjsCustom}from"dayjs";
1
+ export{default as ApiPopover,ApiPopoverContext,mapApiPopoverContext,withApiPopoverContext}from"./api-context/popover.js";export{AlertDialog,default as AlertGlobal,ApiAlertContext}from"./api-context/alert-global.js";export{default as DrawerGlobal}from"./api-context/drawer-global.js";export{default as GlobalModal,GlobalModalContext,mapGlobalModalContext,withApiGlobalModalConsumerContext,withApiGlobalModalContext}from"./api-context/global-modal.js";export{default as PopoverGlobal,PopoverGlobalApi,PopoverGlobalContext,PopoverGlobalProvider,mapPopoverGlobalContext,withPopoverGlobalContext}from"./api-context/popover-global.js";export{default as Breadcrumbs}from"./components/breadcrumbs.js";export{LoadingButton}from"./components/buttons.js";export{default as CopyToClipboard}from"./components/copy-to-clipboard.js";export{default as CreateMultiSelectDropdown}from"./components/create.multi-select-dropdown.js";export{default as ImageWithFallback}from"./components/image-with-fallback.js";export{default as HelpTooltip,HelpTooltipWrap}from"./components/help-tooltip.js";export{default as TextEditorPreview}from"./components/text-editor.preview.js";export{default as TextEditor,textEditorClasses}from"./components/text-editor.js";export{default as CreateFilterBar}from"./filter-bar/create.filter-bar.js";export{EFieldValidate,ESearchMatch}from"./filter-bar/types.js";export{default as FormValidator,SingleRuleValidate,createFormValidator,mapRuleOptions}from"./form/validator.js";export{default as DinoForm}from"./form/dino-form.js";export{convertFormDataToJson,getErrorMessage,validateCsvModel}from"./form/helpers.js";export{useCheckScrolled,useDebounce}from"./hooks/index.js";export{ELazyStatus}from"./redux/types.js";export{default as DinoRedux}from"./redux/dino.js";export{default as CreateHocLazy,EmptyComponent,defaultOptionHocLazy}from"./redux/create.hoc-lazy.js";export{ELogic,EOperator,EOrder}from"./table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";export{cleanObject,decodeBase64,deepRemoveEmptyFields,encodeBase64,fetchDelay,formatCapitalizeFirstText,formatCurrency,formatDatetime,formatFileSize,formatNumberWithCommas,isGuid,isValidEmail,isValidPhoneNumber,isValidURL,mergeClasses,mergeObjects,sleep,tryParseArray,tryParseCsvFileToArray,tryParseIntRequired,tryParseObject,windowScrollToTop}from"./utils/helpers.js";import"./utils/dayjs-config.js";export{default as JObject}from"./utils/json-object.js";export{MFEventProvider,useMFEvent}from"./utils/mfe-events.js";export{QueryParam}from"./utils/query-param.js";export{default as CreateTable}from"./table/create.table.js";export{default as DinoTable}from"./table/dino.js";export{dinoTableClasses}from"./table/helpers.js";export{default as DinoTableGrid}from"./table-grid/dino.js";export{CreateTableGridItemActions}from"./table-grid/item-actions.js";export{default as dayjsCustom}from"dayjs";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,inherits as e,createClass as i,objectSpread2 as o,classCallCheck as n,callSuper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as l}from"react/jsx-runtime";import{Component as s}from"react";import{styled as c,Box as p,alpha as d,colors as g,Grid as u,Fade as m,CircularProgress as h,Typography as f,Divider as v,TablePagination as S}from"@mui/material";import{mergeObjects as b}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react-router-dom";import"../utils/query-param.js";import{tableGridClasses as P}from"./helpers.js";import{CreateTableGridItemActions as j}from"./item-actions.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import C from"../api-context/global-modal.js";import x from"../api-context/popover-global.js";import y from"../filter-bar/create.filter-bar.js";import"../filter-bar/types.js";import I from"./toolbar-pannel.js";function z(c){var d,g=y(null!==(d=c.filterBarConfig)&&void 0!==d?d:{fields:{}}),z=j(),F=function(){function d(){var e;n(this,d);for(var i=arguments.length,s=new Array(i),c=0;c<i;c++)s[c]=arguments[c];return e=a(this,d,[].concat(s)),t(e,"defaultPagination",{page:0,pageSize:10}),t(e,"filterStateStore",{pagination:e.defaultPagination}),t(e,"setFilterState",(function(t){try{t.details?e.filterStateStore=o({pagination:e.filterStateStore.pagination},t):e.filterStateStore=b({},e.filterState,t),e.props.onFilterChange&&e.props.onFilterChange(e.filterStateStore),e.forceUpdate()}catch(t){console.log(t)}})),t(e,"preRender",(function(t){return l(C,{children:[r(x.Provider,{}),t]})})),t(e,"getRootClases",(function(){var t=[P.root];return e.filterState.loading&&t.push(P.loading),t.join(" ")})),t(e,"getItems",(function(){var t;return null!==(t=e.props.data.items)&&void 0!==t?t:[]})),t(e,"handleFilterChange",(function(t){e.setFilterState(t)})),t(e,"handleChangePage",(function(t,i){e.setFilterState({pagination:{page:i,pageSize:e.filterState.pagination.pageSize}})})),t(e,"handleChangeRowsPerPage",(function(t){e.setFilterState({pagination:{page:0,pageSize:parseInt(t.target.value,10)}})})),e}return e(d,s),i(d,[{key:"filterState",get:function(){var t;return null!==(t=this.props.filter)&&void 0!==t?t:this.filterStateStore}},{key:"slots",get:function(){var t,e,i,n,a,l,s;return o(o({},Object.assign({},c.slots,this.props.slots)),{},{TableGridItem:null!==(t=null!==(e=null===(i=this.props.slots)||void 0===i?void 0:i.item)&&void 0!==e?e:c.item)&&void 0!==t?t:function(){return r(k,{})},ToolbarPannel:null!==(n=null!==(a=null===(l=this.props.slots)||void 0===l?void 0:l.toolbar)&&void 0!==a?a:null===(s=c.slots)||void 0===s?void 0:s.toolbar)&&void 0!==n?n:I})}},{key:"mergeConfig",get:function(){var t;return{size:null!==(t=c.size)&&void 0!==t?t:{xs:12,sm:6,md:4}}}},{key:"render",value:function(){var t,e=this,i=this.slots,n=i.TableGridItem,a=i.ToolbarPannel,s=i.actionProps,d=this.getItems();return this.preRender(l(w,{className:this.getRootClases(),children:[r(a,o({title:c.title},this.slots.toolbarProps)),r(g,{value:this.filterState,onChange:this.handleFilterChange}),l("div",{className:P.content,children:[r("div",{className:[P.contentInner,P.contentPosition].join(" "),children:r(u,o(o({container:!0,spacing:2},this.slots.gridContainer),{},{children:d.map((function(t,i){return r(u,o(o(o({item:!0},e.mergeConfig.size),e.slots.gridItem),{},{children:l("div",{className:P.item,children:[r(n,{value:t}),r(p,{className:P.actions,children:r(z,o({value:t},s))})]})}),c.getSelecterId(t).toString()+i)}))}))}),r(m,{in:this.filterState.loading,unmountOnExit:!0,children:r("div",{className:[P.overlay,P.contentPosition].join(" "),children:r(h,{size:36})})}),r(m,{in:d.length<1&&!this.filterState.loading,unmountOnExit:!0,children:r("div",{className:[P.noItems,P.contentPosition].join(" "),children:r(f,{variant:"body2",children:"No items data"})})})]}),r(v,{}),r(S,{component:"div",count:null!==(t=this.props.data.totalItems)&&void 0!==t?t:0,page:this.filterState.pagination.page,onPageChange:this.handleChangePage,rowsPerPage:this.filterState.pagination.pageSize,onRowsPerPageChange:this.handleChangeRowsPerPage,slotProps:{select:{MenuProps:{disableScrollLock:!0}}}})]}))}}])}();return F}var w=c(p)(t(t(t(t(t(t(t({flex:1,height:"100%",display:"flex",flexDirection:"column"},".".concat(P.content),{position:"relative",flex:1}),".".concat(P.contentPosition),{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),".".concat(P.contentInner),{overflowY:"auto",padding:"10px 5px"}),".".concat(P.overlay),{display:"flex",alignItems:"center",justifyContent:"center",background:d(g.common.white,.4),zIndex:10}),".".concat(P.noItems),{display:"flex",alignItems:"center",justifyContent:"center"}),".".concat(P.item),{position:"relative"}),".".concat(P.actions),{position:"absolute",top:"5px",right:"5px",zIndex:5,display:"inline-block"})),k=c(p)({width:"100%",paddingBottom:"100%",background:g.grey[600]});export{z as default};
1
+ import{defineProperty as t,inherits as e,createClass as i,objectSpread2 as o,classCallCheck as n,callSuper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,jsxs as l}from"react/jsx-runtime";import{Component as s}from"react";import{styled as c,Box as p,colors as d,tablePaginationClasses as g,alpha as u,Grid as m,Fade as h,CircularProgress as f,Typography as v,Divider as S,TablePagination as b}from"@mui/material";import{mergeObjects as P}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react-router-dom";import"../utils/query-param.js";import{tableGridClasses as x,defaultPagination as j}from"./helpers.js";import{CreateTableGridItemActions as C}from"./item-actions.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import y from"../api-context/global-modal.js";import I from"../api-context/popover-global.js";import z from"../filter-bar/create.filter-bar.js";import"../filter-bar/types.js";import w from"./toolbar-pannel.js";function k(c){var d,g=z(null!==(d=c.filterBarConfigs)&&void 0!==d?d:{fields:{}}),u=C(),k=function(){function d(){var e;n(this,d);for(var i=arguments.length,s=new Array(i),c=0;c<i;c++)s[c]=arguments[c];return e=r(this,d,[].concat(s)),t(e,"filterStateStore",{pagination:j}),t(e,"setFilterState",(function(t){try{t.details?e.filterStateStore=o({pagination:e.filterStateStore.pagination},t):e.filterStateStore=P({},e.filterState,t),e.props.onFilterChange&&e.props.onFilterChange(e.filterStateStore),e.forceUpdate()}catch(t){console.log(t)}})),t(e,"preRender",(function(t){return l(y,{children:[a(I.Provider,{}),t]})})),t(e,"getPagination",(function(){var t;return null!==(t=e.filterState.pagination)&&void 0!==t?t:j})),t(e,"getRootClasses",(function(){var t=[x.root];return e.filterState.loading&&t.push(x.loading),t.join(" ")})),t(e,"getItems",(function(){var t;return null!==(t=e.props.data.items)&&void 0!==t?t:[]})),t(e,"handleFilterChange",(function(t){e.setFilterState(t)})),t(e,"handleChangePage",(function(t,i){var o=e.getPagination();e.setFilterState({pagination:{page:i,pageSize:o.pageSize}})})),t(e,"handleChangeRowsPerPage",(function(t){e.setFilterState({pagination:{page:0,pageSize:parseInt(t.target.value,10)}})})),e}return e(d,s),i(d,[{key:"filterState",get:function(){var t;return null!==(t=this.props.filter)&&void 0!==t?t:this.filterStateStore}},{key:"slots",get:function(){var t,e,i,n,r,l,s;return o(o({},Object.assign({},c.slots,this.props.slots)),{},{TableGridItem:null!==(t=null!==(e=null===(i=this.props.slots)||void 0===i?void 0:i.item)&&void 0!==e?e:c.item)&&void 0!==t?t:function(){return a(N,{})},ToolbarPannel:null!==(n=null!==(r=null===(l=this.props.slots)||void 0===l?void 0:l.toolbar)&&void 0!==r?r:null===(s=c.slots)||void 0===s?void 0:s.toolbar)&&void 0!==n?n:w})}},{key:"mergeConfig",get:function(){var t;return{size:null!==(t=c.size)&&void 0!==t?t:{xs:12,sm:6,md:4}}}},{key:"render",value:function(){var t,e=this,i=this.slots,n=i.TableGridItem,r=i.ToolbarPannel,s=i.actionProps,d=this.getItems(),P=this.getPagination();return this.preRender(l(F,{className:this.getRootClasses(),children:[a(r,o({title:c.title},this.slots.toolbarProps)),a(g,{value:this.filterState,onChange:this.handleFilterChange}),l("div",{className:x.content,children:[a("div",{className:[x.contentInner,x.contentPosition].join(" "),children:a(m,o(o({container:!0,spacing:2},this.slots.gridContainer),{},{children:d.map((function(t,i){return a(m,o(o(o({item:!0},e.mergeConfig.size),e.slots.gridItem),{},{children:l("div",{className:x.item,children:[a(n,{value:t}),a(p,{className:x.actions,children:a(u,o({value:t},s))})]})}),c.getSelecterId(t).toString()+i)}))}))}),a(h,{in:this.filterState.loading,unmountOnExit:!0,children:a("div",{className:[x.overlay,x.contentPosition].join(" "),children:a(f,{size:36})})}),a(h,{in:d.length<1&&!this.filterState.loading,unmountOnExit:!0,children:a("div",{className:[x.noItems,x.contentPosition].join(" "),children:a(v,{variant:"body2",children:"No items data"})})})]}),a(S,{sx:{position:"relative",zIndex:2}}),a(b,{component:"div",count:null!==(t=this.props.data.totalItems)&&void 0!==t?t:0,page:P.page,onPageChange:this.handleChangePage,rowsPerPage:P.pageSize,onRowsPerPageChange:this.handleChangeRowsPerPage,slotProps:{select:{MenuProps:{disableScrollLock:!0}}}})]}))}}])}();return k}var F=c(p)(t(t(t(t(t(t(t(t({flex:1,height:"100%",display:"flex",flexDirection:"column"},".".concat(x.content),{position:"relative",flex:1,zIndex:1}),".".concat(x.contentPosition),{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),".".concat(x.contentInner),{overflowY:"auto",padding:"10px 5px"}),".".concat(x.overlay),{display:"flex",alignItems:"center",justifyContent:"center",background:u(d.common.white,.4),zIndex:10}),".".concat(x.noItems),{display:"flex",alignItems:"center",justifyContent:"center"}),".".concat(x.item),{position:"relative"}),".".concat(x.actions),{position:"absolute",top:"5px",right:"5px",zIndex:5,display:"inline-block"}),".".concat(g.root),{background:d.common.white,position:"relative",zIndex:5})),N=c(p)({width:"100%",paddingBottom:"100%",background:d.grey[600]});export{k as default};
2
2
  //# sourceMappingURL=create.table-grid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.table-grid.js","sources":["../../src/table-grid/create.table-grid.tsx"],"sourcesContent":["import React, { Component, ReactNode } from 'react'\r\nimport { alpha, Box, CircularProgress, colors, Divider, Fade, Grid, styled, TablePagination, Typography } from '@mui/material'\r\nimport { mergeObjects } from '../utils'\r\nimport { tableGridClasses } from './helpers'\r\nimport { CreateTableGridItemActions } from './item-actions'\r\nimport { GlobalModal, PopoverGlobal } from '../api-context'\r\nimport { CreateFilterBar, IFilterState } from '../filter-bar'\r\nimport { ITableGridFilter, IPaginationModel, ITableGridParams, ITableGridProps, ITableGridInnerSlots } from './types'\r\nimport ToolbarPannelDefault from './toolbar-pannel'\r\n\r\nfunction CreateTableGrid<T extends object>(params: ITableGridParams<T>): React.ComponentType<ITableGridProps<T>> {\r\n const FilterBarInstance = CreateFilterBar<T>(params.filterBarConfig ?? { fields: {} })\r\n const ItemActions = CreateTableGridItemActions<T>()\r\n\r\n class TableGrid extends Component<ITableGridProps<T>> {\r\n defaultPagination: IPaginationModel = { page: 0, pageSize: 10 }\r\n private filterStateStore: ITableGridFilter<T> = { pagination: this.defaultPagination }\r\n get filterState(): ITableGridFilter<T> {\r\n return this.props.filter ?? this.filterStateStore\r\n }\r\n\r\n get slots(): ITableGridInnerSlots<T> {\r\n return {\r\n ...Object.assign({}, params.slots, this.props.slots),\r\n TableGridItem: this.props.slots?.item ?? params.item ?? (() => <ItemDefault />),\r\n ToolbarPannel: this.props.slots?.toolbar ?? params.slots?.toolbar ?? ToolbarPannelDefault\r\n }\r\n }\r\n\r\n get mergeConfig() {\r\n return {\r\n size: params.size ?? { xs: 12, sm: 6, md: 4 }\r\n }\r\n }\r\n\r\n setFilterState = (value: Partial<ITableGridFilter<T>>) => {\r\n try {\r\n if (!!value.details) {\r\n this.filterStateStore = { pagination: this.filterStateStore.pagination, ...value }\r\n } else {\r\n this.filterStateStore = mergeObjects<any>({}, this.filterState, value)\r\n }\r\n this.props.onFilterChange && this.props.onFilterChange(this.filterStateStore)\r\n this.forceUpdate()\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n\r\n render() {\r\n const { TableGridItem, ToolbarPannel, actionProps } = this.slots\r\n const items = this.getItems()\r\n return this.preRender(\r\n <Wrap className={this.getRootClases()}>\r\n <ToolbarPannel title={params.title} {...this.slots.toolbarProps} />\r\n <FilterBarInstance value={this.filterState} onChange={this.handleFilterChange} />\r\n <div className={tableGridClasses.content}>\r\n <div className={[tableGridClasses.contentInner, tableGridClasses.contentPosition].join(' ')}>\r\n <Grid container spacing={2} {...this.slots.gridContainer}>\r\n {items.map((item, index) => (\r\n <Grid key={params.getSelecterId(item).toString() + index} item {...this.mergeConfig.size} {...this.slots.gridItem}>\r\n <div className={tableGridClasses.item}>\r\n <TableGridItem value={item} />\r\n <Box className={tableGridClasses.actions}>\r\n <ItemActions value={item} {...actionProps} />\r\n </Box>\r\n </div>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </div>\r\n <Fade in={this.filterState.loading} unmountOnExit>\r\n <div className={[tableGridClasses.overlay, tableGridClasses.contentPosition].join(' ')}>\r\n <CircularProgress size={36} />\r\n </div>\r\n </Fade>\r\n <Fade in={items.length < 1 && !this.filterState.loading} unmountOnExit>\r\n <div className={[tableGridClasses.noItems, tableGridClasses.contentPosition].join(' ')}>\r\n <Typography variant='body2'>No items data</Typography>\r\n </div>\r\n </Fade>\r\n </div>\r\n <Divider />\r\n <TablePagination\r\n component='div'\r\n count={this.props.data.totalItems ?? 0}\r\n page={this.filterState.pagination.page}\r\n onPageChange={this.handleChangePage}\r\n rowsPerPage={this.filterState.pagination.pageSize}\r\n onRowsPerPageChange={this.handleChangeRowsPerPage}\r\n slotProps={{ select: { MenuProps: { disableScrollLock: true } } }}\r\n />\r\n </Wrap>\r\n )\r\n }\r\n\r\n preRender = (children?: ReactNode) => (\r\n <GlobalModal>\r\n <PopoverGlobal.Provider />\r\n {children}\r\n </GlobalModal>\r\n )\r\n\r\n getRootClases = () => {\r\n const classes = [tableGridClasses.root]\r\n if (this.filterState.loading) classes.push(tableGridClasses.loading)\r\n return classes.join(' ')\r\n }\r\n\r\n getItems = () => {\r\n return this.props.data.items ?? []\r\n }\r\n\r\n handleFilterChange = (filterStateChange: IFilterState<T>) => {\r\n this.setFilterState(filterStateChange)\r\n }\r\n\r\n handleChangePage = (_: React.MouseEvent<HTMLButtonElement, MouseEvent> | null, page: number) => {\r\n // this.setState((prev) => ({ pagination: { ...prev.pagination, page } }))\r\n this.setFilterState({ pagination: { page, pageSize: this.filterState.pagination.pageSize } })\r\n }\r\n\r\n handleChangeRowsPerPage: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement> = (event) => {\r\n // this.setState({ pagination: { page: 0, pageSize: parseInt(event.target.value, 10) } })\r\n this.setFilterState({ pagination: { page: 0, pageSize: parseInt(event.target.value, 10) } })\r\n }\r\n }\r\n\r\n return TableGrid\r\n}\r\n\r\nexport default CreateTableGrid\r\n\r\nconst Wrap = styled(Box)({\r\n flex: 1,\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n [`.${tableGridClasses.content}`]: {\r\n position: 'relative',\r\n flex: 1\r\n },\r\n [`.${tableGridClasses.contentPosition}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%'\r\n },\r\n [`.${tableGridClasses.contentInner}`]: {\r\n overflowY: 'auto',\r\n padding: '10px 5px'\r\n },\r\n [`.${tableGridClasses.overlay}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n background: alpha(colors.common.white, 0.4),\r\n zIndex: 10\r\n },\r\n [`.${tableGridClasses.noItems}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n [`.${tableGridClasses.item}`]: {\r\n position: 'relative'\r\n },\r\n [`.${tableGridClasses.actions}`]: {\r\n position: 'absolute',\r\n top: '5px',\r\n right: '5px',\r\n zIndex: 5,\r\n display: 'inline-block'\r\n }\r\n})\r\n\r\nconst ItemDefault = styled(Box)({\r\n width: '100%',\r\n paddingBottom: '100%',\r\n background: colors.grey[600]\r\n})\r\n"],"names":["CreateTableGrid","params","_params$filterBarConf","FilterBarInstance","CreateFilterBar","filterBarConfig","fields","ItemActions","CreateTableGridItemActions","TableGrid","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","page","pageSize","pagination","defaultPagination","value","details","filterStateStore","_objectSpread","mergeObjects","filterState","props","onFilterChange","forceUpdate","error","console","log","children","_jsxs","GlobalModal","_jsx","PopoverGlobal","Provider","classes","tableGridClasses","root","loading","push","join","_this$props$data$item","data","items","filterStateChange","setFilterState","_","event","parseInt","target","_inherits","Component","_createClass","key","get","_this$props$filter","filter","_ref","_this$props$slots$ite","_this$props$slots","_ref2","_this$props$slots$too","_this$props$slots2","_params$slots","Object","assign","slots","TableGridItem","item","ItemDefault","ToolbarPannel","toolbar","ToolbarPannelDefault","_params$size","size","xs","sm","md","_this$props$data$tota","_this2","_this$slots","actionProps","getItems","preRender","Wrap","className","getRootClases","title","toolbarProps","onChange","handleFilterChange","content","contentInner","contentPosition","Grid","container","spacing","gridContainer","map","index","mergeConfig","gridItem","Box","actions","getSelecterId","toString","Fade","in","unmountOnExit","overlay","CircularProgress","noItems","Typography","variant","Divider","TablePagination","component","count","totalItems","onPageChange","handleChangePage","rowsPerPage","onRowsPerPageChange","handleChangeRowsPerPage","slotProps","select","MenuProps","disableScrollLock","styled","flex","height","display","flexDirection","position","top","left","width","overflowY","padding","alignItems","justifyContent","background","alpha","colors","common","white","zIndex","right","paddingBottom","grey"],"mappings":"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"}
1
+ {"version":3,"file":"create.table-grid.js","sources":["../../src/table-grid/create.table-grid.tsx"],"sourcesContent":["import React, { Component, ReactNode } from 'react'\r\nimport { alpha, Box, CircularProgress, colors, Divider, Fade, Grid, styled, TablePagination, tablePaginationClasses, Typography } from '@mui/material'\r\nimport { mergeObjects } from '../utils'\r\nimport { defaultPagination, tableGridClasses } from './helpers'\r\nimport { CreateTableGridItemActions } from './item-actions'\r\nimport { GlobalModal, PopoverGlobal } from '../api-context'\r\nimport { CreateFilterBar, IFilterState } from '../filter-bar'\r\nimport { ITableGridFilter, IPaginationModel, ITableGridParams, ITableGridProps, ITableGridInnerSlots } from './types'\r\nimport ToolbarPannelDefault from './toolbar-pannel'\r\n\r\nfunction CreateTableGrid<T extends object>(params: ITableGridParams<T>): React.ComponentType<ITableGridProps<T>> {\r\n const FilterBarInstance = CreateFilterBar<T>(params.filterBarConfigs ?? { fields: {} })\r\n const ItemActions = CreateTableGridItemActions<T>()\r\n\r\n class TableGrid extends Component<ITableGridProps<T>> {\r\n private filterStateStore: ITableGridFilter<T> = { pagination: defaultPagination }\r\n get filterState(): ITableGridFilter<T> {\r\n return this.props.filter ?? this.filterStateStore\r\n }\r\n\r\n get slots(): ITableGridInnerSlots<T> {\r\n return {\r\n ...Object.assign({}, params.slots, this.props.slots),\r\n TableGridItem: this.props.slots?.item ?? params.item ?? (() => <ItemDefault />),\r\n ToolbarPannel: this.props.slots?.toolbar ?? params.slots?.toolbar ?? ToolbarPannelDefault\r\n }\r\n }\r\n\r\n get mergeConfig() {\r\n return {\r\n size: params.size ?? { xs: 12, sm: 6, md: 4 }\r\n }\r\n }\r\n\r\n setFilterState = (value: Partial<ITableGridFilter<T>>) => {\r\n try {\r\n if (!!value.details) {\r\n this.filterStateStore = { pagination: this.filterStateStore.pagination, ...value }\r\n } else {\r\n this.filterStateStore = mergeObjects<any>({}, this.filterState, value)\r\n }\r\n this.props.onFilterChange && this.props.onFilterChange(this.filterStateStore)\r\n this.forceUpdate()\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n\r\n render() {\r\n const { TableGridItem, ToolbarPannel, actionProps } = this.slots\r\n const items = this.getItems()\r\n const pagination = this.getPagination()\r\n return this.preRender(\r\n <Wrap className={this.getRootClasses()}>\r\n <ToolbarPannel title={params.title} {...this.slots.toolbarProps} />\r\n <FilterBarInstance value={this.filterState} onChange={this.handleFilterChange} />\r\n <div className={tableGridClasses.content}>\r\n <div className={[tableGridClasses.contentInner, tableGridClasses.contentPosition].join(' ')}>\r\n <Grid container spacing={2} {...this.slots.gridContainer}>\r\n {items.map((item, index) => (\r\n <Grid key={params.getSelecterId(item).toString() + index} item {...this.mergeConfig.size} {...this.slots.gridItem}>\r\n <div className={tableGridClasses.item}>\r\n <TableGridItem value={item} />\r\n <Box className={tableGridClasses.actions}>\r\n <ItemActions value={item} {...actionProps} />\r\n </Box>\r\n </div>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </div>\r\n <Fade in={this.filterState.loading} unmountOnExit>\r\n <div className={[tableGridClasses.overlay, tableGridClasses.contentPosition].join(' ')}>\r\n <CircularProgress size={36} />\r\n </div>\r\n </Fade>\r\n <Fade in={items.length < 1 && !this.filterState.loading} unmountOnExit>\r\n <div className={[tableGridClasses.noItems, tableGridClasses.contentPosition].join(' ')}>\r\n <Typography variant='body2'>No items data</Typography>\r\n </div>\r\n </Fade>\r\n </div>\r\n <Divider sx={{ position: 'relative', zIndex: 2 }} />\r\n <TablePagination\r\n component='div'\r\n count={this.props.data.totalItems ?? 0}\r\n page={pagination.page}\r\n onPageChange={this.handleChangePage}\r\n rowsPerPage={pagination.pageSize}\r\n onRowsPerPageChange={this.handleChangeRowsPerPage}\r\n slotProps={{ select: { MenuProps: { disableScrollLock: true } } }}\r\n />\r\n </Wrap>\r\n )\r\n }\r\n\r\n preRender = (children?: ReactNode) => (\r\n <GlobalModal>\r\n <PopoverGlobal.Provider />\r\n {children}\r\n </GlobalModal>\r\n )\r\n\r\n getPagination = (): IPaginationModel => this.filterState.pagination ?? defaultPagination\r\n\r\n getRootClasses = () => {\r\n const classes = [tableGridClasses.root]\r\n if (this.filterState.loading) classes.push(tableGridClasses.loading)\r\n return classes.join(' ')\r\n }\r\n\r\n getItems = () => {\r\n return this.props.data.items ?? []\r\n }\r\n\r\n handleFilterChange = (filterStateChange: IFilterState<T>) => {\r\n this.setFilterState(filterStateChange)\r\n }\r\n\r\n handleChangePage = (_: React.MouseEvent<HTMLButtonElement, MouseEvent> | null, page: number) => {\r\n const pagination = this.getPagination()\r\n this.setFilterState({ pagination: { page, pageSize: pagination.pageSize } })\r\n }\r\n\r\n handleChangeRowsPerPage: React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement> = (event) => {\r\n this.setFilterState({ pagination: { page: 0, pageSize: parseInt(event.target.value, 10) } })\r\n }\r\n }\r\n\r\n return TableGrid\r\n}\r\n\r\nexport default CreateTableGrid\r\n\r\nconst Wrap = styled(Box)({\r\n flex: 1,\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n [`.${tableGridClasses.content}`]: {\r\n position: 'relative',\r\n flex: 1,\r\n zIndex: 1\r\n },\r\n [`.${tableGridClasses.contentPosition}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%'\r\n },\r\n [`.${tableGridClasses.contentInner}`]: {\r\n overflowY: 'auto',\r\n padding: '10px 5px'\r\n },\r\n [`.${tableGridClasses.overlay}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n background: alpha(colors.common.white, 0.4),\r\n zIndex: 10\r\n },\r\n [`.${tableGridClasses.noItems}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n [`.${tableGridClasses.item}`]: {\r\n position: 'relative'\r\n },\r\n [`.${tableGridClasses.actions}`]: {\r\n position: 'absolute',\r\n top: '5px',\r\n right: '5px',\r\n zIndex: 5,\r\n display: 'inline-block'\r\n },\r\n [`.${tablePaginationClasses.root}`]: {\r\n background: colors.common.white,\r\n position: 'relative',\r\n zIndex: 5\r\n }\r\n})\r\n\r\nconst ItemDefault = styled(Box)({\r\n width: '100%',\r\n paddingBottom: '100%',\r\n background: colors.grey[600]\r\n})\r\n"],"names":["CreateTableGrid","params","_params$filterBarConf","FilterBarInstance","CreateFilterBar","filterBarConfigs","fields","ItemActions","CreateTableGridItemActions","TableGrid","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","pagination","defaultPagination","value","details","filterStateStore","_objectSpread","mergeObjects","filterState","props","onFilterChange","forceUpdate","error","console","log","children","_jsxs","GlobalModal","_jsx","PopoverGlobal","Provider","_this$filterState$pag","classes","tableGridClasses","root","loading","push","join","_this$props$data$item","data","items","filterStateChange","setFilterState","_","page","getPagination","pageSize","event","parseInt","target","_inherits","Component","_createClass","key","get","_this$props$filter","filter","_ref","_this$props$slots$ite","_this$props$slots","_ref2","_this$props$slots$too","_this$props$slots2","_params$slots","Object","assign","slots","TableGridItem","item","ItemDefault","ToolbarPannel","toolbar","ToolbarPannelDefault","_params$size","size","xs","sm","md","_this$props$data$tota","_this2","_this$slots","actionProps","getItems","preRender","Wrap","className","getRootClasses","title","toolbarProps","onChange","handleFilterChange","content","contentInner","contentPosition","Grid","container","spacing","gridContainer","map","index","mergeConfig","gridItem","Box","actions","getSelecterId","toString","Fade","in","unmountOnExit","overlay","CircularProgress","noItems","Typography","variant","Divider","sx","position","zIndex","TablePagination","component","count","totalItems","onPageChange","handleChangePage","rowsPerPage","onRowsPerPageChange","handleChangeRowsPerPage","slotProps","select","MenuProps","disableScrollLock","styled","flex","height","display","flexDirection","top","left","width","overflowY","padding","alignItems","justifyContent","background","alpha","colors","common","white","right","tablePaginationClasses","paddingBottom","grey"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createClass as r,classCallCheck as e,defineProperty as t}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"./create.table-grid.js";import l from"./url-query-param.js";var s=new(r((function r(){e(this,r),t(this,"createTable",a),t(this,"setUrlQuery",l.setUrlQuery),t(this,"getUrlQuery",l.getUrlQuery)})));export{s as default};
1
+ import{createClass as r,classCallCheck as e,defineProperty as t}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"./create.table-grid.js";import{defaultPagination as s}from"./helpers.js";import l from"./url-query-param.js";var i=new(r((function r(){e(this,r),t(this,"defaultPagination",s),t(this,"createTable",a),t(this,"setUrlQuery",l.setUrlQuery),t(this,"getUrlQuery",l.getUrlQuery)})));export{i as default};
2
2
  //# sourceMappingURL=dino.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dino.js","sources":["../../src/table-grid/dino.tsx"],"sourcesContent":["import CreateLayoutGrid from './create.table-grid'\r\nimport UrlQueryParam from './url-query-param'\r\n\r\nclass DinoTableGridBase {\r\n createTable = CreateLayoutGrid\r\n\r\n setUrlQuery = UrlQueryParam.setUrlQuery\r\n\r\n getUrlQuery = UrlQueryParam.getUrlQuery\r\n}\r\n\r\nconst DinoTableGrid = new DinoTableGridBase()\r\nexport default DinoTableGrid\r\n"],"names":["DinoTableGrid","_createClass","DinoTableGridBase","_classCallCheck","_defineProperty","CreateLayoutGrid","this","UrlQueryParam","setUrlQuery","getUrlQuery"],"mappings":"yLAC6C,IAUvCA,EAAgB,IARCC,GAAA,SAAAC,IAAAC,OAAAD,GAAAE,qBACPC,GAAgBD,EAAAE,KAAA,cAEhBC,EAAcC,aAAWJ,EAAAE,KAAA,cAEzBC,EAAcE,YAAW"}
1
+ {"version":3,"file":"dino.js","sources":["../../src/table-grid/dino.tsx"],"sourcesContent":["import CreateLayoutGrid from './create.table-grid'\r\nimport { defaultPagination } from './helpers'\r\nimport UrlQueryParam from './url-query-param'\r\n\r\nclass DinoTableGridBase {\r\n defaultPagination = defaultPagination\r\n\r\n createTable = CreateLayoutGrid\r\n\r\n setUrlQuery = UrlQueryParam.setUrlQuery\r\n\r\n getUrlQuery = UrlQueryParam.getUrlQuery\r\n}\r\n\r\nconst DinoTableGrid = new DinoTableGridBase()\r\nexport default DinoTableGrid\r\n"],"names":["DinoTableGrid","_createClass","DinoTableGridBase","_classCallCheck","_defineProperty","defaultPagination","CreateLayoutGrid","this","UrlQueryParam","setUrlQuery","getUrlQuery"],"mappings":"0OAE6C,IAYvCA,EAAgB,IAVCC,GAAA,SAAAC,IAAAC,OAAAD,GAAAE,2BACDC,GAAiBD,qBAEvBE,GAAgBF,EAAAG,KAAA,cAEhBC,EAAcC,aAAWL,EAAAG,KAAA,cAEzBC,EAAcE,YAAW"}
@@ -1,2 +1,2 @@
1
- var e={root:"TableGrid-root",content:"TableGrid-content",contentPosition:"TableGrid-contentPosition",contentInner:"TableGrid-contentInner",loading:"TableGrid-loading",overlay:"TableGrid-overlay",item:"TableGrid-item",actions:"TableGrid-actions",noItems:"TableGrid-noItems"};export{e as tableGridClasses};
1
+ var e={page:0,pageSize:25},n={root:"TableGrid-root",content:"TableGrid-content",contentPosition:"TableGrid-contentPosition",contentInner:"TableGrid-contentInner",loading:"TableGrid-loading",overlay:"TableGrid-overlay",item:"TableGrid-item",actions:"TableGrid-actions",noItems:"TableGrid-noItems"};export{e as defaultPagination,n as tableGridClasses};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../src/table-grid/helpers.tsx"],"sourcesContent":["export const tableGridClasses = {\r\n root: 'TableGrid-root',\r\n content: 'TableGrid-content',\r\n contentPosition: 'TableGrid-contentPosition',\r\n contentInner: 'TableGrid-contentInner',\r\n loading: 'TableGrid-loading',\r\n overlay: 'TableGrid-overlay',\r\n item: 'TableGrid-item',\r\n actions: 'TableGrid-actions',\r\n noItems: 'TableGrid-noItems'\r\n}\r\n"],"names":["tableGridClasses","root","content","contentPosition","contentInner","loading","overlay","item","actions","noItems"],"mappings":"AAAO,IAAMA,EAAmB,CAC9BC,KAAM,iBACNC,QAAS,oBACTC,gBAAiB,4BACjBC,aAAc,yBACdC,QAAS,oBACTC,QAAS,oBACTC,KAAM,iBACNC,QAAS,oBACTC,QAAS"}
1
+ {"version":3,"file":"helpers.js","sources":["../../src/table-grid/helpers.tsx"],"sourcesContent":["import { IPaginationModel } from './types'\r\n\r\nexport const defaultPagination: IPaginationModel = { page: 0, pageSize: 25 }\r\n\r\nexport const tableGridClasses = {\r\n root: 'TableGrid-root',\r\n content: 'TableGrid-content',\r\n contentPosition: 'TableGrid-contentPosition',\r\n contentInner: 'TableGrid-contentInner',\r\n loading: 'TableGrid-loading',\r\n overlay: 'TableGrid-overlay',\r\n item: 'TableGrid-item',\r\n actions: 'TableGrid-actions',\r\n noItems: 'TableGrid-noItems'\r\n}\r\n"],"names":["defaultPagination","page","pageSize","tableGridClasses","root","content","contentPosition","contentInner","loading","overlay","item","actions","noItems"],"mappings":"AAEO,IAAMA,EAAsC,CAAEC,KAAM,EAAGC,SAAU,IAE3DC,EAAmB,CAC9BC,KAAM,iBACNC,QAAS,oBACTC,gBAAiB,4BACjBC,aAAc,yBACdC,QAAS,oBACTC,QAAS,oBACTC,KAAM,iBACNC,QAAS,oBACTC,QAAS"}
@@ -1,2 +1,2 @@
1
- import{createClass as t,classCallCheck as r,defineProperty as e}from"../_virtual/_rollupPluginBabelHelpers.js";import"dayjs";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import{QueryParam as a}from"../utils/query-param.js";var s=new(t((function t(){r(this,t),e(this,"getUrlQuery",(function(t){try{var r=a.Gets("table");return r.table?JSON.parse(r.table):t}catch(r){return t}})),e(this,"setUrlQuery",(function(t){a.ReplacePatch({table:JSON.stringify(t)})}))})));export{s as default};
1
+ import{createClass as e,classCallCheck as t,defineProperty as i,objectSpread2 as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{deepRemoveEmptyFields as r}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import{QueryParam as l}from"../utils/query-param.js";var o=new(e((function e(){var o=this;t(this,e),i(this,"getUrlQuery",(function(e){try{var t=l.Gets("table");return t.table?JSON.parse(t.table):null==e?void 0:e.defaultFilter}catch(t){return null==e?void 0:e.defaultFilter}})),i(this,"setUrlQuery",(function(e,t){var i=o.extractFilter(e,t),a=r(i);if(0===Object.keys(a).length)return l.ReplaceDeletes("table");l.ReplacePatch({table:JSON.stringify(a)})})),i(this,"extractFilter",(function(e,t){var i,r,l,o,n=(null==t?void 0:t.defaultFilter)||{},s=a({},e);delete s.details,delete s.loading;var u=(null===(i=s.pagination)||void 0===i?void 0:i.page)===(null===(r=n.pagination)||void 0===r?void 0:r.page),p=(null===(l=s.pagination)||void 0===l?void 0:l.pageSize)===(null===(o=n.pagination)||void 0===o?void 0:o.pageSize);return u&&p&&delete s.pagination,s}))})));export{o as default};
2
2
  //# sourceMappingURL=url-query-param.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-query-param.js","sources":["../../src/table-grid/url-query-param.ts"],"sourcesContent":["import { QueryParam } from '../utils'\r\nimport { ITableGridFilter } from './types'\r\n\r\nexport interface ITableGridQueryParams {\r\n table?: string\r\n}\r\n\r\nclass UrlQueryParamBase {\r\n getUrlQuery = <T>(defaultFilter: ITableGridFilter<T>) => {\r\n try {\r\n const query = QueryParam.Gets<ITableGridQueryParams>('table')\r\n return query.table ? JSON.parse(query.table) : defaultFilter\r\n } catch (error) {\r\n return defaultFilter\r\n }\r\n }\r\n\r\n setUrlQuery = <T>(params: ITableGridFilter<T>) => {\r\n QueryParam.ReplacePatch<ITableGridQueryParams>({ table: JSON.stringify(params) })\r\n }\r\n}\r\n\r\nconst UrlQueryParam = new UrlQueryParamBase()\r\nexport default UrlQueryParam\r\n"],"names":["UrlQueryParam","_createClass","UrlQueryParamBase","_classCallCheck","_defineProperty","this","defaultFilter","query","QueryParam","Gets","table","JSON","parse","error","params","ReplacePatch","stringify"],"mappings":"oRAAqC,IAsB/BA,EAAgB,IAfCC,GAAA,SAAAC,IAAAC,OAAAD,GAAAE,EAAAC,KAAA,eACP,SAAIC,GAChB,IACE,IAAMC,EAAQC,EAAWC,KAA4B,SACrD,OAAOF,EAAMG,MAAQC,KAAKC,MAAML,EAAMG,OAASJ,CAChD,CAAC,MAAOO,GACP,OAAOP,CACR,KACFF,EAAAC,KAAA,eAEa,SAAIS,GAChBN,EAAWO,aAAoC,CAAEL,MAAOC,KAAKK,UAAUF,OACxE"}
1
+ {"version":3,"file":"url-query-param.js","sources":["../../src/table-grid/url-query-param.ts"],"sourcesContent":["import { ITableGridFilter } from './types'\r\nimport { deepRemoveEmptyFields, QueryParam } from '../utils'\r\n\r\nexport interface ITableGridQueryParams {\r\n table?: string\r\n}\r\n\r\nexport interface IUrlQueryParamOptions<T> {\r\n defaultFilter?: ITableGridFilter<T>\r\n}\r\n\r\nclass UrlQueryParamBase {\r\n getUrlQuery = <T>(options?: IUrlQueryParamOptions<T>) => {\r\n try {\r\n const query = QueryParam.Gets<ITableGridQueryParams>('table')\r\n return query.table ? JSON.parse(query.table) : options?.defaultFilter\r\n } catch (error) {\r\n return options?.defaultFilter\r\n }\r\n }\r\n\r\n setUrlQuery = <T>(params: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>) => {\r\n const filter = this.extractFilter(params, options)\r\n const filterRemovedEmpty = deepRemoveEmptyFields(filter)\r\n\r\n if (Object.keys(filterRemovedEmpty).length === 0) {\r\n return QueryParam.ReplaceDeletes<ITableGridQueryParams>('table')\r\n }\r\n QueryParam.ReplacePatch<ITableGridQueryParams>({ table: JSON.stringify(filterRemovedEmpty) })\r\n }\r\n\r\n extractFilter = <T>(filter: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>): ITableGridFilter<T> => {\r\n const dFilter: Partial<ITableGridFilter<T>> = options?.defaultFilter || {}\r\n const obj = { ...filter }\r\n delete obj.details\r\n delete obj.loading\r\n\r\n const checkPagination1 = obj.pagination?.page === dFilter.pagination?.page\r\n const checkPagination2 = obj.pagination?.pageSize === dFilter.pagination?.pageSize\r\n if (checkPagination1 && checkPagination2) delete obj.pagination\r\n\r\n return obj\r\n }\r\n}\r\n\r\nconst UrlQueryParam = new UrlQueryParamBase()\r\nexport default UrlQueryParam\r\n"],"names":["UrlQueryParam","_createClass","UrlQueryParamBase","_this","this","_classCallCheck","_defineProperty","options","query","QueryParam","Gets","table","JSON","parse","defaultFilter","error","params","filter","extractFilter","filterRemovedEmpty","deepRemoveEmptyFields","Object","keys","length","ReplaceDeletes","ReplacePatch","stringify","_obj$pagination","_dFilter$pagination","_obj$pagination2","_dFilter$pagination2","dFilter","obj","_objectSpread","details","loading","checkPagination1","pagination","page","checkPagination2","pageSize"],"mappings":"qVAC4D,IA4CtDA,EAAgB,IAlCCC,GAAA,SAAAC,IAAA,IAAAC,EAAAC,KAAAC,OAAAH,GAAAI,EAAAF,KAAA,eACP,SAAIG,GAChB,IACE,IAAMC,EAAQC,EAAWC,KAA4B,SACrD,OAAOF,EAAMG,MAAQC,KAAKC,MAAML,EAAMG,OAASJ,aAAAA,EAAAA,EAASO,aACzD,CAAC,MAAOC,GACP,OAAOR,aAAAA,EAAAA,EAASO,aACjB,KACFR,EAEaF,KAAA,eAAA,SAAIY,EAA6BT,GAC7C,IAAMU,EAASd,EAAKe,cAAcF,EAAQT,GACpCY,EAAqBC,EAAsBH,GAEjD,GAA+C,IAA3CI,OAAOC,KAAKH,GAAoBI,OAClC,OAAOd,EAAWe,eAAsC,SAE1Df,EAAWgB,aAAoC,CAAEd,MAAOC,KAAKc,UAAUP,QACxEb,EAEeF,KAAA,iBAAA,SAAIa,EAA6BV,GAA2D,IAAAoB,EAAAC,EAAAC,EAAAC,EACpGC,GAAwCxB,aAAAA,EAAAA,EAASO,gBAAiB,CAAE,EACpEkB,EAAGC,EAAA,CAAA,EAAQhB,UACVe,EAAIE,eACJF,EAAIG,QAEX,IAAMC,GAAiCT,QAAdA,EAAAK,EAAIK,kBAAJV,IAAcA,OAAdA,EAAAA,EAAgBW,SAA2B,QAAvBV,EAAKG,EAAQM,kBAAU,IAAAT,OAAA,EAAlBA,EAAoBU,MAChEC,GAAiCV,QAAdA,EAAAG,EAAIK,kBAAJR,IAAcA,OAAdA,EAAAA,EAAgBW,aAA+B,QAAvBV,EAAKC,EAAQM,kBAAU,IAAAP,OAAA,EAAlBA,EAAoBU,UAG1E,OAFIJ,GAAoBG,UAAyBP,EAAIK,WAE9CL,IACR"}
@@ -1,4 +1,4 @@
1
1
  import { ComponentType } from 'react';
2
- import { IFilterBarParams, IFilterBarProps } from './types';
3
- declare function CreateFilterBar<T>(params: IFilterBarParams<T>): ComponentType<IFilterBarProps<T>>;
2
+ import { IFilterBarConfigs, IFilterBarProps } from './types';
3
+ declare function CreateFilterBar<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterBarProps<T>>;
4
4
  export default CreateFilterBar;
@@ -1,6 +1,6 @@
1
1
  import { ComponentType } from 'react';
2
2
  import { ButtonProps } from '@mui/material';
3
- import { IFilterBarParams, IFilterModel, IFilterSubmitFunc } from './types';
3
+ import { IFilterBarConfigs, IFilterModel, IFilterSubmitFunc } from './types';
4
4
  export interface IFilterMenuProps<T> {
5
5
  onSubmit?: IFilterSubmitFunc<T>;
6
6
  onCancel?: ButtonProps['onClick'];
@@ -9,5 +9,5 @@ export interface IFilterMenuState<T> {
9
9
  fieldSelected: keyof IFilterModel<T> | null;
10
10
  messageError?: string;
11
11
  }
12
- declare function CreateFilterMenu<T>(params: IFilterBarParams<T>): ComponentType<IFilterMenuProps<T>>;
12
+ declare function CreateFilterMenu<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterMenuProps<T>>;
13
13
  export default CreateFilterMenu;
@@ -1,5 +1,5 @@
1
1
  import { ComponentType, PropsWithChildren } from 'react';
2
- import { IFilterReason, IFilterSubmitFunc, IFilterBarParams } from './types';
2
+ import { IFilterReason, IFilterSubmitFunc, IFilterBarConfigs } from './types';
3
3
  export interface IFilterPanelState {
4
4
  anchorEl: HTMLElement | null;
5
5
  reason?: IFilterReason;
@@ -9,5 +9,5 @@ interface IFilterPanelProps<T> extends IFilterPanelState, PropsWithChildren {
9
9
  onSubmit?: IFilterSubmitFunc<T>;
10
10
  onClose?: () => void;
11
11
  }
12
- declare function CreateFilterPanel<T>(params: IFilterBarParams<T>): ComponentType<IFilterPanelProps<T>>;
12
+ declare function CreateFilterPanel<T>(params: IFilterBarConfigs<T>): ComponentType<IFilterPanelProps<T>>;
13
13
  export default CreateFilterPanel;
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- import { IFilterBarParams, IFilterState, IFilterSubmitFunc } from './types';
2
+ import { IFilterBarConfigs, IFilterState, IFilterSubmitFunc } from './types';
3
3
  interface IProps<T> {
4
4
  filterState: IFilterState<T>;
5
5
  onRemove?: IFilterSubmitFunc<T>;
6
6
  }
7
- declare function CreateFiltered<T>(params: IFilterBarParams<T>): {
7
+ declare function CreateFiltered<T>(params: IFilterBarConfigs<T>): {
8
8
  new (props: IProps<T>): {
9
9
  render(): import("react/jsx-runtime").JSX.Element;
10
10
  renderQuickSearch: () => import("react/jsx-runtime").JSX.Element;
@@ -83,7 +83,7 @@ export interface IFilterState<T> {
83
83
  quickSearch?: IQuickSearchModel<T>;
84
84
  details?: 'add' | 'remove';
85
85
  }
86
- export interface IFilterBarParams<T> {
86
+ export interface IFilterBarConfigs<T> {
87
87
  fields: IFilterFields<T>;
88
88
  quickSearch?: IQuickSearchDef<T>;
89
89
  id?: string;
@@ -5,6 +5,7 @@ type IModelBase = {
5
5
  [key: string]: any;
6
6
  };
7
7
  export declare const convertFormDataToJson: <TModel>(form: FormData) => Partial<TModel>;
8
+ export declare const trimAllStrings: <T>(obj: T) => Partial<T>;
8
9
  export declare const singleValidate: <TModel, TPartial = TModel>(key: keyof TModel, modelState: TPartial, MessageErrors: IPartialError<TModel>, Validator: FormValidator<TPartial>) => {
9
10
  [key: string]: any;
10
11
  } | null;
@@ -1,8 +1,9 @@
1
1
  import CreateLayoutGrid from './create.table-grid';
2
2
  declare class DinoTableGridBase {
3
+ defaultPagination: import("./types").IPaginationModel;
3
4
  createTable: typeof CreateLayoutGrid;
4
- setUrlQuery: <T>(params: import("./types").ITableGridFilter<T>) => void;
5
- getUrlQuery: <T>(defaultFilter: import("./types").ITableGridFilter<T>) => any;
5
+ setUrlQuery: <T>(params: import("./types").ITableGridFilter<T>, options?: import("./url-query-param").IUrlQueryParamOptions<T> | undefined) => void;
6
+ getUrlQuery: <T>(options?: import("./url-query-param").IUrlQueryParamOptions<T> | undefined) => any;
6
7
  }
7
8
  declare const DinoTableGrid: DinoTableGridBase;
8
9
  export default DinoTableGrid;
@@ -1,3 +1,5 @@
1
+ import { IPaginationModel } from './types';
2
+ export declare const defaultPagination: IPaginationModel;
1
3
  export declare const tableGridClasses: {
2
4
  root: string;
3
5
  content: string;
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
2
  import { GridProps, RegularBreakpoints } from '@mui/material';
3
3
  import { IToolbarPannelProps } from './toolbar-pannel';
4
- import { IFilterBarParams, IFilterState } from '../filter-bar';
4
+ import { IFilterBarConfigs, IFilterState } from '../filter-bar';
5
5
  import { TableGridItemActionsConfig, ITableGridItemActionsBaseProps } from './item-actions';
6
6
  export interface ITableGridItemProps<T = any> {
7
7
  value: T;
@@ -12,7 +12,7 @@ export interface IPaginationModel {
12
12
  pageSize: number;
13
13
  }
14
14
  export interface ITableGridFilter<T> extends IFilterState<T> {
15
- pagination: IPaginationModel;
15
+ pagination?: IPaginationModel;
16
16
  loading?: boolean;
17
17
  }
18
18
  export interface ITableGridFlexibleSlots<T> {
@@ -34,7 +34,7 @@ export interface ITableGridInnerSlots<T> extends ITableGridSlots<T> {
34
34
  export interface ITableGridParams<T> extends ITableGridFlexibleSlots<T> {
35
35
  getSelecterId: IGetSelecterIdFunc<T>;
36
36
  title?: ReactNode;
37
- filterBarConfig?: IFilterBarParams<T>;
37
+ filterBarConfigs?: IFilterBarConfigs<T>;
38
38
  size?: RegularBreakpoints;
39
39
  slots?: ITableGridSlots<T>;
40
40
  }
@@ -48,9 +48,9 @@ export interface ITableGridProps<T> {
48
48
  onFilterChange?: (value: ITableGridFilter<T>) => void;
49
49
  slots?: ITableGridSlots<T>;
50
50
  }
51
- export interface ITableGridReduxState<T> {
51
+ export interface ITableGridReduxStateDef<T> {
52
52
  tableData: ITableGridData<T>;
53
53
  tableFilter: ITableGridFilter<T>;
54
54
  tableFilterThunk: ITableGridFilter<T>;
55
55
  }
56
- export type ITableGridStateRedux<T, K extends keyof ITableGridReduxState<T> = keyof ITableGridReduxState<T>> = Pick<ITableGridReduxState<T>, K>;
56
+ export type ITableGridReduxState<T, K extends keyof ITableGridReduxStateDef<T> = keyof ITableGridReduxStateDef<T>> = Pick<ITableGridReduxStateDef<T>, K>;
@@ -2,9 +2,13 @@ import { ITableGridFilter } from './types';
2
2
  export interface ITableGridQueryParams {
3
3
  table?: string;
4
4
  }
5
+ export interface IUrlQueryParamOptions<T> {
6
+ defaultFilter?: ITableGridFilter<T>;
7
+ }
5
8
  declare class UrlQueryParamBase {
6
- getUrlQuery: <T>(defaultFilter: ITableGridFilter<T>) => any;
7
- setUrlQuery: <T>(params: ITableGridFilter<T>) => void;
9
+ getUrlQuery: <T>(options?: IUrlQueryParamOptions<T> | undefined) => any;
10
+ setUrlQuery: <T>(params: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T> | undefined) => void;
11
+ extractFilter: <T>(filter: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T> | undefined) => ITableGridFilter<T>;
8
12
  }
9
13
  declare const UrlQueryParam: UrlQueryParamBase;
10
14
  export default UrlQueryParam;
@@ -11,6 +11,7 @@ type DeepPartial<T> = {
11
11
  } | undefined;
12
12
  export declare const mergeObjects: <T>(...objects: DeepPartial<T>[]) => T;
13
13
  export declare const cleanObject: <T extends object>(obj: T) => Partial<T>;
14
+ export declare const deepRemoveEmptyFields: <T extends object>(obj: T) => T;
14
15
  export declare const encodeBase64: (input: string) => string;
15
16
  export declare const decodeBase64: (encoded: string) => string | undefined;
16
17
  export declare const tryParseObject: <T>(value: any, defaultValue: T) => T;
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r,asyncToGenerator as t,typeof as n,regenerator as e,objectSpread2 as o,toArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import c from"dayjs";var i=function(r){return new Promise((function(t){return setTimeout(t,r)}))},u=function(){var n=t(e().m((function t(n,o){var a,c,u;return e().w((function(t){for(;;)switch(t.n){case 0:return t.n=1,Promise.all([n(),i(o)]);case 1:return a=t.v,c=r(a,1),u=c[0],t.a(2,u)}}),t)})));return function(r,t){return n.apply(this,arguments)}}(),f=function(r){return/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(r)},s=function(r){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)},l=function(r){return/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())},d=function(r){return/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(r)},h=function(r,t){setTimeout((function(){window.scrollTo(o({top:0,left:0,behavior:"smooth"},r))}),t||50)},v=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.join(" ")},y=function(r){return r&&"object"===n(r)&&!Array.isArray(r)},p=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.reduce((function(r,t){return t?(Object.keys(t).forEach((function(n){y(r[n])&&y(t[n])?r[n]=p(r[n],t[n]):r[n]=t[n]})),r):r}),{})},m=function(t){try{return t?Object.entries(t).reduce((function(t,n){var e=r(n,2),o=e[0],a=e[1];return void 0!==a&&(t[o]=a),t}),{}):{}}catch(r){return{}}},A=function(r){try{var t=(new TextEncoder).encode(r),n="";return t.forEach((function(r){n+=String.fromCharCode(r)})),btoa(n)}catch(r){return console.error("Error encoding to base64",r),""}},g=function(r){try{for(var t=atob(r),n=new Uint8Array(t.length),e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return(new TextDecoder).decode(n)}catch(r){return void console.error("Error decoding base64",r)}},w=function(r,t){try{if(!r)throw new Error("Value is required!");return JSON.parse(r)}catch(r){return t}},b=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{if(!r)return[];var n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(r){return t}},F=function(r,t){try{return r?parseInt(r):t}catch(r){return t}},Y=function(r){return new Promise((function(t,n){var e=new FileReader;e.onload=function(){try{var r=e.result.split(/\r?\n/).filter(Boolean);if(r.length<1)return t([]);var n=r[0].split(",").map((function(r){return r.trim()})),o=r.slice(1).map((function(r){var t=r.split(",").map((function(r){return r.trim()})),e={};return n.forEach((function(r,n){var o;e[r]=null!==(o=t[n])&&void 0!==o?o:""})),e}));t(o)}catch(r){t([])}},e.onerror=function(){n(new Error("Error reading file"))},e.readAsText(r)}))},E=function(r){return r<1024?r.toFixed(2)+" Kb":r<1048576?(r/1024).toFixed(2)+" Mb":r<1073741824?(r/1048576).toFixed(2)+" Gb":(r/1073741824).toFixed(2)+" Tb"},j=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$ ",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{n=parseFloat(t),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),c=r(a,2),i=c[0],u=c[1],f=i.replace(/\B(?=(\d{3})+(?!\d))/g," "),s=f;return"00"!==u&&(s="".concat(f,".").concat(u)),"".concat(e).concat(s).concat(o)},x=function(r){return r.toLocaleString("en-US")},M=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!r)return r;var t=Array.from(r),n=a(t),e=n[0],o=n.slice(1);return"".concat(e.toUpperCase()).concat(o.join(""))},T={style1:"DD/MM/YYYY HH:mm",style2:"MMMM D, YYYY",style3:"MM-DD-YYYY"},D=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"style1";try{if(!r)throw new Error;return c(r).format(T[t])}catch(r){return"unknown"}};export{m as cleanObject,g as decodeBase64,A as encodeBase64,u as fetchDelay,M as formatCapitalizeFirstText,j as formatCurrency,D as formatDatetime,E as formatFileSize,x as formatNumberWithCommas,f as isGuid,s as isValidEmail,l as isValidPhoneNumber,d as isValidURL,v as mergeClasses,p as mergeObjects,i as sleep,b as tryParseArray,Y as tryParseCsvFileToArray,F as tryParseIntRequired,w as tryParseObject,h as windowScrollToTop};
1
+ import{slicedToArray as r,asyncToGenerator as t,typeof as n,regenerator as e,objectSpread2 as o,toArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import i from"dayjs";var c=function(r){return new Promise((function(t){return setTimeout(t,r)}))},u=function(){var n=t(e().m((function t(n,o){var a,i,u;return e().w((function(t){for(;;)switch(t.n){case 0:return t.n=1,Promise.all([n(),c(o)]);case 1:return a=t.v,i=r(a,1),u=i[0],t.a(2,u)}}),t)})));return function(r,t){return n.apply(this,arguments)}}(),s=function(r){return/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(r)},f=function(r){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)},l=function(r){return/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())},d=function(r){return/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(r)},y=function(r,t){setTimeout((function(){window.scrollTo(o({top:0,left:0,behavior:"smooth"},r))}),t||50)},h=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.join(" ")},v=function(r){return r&&"object"===n(r)&&!Array.isArray(r)},p=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.reduce((function(r,t){return t?(Object.keys(t).forEach((function(n){v(r[n])&&v(t[n])?r[n]=p(r[n],t[n]):r[n]=t[n]})),r):r}),{})},A=function(t){try{return t?Object.entries(t).reduce((function(t,n){var e=r(n,2),o=e[0],a=e[1];return void 0!==a&&(t[o]=a),t}),{}):{}}catch(r){return{}}},m=function(t){if("object"!==n(t)||null===t)return t;var e=Array.isArray(t)?[]:{};return Object.entries(t).forEach((function(t){var o=r(t,2),a=o[0],i=o[1];if(null==i||"string"==typeof i&&""===i.trim()||"number"==typeof i&&isNaN(i)||Array.isArray(i)&&0===i.length||"object"===n(i)&&!Array.isArray(i)&&0===Object.keys(m(i)).length);else if("object"!==n(i)||Array.isArray(i))e[a]=i;else{var c=m(i);Object.keys(c).length>0&&(e[a]=c)}})),e},g=function(r){try{var t=(new TextEncoder).encode(r),n="";return t.forEach((function(r){n+=String.fromCharCode(r)})),btoa(n)}catch(r){return console.error("Error encoding to base64",r),""}},b=function(r){try{for(var t=atob(r),n=new Uint8Array(t.length),e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return(new TextDecoder).decode(n)}catch(r){return void console.error("Error decoding base64",r)}},w=function(r,t){try{if(!r)throw new Error("Value is required!");return JSON.parse(r)}catch(r){return t}},j=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{if(!r)return[];var n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(r){return t}},F=function(r,t){try{return r?parseInt(r):t}catch(r){return t}},E=function(r){return new Promise((function(t,n){var e=new FileReader;e.onload=function(){try{var r=e.result.split(/\r?\n/).filter(Boolean);if(r.length<1)return t([]);var n=r[0].split(",").map((function(r){return r.trim()})),o=r.slice(1).map((function(r){var t=r.split(",").map((function(r){return r.trim()})),e={};return n.forEach((function(r,n){var o;e[r]=null!==(o=t[n])&&void 0!==o?o:""})),e}));t(o)}catch(r){t([])}},e.onerror=function(){n(new Error("Error reading file"))},e.readAsText(r)}))},Y=function(r){return r<1024?r.toFixed(2)+" Kb":r<1048576?(r/1024).toFixed(2)+" Mb":r<1073741824?(r/1048576).toFixed(2)+" Gb":(r/1073741824).toFixed(2)+" Tb"},x=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$ ",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{n=parseFloat(t),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),i=r(a,2),c=i[0],u=i[1],s=c.replace(/\B(?=(\d{3})+(?!\d))/g," "),f=s;return"00"!==u&&(f="".concat(s,".").concat(u)),"".concat(e).concat(f).concat(o)},M=function(r){return r.toLocaleString("en-US")},T=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!r)return r;var t=Array.from(r),n=a(t),e=n[0],o=n.slice(1);return"".concat(e.toUpperCase()).concat(o.join(""))},O={style1:"DD/MM/YYYY HH:mm",style2:"MMMM D, YYYY",style3:"MM-DD-YYYY"},D=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"style1";try{if(!r)throw new Error;return i(r).format(O[t])}catch(r){return"unknown"}};export{A as cleanObject,b as decodeBase64,m as deepRemoveEmptyFields,g as encodeBase64,u as fetchDelay,T as formatCapitalizeFirstText,x as formatCurrency,D as formatDatetime,Y as formatFileSize,M as formatNumberWithCommas,s as isGuid,f as isValidEmail,l as isValidPhoneNumber,d as isValidURL,h as mergeClasses,p as mergeObjects,c as sleep,j as tryParseArray,E as tryParseCsvFileToArray,F as tryParseIntRequired,w as tryParseObject,y as windowScrollToTop};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../src/utils/helpers.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\nexport const isGuid = (value: string): boolean => {\r\n const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/\r\n return guidRegex.test(value)\r\n}\r\n\r\nexport const isValidEmail = (value: string) => {\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return regex.test(value)\r\n}\r\n\r\nexport const isValidPhoneNumber = (phoneNumber?: string): boolean => {\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return phoneRegex.test((phoneNumber ?? '').trim())\r\n}\r\n\r\nexport const isValidURL = (url: string): boolean => {\r\n const regex = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i\r\n return regex.test(url)\r\n}\r\n\r\nexport const windowScrollToTop = (options?: ScrollToOptions, delay?: number) => {\r\n setTimeout(() => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth', ...options })\r\n }, delay || 50)\r\n}\r\n\r\nexport const mergeClasses = (...classes: string[]) => {\r\n return classes.join(' ')\r\n}\r\n\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nconst isObject = (obj: any) => {\r\n return obj && typeof obj === 'object' && !Array.isArray(obj)\r\n}\r\n\r\ntype DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] } | undefined\r\n\r\nexport const mergeObjects = <T>(...objects: DeepPartial<T>[]): T => {\r\n return objects.reduce((prev, obj) => {\r\n if (!obj) return prev\r\n Object.keys(obj).forEach((key) => {\r\n if (isObject((prev as any)[key]) && isObject((obj as any)[key])) {\r\n ;(prev as any)[key] = mergeObjects((prev as any)[key], (obj as any)[key])\r\n } else {\r\n ;(prev as any)[key] = (obj as any)[key]\r\n }\r\n })\r\n return prev\r\n }, {} as T) as any\r\n}\r\n\r\nexport const cleanObject = <T extends object>(obj: T): Partial<T> => {\r\n try {\r\n if (!obj) return {}\r\n return Object.entries(obj).reduce((acc, [key, value]) => {\r\n if (value !== undefined) {\r\n ;(acc as any)[key] = value\r\n }\r\n return acc\r\n }, {} as Partial<T>)\r\n } catch (error) {\r\n return {}\r\n }\r\n}\r\n\r\nexport const encodeBase64 = (input: string): string => {\r\n try {\r\n const utf8Bytes = new TextEncoder().encode(input)\r\n let binaryString = ''\r\n utf8Bytes.forEach((byte) => {\r\n binaryString += String.fromCharCode(byte)\r\n })\r\n return btoa(binaryString)\r\n } catch (error) {\r\n console.error('Error encoding to base64', error)\r\n return ''\r\n }\r\n}\r\n\r\nexport const decodeBase64 = (encoded: string): string | undefined => {\r\n try {\r\n const binaryString = atob(encoded)\r\n const utf8Bytes = new Uint8Array(binaryString.length)\r\n for (let i = 0; i < binaryString.length; i++) {\r\n utf8Bytes[i] = binaryString.charCodeAt(i)\r\n }\r\n return new TextDecoder().decode(utf8Bytes)\r\n } catch (error) {\r\n console.error('Error decoding base64', error)\r\n return\r\n }\r\n}\r\n\r\n//#region Try Parse\r\nexport const tryParseObject = function <T>(value: any, defaultValue: T): T {\r\n try {\r\n if (!value) {\r\n throw new Error('Value is required!')\r\n }\r\n return JSON.parse(value)\r\n } catch {\r\n // console.log(error)\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseArray = function <T>(value: any, defaultValue: T[] = []): T[] {\r\n try {\r\n if (!value) return []\r\n const parseValue = JSON.parse(value)\r\n return Array.isArray(parseValue) ? parseValue : []\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseIntRequired = function (value: any, defaultValue: number): number {\r\n try {\r\n if (!value) return defaultValue\r\n return parseInt(value)\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseCsvFileToArray = (file: File): Promise<Record<string, string>[]> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n try {\r\n const text = reader.result as string\r\n const rows = text.split(/\\r?\\n/).filter(Boolean)\r\n\r\n if (rows.length < 1) return resolve([])\r\n\r\n const headers = rows[0].split(',').map((h) => h.trim())\r\n\r\n const data = rows.slice(1).map((row) => {\r\n const values = row.split(',').map((v) => v.trim())\r\n const item: Record<string, string> = {}\r\n\r\n headers.forEach((header, index) => {\r\n item[header] = values[index] ?? ''\r\n })\r\n\r\n return item\r\n })\r\n\r\n resolve(data)\r\n } catch (error) {\r\n resolve([])\r\n }\r\n }\r\n\r\n reader.onerror = () => {\r\n reject(new Error('Error reading file'))\r\n }\r\n\r\n reader.readAsText(file)\r\n })\r\n}\r\n//#endregion\r\n\r\n//#region Format\r\nexport const formatFileSize = (sizeInKb: number) => {\r\n if (sizeInKb < 1024) {\r\n return sizeInKb.toFixed(2) + ' Kb'\r\n } else if (sizeInKb < 1024 * 1024) {\r\n return (sizeInKb / 1024).toFixed(2) + ' Mb'\r\n } else if (sizeInKb < 1024 * 1024 * 1024) {\r\n return (sizeInKb / (1024 * 1024)).toFixed(2) + ' Gb'\r\n } else {\r\n return (sizeInKb / (1024 * 1024 * 1024)).toFixed(2) + ' Tb'\r\n }\r\n}\r\n\r\nexport const formatCurrency = (value?: any, prefix = '$ ', suffix = ''): string => {\r\n let parsedValue\r\n try {\r\n parsedValue = parseFloat(value)\r\n if (isNaN(parsedValue)) parsedValue = 0\r\n } catch (e) {\r\n parsedValue = 0\r\n }\r\n const roundedValue = parsedValue.toFixed(2)\r\n const [integerPart, decimalPart] = roundedValue.split('.')\r\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ')\r\n\r\n let formattedValue = formattedIntegerPart\r\n if (decimalPart !== '00') {\r\n formattedValue = `${formattedIntegerPart}.${decimalPart}`\r\n }\r\n return `${prefix}${formattedValue}${suffix}`\r\n}\r\n\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n return number.toLocaleString('en-US')\r\n}\r\n\r\nexport const formatCapitalizeFirstText = (value: string = '') => {\r\n if (!value) return value\r\n const [first, ...data] = Array.from(value)\r\n return `${first.toUpperCase()}${data.join('')}`\r\n}\r\n\r\nconst formatDatetimeStyle = {\r\n style1: 'DD/MM/YYYY HH:mm',\r\n style2: 'MMMM D, YYYY',\r\n style3: 'MM-DD-YYYY'\r\n}\r\n\r\n/**\r\n * Formats a datetime string using one of the predefined styles.\r\n *\r\n * Available format styles:\r\n * - style1: DD/MM/YYYY HH:mm → e.g., '25/04/2025 14:30'\r\n * - style2: 'MMMM D, YYYY' → e.g., 'April 25, 2025'\r\n * - style2: 'MM-DD-YYYY' → e.g., '04-25-2025'\r\n * @param value - A datetime string (ISO format or any format parsable by dayjs).\r\n * @param format - Format style key: 'style1' or 'style2'. Defaults to 'style1'.\r\n * @returns A formatted datetime string, or 'unknown' if the input is invalid or unparsable.\r\n */\r\nexport const formatDatetime = (value: string, format: keyof typeof formatDatetimeStyle = 'style1'): string => {\r\n try {\r\n if (!value) throw new Error()\r\n return dayjs(value).format(formatDatetimeStyle[format])\r\n } catch (error) {\r\n return 'unknown'\r\n }\r\n}\r\n//#endregion\r\n"],"names":["sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","isGuid","value","test","isValidEmail","isValidPhoneNumber","phoneNumber","trim","isValidURL","url","windowScrollToTop","options","delay","window","scrollTo","_objectSpread","top","left","behavior","mergeClasses","_len","length","classes","Array","_key","join","isObject","obj","_typeof","isArray","mergeObjects","_len2","objects","_key2","reduce","prev","Object","keys","forEach","key","cleanObject","entries","acc","_ref2","_ref3","undefined","error","encodeBase64","input","utf8Bytes","TextEncoder","encode","binaryString","byte","String","fromCharCode","btoa","console","decodeBase64","encoded","atob","Uint8Array","i","charCodeAt","TextDecoder","decode","tryParseObject","defaultValue","Error","JSON","parse","_unused","tryParseArray","parseValue","_unused2","tryParseIntRequired","parseInt","_unused3","tryParseCsvFileToArray","file","resolve","reject","reader","FileReader","onload","rows","result","split","filter","Boolean","headers","map","h","data","slice","row","values","item","header","index","_values$index","onerror","readAsText","formatFileSize","sizeInKb","toFixed","formatCurrency","parsedValue","prefix","suffix","parseFloat","isNaN","e","_roundedValue$split","_roundedValue$split2","integerPart","decimalPart","formattedIntegerPart","replace","formattedValue","concat","formatNumberWithCommas","number","toLocaleString","formatCapitalizeFirstText","_Array$from","from","_Array$from2","_toArray","first","toUpperCase","formatDatetimeStyle","style1","style2","style3","formatDatetime","format","dayjs"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../src/utils/helpers.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\nexport const isGuid = (value: string): boolean => {\r\n const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/\r\n return guidRegex.test(value)\r\n}\r\n\r\nexport const isValidEmail = (value: string) => {\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return regex.test(value)\r\n}\r\n\r\nexport const isValidPhoneNumber = (phoneNumber?: string): boolean => {\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return phoneRegex.test((phoneNumber ?? '').trim())\r\n}\r\n\r\nexport const isValidURL = (url: string): boolean => {\r\n const regex = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i\r\n return regex.test(url)\r\n}\r\n\r\nexport const windowScrollToTop = (options?: ScrollToOptions, delay?: number) => {\r\n setTimeout(() => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth', ...options })\r\n }, delay || 50)\r\n}\r\n\r\nexport const mergeClasses = (...classes: string[]) => {\r\n return classes.join(' ')\r\n}\r\n\r\n//#region Object\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nconst isObject = (obj: any) => {\r\n return obj && typeof obj === 'object' && !Array.isArray(obj)\r\n}\r\n\r\ntype DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] } | undefined\r\n\r\nexport const mergeObjects = <T>(...objects: DeepPartial<T>[]): T => {\r\n return objects.reduce((prev, obj) => {\r\n if (!obj) return prev\r\n Object.keys(obj).forEach((key) => {\r\n if (isObject((prev as any)[key]) && isObject((obj as any)[key])) {\r\n ;(prev as any)[key] = mergeObjects((prev as any)[key], (obj as any)[key])\r\n } else {\r\n ;(prev as any)[key] = (obj as any)[key]\r\n }\r\n })\r\n return prev\r\n }, {} as T) as any\r\n}\r\n\r\nexport const cleanObject = <T extends object>(obj: T): Partial<T> => {\r\n try {\r\n if (!obj) return {}\r\n return Object.entries(obj).reduce((acc, [key, value]) => {\r\n if (value !== undefined) {\r\n ;(acc as any)[key] = value\r\n }\r\n return acc\r\n }, {} as Partial<T>)\r\n } catch (error) {\r\n return {}\r\n }\r\n}\r\n\r\nexport const deepRemoveEmptyFields = <T extends object>(obj: T): T => {\r\n if (typeof obj !== 'object' || obj === null) return obj\r\n const result: any = Array.isArray(obj) ? [] : {}\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n (typeof value === 'string' && value.trim() === '') ||\r\n (typeof value === 'number' && isNaN(value)) ||\r\n (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'object' && !Array.isArray(value) && Object.keys(deepRemoveEmptyFields(value)).length === 0)\r\n ) {\r\n // skip\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n const cleaned = deepRemoveEmptyFields(value)\r\n if (Object.keys(cleaned).length > 0) result[key] = cleaned\r\n } else {\r\n result[key] = value\r\n }\r\n })\r\n return result\r\n}\r\n//#endregion\r\n\r\nexport const encodeBase64 = (input: string): string => {\r\n try {\r\n const utf8Bytes = new TextEncoder().encode(input)\r\n let binaryString = ''\r\n utf8Bytes.forEach((byte) => {\r\n binaryString += String.fromCharCode(byte)\r\n })\r\n return btoa(binaryString)\r\n } catch (error) {\r\n console.error('Error encoding to base64', error)\r\n return ''\r\n }\r\n}\r\n\r\nexport const decodeBase64 = (encoded: string): string | undefined => {\r\n try {\r\n const binaryString = atob(encoded)\r\n const utf8Bytes = new Uint8Array(binaryString.length)\r\n for (let i = 0; i < binaryString.length; i++) {\r\n utf8Bytes[i] = binaryString.charCodeAt(i)\r\n }\r\n return new TextDecoder().decode(utf8Bytes)\r\n } catch (error) {\r\n console.error('Error decoding base64', error)\r\n return\r\n }\r\n}\r\n\r\n//#region Try Parse\r\nexport const tryParseObject = function <T>(value: any, defaultValue: T): T {\r\n try {\r\n if (!value) {\r\n throw new Error('Value is required!')\r\n }\r\n return JSON.parse(value)\r\n } catch {\r\n // console.log(error)\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseArray = function <T>(value: any, defaultValue: T[] = []): T[] {\r\n try {\r\n if (!value) return []\r\n const parseValue = JSON.parse(value)\r\n return Array.isArray(parseValue) ? parseValue : []\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseIntRequired = function (value: any, defaultValue: number): number {\r\n try {\r\n if (!value) return defaultValue\r\n return parseInt(value)\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseCsvFileToArray = (file: File): Promise<Record<string, string>[]> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n try {\r\n const text = reader.result as string\r\n const rows = text.split(/\\r?\\n/).filter(Boolean)\r\n\r\n if (rows.length < 1) return resolve([])\r\n\r\n const headers = rows[0].split(',').map((h) => h.trim())\r\n\r\n const data = rows.slice(1).map((row) => {\r\n const values = row.split(',').map((v) => v.trim())\r\n const item: Record<string, string> = {}\r\n\r\n headers.forEach((header, index) => {\r\n item[header] = values[index] ?? ''\r\n })\r\n\r\n return item\r\n })\r\n\r\n resolve(data)\r\n } catch (error) {\r\n resolve([])\r\n }\r\n }\r\n\r\n reader.onerror = () => {\r\n reject(new Error('Error reading file'))\r\n }\r\n\r\n reader.readAsText(file)\r\n })\r\n}\r\n//#endregion\r\n\r\n//#region Format\r\nexport const formatFileSize = (sizeInKb: number) => {\r\n if (sizeInKb < 1024) {\r\n return sizeInKb.toFixed(2) + ' Kb'\r\n } else if (sizeInKb < 1024 * 1024) {\r\n return (sizeInKb / 1024).toFixed(2) + ' Mb'\r\n } else if (sizeInKb < 1024 * 1024 * 1024) {\r\n return (sizeInKb / (1024 * 1024)).toFixed(2) + ' Gb'\r\n } else {\r\n return (sizeInKb / (1024 * 1024 * 1024)).toFixed(2) + ' Tb'\r\n }\r\n}\r\n\r\nexport const formatCurrency = (value?: any, prefix = '$ ', suffix = ''): string => {\r\n let parsedValue\r\n try {\r\n parsedValue = parseFloat(value)\r\n if (isNaN(parsedValue)) parsedValue = 0\r\n } catch (e) {\r\n parsedValue = 0\r\n }\r\n const roundedValue = parsedValue.toFixed(2)\r\n const [integerPart, decimalPart] = roundedValue.split('.')\r\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ')\r\n\r\n let formattedValue = formattedIntegerPart\r\n if (decimalPart !== '00') {\r\n formattedValue = `${formattedIntegerPart}.${decimalPart}`\r\n }\r\n return `${prefix}${formattedValue}${suffix}`\r\n}\r\n\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n return number.toLocaleString('en-US')\r\n}\r\n\r\nexport const formatCapitalizeFirstText = (value: string = '') => {\r\n if (!value) return value\r\n const [first, ...data] = Array.from(value)\r\n return `${first.toUpperCase()}${data.join('')}`\r\n}\r\n\r\nconst formatDatetimeStyle = {\r\n style1: 'DD/MM/YYYY HH:mm',\r\n style2: 'MMMM D, YYYY',\r\n style3: 'MM-DD-YYYY'\r\n}\r\n\r\n/**\r\n * Formats a datetime string using one of the predefined styles.\r\n *\r\n * Available format styles:\r\n * - style1: DD/MM/YYYY HH:mm → e.g., '25/04/2025 14:30'\r\n * - style2: 'MMMM D, YYYY' → e.g., 'April 25, 2025'\r\n * - style2: 'MM-DD-YYYY' → e.g., '04-25-2025'\r\n * @param value - A datetime string (ISO format or any format parsable by dayjs).\r\n * @param format - Format style key: 'style1' or 'style2'. Defaults to 'style1'.\r\n * @returns A formatted datetime string, or 'unknown' if the input is invalid or unparsable.\r\n */\r\nexport const formatDatetime = (value: string, format: keyof typeof formatDatetimeStyle = 'style1'): string => {\r\n try {\r\n if (!value) throw new Error()\r\n return dayjs(value).format(formatDatetimeStyle[format])\r\n } catch (error) {\r\n return 'unknown'\r\n }\r\n}\r\n//#endregion\r\n"],"names":["sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","isGuid","value","test","isValidEmail","isValidPhoneNumber","phoneNumber","trim","isValidURL","url","windowScrollToTop","options","delay","window","scrollTo","_objectSpread","top","left","behavior","mergeClasses","_len","length","classes","Array","_key","join","isObject","obj","_typeof","isArray","mergeObjects","_len2","objects","_key2","reduce","prev","Object","keys","forEach","key","cleanObject","entries","acc","_ref2","_ref3","undefined","error","deepRemoveEmptyFields","result","_ref4","_ref5","isNaN","cleaned","encodeBase64","input","utf8Bytes","TextEncoder","encode","binaryString","byte","String","fromCharCode","btoa","console","decodeBase64","encoded","atob","Uint8Array","i","charCodeAt","TextDecoder","decode","tryParseObject","defaultValue","Error","JSON","parse","_unused","tryParseArray","parseValue","_unused2","tryParseIntRequired","parseInt","_unused3","tryParseCsvFileToArray","file","resolve","reject","reader","FileReader","onload","rows","split","filter","Boolean","headers","map","h","data","slice","row","values","item","header","index","_values$index","onerror","readAsText","formatFileSize","sizeInKb","toFixed","formatCurrency","parsedValue","prefix","suffix","parseFloat","e","_roundedValue$split","_roundedValue$split2","integerPart","decimalPart","formattedIntegerPart","replace","formattedValue","concat","formatNumberWithCommas","number","toLocaleString","formatCapitalizeFirstText","_Array$from","from","_Array$from2","_toArray","first","toUpperCase","formatDatetimeStyle","style1","style2","style3","formatDatetime","format","dayjs"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-core",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",