dinocollab-core 2.2.15 → 2.2.17

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 (56) hide show
  1. package/dist/filter-bar/index.js +1 -1
  2. package/dist/src/data-surface/helpers.js.map +1 -1
  3. package/dist/src/data-surface/view-grid/helpers.js +1 -1
  4. package/dist/src/data-surface/view-grid/helpers.js.map +1 -1
  5. package/dist/src/data-surface/view-grid/hooks.js +1 -1
  6. package/dist/src/data-surface/view-grid/hooks.js.map +1 -1
  7. package/dist/src/data-surface/view-grid/index.js +1 -1
  8. package/dist/src/data-surface/view-grid/index.js.map +1 -1
  9. package/dist/src/filter-bar/components/chip-viewer.js +1 -1
  10. package/dist/src/filter-bar/components/chip-viewer.js.map +1 -1
  11. package/dist/src/filter-bar/components/filter-summary.js +1 -1
  12. package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
  13. package/dist/src/filter-bar/index.create.js.map +1 -1
  14. package/dist/src/filter-bar/index.dino.js +1 -1
  15. package/dist/src/filter-bar/index.dino.js.map +1 -1
  16. package/dist/src/filter-bar/menu/create-form-field-datetime.js +1 -1
  17. package/dist/src/filter-bar/menu/create-form-field-datetime.js.map +1 -1
  18. package/dist/src/filter-bar/menu/create-form-field-select-multiple.js +1 -1
  19. package/dist/src/filter-bar/menu/create-form-field-select-multiple.js.map +1 -1
  20. package/dist/src/filter-bar/menu/create-form-field-select.js +1 -1
  21. package/dist/src/filter-bar/menu/create-form-field-select.js.map +1 -1
  22. package/dist/src/filter-bar/menu/create-form-field-string.js +1 -1
  23. package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -1
  24. package/dist/src/filter-bar/menu/create.js +1 -1
  25. package/dist/src/filter-bar/menu/create.js.map +1 -1
  26. package/dist/src/form/create.form-base.js +1 -1
  27. package/dist/src/form/create.form-base.js.map +1 -1
  28. package/dist/src/form/create.form-comfirm.js +1 -1
  29. package/dist/src/form/create.form-comfirm.js.map +1 -1
  30. package/dist/src/form/create.form-grid-layout.js +1 -1
  31. package/dist/src/form/create.form-grid-layout.js.map +1 -1
  32. package/dist/src/form/create.select-with-api.js +1 -1
  33. package/dist/src/form/create.select-with-api.js.map +1 -1
  34. package/dist/src/form/modal-wrapper.js +1 -1
  35. package/dist/src/form/modal-wrapper.js.map +1 -1
  36. package/dist/src/table/create.table.js +1 -1
  37. package/dist/src/table/create.table.js.map +1 -1
  38. package/dist/src/table/ui.buttons.js +1 -1
  39. package/dist/src/table/ui.buttons.js.map +1 -1
  40. package/dist/src/table-grid/create.table-grid.js +1 -1
  41. package/dist/src/table-grid/create.table-grid.js.map +1 -1
  42. package/dist/src/table-grid/item-actions.js +1 -1
  43. package/dist/src/table-grid/item-actions.js.map +1 -1
  44. package/dist/src/table-grid/toolbar-pannel.js +1 -1
  45. package/dist/src/table-grid/toolbar-pannel.js.map +1 -1
  46. package/dist/types/data-surface/view-grid/helpers.d.ts +4 -0
  47. package/dist/types/data-surface/view-grid/hooks.d.ts +1 -0
  48. package/dist/types/data-surface/view-grid/types.d.ts +2 -0
  49. package/dist/types/filter-bar/components/chip-viewer.d.ts +2 -0
  50. package/dist/types/filter-bar/components/filter-summary.types.d.ts +8 -2
  51. package/dist/types/filter-bar/index.d.ts +1 -0
  52. package/dist/types/filter-bar/index.dino.d.ts +2 -1
  53. package/dist/types/filter-bar/menu/create-form-field-datetime.d.ts +10 -2
  54. package/dist/types/filter-bar/menu/create-form-field-select-multiple.d.ts +2 -0
  55. package/dist/types/filter-bar/menu/types.d.ts +10 -0
  56. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sources":["../../../../src/filter-bar/menu/create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRef, useContext, useMemo, useState } from 'react'\r\nimport { Badge, Box, Button, IconButton, MenuItem, MenuList, styled, Tooltip, Typography } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener'\r\nimport { KeySpecial } from '../types'\r\nimport { useFilterActions } from '../hooks'\r\nimport { FilterBarContext } from '../index.context'\r\nimport { FilterMenuNoField } from '../components/ui.units'\r\nimport { mapSpecialLabel, mapSpecialTexts } from '../helpers'\r\nimport { FormValidator, SingleRuleValidate } from '../../form/validator'\r\nimport { PopperContent, PopperCustom, PopperFooter } from '../components/popper-custom'\r\nimport createFormFieldString from './create-form-field-string'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { TFieldModelValid, TFieldType, TFieldValue } from '../types'\r\nimport type { IConfigValue, IFormValidatorConfig } from '../../form/validator'\r\nimport type { IFilterMenuConfigInternal, TFieldMenuConfigsInternal } from './types'\r\nimport type { IFilterMenuProps, IFilterMenuSlots, TFieldMenuConfigs } from './types'\r\nimport type { IFieldMenuConfig, IFilterMenuConfig, IFilterMenuFormProps } from './types'\r\n\r\n// #region utils\r\n/**\r\n * Builds a map of `FormValidator` instances keyed by field name.\r\n * Each validator is constructed from the validation rules defined in `config.validation`.\r\n * Fields with no validation config are skipped.\r\n *\r\n * @internal\r\n */\r\nfunction generateValidatorMap<T>(config: IFilterMenuConfig<T>) {\r\n const keys = Object.keys(config.fields) as TFieldType<T>[]\r\n const validateMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = config.validation?.[fieldKey]\r\n if (fieldConfig) {\r\n acc[fieldKey] = new FormValidator({ [fieldKey]: fieldConfig } as IFormValidatorConfig<Partial<TFieldModelValid<T>>>)\r\n }\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, FormValidator<Partial<TFieldModelValid<T>>>>\r\n )\r\n return validateMaps\r\n}\r\n\r\n/**\r\n * Builds a map of form input components keyed by field name.\r\n * If a field defines a custom `FormComponent`, that is used; otherwise falls back to\r\n * the default `createFormFieldString()` free-text component.\r\n *\r\n * @internal\r\n */\r\nfunction generateFormInputMap<T>(config: IFilterMenuConfig<T>) {\r\n const { fields } = config\r\n const keys = Object.keys(fields) as TFieldType<T>[]\r\n const formInputMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = fields[fieldKey] as IFieldMenuConfig<T>\r\n if (fieldConfig) {\r\n acc[fieldKey] = fieldConfig.FormComponent ?? createFormFieldString()\r\n }\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, React.ComponentType<IFilterMenuFormProps<T>>>\r\n )\r\n return formInputMaps\r\n}\r\n\r\n/**\r\n * Normalises a raw `IFilterMenuConfig` into the internal format used by the menu:\r\n * - Injects the quick-search pseudo-field when `enableQuickSearch` is `true` (default)\r\n * - Stamps each field entry with its own `field` key\r\n * - Ensures every field has at least a `Required` validation rule\r\n *\r\n * @internal\r\n */\r\nfunction generateConfigs<T>(config: IFilterMenuConfig<T>): IFilterMenuConfigInternal<T> {\r\n const { fields, validation, enableQuickSearch = true, ...rest } = config\r\n const qsKey = KeySpecial.quickSearch\r\n\r\n // Merge quick search field if enabled\r\n const mergedFields: TFieldMenuConfigs<T> = { ...fields }\r\n if (enableQuickSearch) {\r\n const item = mergedFields[qsKey]\r\n const label = item?.label ? item.label : mapSpecialLabel[qsKey]\r\n const temp = Object.assign({}, mergedFields[qsKey], { field: qsKey, label, singleValue: true })\r\n mergedFields[qsKey] = temp\r\n } else {\r\n delete mergedFields[qsKey]\r\n }\r\n\r\n const keys = Object.keys(mergedFields) as TFieldType<T>[]\r\n const finalFields = keys.reduce<TFieldMenuConfigsInternal<T>>((acc, key) => {\r\n const fieldConfig = mergedFields[key]\r\n if (!fieldConfig) return acc\r\n acc[key] = { ...fieldConfig, field: key }\r\n return acc\r\n }, {} as TFieldMenuConfigsInternal<T>)\r\n\r\n // Merge validation config with default required rule\r\n const mergedValidation: IFormValidatorConfig<Partial<TFieldModelValid<T>>> = { ...validation }\r\n keys.forEach((key) => {\r\n const item: IConfigValue<Partial<TFieldModelValid<T>>> | undefined = mergedValidation[key]\r\n const label = item?.label ?? mergedFields[key]?.label ?? key.toString()\r\n if (!item) {\r\n mergedValidation[key] = { Rules: [{ rule: SingleRuleValidate.Required }], label }\r\n } else if (!item.Rules.some((r) => r.rule === SingleRuleValidate.Required)) {\r\n item.label = label\r\n item.Rules.push({ rule: SingleRuleValidate.Required })\r\n }\r\n })\r\n\r\n return { ...rest, fields: finalFields, validation: mergedValidation, enableQuickSearch }\r\n}\r\n// #endregion\r\n\r\n// #region main\r\n/**\r\n * Factory function that creates a `FilterMenu` component from a static field configuration.\r\n *\r\n * The generated component renders a badge icon button that opens a popper panel with:\r\n * - A **field list** view — lists all configured filter fields with applied-value counts\r\n * - A **field form** view — renders the appropriate input component for the selected field\r\n * - A **quick-search** field (opt-out via `enableQuickSearch: false`)\r\n * - OR / AND logic toggle support per field\r\n * - \"Clear All\" action to reset all active filters at once\r\n *\r\n * All state (open/close, selected field) is local; filter values are read/written through\r\n * `FilterBarContext` via `useFilterActions`.\r\n *\r\n * @param config - Static filter-menu configuration (fields, validation, slots, etc.)\r\n * @returns A React FC ready to be dropped anywhere inside a `FilterBarProvider`\r\n */\r\nexport function createFilterMenu<T>(config: IFilterMenuConfig<T>) {\r\n const classes = filterMenuClasses\r\n const mergedConfigs = generateConfigs(config)\r\n const validateMaps = generateValidatorMap(mergedConfigs)\r\n const formInputMaps = generateFormInputMap(mergedConfigs)\r\n const quickSearchHint = config.quickSearchHint\r\n\r\n // Component\r\n const FilterMenu: FC<IFilterMenuProps<T>> = (props) => {\r\n const refButton = createRef<HTMLButtonElement>()\r\n\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const context = useContext(FilterBarContext) as IFilterBarContext<T>\r\n const filterActions = useFilterActions<T>(context)\r\n\r\n const [fieldSelected, setFieldSelected] = useState<TFieldType<T> | null>(null)\r\n\r\n const mergedSlots = useMemo<IFilterMenuSlots>(() => {\r\n const { popperProps, rootProps } = config\r\n return Object.assign({}, { popperProps, rootProps }, props.slots)\r\n }, [config, props.slots])\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n setTimeout(() => {\r\n setFieldSelected(null)\r\n }, 300)\r\n }\r\n\r\n const handleOpen = () => {\r\n setFieldSelected(null)\r\n setAnchorEl(refButton.current)\r\n }\r\n\r\n const handleMenuItemClick = (field: TFieldType<T>) => {\r\n setFieldSelected(field)\r\n }\r\n\r\n const handleClearAll = () => {\r\n filterActions.clearAllFilters()\r\n handleClose()\r\n }\r\n\r\n const handleSubmit = async (key: TFieldType<T>, value?: TFieldValue, config?: IFieldMenuConfig<T>) => {\r\n if (!value) return\r\n if (config?.singleValue) {\r\n filterActions.replaceFilter(key, value, { logic: value.logic })\r\n } else {\r\n filterActions.upsertManyFilter(key, value, { logic: value.logic })\r\n }\r\n }\r\n\r\n const data = useMemo(() => {\r\n const keys = Object.values(mergedConfigs.fields)\r\n return Array.from(keys) as IFieldMenuConfig<T>[]\r\n }, [mergedConfigs.fields])\r\n\r\n const renderContent = () => {\r\n if (data.length === 0) {\r\n return <FilterMenuNoField onClose={handleClose} />\r\n }\r\n const currentConfig = fieldSelected ? mergedConfigs.fields[fieldSelected] : undefined\r\n\r\n if (fieldSelected && currentConfig) {\r\n const FormComponent = formInputMaps[fieldSelected] as React.ComponentType<IFilterMenuFormProps<T>>\r\n if (!FormComponent) return null\r\n\r\n const config: IFieldMenuConfig<T> = { ...currentConfig }\r\n // Remove FormComponent from config before passing to form, as it's not needed there and can cause unnecessary re-renders\r\n if (config?.FormComponent) delete config.FormComponent\r\n\r\n const value = context.filterState.storeFilter?.[fieldSelected]\r\n return (\r\n <FormComponent\r\n currentConfig={config}\r\n value={value}\r\n isLoading={context.isLoading}\r\n onRemove={filterActions.removeFilterByFieldValue}\r\n validator={validateMaps[fieldSelected]}\r\n onSubmit={handleSubmit}\r\n onClose={handleClose}\r\n onRemoveField={(f) => filterActions.removeFilter(f)}\r\n onBack={() => setFieldSelected(null)}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <PopperContent title='Filter by' onClose={handleClose}>\r\n <MenuListCustom className={classes.menu}>\r\n {data.map((item) => {\r\n const key = item.field.toString()\r\n if (!key) return null\r\n const info = filterActions.getFieldInfo(item.field)\r\n const note = info?.values.join(', ') ?? ''\r\n const fieldCount = info ? info.values.length : 0\r\n const suffix = fieldCount > 0 ? ` (${fieldCount})` : ''\r\n const label = item.label ?? key.toString()\r\n let tooltipTitle = fieldCount > 0 ? `Filter by ${label}: ${note}` : undefined\r\n if (item.field === KeySpecial.quickSearch) {\r\n const txt = mapSpecialTexts.qsTooltip\r\n tooltipTitle = typeof quickSearchHint === 'function' ? quickSearchHint(txt) : (quickSearchHint ?? txt)\r\n } else if (item.tooltip) {\r\n const tooltip = typeof item.tooltip === 'function' ? item.tooltip(info?.values) : item.tooltip\r\n tooltipTitle = (info?.values.length ?? 0) > 0 ? tooltip : undefined\r\n }\r\n return (\r\n <MenuItem\r\n key={key}\r\n className={classes.menuItem}\r\n sx={{ justifyContent: 'space-between' }}\r\n onClick={() => handleMenuItemClick(item.field)}\r\n >\r\n <Tooltip title={tooltipTitle} placement='right' arrow>\r\n <div className={classes.menuItemInner}>\r\n <Typography variant='body2'>{label}</Typography>\r\n <Typography variant='caption' sx={{ ml: 1, color: 'text.secondary' }}>\r\n {suffix}\r\n </Typography>\r\n </div>\r\n </Tooltip>\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuListCustom>\r\n <PopperFooter>\r\n <Button color='error' disabled={filterCount === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n )\r\n }\r\n\r\n const filterCount = filterActions.getTotalCount()\r\n const iconTitle = `${filterCount} Filter${filterCount !== 1 ? 's' : ''}`\r\n return (\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <FilterInputStyled className={classes.root} {...mergedSlots.rootProps}>\r\n <Tooltip title={iconTitle} arrow placement='top'>\r\n <IconButton size='small' ref={refButton} onClick={handleOpen}>\r\n <Badge badgeContent={filterCount} color='primary' invisible={filterCount === 0}>\r\n <FilterListIcon fontSize='small' />\r\n </Badge>\r\n </IconButton>\r\n </Tooltip>\r\n <PopperCustom open={isOpen} anchorEl={anchorEl} placement='bottom' transition disablePortal {...mergedSlots.popperProps}>\r\n {renderContent()}\r\n </PopperCustom>\r\n </FilterInputStyled>\r\n </ClickAwayListener>\r\n )\r\n }\r\n return FilterMenu\r\n}\r\n// #endregion\r\n\r\n// #region styles\r\n/** CSS class names used by the `FilterMenu` component for external style overrides. */\r\nexport const filterMenuClasses = {\r\n root: 'DinoFilterMenu-root',\r\n input: 'DinoFilterMenu-input',\r\n beforeInput: 'DinoFilterMenu-beforeInput',\r\n menu: 'DinoFilterMenu-menu',\r\n menuItem: 'DinoFilterMenu-menuItem',\r\n menuItemInner: 'DinoFilterMenu-menuItemInner'\r\n}\r\n\r\nconst FilterInputStyled = styled(Box)({\r\n [`&.${filterMenuClasses.root}`]: {\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flex: '0 0 auto'\r\n }\r\n})\r\n\r\nconst MenuListCustom = styled(MenuList)({\r\n [`.${filterMenuClasses.menuItem}`]: { paddingTop: 0, paddingBottom: 0 },\r\n [`.${filterMenuClasses.menuItemInner}`]: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n gap: '4px',\r\n paddingTop: '6px',\r\n paddingBottom: '6px'\r\n }\r\n})\r\n// #endregion\r\n"],"names":["createFilterMenu","config","classes","filterMenuClasses","mergedConfigs","fields","validation","_config$enableQuickSe","enableQuickSearch","rest","_objectWithoutProperties","_excluded","qsKey","KeySpecial","quickSearch","mergedFields","_objectSpread","item","label","mapSpecialLabel","temp","Object","assign","field","singleValue","keys","finalFields","reduce","acc","key","fieldConfig","mergedValidation","forEach","_ref","_item$label","_mergedFields$key","toString","Rules","some","r","rule","SingleRuleValidate","Required","push","generateConfigs","validateMaps","_config$validation","fieldKey","FormValidator","_defineProperty","generateValidatorMap","formInputMaps","_fieldConfig$FormComp","FormComponent","createFormFieldString","generateFormInputMap","quickSearchHint","props","refButton","createRef","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","isOpen","Boolean","context","useContext","FilterBarContext","filterActions","useFilterActions","_useState3","_useState4","fieldSelected","setFieldSelected","mergedSlots","useMemo","popperProps","rootProps","slots","handleClose","setTimeout","handleClearAll","clearAllFilters","handleSubmit","_ref2","_asyncToGenerator","_regenerator","m","_callee","value","w","_context","n","a","replaceFilter","logic","upsertManyFilter","_x","_x2","_x3","apply","this","arguments","data","values","Array","from","filterCount","getTotalCount","iconTitle","concat","_jsx","ClickAwayListener","onClickAway","children","_jsxs","FilterInputStyled","className","root","Tooltip","title","arrow","placement","IconButton","size","ref","onClick","current","Badge","badgeContent","color","invisible","FilterListIcon","fontSize","PopperCustom","open","transition","disablePortal","length","FilterMenuNoField","onClose","currentConfig","undefined","_context$filterState$","filterState","storeFilter","isLoading","onRemove","removeFilterByFieldValue","validator","onSubmit","onRemoveField","f","removeFilter","onBack","PopperContent","MenuListCustom","menu","map","_info$values$join","_item$label2","info","getFieldInfo","note","join","fieldCount","suffix","tooltipTitle","txt","mapSpecialTexts","qsTooltip","tooltip","_info$values$length","MenuItem","menuItem","sx","justifyContent","menuItemInner","Typography","variant","ml","PopperFooter","Button","disabled","renderContent","styled","Box","display","alignItems","flex","MenuList","paddingTop","paddingBottom","width","gap"],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sources":["../../../../src/filter-bar/menu/create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRef, useContext, useMemo, useState } from 'react'\r\nimport { Badge, Box, Button, IconButton, MenuItem, MenuList, styled, Tooltip, Typography } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener'\r\nimport { KeySpecial } from '../types'\r\nimport { useFilterActions } from '../hooks'\r\nimport { FilterBarContext } from '../index.context'\r\nimport { FilterMenuNoField } from '../components/ui.units'\r\nimport { mapSpecialLabel, mapSpecialTexts } from '../helpers'\r\nimport { FormValidator, SingleRuleValidate } from '../../form/validator'\r\nimport { PopperContent, PopperCustom, PopperFooter } from '../components/popper-custom'\r\nimport createFormFieldString from './create-form-field-string'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { TFieldModelValid, TFieldType, TFieldValue } from '../types'\r\nimport type { IConfigValue, IFormValidatorConfig } from '../../form/validator'\r\nimport type { IFilterMenuConfigInternal, TFieldMenuConfigsInternal } from './types'\r\nimport type { IFilterMenuProps, IFilterMenuSlots, TFieldMenuConfigs } from './types'\r\nimport type { IFieldMenuConfig, IFilterMenuConfig, IFilterMenuFormProps } from './types'\r\n\r\n// #region utils\r\n/**\r\n * Builds a map of `FormValidator` instances keyed by field name.\r\n * Each validator is constructed from the validation rules defined in `config.validation`.\r\n * Fields with no validation config are skipped.\r\n *\r\n * @internal\r\n */\r\nfunction generateValidatorMap<T>(config: IFilterMenuConfig<T>) {\r\n const keys = Object.keys(config.fields) as TFieldType<T>[]\r\n const validateMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = config.validation?.[fieldKey]\r\n if (fieldConfig) {\r\n acc[fieldKey] = new FormValidator({ [fieldKey]: fieldConfig } as IFormValidatorConfig<Partial<TFieldModelValid<T>>>)\r\n }\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, FormValidator<Partial<TFieldModelValid<T>>>>\r\n )\r\n return validateMaps\r\n}\r\n\r\n/**\r\n * Builds a map of form input components keyed by field name.\r\n * If a field defines a custom `FormComponent`, that is used; otherwise falls back to\r\n * the default `createFormFieldString()` free-text component.\r\n *\r\n * @internal\r\n */\r\nfunction generateFormInputMap<T>(config: IFilterMenuConfig<T>) {\r\n const { fields } = config\r\n const keys = Object.keys(fields) as TFieldType<T>[]\r\n const formInputMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = fields[fieldKey] as IFieldMenuConfig<T>\r\n if (fieldConfig) {\r\n acc[fieldKey] = fieldConfig.FormComponent ?? createFormFieldString()\r\n }\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, React.ComponentType<IFilterMenuFormProps<T>>>\r\n )\r\n return formInputMaps\r\n}\r\n\r\n/**\r\n * Normalises a raw `IFilterMenuConfig` into the internal format used by the menu:\r\n * - Injects the quick-search pseudo-field when `enableQuickSearch` is `true` (default)\r\n * - Stamps each field entry with its own `field` key\r\n * - Ensures every field has at least a `Required` validation rule\r\n *\r\n * @internal\r\n */\r\nfunction generateConfigs<T>(config: IFilterMenuConfig<T>): IFilterMenuConfigInternal<T> {\r\n const { fields, validation, enableQuickSearch = true, ...rest } = config\r\n const qsKey = KeySpecial.quickSearch\r\n\r\n // Merge quick search field if enabled\r\n const mergedFields: TFieldMenuConfigs<T> = { ...fields }\r\n if (enableQuickSearch) {\r\n const item = mergedFields[qsKey]\r\n const label = item?.label ? item.label : mapSpecialLabel[qsKey]\r\n const temp = Object.assign({}, mergedFields[qsKey], { field: qsKey, label, singleValue: true })\r\n mergedFields[qsKey] = temp\r\n } else {\r\n delete mergedFields[qsKey]\r\n }\r\n\r\n const keys = Object.keys(mergedFields) as TFieldType<T>[]\r\n const finalFields = keys.reduce<TFieldMenuConfigsInternal<T>>((acc, key) => {\r\n const fieldConfig = mergedFields[key]\r\n if (!fieldConfig) return acc\r\n acc[key] = { ...fieldConfig, field: key }\r\n return acc\r\n }, {} as TFieldMenuConfigsInternal<T>)\r\n\r\n // Merge validation config with default required rule\r\n const mergedValidation: IFormValidatorConfig<Partial<TFieldModelValid<T>>> = { ...validation }\r\n keys.forEach((key) => {\r\n const item: IConfigValue<Partial<TFieldModelValid<T>>> | undefined = mergedValidation[key]\r\n const label = item?.label ?? mergedFields[key]?.label ?? key.toString()\r\n if (!item) {\r\n mergedValidation[key] = { Rules: [{ rule: SingleRuleValidate.Required }], label }\r\n } else if (!item.Rules.some((r) => r.rule === SingleRuleValidate.Required)) {\r\n item.label = label\r\n item.Rules.push({ rule: SingleRuleValidate.Required })\r\n }\r\n })\r\n\r\n return { ...rest, fields: finalFields, validation: mergedValidation, enableQuickSearch }\r\n}\r\n// #endregion\r\n\r\n// #region main\r\n/**\r\n * Factory function that creates a `FilterMenu` component from a static field configuration.\r\n *\r\n * The generated component renders a badge icon button that opens a popper panel with:\r\n * - A **field list** view — lists all configured filter fields with applied-value counts\r\n * - A **field form** view — renders the appropriate input component for the selected field\r\n * - A **quick-search** field (opt-out via `enableQuickSearch: false`)\r\n * - OR / AND logic toggle support per field\r\n * - \"Clear All\" action to reset all active filters at once\r\n *\r\n * All state (open/close, selected field) is local; filter values are read/written through\r\n * `FilterBarContext` via `useFilterActions`.\r\n *\r\n * @param config - Static filter-menu configuration (fields, validation, slots, etc.)\r\n * @returns A React FC ready to be dropped anywhere inside a `FilterBarProvider`\r\n */\r\nexport function createFilterMenu<T>(config: IFilterMenuConfig<T>) {\r\n const classes = filterMenuClasses\r\n const mergedConfigs = generateConfigs(config)\r\n const validateMaps = generateValidatorMap(mergedConfigs)\r\n const formInputMaps = generateFormInputMap(mergedConfigs)\r\n const quickSearchHint = config.quickSearchHint\r\n\r\n // Component\r\n const FilterMenu: FC<IFilterMenuProps<T>> = (props) => {\r\n const refButton = createRef<HTMLButtonElement>()\r\n\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const context = useContext(FilterBarContext) as IFilterBarContext<T>\r\n const filterActions = useFilterActions<T>(context)\r\n\r\n const [fieldSelected, setFieldSelected] = useState<TFieldType<T> | null>(null)\r\n\r\n const mergedSlots = useMemo<IFilterMenuSlots>(() => {\r\n const { popperProps, rootProps } = config\r\n return Object.assign({}, { popperProps, rootProps }, props.slots)\r\n }, [config, props.slots])\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n setTimeout(() => {\r\n setFieldSelected(null)\r\n }, 300)\r\n }\r\n\r\n const handleOpen = () => {\r\n setFieldSelected(null)\r\n setAnchorEl(refButton.current)\r\n }\r\n\r\n const handleMenuItemClick = (field: TFieldType<T>) => {\r\n setFieldSelected(field)\r\n }\r\n\r\n const handleClearAll = () => {\r\n filterActions.clearAllFilters()\r\n handleClose()\r\n }\r\n\r\n const handleSubmit = async (key: TFieldType<T>, value?: TFieldValue, fieldConfig?: IFieldMenuConfig<T>) => {\r\n if (!value) return\r\n if (fieldConfig?.singleValue || fieldConfig?.replaceValue) {\r\n filterActions.replaceFilter(key, value, { logic: value.logic })\r\n } else {\r\n filterActions.upsertManyFilter(key, value, { logic: value.logic })\r\n }\r\n if (config?.closeAfterSubmit !== false && fieldConfig?.closeAfterSubmit !== false) {\r\n handleClose()\r\n }\r\n }\r\n\r\n const data = useMemo(() => {\r\n const keys = Object.values(mergedConfigs.fields)\r\n return Array.from(keys) as IFieldMenuConfig<T>[]\r\n }, [mergedConfigs.fields])\r\n\r\n const renderContent = () => {\r\n if (data.length === 0) {\r\n return <FilterMenuNoField onClose={handleClose} />\r\n }\r\n const currentConfig = fieldSelected ? mergedConfigs.fields[fieldSelected] : undefined\r\n\r\n if (fieldSelected && currentConfig) {\r\n const FormComponent = formInputMaps[fieldSelected] as React.ComponentType<IFilterMenuFormProps<T>>\r\n if (!FormComponent) return null\r\n\r\n const config: IFieldMenuConfig<T> = { ...currentConfig }\r\n // Remove FormComponent from config before passing to form, as it's not needed there and can cause unnecessary re-renders\r\n if (config?.FormComponent) delete config.FormComponent\r\n\r\n const value = context.filterState.storeFilter?.[fieldSelected]\r\n return (\r\n <FormComponent\r\n currentConfig={config}\r\n value={value}\r\n isLoading={context.isLoading}\r\n onRemove={filterActions.removeFilterByFieldValue}\r\n validator={validateMaps[fieldSelected]}\r\n onSubmit={handleSubmit}\r\n onClose={handleClose}\r\n onRemoveField={(f) => filterActions.removeFilter(f)}\r\n onBack={() => setFieldSelected(null)}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <PopperContent title='Filter by' onClose={handleClose}>\r\n <MenuListCustom className={classes.menu}>\r\n {data.map((item) => {\r\n const key = item.field.toString()\r\n if (!key) return null\r\n const info = filterActions.getFieldInfo(item.field)\r\n const note = info?.values.join(', ') ?? ''\r\n const fieldCount = info ? info.values.length : 0\r\n const suffix = fieldCount > 0 ? ` (${fieldCount})` : ''\r\n const label = item.label ?? key.toString()\r\n let tooltipTitle = fieldCount > 0 ? `Filter by ${label}: ${note}` : undefined\r\n if (item.field === KeySpecial.quickSearch) {\r\n const txt = mapSpecialTexts.qsTooltip\r\n tooltipTitle = typeof quickSearchHint === 'function' ? quickSearchHint(txt) : (quickSearchHint ?? txt)\r\n } else if (item.tooltip) {\r\n const tooltip = typeof item.tooltip === 'function' ? item.tooltip(info?.values) : item.tooltip\r\n tooltipTitle = (info?.values.length ?? 0) > 0 ? tooltip : undefined\r\n }\r\n return (\r\n <MenuItem\r\n key={key}\r\n className={classes.menuItem}\r\n sx={{ justifyContent: 'space-between' }}\r\n onClick={() => handleMenuItemClick(item.field)}\r\n >\r\n <Tooltip title={tooltipTitle} placement='right' arrow>\r\n <div className={classes.menuItemInner}>\r\n <Typography variant='body2'>{label}</Typography>\r\n <Typography variant='caption' sx={{ ml: 1, color: 'text.secondary' }}>\r\n {suffix}\r\n </Typography>\r\n </div>\r\n </Tooltip>\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuListCustom>\r\n <PopperFooter>\r\n <Button color='error' disabled={filterCount === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n )\r\n }\r\n\r\n const filterCount = filterActions.getTotalCount()\r\n const iconTitle = `${filterCount} Filter${filterCount !== 1 ? 's' : ''}`\r\n return (\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <FilterInputStyled className={classes.root} {...mergedSlots.rootProps}>\r\n <Tooltip title={iconTitle} arrow placement='top'>\r\n <IconButton size='small' ref={refButton} onClick={handleOpen}>\r\n <Badge badgeContent={filterCount} color='primary' invisible={filterCount === 0}>\r\n <FilterListIcon fontSize='small' />\r\n </Badge>\r\n </IconButton>\r\n </Tooltip>\r\n <PopperCustom open={isOpen} anchorEl={anchorEl} placement='bottom' transition disablePortal {...mergedSlots.popperProps}>\r\n {renderContent()}\r\n </PopperCustom>\r\n </FilterInputStyled>\r\n </ClickAwayListener>\r\n )\r\n }\r\n return FilterMenu\r\n}\r\n// #endregion\r\n\r\n// #region styles\r\n/** CSS class names used by the `FilterMenu` component for external style overrides. */\r\nexport const filterMenuClasses = {\r\n root: 'DinoFilterMenu-root',\r\n input: 'DinoFilterMenu-input',\r\n beforeInput: 'DinoFilterMenu-beforeInput',\r\n menu: 'DinoFilterMenu-menu',\r\n menuItem: 'DinoFilterMenu-menuItem',\r\n menuItemInner: 'DinoFilterMenu-menuItemInner'\r\n}\r\n\r\nconst FilterInputStyled = styled(Box)({\r\n [`&.${filterMenuClasses.root}`]: {\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flex: '0 0 auto'\r\n }\r\n})\r\n\r\nconst MenuListCustom = styled(MenuList)({\r\n [`.${filterMenuClasses.menuItem}`]: { paddingTop: 0, paddingBottom: 0 },\r\n [`.${filterMenuClasses.menuItemInner}`]: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n gap: '4px',\r\n paddingTop: '6px',\r\n paddingBottom: '6px'\r\n }\r\n})\r\n// #endregion\r\n"],"names":["createFilterMenu","config","classes","filterMenuClasses","mergedConfigs","fields","validation","_config$enableQuickSe","enableQuickSearch","rest","_objectWithoutProperties","_excluded","qsKey","KeySpecial","quickSearch","mergedFields","_objectSpread","item","label","mapSpecialLabel","temp","Object","assign","field","singleValue","keys","finalFields","reduce","acc","key","fieldConfig","mergedValidation","forEach","_ref","_item$label","_mergedFields$key","toString","Rules","some","r","rule","SingleRuleValidate","Required","push","generateConfigs","validateMaps","_config$validation","fieldKey","FormValidator","_defineProperty","generateValidatorMap","formInputMaps","_fieldConfig$FormComp","FormComponent","createFormFieldString","generateFormInputMap","quickSearchHint","props","refButton","createRef","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","isOpen","Boolean","context","useContext","FilterBarContext","filterActions","useFilterActions","_useState3","_useState4","fieldSelected","setFieldSelected","mergedSlots","useMemo","popperProps","rootProps","slots","handleClose","setTimeout","handleClearAll","clearAllFilters","handleSubmit","_ref2","_asyncToGenerator","_regenerator","m","_callee","value","w","_context","n","a","replaceValue","replaceFilter","logic","upsertManyFilter","closeAfterSubmit","_x","_x2","_x3","apply","this","arguments","data","values","Array","from","filterCount","getTotalCount","iconTitle","concat","_jsx","ClickAwayListener","onClickAway","children","_jsxs","FilterInputStyled","className","root","Tooltip","title","arrow","placement","IconButton","size","ref","onClick","current","Badge","badgeContent","color","invisible","FilterListIcon","fontSize","PopperCustom","open","transition","disablePortal","length","FilterMenuNoField","onClose","currentConfig","undefined","_context$filterState$","filterState","storeFilter","isLoading","onRemove","removeFilterByFieldValue","validator","onSubmit","onRemoveField","f","removeFilter","onBack","PopperContent","MenuListCustom","menu","map","_info$values$join","_item$label2","info","getFieldInfo","note","join","fieldCount","suffix","tooltipTitle","txt","mapSpecialTexts","qsTooltip","tooltip","_info$values$length","MenuItem","menuItem","sx","justifyContent","menuItemInner","Typography","variant","ml","PopperFooter","Button","disabled","renderContent","styled","Box","display","alignItems","flex","MenuList","paddingTop","paddingBottom","width","gap"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as o,callSuper as a,defineProperty as s,asyncToGenerator as n,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{Box as u}from"@mui/material";import{createContext as m,Component as c}from"react";import{validateMerge as f,convertFormDataToJson as p,trimAllStrings as d,singleValidate as v,getErrorCommonFromResponse as E,getErrorFromResponse as g}from"./helpers.js";import{FormValidator as S,SingleRuleValidate as h}from"./validator.js";import{ApiAlertContext as b}from"../api-context/alert-global.js";var j=function(j){var A=m({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),C=function(){function m(r){var e;return o(this,m),e=a(this,m,[r]),s(e,"refForm",null),s(e,"mapContext",function(){var r=e,t=r.setError,o=r.removeError,a=r.setModelState,s=r.clearErrorAll,n=r.onBlur,l=e.state;return{modelState:l.modelState,messageErrors:l.messageErrors,setError:t,onBlur:n,clearErrorAll:s,setModelState:a,removeError:o}}),s(e,"setModelState",function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})}),s(e,"getValidate",function(){var r=new S({});return f(r,null==j?void 0:j.validate,e.props.validate)}),s(e,"setError",function(r,t){var o=s({},r,[{rule:h.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,o)})}),s(e,"removeError",function(r){var o=t({},e.state.messageErrors);Array.isArray(r)?r.forEach(function(r){o[r]&&delete o[r]}):o[r]&&delete o[r],e.setState({messageErrors:o})}),s(e,"clearErrorAll",function(){e.setState({messageErrors:{}})}),s(e,"onSubmit",function(){var r=n(l().m(function r(o){var a,s,n,i,u,m,c,f;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(o.preventDefault(),a=new FormData(o.currentTarget),s=p(a),n=d(s),e.setState({modelState:n}),i=e.validate.run(n),e.props.onError&&Object.keys(i).length>0&&e.props.onError(i),!i){r.n=1;break}if(e.setState({messageErrors:i}),!(Object.keys(i).length>0)){r.n=1;break}return r.a(2);case 1:return r.p=1,r.n=2,e.props.onSubmit(n,o);case 2:r.n=4;break;case 3:r.p=3,f=r.v,(m=E(f)).length>0&&(null===(u=b.ApiAlert)||void 0===u||u.PushError(m[0])),c=g(f,n),e.setState({messageErrors:t(t({},e.state.messageErrors),c||{})});case 4:return r.a(2)}},r,null,[[1,3]])}));return function(e){return r.apply(this,arguments)}}()),s(e,"onBlur",function(r){if(e.refForm){var t=e.state.messageErrors,o=new FormData(e.refForm),a=p(o),s=d(a);e.setState({modelState:s});var n=v(r,s,t,e.validate)||{};e.setState({messageErrors:n})}}),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(m,c),e(m,[{key:"render",value:function(){var r,e,o=this,a=[this.props.className,null===(r=this.props.slots)||void 0===r||null===(r=r.formProps)||void 0===r?void 0:r.className].filter(Boolean);return i(u,t(t({component:"form",ref:function(r){return o.refForm=r},onSubmit:this.onSubmit},null===(e=this.props.slots)||void 0===e?void 0:e.formProps),{},{className:a.join(" "),children:i(A.Provider,{value:this.mapContext(),children:this.props.children})}))}}])}();return{Form:C,Validator:null==j?void 0:j.validate,Context:A,mapContext:function(r){return i(A.Consumer,{children:r})}}};export{j as default};
1
+ import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as o,callSuper as a,defineProperty as s,asyncToGenerator as n,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{Box as m}from"@mui/material";import{createContext as u,Component as c}from"react";import{ApiAlertContext as p}from"../api-context/alert-global.js";import"../api-context/drawer-global.js";import"../api-context/global-modal.js";import{validateMerge as f,convertFormDataToJson as d,trimAllStrings as v,singleValidate as E,getErrorCommonFromResponse as g,getErrorFromResponse as S}from"./helpers.js";import{FormValidator as h,SingleRuleValidate as b}from"./validator.js";var j=function(j){var x=u({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),A=function(){function u(r){var e;return o(this,u),e=a(this,u,[r]),s(e,"refForm",null),s(e,"mapContext",function(){var r=e,t=r.setError,o=r.removeError,a=r.setModelState,s=r.clearErrorAll,n=r.onBlur,l=e.state;return{modelState:l.modelState,messageErrors:l.messageErrors,setError:t,onBlur:n,clearErrorAll:s,setModelState:a,removeError:o}}),s(e,"setModelState",function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})}),s(e,"getValidate",function(){var r=new h({});return f(r,null==j?void 0:j.validate,e.props.validate)}),s(e,"setError",function(r,t){var o=s({},r,[{rule:b.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,o)})}),s(e,"removeError",function(r){var o=t({},e.state.messageErrors);Array.isArray(r)?r.forEach(function(r){o[r]&&delete o[r]}):o[r]&&delete o[r],e.setState({messageErrors:o})}),s(e,"clearErrorAll",function(){e.setState({messageErrors:{}})}),s(e,"onSubmit",function(){var r=n(l().m(function r(o){var a,s,n,i,m,u,c,f;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(o.preventDefault(),a=new FormData(o.currentTarget),s=d(a),n=v(s),e.setState({modelState:n}),i=e.validate.run(n),e.props.onError&&Object.keys(i).length>0&&e.props.onError(i),!i){r.n=1;break}if(e.setState({messageErrors:i}),!(Object.keys(i).length>0)){r.n=1;break}return r.a(2);case 1:return r.p=1,r.n=2,e.props.onSubmit(n,o);case 2:r.n=4;break;case 3:r.p=3,f=r.v,(u=g(f)).length>0&&(null===(m=p.ApiAlert)||void 0===m||m.PushError(u[0])),c=S(f,n),e.setState({messageErrors:t(t({},e.state.messageErrors),c||{})});case 4:return r.a(2)}},r,null,[[1,3]])}));return function(e){return r.apply(this,arguments)}}()),s(e,"onBlur",function(r){if(e.refForm){var t=e.state.messageErrors,o=new FormData(e.refForm),a=d(o),s=v(a);e.setState({modelState:s});var n=E(r,s,t,e.validate)||{};e.setState({messageErrors:n})}}),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(u,c),e(u,[{key:"render",value:function(){var r,e,o=this,a=[this.props.className,null===(r=this.props.slots)||void 0===r||null===(r=r.formProps)||void 0===r?void 0:r.className].filter(Boolean);return i(m,t(t({component:"form",ref:function(r){return o.refForm=r},onSubmit:this.onSubmit},null===(e=this.props.slots)||void 0===e?void 0:e.formProps),{},{className:a.join(" "),children:i(x.Provider,{value:this.mapContext(),children:this.props.children})}))}}])}();return{Form:A,Validator:null==j?void 0:j.validate,Context:x,mapContext:function(r){return i(x.Consumer,{children:r})}}};export{j 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 { Box, BoxProps } from '@mui/material'\r\nimport { Component, ComponentType, createContext, PropsWithChildren, ReactNode } from 'react'\r\nimport { ApiAlertContext } from '../api-context'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorCommonFromResponse, getErrorFromResponse, singleValidate, trimAllStrings, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseSlots {\r\n formProps?: Omit<BoxProps, 'ref' | 'onSubmit' | 'component'> & { [key: string]: any }\r\n}\r\n\r\nexport interface IFormBaseConfigs<T> {\r\n validate?: FormValidator<Partial<T>>\r\n dataTrimed?: boolean\r\n dataGetter?: (data: Partial<T>) => Partial<T>\r\n}\r\n\r\nexport interface IFormBaseParams<T> extends IFormBaseConfigs<T> {}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren, IFormBaseConfigs<T> {\r\n className?: string\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n onError?: (error: IPartialError<T>) => void\r\n slots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst createFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n removeError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n const rootClass = [this.props.className, this.props.slots?.formProps?.className].filter(Boolean)\r\n return (\r\n <Box\r\n component='form'\r\n ref={(ref: HTMLFormElement) => (this.refForm = ref)}\r\n onSubmit={this.onSubmit}\r\n {...(this.props.slots?.formProps as any)}\r\n className={rootClass.join(' ')}\r\n >\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, removeError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState, removeError }\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n removeError = (keyNames: keyof T | (keyof T)[]) => {\r\n const newErrors = { ...this.state.messageErrors }\r\n if (Array.isArray(keyNames)) {\r\n keyNames.forEach((key) => {\r\n if (newErrors[key]) delete newErrors[key]\r\n })\r\n } else {\r\n if (newErrors[keyNames]) delete newErrors[keyNames]\r\n }\r\n this.setState({ messageErrors: newErrors })\r\n }\r\n\r\n clearErrorAll = () => {\r\n this.setState({ messageErrors: {} })\r\n }\r\n\r\n private validate: FormValidator<Partial<T>>\r\n onSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\r\n e.preventDefault()\r\n const formData = new FormData(e.currentTarget as HTMLFormElement)\r\n const raw = convertFormDataToJson<T>(formData)\r\n // TODO: validate raw data\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const messageErrors = this.validate.run(trimmed) as IPartialError<T>\r\n\r\n if (this.props.onError && Object.keys(messageErrors).length > 0) {\r\n this.props.onError(messageErrors)\r\n }\r\n\r\n if (messageErrors) {\r\n this.setState({ messageErrors: messageErrors })\r\n if (Object.keys(messageErrors).length > 0) return\r\n }\r\n try {\r\n await this.props.onSubmit(trimmed, e)\r\n } catch (error: any) {\r\n const errorCommon = getErrorCommonFromResponse(error as any)\r\n if (errorCommon.length > 0) ApiAlertContext.ApiAlert?.PushError(errorCommon[0])\r\n const messageError = getErrorFromResponse(error, trimmed)\r\n this.setState({ messageErrors: { ...this.state.messageErrors, ...(messageError || {}) } })\r\n // throw error\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","createContext","setModelState","messageErrors","onBlur","setError","removeError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","obj","Object","assign","setState","defaultValidate","FormValidator","validateMerge","validate","keyName","message","error","rule","SingleRuleValidate","Custom","keyNames","newErrors","_objectSpread","Array","isArray","forEach","key","_ref","_asyncToGenerator","_regenerator","m","_callee","e","formData","raw","trimmed","_ApiAlertContext$ApiA","errorCommon","messageError","_t","w","_context","p","n","preventDefault","FormData","currentTarget","convertFormDataToJson","trimAllStrings","run","onError","keys","length","a","onSubmit","v","getErrorCommonFromResponse","ApiAlertContext","ApiAlert","PushError","getErrorFromResponse","_x","apply","this","arguments","refForm","singleValidate","getValidate","_inherits","Component","_createClass","value","_this$props$slots","_this$props$slots2","_this3","rootClass","className","slots","formProps","filter","Boolean","_jsx","Box","component","ref","join","children","Provider","mapContext","Form","Validator","Context","Consumer"],"mappings":"4nBAsCA,IAAMA,EAAiB,SAAaC,GAClC,IAAMC,EAAkBC,EAAmC,CACzDC,cAAe,WAAQ,EACvBC,cAAe,CAAE,EACjBC,OAAQ,WAAQ,EAChBC,SAAU,WAAQ,EAClBC,YAAa,WAAQ,EACrBC,cAAe,WAAK,IAGhBC,aAEJ,SAAAA,EAAYC,GAAwB,IAAAC,EAGA,OAHAC,OAAAH,GAClCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EAAA,UAFoB,MAAIG,EAAAH,EAAA,aAsBjB,WACnB,IAAAI,EAAAJ,EAAQL,EAAQS,EAART,SAAUC,EAAWQ,EAAXR,YAAaJ,EAAaY,EAAbZ,cAAeK,EAAaO,EAAbP,cAAeH,EAAMU,EAANV,OAC7DW,EAAsCL,EAAKM,MAC3C,MAAO,CAAEC,WADSF,EAAVE,WACad,cADYY,EAAbZ,cACgBE,SAAAA,EAAUD,OAAAA,EAAQG,cAAAA,EAAeL,cAAAA,EAAeI,YAAAA,KACrFO,EAAAH,EAEsC,gBAAA,SAACM,GACtC,IAAME,EAAMC,OAAOC,OAAO,CAAA,EAAIV,EAAKM,MAAMC,WAAYD,GACrDN,EAAKW,SAAS,CAAEJ,WAAYC,MAC7BL,EAAAH,EAAA,cAEa,WACZ,IAAMY,EAAkB,IAAIC,EAA0B,IACtD,OAAOC,EAAcF,EAAiBvB,aAAM,EAANA,EAAQ0B,SAAUf,EAAKD,MAAMgB,YACpEZ,EAAAH,EAAA,WAEU,SAACgB,EAAkBC,GAC5B,IAAMC,EAAKf,EAAMa,CAAAA,EAAAA,EAAU,CAAC,CAAEG,KAAMC,EAAmBC,OAAQJ,QAAAA,KAC/DjB,EAAKW,SAAS,CAAElB,cAAegB,OAAOC,OAAO,CAAA,EAAIV,EAAKM,MAAMb,cAAeyB,OAC5Ef,EAAAH,EAEa,cAAA,SAACsB,GACb,IAAMC,EAASC,EAAA,CAAA,EAAQxB,EAAKM,MAAMb,eAC9BgC,MAAMC,QAAQJ,GAChBA,EAASK,QAAQ,SAACC,GACZL,EAAUK,WAAaL,EAAUK,EACvC,GAEIL,EAAUD,WAAkBC,EAAUD,GAE5CtB,EAAKW,SAAS,CAAElB,cAAe8B,MAChCpB,EAAAH,EAAA,gBAEe,WACdA,EAAKW,SAAS,CAAElB,cAAe,CAAA,MAChCU,EAAAH,EAAA,WAAA,WAAA,IAAA6B,EAAAC,EAAAC,IAAAC,EAGmD,SAAAC,EAAOC,GAAC,IAAAC,EAAAC,EAAAC,EAAA5C,EAAA6C,EAAAC,EAAAC,EAAAC,EAAA,OAAAV,IAAAW,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAWzD,GAVDX,EAAEY,iBACIX,EAAW,IAAIY,SAASb,EAAEc,eAC1BZ,EAAMa,EAAyBd,GAE/BE,EAAUa,EAAed,GAC/BpC,EAAKW,SAAS,CAAEJ,WAAY8B,IACtB5C,EAAgBO,EAAKe,SAASoC,IAAId,GAEpCrC,EAAKD,MAAMqD,SAAW3C,OAAO4C,KAAK5D,GAAe6D,OAAS,GAC5DtD,EAAKD,MAAMqD,QAAQ3D,IAGjBA,EAAa,CAAAkD,EAAAE,EAAA,EAAA,KAAA,CACgC,GAA/C7C,EAAKW,SAAS,CAAElB,cAAeA,MAC3BgB,OAAO4C,KAAK5D,GAAe6D,OAAS,GAAC,CAAAX,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAY,EAAA,GAAA,KAAA,EAAA,OAAAZ,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAGnC7C,EAAKD,MAAMyD,SAASnB,EAASH,GAAE,KAAA,EAAAS,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAc,GAE/BlB,EAAcmB,EAA0BjB,IAC9Ba,OAAS,IAA2BhB,QAAxBA,EAAAqB,EAAgBC,gBAAhBtB,IAAwBA,GAAxBA,EAA0BuB,UAAUtB,EAAY,KACtEC,EAAesB,EAAoBrB,EAAQJ,GACjDrC,EAAKW,SAAS,CAAElB,cAAa+B,EAAAA,KAAOxB,EAAKM,MAAMb,eAAmB+C,GAAgB,CAAE,KACpF,KAAA,EAAA,OAAAG,EAAAY,EAAA,GAAA,EAAAtB,EAAA,KAAA,CAAA,CAAA,EAAA,QAEH,OAAA,SAAA8B,GAAA,OAAAlC,EAAAmC,MAAAC,KAAAC,UAAA,CAAA,CA7BA,IA6BA/D,EAAAH,EAEQ,SAAA,SAACgB,GACR,GAAKhB,EAAKmE,QAAV,CACA,IAAQ1E,EAAkBO,EAAKM,MAAvBb,cACF0C,EAAW,IAAIY,SAAS/C,EAAKmE,SAC7B/B,EAAMa,EAAsBd,GAC5BE,EAAUa,EAAed,GAC/BpC,EAAKW,SAAS,CAAEJ,WAAY8B,IAC5B,IAAMnB,EAAQkD,EAA8BpD,EAASqB,EAAS5C,EAAeO,EAAKe,WAAa,CAAE,EACjGf,EAAKW,SAAS,CAAElB,cAAeyB,GAPZ,IAtFnBlB,EAAKe,SAAWf,EAAKqE,cACrBrE,EAAKM,MAAQ,CAAEb,cAAe,CAAA,GAAIO,CACpC,CAAC,OAAAsE,EAAAxE,EANoByE,GAMpBC,EAAA1E,EAAA,CAAA,CAAA8B,IAAA,SAAA6C,MAED,WAAM,IAAAC,EAAAC,EAAAC,EAAAX,KACEY,EAAY,CAACZ,KAAKlE,MAAM+E,UAA2B,QAAlBJ,EAAET,KAAKlE,MAAMgF,aAAK,IAAAL,WAAAA,EAAhBA,EAAkBM,iBAAS,IAAAN,OAAA,EAA3BA,EAA6BI,WAAWG,OAAOC,SACxF,OACEC,EAACC,EAAG5D,EAAAA,EAAA,CACF6D,UAAU,OACVC,IAAK,SAACA,GAAoB,OAAMV,EAAKT,QAAUmB,CAAI,EACnD9B,SAAUS,KAAKT,UACM,QADEmB,EAClBV,KAAKlE,MAAMgF,aAAK,IAAAJ,OAAA,EAAhBA,EAAkBK,WAAiB,CAAA,EAAA,CACxCF,UAAWD,EAAUU,KAAK,KAE1BC,SAAAL,EAAC7F,EAAgBmG,SAAS,CAAAhB,MAAOR,KAAKyB,aAAeF,SAAAvB,KAAKlE,MAAMyF,aAGtE,IAAC,IAgFH,MAAO,CACLG,KAAM7F,EACN8F,UAAWvG,aAAAA,EAAAA,EAAQ0B,SACnB8E,QAASvG,EACToG,WAAY,SAACrG,GAAmD,OAAK8F,EAAC7F,EAAgBwG,SAAU,CAAAN,SAAAnG,GAAkC,EAEtI"}
1
+ {"version":3,"file":"create.form-base.js","sources":["../../../src/form/create.form-base.tsx"],"sourcesContent":["import { Box, BoxProps } from '@mui/material'\r\nimport { Component, ComponentType, createContext, PropsWithChildren, ReactNode } from 'react'\r\nimport { ApiAlertContext } from '../api-context'\r\nimport { IFormBaseContext, ISetModelStateFunc } from './types'\r\nimport { convertFormDataToJson, getErrorCommonFromResponse, getErrorFromResponse, singleValidate, trimAllStrings, validateMerge } from './helpers'\r\nimport FormValidator, { IPartialError, SingleRuleValidate } from './validator'\r\n\r\nexport interface IFormBaseSlots {\r\n formProps?: Omit<BoxProps, 'ref' | 'onSubmit' | 'component'> & { [key: string]: any }\r\n}\r\n\r\nexport interface IFormBaseConfigs<T> {\r\n validate?: FormValidator<Partial<T>>\r\n dataTrimed?: boolean\r\n dataGetter?: (data: Partial<T>) => Partial<T>\r\n}\r\n\r\nexport interface IFormBaseParams<T> extends IFormBaseConfigs<T> {}\r\n\r\nexport interface IFormBaseProps<T> extends PropsWithChildren, IFormBaseConfigs<T> {\r\n className?: string\r\n onSubmit: (data: Partial<T>, e: React.FormEvent<HTMLFormElement>) => Promise<void>\r\n onError?: (error: IPartialError<T>) => void\r\n slots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormBaseState<T> {\r\n modelState?: Partial<T>\r\n messageErrors: IPartialError<T>\r\n}\r\n\r\nexport interface IFormBaseResult<T> {\r\n Form: ComponentType<IFormBaseProps<T>>\r\n Validator?: FormValidator<Partial<T>>\r\n Context: React.Context<IFormBaseContext<T>>\r\n mapContext: (params: (context: IFormBaseContext<T>) => JSX.Element) => JSX.Element\r\n}\r\n\r\nconst createFormBase = function <T>(params?: IFormBaseParams<T>): IFormBaseResult<T> {\r\n const FormBaseContext = createContext<IFormBaseContext<T>>({\r\n setModelState: () => {},\r\n messageErrors: {},\r\n onBlur: () => {},\r\n setError: () => {},\r\n removeError: () => {},\r\n clearErrorAll: () => {}\r\n })\r\n\r\n class FormBase extends Component<IFormBaseProps<T>, IFormBaseState<T>> {\r\n refForm: HTMLFormElement | null = null\r\n constructor(props: IFormBaseProps<T>) {\r\n super(props)\r\n this.validate = this.getValidate()\r\n this.state = { messageErrors: {} }\r\n }\r\n\r\n render() {\r\n const rootClass = [this.props.className, this.props.slots?.formProps?.className].filter(Boolean)\r\n return (\r\n <Box\r\n component='form'\r\n ref={(ref: HTMLFormElement) => (this.refForm = ref)}\r\n onSubmit={this.onSubmit}\r\n {...(this.props.slots?.formProps as any)}\r\n className={rootClass.join(' ')}\r\n >\r\n <FormBaseContext.Provider value={this.mapContext()}>{this.props.children}</FormBaseContext.Provider>\r\n </Box>\r\n )\r\n }\r\n\r\n private mapContext = (): IFormBaseContext<T> => {\r\n const { setError, removeError, setModelState, clearErrorAll, onBlur } = this\r\n const { modelState, messageErrors } = this.state\r\n return { modelState, messageErrors, setError, onBlur, clearErrorAll, setModelState, removeError }\r\n }\r\n\r\n setModelState: ISetModelStateFunc<T> = (state) => {\r\n const obj = Object.assign({}, this.state.modelState, state)\r\n this.setState({ modelState: obj })\r\n }\r\n\r\n getValidate = (): FormValidator<Partial<T>> => {\r\n const defaultValidate = new FormValidator<Partial<T>>({})\r\n return validateMerge(defaultValidate, params?.validate, this.props.validate)\r\n }\r\n\r\n setError = (keyName: keyof T, message: string) => {\r\n const error = { [keyName]: [{ rule: SingleRuleValidate.Custom, message }] }\r\n this.setState({ messageErrors: Object.assign({}, this.state.messageErrors, error) })\r\n }\r\n\r\n removeError = (keyNames: keyof T | (keyof T)[]) => {\r\n const newErrors = { ...this.state.messageErrors }\r\n if (Array.isArray(keyNames)) {\r\n keyNames.forEach((key) => {\r\n if (newErrors[key]) delete newErrors[key]\r\n })\r\n } else {\r\n if (newErrors[keyNames]) delete newErrors[keyNames]\r\n }\r\n this.setState({ messageErrors: newErrors })\r\n }\r\n\r\n clearErrorAll = () => {\r\n this.setState({ messageErrors: {} })\r\n }\r\n\r\n private validate: FormValidator<Partial<T>>\r\n onSubmit: React.FormEventHandler<HTMLFormElement> = async (e) => {\r\n e.preventDefault()\r\n const formData = new FormData(e.currentTarget as HTMLFormElement)\r\n const raw = convertFormDataToJson<T>(formData)\r\n // TODO: validate raw data\r\n const trimmed = trimAllStrings(raw)\r\n this.setState({ modelState: trimmed })\r\n const messageErrors = this.validate.run(trimmed) as IPartialError<T>\r\n\r\n if (this.props.onError && Object.keys(messageErrors).length > 0) {\r\n this.props.onError(messageErrors)\r\n }\r\n\r\n if (messageErrors) {\r\n this.setState({ messageErrors: messageErrors })\r\n if (Object.keys(messageErrors).length > 0) return\r\n }\r\n try {\r\n await this.props.onSubmit(trimmed, e)\r\n } catch (error: any) {\r\n const errorCommon = getErrorCommonFromResponse(error as any)\r\n if (errorCommon.length > 0) ApiAlertContext.ApiAlert?.PushError(errorCommon[0])\r\n const messageError = getErrorFromResponse(error, trimmed)\r\n this.setState({ messageErrors: { ...this.state.messageErrors, ...(messageError || {}) } })\r\n // throw error\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","createContext","setModelState","messageErrors","onBlur","setError","removeError","clearErrorAll","FormBase","props","_this","_classCallCheck","_callSuper","_defineProperty","_this2","_this$state","state","modelState","obj","Object","assign","setState","defaultValidate","FormValidator","validateMerge","validate","keyName","message","error","rule","SingleRuleValidate","Custom","keyNames","newErrors","_objectSpread","Array","isArray","forEach","key","_ref","_asyncToGenerator","_regenerator","m","_callee","e","formData","raw","trimmed","_ApiAlertContext$ApiA","errorCommon","messageError","_t","w","_context","p","n","preventDefault","FormData","currentTarget","convertFormDataToJson","trimAllStrings","run","onError","keys","length","a","onSubmit","v","getErrorCommonFromResponse","ApiAlertContext","ApiAlert","PushError","getErrorFromResponse","_x","apply","this","arguments","refForm","singleValidate","getValidate","_inherits","Component","_createClass","value","_this$props$slots","_this$props$slots2","_this3","rootClass","className","slots","formProps","filter","Boolean","_jsx","Box","component","ref","join","children","Provider","mapContext","Form","Validator","Context","Consumer"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{inherits as r,createClass as n,classCallCheck as e,callSuper as t,defineProperty as o,asyncToGenerator as i,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,jsxs as s}from"react/jsx-runtime";import{Component as c}from"react";import{styled as u,Button as d,Box as p,Card as f,DialogTitle as h,DialogContent as m,DialogActions as v}from"@mui/material";import{fetchDelay as g}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{mapGlobalModalContext as C}from"../api-context/global-modal.js";var k=function(u){var d=function(){function d(r){var n;return e(this,d),n=t(this,d,[r]),o(n,"handleClickNo",function(r){r.close(),n.props.onCancel&&n.props.onCancel()}),o(n,"handleClickYes",function(){var r=i(l().m(function r(e){var t;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(n.props.onSubmit){r.n=1;break}return r.a(2);case 1:return r.p=1,n.setState({loading:!0}),r.n=2,g(function(){return n.props.onSubmit(n.props.data)},700);case 2:e.close(),r.n=4;break;case 3:r.p=3,t=r.v,console.log("Handle Click Yes error:",t);case 4:return r.p=4,n.setState({loading:!1}),r.f(4);case 5:return r.a(2)}},r,null,[[1,3,4,5]])}));return function(n){return r.apply(this,arguments)}}()),n.state={loading:!1},n}return r(d,c),n(d,[{key:"render",value:function(){var r,n,e=this,t=this.props.children||(null!=u&&u.content?null==u?void 0:u.content(this.props.data):void 0),o=null!==(r=null!==(n=this.props.title)&&void 0!==n?n:null==u?void 0:u.title)&&void 0!==r?r:"Are you sure?";return a(p,{sx:{flex:1,display:"flex",alignItems:"center",justifyContent:"center"},children:C(function(r){var n,i;return s(f,{children:[a(h,{id:"alert-dialog-title",children:o}),a(m,{sx:{minWidth:"300px"},children:t}),s(v,{children:[a(y,{disabled:e.state.loading,color:(null==u||null===(n=u.colors)||void 0===n?void 0:n.no)||"inherit",onClick:function(){return e.handleClickNo(r)},children:"No"}),a(y,{color:(null==u||null===(i=u.colors)||void 0===i?void 0:i.yes)||"error",disabled:e.state.loading,onClick:function(){return e.handleClickYes(r)},children:"Yes"})]})]})})})}}])}();return d},y=u(d)({textTransform:"capitalize",fontWeight:600,"&.MuiButton-colorInherit":{color:"#606060!important"}});export{k as default};
1
+ import{inherits as r,createClass as t,classCallCheck as e,callSuper as n,defineProperty as o,asyncToGenerator as i,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,jsxs as s}from"react/jsx-runtime";import{Component as c}from"react";import{styled as u,Button as p,Box as d,Card as f,DialogTitle as m,DialogContent as h,DialogActions as v}from"@mui/material";import{fetchDelay as g}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import{mapGlobalModalContext as C}from"../api-context/global-modal.js";var k=function(u){var p=function(){function p(r){var t;return e(this,p),t=n(this,p,[r]),o(t,"handleClickNo",function(r){r.close(),t.props.onCancel&&t.props.onCancel()}),o(t,"handleClickYes",function(){var r=i(l().m(function r(e){var n;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(t.props.onSubmit){r.n=1;break}return r.a(2);case 1:return r.p=1,t.setState({loading:!0}),r.n=2,g(function(){return t.props.onSubmit(t.props.data)},700);case 2:e.close(),r.n=4;break;case 3:r.p=3,n=r.v,console.log("Handle Click Yes error:",n);case 4:return r.p=4,t.setState({loading:!1}),r.f(4);case 5:return r.a(2)}},r,null,[[1,3,4,5]])}));return function(t){return r.apply(this,arguments)}}()),t.state={loading:!1},t}return r(p,c),t(p,[{key:"render",value:function(){var r,t,e=this,n=this.props.children||(null!=u&&u.content?null==u?void 0:u.content(this.props.data):void 0),o=null!==(r=null!==(t=this.props.title)&&void 0!==t?t:null==u?void 0:u.title)&&void 0!==r?r:"Are you sure?";return a(d,{sx:{flex:1,display:"flex",alignItems:"center",justifyContent:"center"},children:C(function(r){var t,i;return s(f,{children:[a(m,{id:"alert-dialog-title",children:o}),a(h,{sx:{minWidth:"300px"},children:n}),s(v,{children:[a(x,{disabled:e.state.loading,color:(null==u||null===(t=u.colors)||void 0===t?void 0:t.no)||"inherit",onClick:function(){return e.handleClickNo(r)},children:"No"}),a(x,{color:(null==u||null===(i=u.colors)||void 0===i?void 0:i.yes)||"error",disabled:e.state.loading,onClick:function(){return e.handleClickYes(r)},children:"Yes"})]})]})})})}}])}();return p},x=u(p)({textTransform:"capitalize",fontWeight:600,"&.MuiButton-colorInherit":{color:"#606060!important"}});export{k as default};
2
2
  //# sourceMappingURL=create.form-comfirm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.form-comfirm.js","sources":["../../../src/form/create.form-comfirm.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, Button, Card, DialogActions, DialogContent, DialogTitle, styled } from '@mui/material'\r\nimport { fetchDelay } from '../utils'\r\nimport { IGlobalModalContext, mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormComfirmParam<T> {\r\n title?: string\r\n content: (value?: T) => JSX.Element\r\n colors?: {\r\n yes?: 'inherit' | 'error' | 'primary' | 'secondary' | 'success' | 'info' | 'warning'\r\n no?: 'inherit' | 'error' | 'primary' | 'secondary' | 'success' | 'info' | 'warning'\r\n }\r\n}\r\n\r\nexport interface IFormComfirmProps<T> {\r\n data?: T\r\n title?: string\r\n onSubmit: (value?: T) => Promise<void>\r\n onCancel?: () => void\r\n}\r\n\r\nexport interface IFormComfirmState {\r\n loading?: boolean\r\n}\r\n\r\nconst CreateFormComfirm = function <T = any>(param?: IFormComfirmParam<T>): ComponentType<React.PropsWithChildren<IFormComfirmProps<T>>> {\r\n class FormConfirm extends Component<React.PropsWithChildren<IFormComfirmProps<T>>, IFormComfirmState> {\r\n constructor(props: IFormComfirmProps<T>) {\r\n super(props)\r\n this.state = { loading: false }\r\n }\r\n\r\n render() {\r\n const content = this.props.children || (param?.content ? param?.content(this.props.data) : undefined)\r\n const title = this.props.title ?? param?.title ?? 'Are you sure?'\r\n return (\r\n <Box sx={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n {mapGlobalModalContext((context) => (\r\n <Card>\r\n <DialogTitle id='alert-dialog-title'>{title}</DialogTitle>\r\n <DialogContent sx={{ minWidth: '300px' }}>{content}</DialogContent>\r\n <DialogActions>\r\n <CustomButton disabled={this.state.loading} color={param?.colors?.no || 'inherit'} onClick={() => this.handleClickNo(context)}>\r\n No\r\n </CustomButton>\r\n <CustomButton color={param?.colors?.yes || 'error'} disabled={this.state.loading} onClick={() => this.handleClickYes(context)}>\r\n Yes\r\n </CustomButton>\r\n </DialogActions>\r\n </Card>\r\n ))}\r\n </Box>\r\n )\r\n }\r\n\r\n handleClickNo = (context: IGlobalModalContext) => {\r\n context.close()\r\n this.props.onCancel && this.props.onCancel()\r\n }\r\n\r\n handleClickYes = async (context: IGlobalModalContext) => {\r\n if (!this.props.onSubmit) return\r\n try {\r\n this.setState({ loading: true })\r\n await fetchDelay(() => this.props.onSubmit(this.props.data), 700)\r\n context.close()\r\n } catch (error) {\r\n console.log('Handle Click Yes error:', error)\r\n } finally {\r\n this.setState({ loading: false })\r\n }\r\n }\r\n }\r\n return FormConfirm\r\n}\r\nexport default CreateFormComfirm\r\n\r\nconst CustomButton = styled(Button)({\r\n textTransform: 'capitalize',\r\n fontWeight: 600,\r\n '&.MuiButton-colorInherit': {\r\n color: '#606060!important'\r\n }\r\n})\r\n"],"names":["CreateFormComfirm","param","FormConfirm","props","_this","_classCallCheck","_callSuper","_defineProperty","context","close","onCancel","_ref","_asyncToGenerator","_regenerator","m","_callee","_t","w","_context","p","n","onSubmit","a","setState","loading","fetchDelay","data","v","console","log","f","_x","apply","this","arguments","state","_inherits","Component","_createClass","key","value","_ref2","_this$props$title","_this2","content","children","undefined","title","_jsx","Box","sx","flex","display","alignItems","justifyContent","mapGlobalModalContext","_param$colors","_param$colors2","_jsxs","Card","DialogTitle","id","DialogContent","minWidth","DialogActions","CustomButton","disabled","color","colors","no","onClick","handleClickNo","yes","handleClickYes","styled","Button","textTransform","fontWeight"],"mappings":"gkBAyBA,IAAMA,EAAoB,SAAmBC,GAA4B,IACjEC,aACJ,SAAAA,EAAYC,GAA2B,IAAAC,EAEN,OAFMC,OAAAH,GACrCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EA2BE,gBAAA,SAACI,GACfA,EAAQC,QACRL,EAAKD,MAAMO,UAAYN,EAAKD,MAAMO,aACnCH,EAAAH,EAAA,iBAAA,WAAA,IAAAO,EAAAC,EAAAC,IAAAC,EAEgB,SAAAC,EAAOP,GAA4B,IAAAQ,EAAA,OAAAH,IAAAI,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,GAC7ChB,EAAKD,MAAMkB,SAAQ,CAAAH,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAI,EAAA,GAAA,KAAA,EAEU,OAFVJ,EAAAC,EAAA,EAEtBf,EAAKmB,SAAS,CAAEC,SAAS,IAAON,EAAAE,EAAA,EAC1BK,EAAW,WAAA,OAAMrB,EAAKD,MAAMkB,SAASjB,EAAKD,MAAMuB,KAAK,EAAE,KAAI,KAAA,EACjElB,EAAQC,QAAOS,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAS,EAEfC,QAAQC,IAAI,0BAAyBb,GAAQ,KAAA,EAEZ,OAFYE,EAAAC,EAAA,EAE7Cf,EAAKmB,SAAS,CAAEC,SAAS,IAAQN,EAAAY,EAAA,GAAA,KAAA,EAAA,OAAAZ,EAAAI,EAAA,GAAA,EAAAP,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,QAEpC,OAAA,SAAAgB,GAAA,OAAApB,EAAAqB,MAAAC,KAAAC,UAAA,CAAA,CAbA,IA7BC9B,EAAK+B,MAAQ,CAAEX,SAAS,GAAOpB,CACjC,CAAC,OAAAgC,EAAAlC,EAJuBmC,GAIvBC,EAAApC,EAAA,CAAA,CAAAqC,IAAA,SAAAC,MAED,WAAM,IAAAC,EAAAC,EAAAC,EAAAV,KACEW,EAAUX,KAAK9B,MAAM0C,WAAa5C,SAAAA,EAAO2C,QAAU3C,aAAK,EAALA,EAAO2C,QAAQX,KAAK9B,MAAMuB,WAAQoB,GACrFC,EAAwC,QAAnCN,EAAmB,QAAnBC,EAAGT,KAAK9B,MAAM4C,aAAK,IAAAL,EAAAA,EAAIzC,aAAK,EAALA,EAAO8C,aAAK,IAAAN,EAAAA,EAAI,gBAClD,OACEO,EAACC,EAAG,CAACC,GAAI,CAAEC,KAAM,EAAGC,QAAS,OAAQC,WAAY,SAAUC,eAAgB,UACxET,SAAAU,EAAsB,SAAC/C,GAAO,IAAAgD,EAAAC,EAAA,OAC7BC,EAACC,EACC,CAAAd,SAAA,CAAAG,EAACY,EAAW,CAACC,GAAG,qBAAoBhB,SAAEE,IACtCC,EAACc,EAAc,CAAAZ,GAAI,CAAEa,SAAU,kBAAYnB,IAC3Cc,EAACM,EAAa,CAAAnB,SAAA,CACZG,EAACiB,GAAaC,SAAUvB,EAAKR,MAAMX,QAAS2C,OAAOlE,iBAAKuD,EAALvD,EAAOmE,cAAM,IAAAZ,OAAA,EAAbA,EAAea,KAAM,UAAWC,QAAS,WAAF,OAAQ3B,EAAK4B,cAAc/D,EAAQ,EAAAqC,SAAA,OAG7HG,EAACiB,EAAY,CAACE,OAAOlE,iBAAKwD,EAALxD,EAAOmE,cAAM,IAAAX,OAAA,EAAbA,EAAee,MAAO,QAASN,SAAUvB,EAAKR,MAAMX,QAAS8C,QAAS,WAAF,OAAQ3B,EAAK8B,eAAejE,EAAQ,EAE9GqC,SAAA,aAGpB,IAGP,IAAC,IAoBH,OAAO3C,CACT,EAGM+D,EAAeS,EAAOC,EAAPD,CAAe,CAClCE,cAAe,aACfC,WAAY,IACZ,2BAA4B,CAC1BV,MAAO"}
1
+ {"version":3,"file":"create.form-comfirm.js","sources":["../../../src/form/create.form-comfirm.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, Button, Card, DialogActions, DialogContent, DialogTitle, styled } from '@mui/material'\r\nimport { fetchDelay } from '../utils'\r\nimport { IGlobalModalContext, mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormComfirmParam<T> {\r\n title?: string\r\n content: (value?: T) => JSX.Element\r\n colors?: {\r\n yes?: 'inherit' | 'error' | 'primary' | 'secondary' | 'success' | 'info' | 'warning'\r\n no?: 'inherit' | 'error' | 'primary' | 'secondary' | 'success' | 'info' | 'warning'\r\n }\r\n}\r\n\r\nexport interface IFormComfirmProps<T> {\r\n data?: T\r\n title?: string\r\n onSubmit: (value?: T) => Promise<void>\r\n onCancel?: () => void\r\n}\r\n\r\nexport interface IFormComfirmState {\r\n loading?: boolean\r\n}\r\n\r\nconst CreateFormComfirm = function <T = any>(param?: IFormComfirmParam<T>): ComponentType<React.PropsWithChildren<IFormComfirmProps<T>>> {\r\n class FormConfirm extends Component<React.PropsWithChildren<IFormComfirmProps<T>>, IFormComfirmState> {\r\n constructor(props: IFormComfirmProps<T>) {\r\n super(props)\r\n this.state = { loading: false }\r\n }\r\n\r\n render() {\r\n const content = this.props.children || (param?.content ? param?.content(this.props.data) : undefined)\r\n const title = this.props.title ?? param?.title ?? 'Are you sure?'\r\n return (\r\n <Box sx={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n {mapGlobalModalContext((context) => (\r\n <Card>\r\n <DialogTitle id='alert-dialog-title'>{title}</DialogTitle>\r\n <DialogContent sx={{ minWidth: '300px' }}>{content}</DialogContent>\r\n <DialogActions>\r\n <CustomButton disabled={this.state.loading} color={param?.colors?.no || 'inherit'} onClick={() => this.handleClickNo(context)}>\r\n No\r\n </CustomButton>\r\n <CustomButton color={param?.colors?.yes || 'error'} disabled={this.state.loading} onClick={() => this.handleClickYes(context)}>\r\n Yes\r\n </CustomButton>\r\n </DialogActions>\r\n </Card>\r\n ))}\r\n </Box>\r\n )\r\n }\r\n\r\n handleClickNo = (context: IGlobalModalContext) => {\r\n context.close()\r\n this.props.onCancel && this.props.onCancel()\r\n }\r\n\r\n handleClickYes = async (context: IGlobalModalContext) => {\r\n if (!this.props.onSubmit) return\r\n try {\r\n this.setState({ loading: true })\r\n await fetchDelay(() => this.props.onSubmit(this.props.data), 700)\r\n context.close()\r\n } catch (error) {\r\n console.log('Handle Click Yes error:', error)\r\n } finally {\r\n this.setState({ loading: false })\r\n }\r\n }\r\n }\r\n return FormConfirm\r\n}\r\nexport default CreateFormComfirm\r\n\r\nconst CustomButton = styled(Button)({\r\n textTransform: 'capitalize',\r\n fontWeight: 600,\r\n '&.MuiButton-colorInherit': {\r\n color: '#606060!important'\r\n }\r\n})\r\n"],"names":["CreateFormComfirm","param","FormConfirm","props","_this","_classCallCheck","_callSuper","_defineProperty","context","close","onCancel","_ref","_asyncToGenerator","_regenerator","m","_callee","_t","w","_context","p","n","onSubmit","a","setState","loading","fetchDelay","data","v","console","log","f","_x","apply","this","arguments","state","_inherits","Component","_createClass","key","value","_ref2","_this$props$title","_this2","content","children","undefined","title","_jsx","Box","sx","flex","display","alignItems","justifyContent","mapGlobalModalContext","_param$colors","_param$colors2","_jsxs","Card","DialogTitle","id","DialogContent","minWidth","DialogActions","CustomButton","disabled","color","colors","no","onClick","handleClickNo","yes","handleClickYes","styled","Button","textTransform","fontWeight"],"mappings":"+oBAyBA,IAAMA,EAAoB,SAAmBC,GAA4B,IACjEC,aACJ,SAAAA,EAAYC,GAA2B,IAAAC,EAEN,OAFMC,OAAAH,GACrCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EA2BE,gBAAA,SAACI,GACfA,EAAQC,QACRL,EAAKD,MAAMO,UAAYN,EAAKD,MAAMO,aACnCH,EAAAH,EAAA,iBAAA,WAAA,IAAAO,EAAAC,EAAAC,IAAAC,EAEgB,SAAAC,EAAOP,GAA4B,IAAAQ,EAAA,OAAAH,IAAAI,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,GAC7ChB,EAAKD,MAAMkB,SAAQ,CAAAH,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAI,EAAA,GAAA,KAAA,EAEU,OAFVJ,EAAAC,EAAA,EAEtBf,EAAKmB,SAAS,CAAEC,SAAS,IAAON,EAAAE,EAAA,EAC1BK,EAAW,WAAA,OAAMrB,EAAKD,MAAMkB,SAASjB,EAAKD,MAAMuB,KAAK,EAAE,KAAI,KAAA,EACjElB,EAAQC,QAAOS,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAS,EAEfC,QAAQC,IAAI,0BAAyBb,GAAQ,KAAA,EAEZ,OAFYE,EAAAC,EAAA,EAE7Cf,EAAKmB,SAAS,CAAEC,SAAS,IAAQN,EAAAY,EAAA,GAAA,KAAA,EAAA,OAAAZ,EAAAI,EAAA,GAAA,EAAAP,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,QAEpC,OAAA,SAAAgB,GAAA,OAAApB,EAAAqB,MAAAC,KAAAC,UAAA,CAAA,CAbA,IA7BC9B,EAAK+B,MAAQ,CAAEX,SAAS,GAAOpB,CACjC,CAAC,OAAAgC,EAAAlC,EAJuBmC,GAIvBC,EAAApC,EAAA,CAAA,CAAAqC,IAAA,SAAAC,MAED,WAAM,IAAAC,EAAAC,EAAAC,EAAAV,KACEW,EAAUX,KAAK9B,MAAM0C,WAAa5C,SAAAA,EAAO2C,QAAU3C,aAAK,EAALA,EAAO2C,QAAQX,KAAK9B,MAAMuB,WAAQoB,GACrFC,EAAwC,QAAnCN,EAAmB,QAAnBC,EAAGT,KAAK9B,MAAM4C,aAAK,IAAAL,EAAAA,EAAIzC,aAAK,EAALA,EAAO8C,aAAK,IAAAN,EAAAA,EAAI,gBAClD,OACEO,EAACC,EAAG,CAACC,GAAI,CAAEC,KAAM,EAAGC,QAAS,OAAQC,WAAY,SAAUC,eAAgB,UACxET,SAAAU,EAAsB,SAAC/C,GAAO,IAAAgD,EAAAC,EAAA,OAC7BC,EAACC,EACC,CAAAd,SAAA,CAAAG,EAACY,EAAW,CAACC,GAAG,qBAAoBhB,SAAEE,IACtCC,EAACc,EAAc,CAAAZ,GAAI,CAAEa,SAAU,kBAAYnB,IAC3Cc,EAACM,EAAa,CAAAnB,SAAA,CACZG,EAACiB,GAAaC,SAAUvB,EAAKR,MAAMX,QAAS2C,OAAOlE,iBAAKuD,EAALvD,EAAOmE,cAAM,IAAAZ,OAAA,EAAbA,EAAea,KAAM,UAAWC,QAAS,WAAF,OAAQ3B,EAAK4B,cAAc/D,EAAQ,EAAAqC,SAAA,OAG7HG,EAACiB,EAAY,CAACE,OAAOlE,iBAAKwD,EAALxD,EAAOmE,cAAM,IAAAX,OAAA,EAAbA,EAAee,MAAO,QAASN,SAAUvB,EAAKR,MAAMX,QAAS8C,QAAS,WAAF,OAAQ3B,EAAK8B,eAAejE,EAAQ,EAE9GqC,SAAA,aAGpB,IAGP,IAAC,IAoBH,OAAO3C,CACT,EAGM+D,EAAeS,EAAOC,EAAPD,CAAe,CAClCE,cAAe,aACfC,WAAY,IACZ,2BAA4B,CAC1BV,MAAO"}
@@ -1,2 +1,2 @@
1
- import{inherits as o,createClass as r,objectSpread2 as e,classCallCheck as t,callSuper as n,defineProperty as l,asyncToGenerator as i,regenerator as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as u}from"react/jsx-runtime";import{Fragment as d,Component as p}from"react";import{Grid as c}from"@mui/material";import{cleanObject as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{formGridLayoutClasses as f,FormGridLayoutStyled as v,CreateFormBottomBar as g}from"./create.form-grid-layout.units.js";import b from"./create.form-base.js";import h from"./create.input.js";import{mapGlobalModalContext as S}from"../api-context/global-modal.js";var y=function(y){var F=b(),C=g(),j=h({maxLength:250}),E=function(){function g(o){var r;return t(this,g),r=n(this,g,[o]),l(r,"renderFormFieldElement",function(o,t){var n,l,i=r.props.data,a=null!==(n=t.inputElement)&&void 0!==n?n:j,u=o.modelState||{},d=r.configMerged.disabledFields,p="function"==typeof d?d(u,i):d||{},c={data:i,onBlur:o.onBlur,messageErrors:o.messageErrors,name:t.key,label:t.label,placeholder:t.placeholder,disabled:!!p[t.key]||void 0,defaultValue:null!==(l=null==i?void 0:i[t.key])&&void 0!==l?l:null==t?void 0:t.defaultValue,formContext:o};return s(a,e({},m(c)))}),l(r,"loading",function(){return r.setState({loadding:!0})}),l(r,"unloading",function(){return r.setState({loadding:!1})}),l(r,"onSubmit",function(){var o=i(a().m(function o(e,t){var n,l,i,s,u,d,p,c,m;return a().w(function(o){for(;;)switch(o.p=o.n){case 0:return s=r.props.slots,u=null!==(n=null!==(l=null===(i=r.props.slots)||void 0===i?void 0:i.preSubmit)&&void 0!==l?l:y.preSubmit)&&void 0!==n?n:r.preSubmit,d=u(e,r.props.data),o.p=1,r.loading(),null===(p=r.abortController)||void 0===p||p.abort(),r.abortController=new AbortController,o.n=2,r.props.onSubmit(d,null===(c=r.abortController)||void 0===c?void 0:c.signal);case 2:null!=s&&s.closeState&&!1===s.closeState.Success||(t&&t(),r.props.onClose&&r.props.onClose()),o.n=4;break;case 3:throw o.p=3,m=o.v,null!=s&&s.closeState&&!0===s.closeState.Fail&&(t&&t(),r.props.onClose&&r.props.onClose()),r.props.onError&&r.props.onError(m),m;case 4:return o.p=4,r.unloading(),o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}));return function(r,e){return o.apply(this,arguments)}}()),l(r,"preSubmit",function(o){return o}),l(r,"getFormSlots",function(){var o,t=r.state.loadding,n=((null===(o=r.props.slots)||void 0===o?void 0:o.formSlots)||{}).formProps;return{formProps:e(e({},n),{},{sx:e(e({},r.props.sx),{},{opacity:t?.7:1,pointerEvents:t?"none":"auto"})})}}),r.state={loadding:!1},r}return o(g,p),r(g,[{key:"configMerged",get:function(){var o,r,e,t,n=this.props.slots,l=void 0===n?{}:n;return{hiddenFields:null!==(o=null!==(r=l.hiddenFields)&&void 0!==r?r:y.hiddenFields)&&void 0!==o?o:function(){return{}},disabledFields:null!==(e=null!==(t=l.disabledFields)&&void 0!==t?t:y.disabledFields)&&void 0!==e?e:function(){return{}}}}},{key:"render",value:function(){var o,r,t,n=this,l=this.props,i=l.slots,a=l.data,p=l.autoHeight,m=null!==(o=null!==(r=null==y?void 0:y.action)&&void 0!==r?r:null==i?void 0:i.action)&&void 0!==o?o:C,g=[f.root,null==i||null===(t=i.rootProps)||void 0===t?void 0:t.className];return(null!=p?p:y.autoHeight)&&g.push(f.autoHeight),S(function(o){var r=o.close;return s(v,e(e({},null==i?void 0:i.rootProps),{},{className:g.filter(Boolean).join(" "),children:u(F.Form,{className:f.form,validate:y.validate,onSubmit:function(o){return n.onSubmit(o,r)},slots:n.getFormSlots(),onError:n.props.onSubmitError,children:[(null==i?void 0:i.contentBefore)&&(null==i?void 0:i.contentBefore),null==y?void 0:y.contentBefore,F.mapContext(function(o){var r=n.configMerged.hiddenFields,t=o.modelState||{},l="function"==typeof r?r(t,a):r||{};return s(c,{container:!0,spacing:2,children:y.configs.map(function(r,t){var i=!!l[r.key]||void 0;return s(d,i?{}:{children:s(c,e(e({item:!0,xs:12},r.sizes),{},{className:r.className,children:n.renderFormFieldElement(o,r)}))},r.key.toString()+t)})})}),null==y?void 0:y.contentAfter,(null==i?void 0:i.contentAfter)&&(null==i?void 0:i.contentAfter),F.mapContext(function(o){return s(m,{data:a,onBlur:o.onBlur,messageErrors:o.messageErrors,before:null==i?void 0:i.actionBefore})})]})}))})}},{key:"componentWillUnmount",value:function(){var o;null===(o=this.abortController)||void 0===o||o.abort()}}])}();return E};export{y as default};
1
+ import{inherits as o,createClass as r,objectSpread2 as e,classCallCheck as t,callSuper as n,defineProperty as l,asyncToGenerator as i,regenerator as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as u}from"react/jsx-runtime";import{Fragment as d,Component as p}from"react";import{Grid as c}from"@mui/material";import{cleanObject as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import{mapGlobalModalContext as f}from"../api-context/global-modal.js";import{formGridLayoutClasses as v,FormGridLayoutStyled as g,CreateFormBottomBar as b}from"./create.form-grid-layout.units.js";import h from"./create.form-base.js";import S from"./create.input.js";var y=function(y){var F=h(),C=b(),j=S({maxLength:250}),x=function(){function b(o){var r;return t(this,b),r=n(this,b,[o]),l(r,"renderFormFieldElement",function(o,t){var n,l,i=r.props.data,a=null!==(n=t.inputElement)&&void 0!==n?n:j,u=o.modelState||{},d=r.configMerged.disabledFields,p="function"==typeof d?d(u,i):d||{},c={data:i,onBlur:o.onBlur,messageErrors:o.messageErrors,name:t.key,label:t.label,placeholder:t.placeholder,disabled:!!p[t.key]||void 0,defaultValue:null!==(l=null==i?void 0:i[t.key])&&void 0!==l?l:null==t?void 0:t.defaultValue,formContext:o};return s(a,e({},m(c)))}),l(r,"loading",function(){return r.setState({loadding:!0})}),l(r,"unloading",function(){return r.setState({loadding:!1})}),l(r,"onSubmit",function(){var o=i(a().m(function o(e,t){var n,l,i,s,u,d,p,c,m;return a().w(function(o){for(;;)switch(o.p=o.n){case 0:return s=r.props.slots,u=null!==(n=null!==(l=null===(i=r.props.slots)||void 0===i?void 0:i.preSubmit)&&void 0!==l?l:y.preSubmit)&&void 0!==n?n:r.preSubmit,d=u(e,r.props.data),o.p=1,r.loading(),null===(p=r.abortController)||void 0===p||p.abort(),r.abortController=new AbortController,o.n=2,r.props.onSubmit(d,null===(c=r.abortController)||void 0===c?void 0:c.signal);case 2:null!=s&&s.closeState&&!1===s.closeState.Success||(t&&t(),r.props.onClose&&r.props.onClose()),o.n=4;break;case 3:throw o.p=3,m=o.v,null!=s&&s.closeState&&!0===s.closeState.Fail&&(t&&t(),r.props.onClose&&r.props.onClose()),r.props.onError&&r.props.onError(m),m;case 4:return o.p=4,r.unloading(),o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}));return function(r,e){return o.apply(this,arguments)}}()),l(r,"preSubmit",function(o){return o}),l(r,"getFormSlots",function(){var o,t=r.state.loadding,n=((null===(o=r.props.slots)||void 0===o?void 0:o.formSlots)||{}).formProps;return{formProps:e(e({},n),{},{sx:e(e({},r.props.sx),{},{opacity:t?.7:1,pointerEvents:t?"none":"auto"})})}}),r.state={loadding:!1},r}return o(b,p),r(b,[{key:"configMerged",get:function(){var o,r,e,t,n=this.props.slots,l=void 0===n?{}:n;return{hiddenFields:null!==(o=null!==(r=l.hiddenFields)&&void 0!==r?r:y.hiddenFields)&&void 0!==o?o:function(){return{}},disabledFields:null!==(e=null!==(t=l.disabledFields)&&void 0!==t?t:y.disabledFields)&&void 0!==e?e:function(){return{}}}}},{key:"render",value:function(){var o,r,t,n=this,l=this.props,i=l.slots,a=l.data,p=l.autoHeight,m=null!==(o=null!==(r=null==y?void 0:y.action)&&void 0!==r?r:null==i?void 0:i.action)&&void 0!==o?o:C,b=[v.root,null==i||null===(t=i.rootProps)||void 0===t?void 0:t.className];return(null!=p?p:y.autoHeight)&&b.push(v.autoHeight),f(function(o){var r=o.close;return s(g,e(e({},null==i?void 0:i.rootProps),{},{className:b.filter(Boolean).join(" "),children:u(F.Form,{className:v.form,validate:y.validate,onSubmit:function(o){return n.onSubmit(o,r)},slots:n.getFormSlots(),onError:n.props.onSubmitError,children:[(null==i?void 0:i.contentBefore)&&(null==i?void 0:i.contentBefore),null==y?void 0:y.contentBefore,F.mapContext(function(o){var r=n.configMerged.hiddenFields,t=o.modelState||{},l="function"==typeof r?r(t,a):r||{};return s(c,{container:!0,spacing:2,children:y.configs.map(function(r,t){var i=!!l[r.key]||void 0;return s(d,i?{}:{children:s(c,e(e({item:!0,xs:12},r.sizes),{},{className:r.className,children:n.renderFormFieldElement(o,r)}))},r.key.toString()+t)})})}),null==y?void 0:y.contentAfter,(null==i?void 0:i.contentAfter)&&(null==i?void 0:i.contentAfter),F.mapContext(function(o){return s(m,{data:a,onBlur:o.onBlur,messageErrors:o.messageErrors,before:null==i?void 0:i.actionBefore})})]})}))})}},{key:"componentWillUnmount",value:function(){var o;null===(o=this.abortController)||void 0===o||o.abort()}}])}();return x};export{y as default};
2
2
  //# sourceMappingURL=create.form-grid-layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.form-grid-layout.js","sources":["../../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport type { ComponentType } from 'react'\r\nimport { cleanObject } from '../utils'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { IFormBase, IFormBaseContext, IFormInputBase } from './types'\r\nimport { FormGridLayoutStyled, CreateFormBottomBar, formGridLayoutClasses } from './create.form-grid-layout.units'\r\nimport FormValidator, { IPartialError } from './validator'\r\nimport createFormBase, { IFormBaseSlots } from './create.form-base'\r\nimport createInput from './create.input'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n sizes?: RegularBreakpoints\r\n defaultValue?: any\r\n className?: string\r\n inputElement?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type IPreSubmitEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutMergedConfigs<T> {\r\n hiddenFields?: Partial<Record<keyof T, boolean>> | ((state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>)\r\n disabledFields?: Partial<Record<keyof T, boolean>> | ((state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>)\r\n}\r\n\r\nexport interface IFormGridLayoutSlots<T> extends IFormGridLayoutMergedConfigs<T> {\r\n action?: ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n // getDisabledFields?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n rootProps?: BoxProps\r\n preSubmit?: IPreSubmitEvent<T>\r\n formSlots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onSubmitError?: (error: IPartialError<T>) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = createFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = createInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged() {\r\n const { slots = {} } = this.props\r\n return {\r\n hiddenFields: slots.hiddenFields ?? params.hiddenFields ?? (() => ({}) as Partial<Record<keyof T, boolean>>),\r\n disabledFields: slots.disabledFields ?? params.disabledFields ?? (() => ({}) as Partial<Record<keyof T, boolean>>)\r\n }\r\n }\r\n\r\n render() {\r\n const { slots, data, autoHeight } = this.props\r\n const BottomBar = params?.action ?? slots?.action ?? BottomBarInstance\r\n\r\n const rootClasses = [formGridLayoutClasses.root, slots?.rootProps?.className]\r\n if (autoHeight ?? params.autoHeight) rootClasses.push(formGridLayoutClasses.autoHeight)\r\n\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormGridLayoutStyled {...slots?.rootProps} className={rootClasses.filter(Boolean).join(' ')}>\r\n <FormBaseInstance.Form\r\n className={formGridLayoutClasses.form}\r\n validate={params.validate}\r\n onSubmit={(v) => this.onSubmit(v, close)}\r\n slots={this.getFormSlots()}\r\n onError={this.props.onSubmitError}\r\n >\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n {FormBaseInstance.mapContext((context) => {\r\n const { hiddenFields } = this.configMerged\r\n const mState = context.modelState || {}\r\n const finalHiddenFields = typeof hiddenFields === 'function' ? hiddenFields(mState, data) : hiddenFields || {}\r\n return (\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const isHidden: boolean | undefined = finalHiddenFields[config.key] ? true : undefined\r\n if (isHidden) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.sizes} className={config.className}>\r\n {this.renderFormFieldElement(context, config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n )\r\n })}\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n </FormGridLayoutStyled>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (context: IFormBaseContext<T>, config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n const mState = context.modelState || {}\r\n const { disabledFields } = this.configMerged\r\n const finalDisabledFields = typeof disabledFields === 'function' ? disabledFields(mState, data) : disabledFields || {}\r\n const obj: IFormInputBase<T, any> = {\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: finalDisabledFields[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n formContext: context\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.preSubmit ?? params.preSubmit ?? this.preSubmit\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n throw error\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n preSubmit: IPreSubmitEvent<T> = (value) => value\r\n\r\n getFormSlots = (): IFormBaseSlots => {\r\n const isLoading = this.state.loadding\r\n const { formProps } = this.props.slots?.formSlots || {}\r\n return {\r\n formProps: {\r\n ...formProps,\r\n sx: {\r\n ...this.props.sx,\r\n opacity: isLoading ? 0.7 : 1,\r\n pointerEvents: isLoading ? 'none' : 'auto'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","createFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","createInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","context","config","_config$inputElement","_data$config$key","data","ElementComponent","inputElement","mState","modelState","disabledFields","configMerged","finalDisabledFields","obj","onBlur","messageErrors","name","key","label","placeholder","disabled","undefined","defaultValue","formContext","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","value","close","_ref2","_this$props$slots$pre","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","p","n","preSubmit","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","_this$props$slots2","isLoading","state","formProps","formSlots","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_ref4","_slots$hiddenFields","_ref5","_slots$disabledFields","_this$props$slots3","hiddenFields","_ref6","_params$action","_slots$rootProps","_this2","_this$props","autoHeight","BottomBar","action","rootClasses","formGridLayoutClasses","root","rootProps","className","push","mapGlobalModalContext","_ref7","FormGridLayoutStyled","filter","Boolean","join","children","_jsxs","Form","form","validate","getFormSlots","onSubmitError","contentBefore","mapContext","finalHiddenFields","Grid","container","spacing","configs","map","index","isHidden","Fragment","item","xs","sizes","renderFormFieldElement","toString","contentAfter","before","actionBefore","_this$abortController3"],"mappings":"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"}
1
+ {"version":3,"file":"create.form-grid-layout.js","sources":["../../../src/form/create.form-grid-layout.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { BoxProps, Grid, RegularBreakpoints, SxProps, Theme } from '@mui/material'\r\nimport type { ComponentType } from 'react'\r\nimport { cleanObject } from '../utils'\r\nimport { mapGlobalModalContext } from '../api-context'\r\nimport { IFormBase, IFormBaseContext, IFormInputBase } from './types'\r\nimport { FormGridLayoutStyled, CreateFormBottomBar, formGridLayoutClasses } from './create.form-grid-layout.units'\r\nimport FormValidator, { IPartialError } from './validator'\r\nimport createFormBase, { IFormBaseSlots } from './create.form-base'\r\nimport createInput from './create.input'\r\n\r\nexport interface IFormGridLayoutConfig<T> {\r\n key: keyof T\r\n label?: string\r\n placeholder?: string\r\n sizes?: RegularBreakpoints\r\n defaultValue?: any\r\n className?: string\r\n inputElement?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport type IPreSubmitEvent<T> = (value: Partial<T>, oldValue?: T) => Partial<T>\r\n\r\nexport interface IFormGridLayoutMergedConfigs<T> {\r\n hiddenFields?: Partial<Record<keyof T, boolean>> | ((state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>)\r\n disabledFields?: Partial<Record<keyof T, boolean>> | ((state: Partial<T>, model?: Partial<T>) => Partial<Record<keyof T, boolean>>)\r\n}\r\n\r\nexport interface IFormGridLayoutSlots<T> extends IFormGridLayoutMergedConfigs<T> {\r\n action?: ComponentType<IFormBase<T>>\r\n actionBefore?: JSX.Element\r\n contentBefore?: JSX.Element\r\n contentAfter?: JSX.Element\r\n // getDisabledFields?: (value: Partial<T>) => Partial<Record<keyof T, boolean>>\r\n closeState?: { Success?: boolean; Fail?: boolean }\r\n rootProps?: BoxProps\r\n preSubmit?: IPreSubmitEvent<T>\r\n formSlots?: IFormBaseSlots\r\n}\r\n\r\nexport interface IFormGridLayoutParams<T> extends IFormGridLayoutSlots<T> {\r\n configs: IFormGridLayoutConfig<T>[]\r\n validate: FormValidator<Partial<T>>\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IFormGridLayoutProps<T> {\r\n data?: T\r\n onSubmit: (value: Partial<T>, signal?: AbortSignal) => Promise<void>\r\n onError?: (error: any) => void\r\n onSubmitError?: (error: IPartialError<T>) => void\r\n onClose?: () => void\r\n sx?: SxProps<Theme>\r\n slots?: IFormGridLayoutSlots<T>\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IFormGridLayoutState {\r\n loadding?: boolean\r\n}\r\n\r\nconst CreateFormGridLayout = function <T>(params: IFormGridLayoutParams<T>): ComponentType<IFormGridLayoutProps<T>> {\r\n const FormBaseInstance = createFormBase<T>()\r\n const BottomBarInstance = CreateFormBottomBar<T>()\r\n const InputBaseInstance = createInput<T>({ maxLength: 250 })\r\n\r\n class FormGridLayout extends Component<IFormGridLayoutProps<T>, IFormGridLayoutState> {\r\n private abortController?: AbortController\r\n constructor(props: IFormGridLayoutProps<T>) {\r\n super(props)\r\n this.state = { loadding: false }\r\n }\r\n\r\n get configMerged() {\r\n const { slots = {} } = this.props\r\n return {\r\n hiddenFields: slots.hiddenFields ?? params.hiddenFields ?? (() => ({}) as Partial<Record<keyof T, boolean>>),\r\n disabledFields: slots.disabledFields ?? params.disabledFields ?? (() => ({}) as Partial<Record<keyof T, boolean>>)\r\n }\r\n }\r\n\r\n render() {\r\n const { slots, data, autoHeight } = this.props\r\n const BottomBar = params?.action ?? slots?.action ?? BottomBarInstance\r\n\r\n const rootClasses = [formGridLayoutClasses.root, slots?.rootProps?.className]\r\n if (autoHeight ?? params.autoHeight) rootClasses.push(formGridLayoutClasses.autoHeight)\r\n\r\n return mapGlobalModalContext(({ close }) => (\r\n <FormGridLayoutStyled {...slots?.rootProps} className={rootClasses.filter(Boolean).join(' ')}>\r\n <FormBaseInstance.Form\r\n className={formGridLayoutClasses.form}\r\n validate={params.validate}\r\n onSubmit={(v) => this.onSubmit(v, close)}\r\n slots={this.getFormSlots()}\r\n onError={this.props.onSubmitError}\r\n >\r\n {slots?.contentBefore && slots?.contentBefore}\r\n {params?.contentBefore}\r\n {FormBaseInstance.mapContext((context) => {\r\n const { hiddenFields } = this.configMerged\r\n const mState = context.modelState || {}\r\n const finalHiddenFields = typeof hiddenFields === 'function' ? hiddenFields(mState, data) : hiddenFields || {}\r\n return (\r\n <Grid container spacing={2}>\r\n {params.configs.map((config, index) => {\r\n const isHidden: boolean | undefined = finalHiddenFields[config.key] ? true : undefined\r\n if (isHidden) return <Fragment key={config.key.toString() + index} />\r\n return (\r\n <Fragment key={config.key.toString() + index}>\r\n <Grid item xs={12} {...config.sizes} className={config.className}>\r\n {this.renderFormFieldElement(context, config)}\r\n </Grid>\r\n </Fragment>\r\n )\r\n })}\r\n </Grid>\r\n )\r\n })}\r\n {params?.contentAfter}\r\n {slots?.contentAfter && slots?.contentAfter}\r\n {FormBaseInstance.mapContext((context) => (\r\n <BottomBar data={data} onBlur={context.onBlur} messageErrors={context.messageErrors} before={slots?.actionBefore} />\r\n ))}\r\n </FormBaseInstance.Form>\r\n </FormGridLayoutStyled>\r\n ))\r\n }\r\n\r\n renderFormFieldElement = (context: IFormBaseContext<T>, config: IFormGridLayoutConfig<T>) => {\r\n const { data } = this.props\r\n const ElementComponent = config.inputElement ?? InputBaseInstance\r\n const mState = context.modelState || {}\r\n const { disabledFields } = this.configMerged\r\n const finalDisabledFields = typeof disabledFields === 'function' ? disabledFields(mState, data) : disabledFields || {}\r\n const obj: IFormInputBase<T, any> = {\r\n data,\r\n onBlur: context.onBlur,\r\n messageErrors: context.messageErrors,\r\n name: config.key,\r\n label: config.label,\r\n placeholder: config.placeholder,\r\n disabled: finalDisabledFields[config.key] ? true : undefined,\r\n defaultValue: data?.[config.key] ?? config?.defaultValue,\r\n formContext: context\r\n }\r\n return <ElementComponent {...cleanObject(obj)} />\r\n }\r\n\r\n loading = () => this.setState({ loadding: true })\r\n\r\n unloading = () => this.setState({ loadding: false })\r\n\r\n componentWillUnmount(): void {\r\n this.abortController?.abort()\r\n }\r\n\r\n onSubmit = async (value: Partial<T>, close?: () => void) => {\r\n const { slots } = this.props\r\n const mapping = this.props.slots?.preSubmit ?? params.preSubmit ?? this.preSubmit\r\n const data = mapping(value, this.props.data)\r\n try {\r\n this.loading()\r\n this.abortController?.abort()\r\n this.abortController = new AbortController()\r\n await this.props.onSubmit(data, this.abortController?.signal)\r\n if (!slots?.closeState || slots.closeState.Success !== false) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n } catch (error) {\r\n if (slots?.closeState && slots.closeState.Fail === true) {\r\n close && close()\r\n this.props.onClose && this.props.onClose()\r\n }\r\n if (this.props.onError) this.props.onError(error)\r\n throw error\r\n } finally {\r\n this.unloading()\r\n }\r\n }\r\n\r\n preSubmit: IPreSubmitEvent<T> = (value) => value\r\n\r\n getFormSlots = (): IFormBaseSlots => {\r\n const isLoading = this.state.loadding\r\n const { formProps } = this.props.slots?.formSlots || {}\r\n return {\r\n formProps: {\r\n ...formProps,\r\n sx: {\r\n ...this.props.sx,\r\n opacity: isLoading ? 0.7 : 1,\r\n pointerEvents: isLoading ? 'none' : 'auto'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return FormGridLayout\r\n}\r\n\r\nexport default CreateFormGridLayout\r\n"],"names":["CreateFormGridLayout","params","FormBaseInstance","createFormBase","BottomBarInstance","CreateFormBottomBar","InputBaseInstance","createInput","maxLength","FormGridLayout","props","_this","_classCallCheck","_callSuper","_defineProperty","context","config","_config$inputElement","_data$config$key","data","ElementComponent","inputElement","mState","modelState","disabledFields","configMerged","finalDisabledFields","obj","onBlur","messageErrors","name","key","label","placeholder","disabled","undefined","defaultValue","formContext","_jsx","_objectSpread","cleanObject","setState","loadding","_ref","_asyncToGenerator","_regenerator","m","_callee","value","close","_ref2","_this$props$slots$pre","_this$props$slots","slots","mapping","_this$abortController","_this$abortController2","_t","w","_context","p","n","preSubmit","loading","abortController","abort","AbortController","onSubmit","signal","closeState","Success","onClose","v","Fail","onError","unloading","f","a","_x","_x2","apply","this","arguments","_this$props$slots2","isLoading","state","formProps","formSlots","sx","opacity","pointerEvents","_inherits","Component","_createClass","get","_ref4","_slots$hiddenFields","_ref5","_slots$disabledFields","_this$props$slots3","hiddenFields","_ref6","_params$action","_slots$rootProps","_this2","_this$props","autoHeight","BottomBar","action","rootClasses","formGridLayoutClasses","root","rootProps","className","push","mapGlobalModalContext","_ref7","FormGridLayoutStyled","filter","Boolean","join","children","_jsxs","Form","form","validate","getFormSlots","onSubmitError","contentBefore","mapContext","finalHiddenFields","Grid","container","spacing","configs","map","index","isHidden","Fragment","item","xs","sizes","renderFormFieldElement","toString","contentAfter","before","actionBefore","_this$abortController3"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,inherits as e,createClass as n,objectSpread2 as o,classCallCheck as r,callSuper as i,objectWithoutProperties as l,asyncToGenerator as a,regenerator as s}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as u,jsx as p}from"react/jsx-runtime";import{Component as d}from"react";import{styled as c,Box as f,Autocomplete as v,TextField as h}from"@mui/material";import{getErrorMessage as m}from"./helpers.js";import{RichTooltip as g,HelpOutlinePulseIcon as S}from"../components/rich-tooltip.js";import{ApiAlertContext as I}from"../api-context/alert-global.js";var C=["key"];function x(c){var f=function(){function f(e){var n,u,d;return r(this,f),u=i(this,f,[e]),t(u,"abortController",{signalController:new AbortController}),t(u,"refInput",null),t(u,"existedIds",[]),t(u,"renderTooltip",function(){var t=u.props.tooltip||(null==c?void 0:c.tooltip);return t?p("div",{className:b.tooltipWrap,children:p(g,{panel:t,children:p(S,{fontSize:"small"})})}):null}),t(u,"getRootClasses",function(){var t=[b.root];return(u.props.tooltip||(null==c?void 0:c.tooltip))&&t.push(b.tooltip),t.join(" ")}),t(u,"getFetchDataFunc",function(){var t,e;return null!==(t=null!==(e=u.props.fetchData)&&void 0!==e?e:null==c?void 0:c.fetchData)&&void 0!==t?t:function(){return Promise.resolve([])}}),t(u,"getWrappedRenderOption",function(){var t,e,n=null!==(t=null===(e=u.props.slots)||void 0===e?void 0:e.renderOption)&&void 0!==t?t:null==c?void 0:c.renderOption;if(n)return function(t,e,r){var i=t.key,a=l(t,C);return p("li",o(o({},a),{},{style:o({width:"100%",boxSizing:"border-box"},a.style),children:n(a,e,r)}),i)}}),t(u,"timer",{_timer:0,_second:500,callback:(d=a(s().m(function t(e){var n,o,r;return s().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,u.abortController.signalController=new AbortController,t.n=1,u.getFetchDataFunc()(e,u.abortController.signalController.signal);case 1:n=t.v,o=u.getOptionsFilter(n,u.existedIds),u.setState({options:o}),t.n=3;break;case 2:t.p=2,t.v,null===(r=I.ApiAlert)||void 0===r||r.PushError("Error from server!");case 3:return t.p=3,u.setState({statusText:"no items"}),t.f(3);case 4:return t.a(2)}},t,null,[[0,2,3,4]])})),function(t){return d.apply(this,arguments)}),start:function(t){u.timer.clear(),u.timer._timer=window.setTimeout(function(){return u.timer.callback(t)},u.timer._second)},clear:function(){u.abortController.signalController.abort(),clearTimeout(u.timer._timer)}}),t(u,"fetchData",a(s().m(function t(){var e,n,o,r,i,l;return s().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,n=u.getDefaultValue(),t.n=1,u.getFetchDataFunc()(n,u.abortController.signalController.signal);case 1:if(o=t.v,Array.isArray(o)){t.n=2;break}return t.a(2);case 2:return r=u.getOptionsFilter(o,u.existedIds),i=null!==(e=r.find(function(t){return t.Id===n}))&&void 0!==e?e:null,u.setState({options:r,optionSelected:i,loading:!1}),t.a(2);case 3:t.p=3,t.v,null===(l=I.ApiAlert)||void 0===l||l.PushError("Error from server!");case 4:return t.p=4,u.setState({statusText:"no items",loading:!1}),t.f(4);case 5:return t.a(2)}},t,null,[[0,3,4,5]])}))),t(u,"handleChange",function(t,e){var n;u.setState({optionSelected:e}),u.refInput&&(u.refInput.value=null!==(n=null==e?void 0:e.Id)&&void 0!==n?n:""),u.props.onChange&&u.props.onChange(e)}),t(u,"handleInputChange",function(t,e){var n,o={inputValue:e};if(e!==(null===(n=u.state.optionSelected)||void 0===n?void 0:n.Name)){var r=e.trim().toLowerCase(),i=u.state.options.findIndex(function(t){var e;return null===(e=t.Name)||void 0===e?void 0:e.trim().toLowerCase().includes(r)});(i<0||""===r)&&(o.statusText="loading..."),u.setState(o,function(){(i<0||""===r)&&u.timer.start(r)})}else u.setState(o)}),t(u,"fillterOptions",function(t,e){return t.filter(function(t){var n,o=e.inputValue.toLowerCase();return t.Id.toLowerCase().includes(o)||(null===(n=t.Name)||void 0===n?void 0:n.toLowerCase().includes(o))})}),t(u,"getLabel",function(){var t,e;return null!==(t=u.props.label)&&void 0!==t?t:null===(e=u.props.name)||void 0===e?void 0:e.toString()}),t(u,"getDefaultValue",function(){var t,e,n;if(u.props.name)return null===(t=null!==(e=u.props.defaultValue)&&void 0!==e?e:null===(n=u.props.data)||void 0===n?void 0:n[u.props.name])||void 0===t?void 0:t.toString()}),t(u,"clear",function(){u.setState({optionSelected:null,inputValue:""}),u.refInput&&(u.refInput.value="")}),u.state={options:[],statusText:"no items",optionSelected:null,inputValue:"",loading:!0},u.existedIds=null!==(n=e.existedIds)&&void 0!==n?n:[],u}return e(f,d),n(f,[{key:"componentDidMount",value:function(){this.fetchData()}},{key:"componentWillUnmount",value:function(){this.timer.clear()}},{key:"componentDidUpdate",value:function(t){var e;JSON.stringify(t.existedIds)!==JSON.stringify(this.props.existedIds)&&(this.existedIds=null!==(e=this.props.existedIds)&&void 0!==e?e:[])}},{key:"render",value:function(){var t,e,n,r,i=this,l=this.getDefaultValue(),a=m(this.props.messageErrors,this.props.name),s=this.getWrappedRenderOption();return u(y,{className:this.getRootClasses(),children:[p(v,{disabled:this.state.loading||this.props.disabled,fullWidth:!0,noOptionsText:this.state.statusText,options:this.state.options,getOptionLabel:function(t){var e;return null!==(e=t.Name)&&void 0!==e?e:t.Id},getOptionKey:function(t){return JSON.stringify(t)},isOptionEqualToValue:function(t,e){return t.Id.toString()===e.Id.toString()&&t.Name===e.Name},filterOptions:this.fillterOptions,renderOption:s,value:this.state.optionSelected,onChange:this.handleChange,inputValue:this.state.inputValue,onInputChange:this.handleInputChange,renderInput:function(t){var e;return p(h,o(o({},t),{},{label:i.getLabel(),error:a.error,helperText:a.message,onBlur:function(){i.props.name&&i.props.onBlur&&i.props.onBlur(i.props.name)}},null===(e=i.props.slots)||void 0===e?void 0:e.textFieldProps))}}),p("input",{ref:function(t){return i.refInput=t},hidden:!0,name:null===(t=this.props.name)||void 0===t?void 0:t.toString(),defaultValue:l}),(null===(e=this.state.optionSelected)||void 0===e?void 0:e.Other)&&p("input",{hidden:!0,name:"".concat(null===(n=this.props.name)||void 0===n?void 0:n.toString(),"Other"),defaultValue:JSON.stringify(this.state.optionSelected.Other)},null!==(r=this.state.optionSelected.Id)&&void 0!==r?r:"key"),this.renderTooltip()]})}},{key:"getOptionsFilter",value:function(t){var e=new Set(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]);return t.reduce(function(t,n){return e.has(n.Id)||(t.push(n),e.add(n.Id)),t},[])}}])}();return f}var b={root:"SelectWithApi-root",tooltip:"SelectWithApi-tooltip",tooltipWrap:"SelectWithApi-tooltipWrap"},O=function(t,e){return"".concat((null==e?void 0:e.prefix)||"",".").concat(b[t]).concat((null==e?void 0:e.suffix)||"")},y=c(f)(function(e){var n=e.theme;return t(t(t({},O("root",{suffix:"&"}),{width:"100%",position:"relative"}),O("tooltipWrap"),{position:"absolute",top:n.spacing(2.25),right:n.spacing(1.5),display:"flex",alignItems:"center",gap:n.spacing(.5)}),O("tooltip",{suffix:"&"}),{".MuiInputBase-root .MuiAutocomplete-endAdornment":{right:n.spacing(4.5)}})});export{x as default};
1
+ import{defineProperty as t,inherits as e,createClass as n,objectSpread2 as o,classCallCheck as r,callSuper as i,objectWithoutProperties as l,asyncToGenerator as a,regenerator as s}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as u,jsx as p}from"react/jsx-runtime";import{Component as d}from"react";import{styled as c,Box as f,Autocomplete as v,TextField as h}from"@mui/material";import{getErrorMessage as m}from"./helpers.js";import{ApiAlertContext as g}from"../api-context/alert-global.js";import"../api-context/drawer-global.js";import"../api-context/global-modal.js";import{RichTooltip as S,HelpOutlinePulseIcon as I}from"../components/rich-tooltip.js";var x=["key"];function C(c){var f=function(){function f(e){var n,u,d;return r(this,f),u=i(this,f,[e]),t(u,"abortController",{signalController:new AbortController}),t(u,"refInput",null),t(u,"existedIds",[]),t(u,"renderTooltip",function(){var t=u.props.tooltip||(null==c?void 0:c.tooltip);return t?p("div",{className:b.tooltipWrap,children:p(S,{panel:t,children:p(I,{fontSize:"small"})})}):null}),t(u,"getRootClasses",function(){var t=[b.root];return(u.props.tooltip||(null==c?void 0:c.tooltip))&&t.push(b.tooltip),t.join(" ")}),t(u,"getFetchDataFunc",function(){var t,e;return null!==(t=null!==(e=u.props.fetchData)&&void 0!==e?e:null==c?void 0:c.fetchData)&&void 0!==t?t:function(){return Promise.resolve([])}}),t(u,"getWrappedRenderOption",function(){var t,e,n=null!==(t=null===(e=u.props.slots)||void 0===e?void 0:e.renderOption)&&void 0!==t?t:null==c?void 0:c.renderOption;if(n)return function(t,e,r){var i=t.key,a=l(t,x);return p("li",o(o({},a),{},{style:o({width:"100%",boxSizing:"border-box"},a.style),children:n(a,e,r)}),i)}}),t(u,"timer",{_timer:0,_second:500,callback:(d=a(s().m(function t(e){var n,o,r;return s().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,u.abortController.signalController=new AbortController,t.n=1,u.getFetchDataFunc()(e,u.abortController.signalController.signal);case 1:n=t.v,o=u.getOptionsFilter(n,u.existedIds),u.setState({options:o}),t.n=3;break;case 2:t.p=2,t.v,null===(r=g.ApiAlert)||void 0===r||r.PushError("Error from server!");case 3:return t.p=3,u.setState({statusText:"no items"}),t.f(3);case 4:return t.a(2)}},t,null,[[0,2,3,4]])})),function(t){return d.apply(this,arguments)}),start:function(t){u.timer.clear(),u.timer._timer=window.setTimeout(function(){return u.timer.callback(t)},u.timer._second)},clear:function(){u.abortController.signalController.abort(),clearTimeout(u.timer._timer)}}),t(u,"fetchData",a(s().m(function t(){var e,n,o,r,i,l;return s().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,n=u.getDefaultValue(),t.n=1,u.getFetchDataFunc()(n,u.abortController.signalController.signal);case 1:if(o=t.v,Array.isArray(o)){t.n=2;break}return t.a(2);case 2:return r=u.getOptionsFilter(o,u.existedIds),i=null!==(e=r.find(function(t){return t.Id===n}))&&void 0!==e?e:null,u.setState({options:r,optionSelected:i,loading:!1}),t.a(2);case 3:t.p=3,t.v,null===(l=g.ApiAlert)||void 0===l||l.PushError("Error from server!");case 4:return t.p=4,u.setState({statusText:"no items",loading:!1}),t.f(4);case 5:return t.a(2)}},t,null,[[0,3,4,5]])}))),t(u,"handleChange",function(t,e){var n;u.setState({optionSelected:e}),u.refInput&&(u.refInput.value=null!==(n=null==e?void 0:e.Id)&&void 0!==n?n:""),u.props.onChange&&u.props.onChange(e)}),t(u,"handleInputChange",function(t,e){var n,o={inputValue:e};if(e!==(null===(n=u.state.optionSelected)||void 0===n?void 0:n.Name)){var r=e.trim().toLowerCase(),i=u.state.options.findIndex(function(t){var e;return null===(e=t.Name)||void 0===e?void 0:e.trim().toLowerCase().includes(r)});(i<0||""===r)&&(o.statusText="loading..."),u.setState(o,function(){(i<0||""===r)&&u.timer.start(r)})}else u.setState(o)}),t(u,"fillterOptions",function(t,e){return t.filter(function(t){var n,o=e.inputValue.toLowerCase();return t.Id.toLowerCase().includes(o)||(null===(n=t.Name)||void 0===n?void 0:n.toLowerCase().includes(o))})}),t(u,"getLabel",function(){var t,e;return null!==(t=u.props.label)&&void 0!==t?t:null===(e=u.props.name)||void 0===e?void 0:e.toString()}),t(u,"getDefaultValue",function(){var t,e,n;if(u.props.name)return null===(t=null!==(e=u.props.defaultValue)&&void 0!==e?e:null===(n=u.props.data)||void 0===n?void 0:n[u.props.name])||void 0===t?void 0:t.toString()}),t(u,"clear",function(){u.setState({optionSelected:null,inputValue:""}),u.refInput&&(u.refInput.value="")}),u.state={options:[],statusText:"no items",optionSelected:null,inputValue:"",loading:!0},u.existedIds=null!==(n=e.existedIds)&&void 0!==n?n:[],u}return e(f,d),n(f,[{key:"componentDidMount",value:function(){this.fetchData()}},{key:"componentWillUnmount",value:function(){this.timer.clear()}},{key:"componentDidUpdate",value:function(t){var e;JSON.stringify(t.existedIds)!==JSON.stringify(this.props.existedIds)&&(this.existedIds=null!==(e=this.props.existedIds)&&void 0!==e?e:[])}},{key:"render",value:function(){var t,e,n,r,i=this,l=this.getDefaultValue(),a=m(this.props.messageErrors,this.props.name),s=this.getWrappedRenderOption();return u(y,{className:this.getRootClasses(),children:[p(v,{disabled:this.state.loading||this.props.disabled,fullWidth:!0,noOptionsText:this.state.statusText,options:this.state.options,getOptionLabel:function(t){var e;return null!==(e=t.Name)&&void 0!==e?e:t.Id},getOptionKey:function(t){return JSON.stringify(t)},isOptionEqualToValue:function(t,e){return t.Id.toString()===e.Id.toString()&&t.Name===e.Name},filterOptions:this.fillterOptions,renderOption:s,value:this.state.optionSelected,onChange:this.handleChange,inputValue:this.state.inputValue,onInputChange:this.handleInputChange,renderInput:function(t){var e;return p(h,o(o({},t),{},{label:i.getLabel(),error:a.error,helperText:a.message,onBlur:function(){i.props.name&&i.props.onBlur&&i.props.onBlur(i.props.name)}},null===(e=i.props.slots)||void 0===e?void 0:e.textFieldProps))}}),p("input",{ref:function(t){return i.refInput=t},hidden:!0,name:null===(t=this.props.name)||void 0===t?void 0:t.toString(),defaultValue:l}),(null===(e=this.state.optionSelected)||void 0===e?void 0:e.Other)&&p("input",{hidden:!0,name:"".concat(null===(n=this.props.name)||void 0===n?void 0:n.toString(),"Other"),defaultValue:JSON.stringify(this.state.optionSelected.Other)},null!==(r=this.state.optionSelected.Id)&&void 0!==r?r:"key"),this.renderTooltip()]})}},{key:"getOptionsFilter",value:function(t){var e=new Set(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]);return t.reduce(function(t,n){return e.has(n.Id)||(t.push(n),e.add(n.Id)),t},[])}}])}();return f}var b={root:"SelectWithApi-root",tooltip:"SelectWithApi-tooltip",tooltipWrap:"SelectWithApi-tooltipWrap"},O=function(t,e){return"".concat((null==e?void 0:e.prefix)||"",".").concat(b[t]).concat((null==e?void 0:e.suffix)||"")},y=c(f)(function(e){var n=e.theme;return t(t(t({},O("root",{suffix:"&"}),{width:"100%",position:"relative"}),O("tooltipWrap"),{position:"absolute",top:n.spacing(2.25),right:n.spacing(1.5),display:"flex",alignItems:"center",gap:n.spacing(.5)}),O("tooltip",{suffix:"&"}),{".MuiInputBase-root .MuiAutocomplete-endAdornment":{right:n.spacing(4.5)}})});export{C as default};
2
2
  //# sourceMappingURL=create.select-with-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.select-with-api.js","sources":["../../../src/form/create.select-with-api.tsx"],"sourcesContent":["// imports\r\nimport { Component } from 'react'\r\nimport { Autocomplete, Box, styled, TextField } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { ApiAlertContext } from '../api-context'\r\nimport { RichTooltip, HelpOutlinePulseIcon } from '../components/rich-tooltip'\r\n// types\r\nimport type { ComponentClass } from 'react'\r\nimport type { FilterOptionsState, TextFieldProps, AutocompleteRenderOptionState } from '@mui/material'\r\nimport type { IRichTooltipPanelConfig } from '../components/rich-tooltip'\r\n\r\nexport interface ISelectWithApiOption<TOther = any> {\r\n Id: string\r\n Name?: string\r\n Other?: TOther\r\n}\r\n\r\nexport interface ISelectWithApiPropsSlots<O extends ISelectWithApiOption = ISelectWithApiOption> {\r\n textFieldProps: TextFieldProps\r\n renderOption?: (props: React.HTMLAttributes<HTMLElement>, option: O, state: AutocompleteRenderOptionState) => React.ReactNode\r\n}\r\n\r\nexport type ISelectWithApiFetchData<O extends ISelectWithApiOption> = (value?: string, signal?: AbortSignal) => Promise<O[]>\r\n\r\nexport interface ISelectWithApiProps<T, O extends ISelectWithApiOption> extends IFormInputBase<T>, ISelectWithApiParams<O> {\r\n tooltip?: IRichTooltipPanelConfig\r\n onChange?: (value: O | null) => void\r\n existedIds?: string[]\r\n slots?: ISelectWithApiPropsSlots<O>\r\n}\r\n\r\nexport interface ISelectWithApiState<O extends ISelectWithApiOption> {\r\n options: O[]\r\n statusText?: string\r\n optionSelected: O | null\r\n inputValue: string\r\n loading?: boolean\r\n}\r\n\r\nexport interface ISelectWithApiParams<O extends ISelectWithApiOption> {\r\n fetchData?: ISelectWithApiFetchData<O>\r\n tooltip?: IRichTooltipPanelConfig\r\n renderOption?: (props: React.HTMLAttributes<HTMLElement>, option: O, state: AutocompleteRenderOptionState) => React.ReactNode\r\n}\r\n\r\nexport interface ISelectWithApiHandle {\r\n clear: () => void\r\n}\r\n\r\nfunction createSelectWithApi<T, O extends ISelectWithApiOption = ISelectWithApiOption>(params?: ISelectWithApiParams<O>) {\r\n class SelectWithApi extends Component<ISelectWithApiProps<T, O>, ISelectWithApiState<O>> implements ISelectWithApiHandle {\r\n abortController = { signalController: new AbortController() }\r\n refInput: HTMLInputElement | null = null\r\n existedIds: string[] = []\r\n constructor(props: ISelectWithApiProps<T, O>) {\r\n super(props)\r\n this.state = {\r\n options: [],\r\n statusText: 'no items',\r\n optionSelected: null,\r\n inputValue: '',\r\n loading: true\r\n }\r\n this.existedIds = props.existedIds ?? []\r\n }\r\n\r\n componentDidMount() {\r\n this.fetchData()\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.timer.clear()\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<ISelectWithApiProps<T, O>>): void {\r\n if (JSON.stringify(prevProps.existedIds) !== JSON.stringify(this.props.existedIds)) {\r\n this.existedIds = this.props.existedIds ?? []\r\n }\r\n }\r\n\r\n render() {\r\n const defaultValue = this.getDefaultValue()\r\n const eMessage = getErrorMessage(this.props.messageErrors, this.props.name)\r\n const renderOption = this.getWrappedRenderOption()\r\n return (\r\n <SelectWithApiStyled className={this.getRootClasses()}>\r\n <Autocomplete\r\n disabled={this.state.loading || this.props.disabled}\r\n fullWidth\r\n noOptionsText={this.state.statusText}\r\n options={this.state.options}\r\n getOptionLabel={(x) => x.Name ?? x.Id}\r\n getOptionKey={(x) => JSON.stringify(x)}\r\n isOptionEqualToValue={(o, v) => o.Id.toString() === v.Id.toString() && o.Name === v.Name}\r\n filterOptions={this.fillterOptions}\r\n renderOption={renderOption}\r\n // select\r\n value={this.state.optionSelected}\r\n onChange={this.handleChange}\r\n // input\r\n inputValue={this.state.inputValue}\r\n onInputChange={this.handleInputChange}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={this.getLabel()}\r\n error={eMessage.error}\r\n helperText={eMessage.message}\r\n onBlur={() => {\r\n if (!this.props.name) return\r\n this.props.onBlur && this.props.onBlur(this.props.name)\r\n }}\r\n {...this.props.slots?.textFieldProps}\r\n />\r\n )}\r\n />\r\n <input ref={(ref) => (this.refInput = ref)} hidden name={this.props.name?.toString()} defaultValue={defaultValue} />\r\n {this.state.optionSelected?.Other && (\r\n <input\r\n hidden\r\n name={`${this.props.name?.toString()}Other`}\r\n key={this.state.optionSelected.Id ?? 'key'}\r\n defaultValue={JSON.stringify(this.state.optionSelected.Other)}\r\n />\r\n )}\r\n {this.renderTooltip()}\r\n </SelectWithApiStyled>\r\n )\r\n }\r\n\r\n renderTooltip = () => {\r\n const tooltip = this.props.tooltip || params?.tooltip\r\n if (!tooltip) return null\r\n return (\r\n <div className={selectWithApiClasses.tooltipWrap}>\r\n <RichTooltip panel={tooltip}>\r\n <HelpOutlinePulseIcon fontSize='small' />\r\n </RichTooltip>\r\n </div>\r\n )\r\n }\r\n\r\n getRootClasses = () => {\r\n const classes = [selectWithApiClasses.root]\r\n const tooltip = this.props.tooltip || params?.tooltip\r\n if (tooltip) classes.push(selectWithApiClasses.tooltip)\r\n return classes.join(' ')\r\n }\r\n\r\n getFetchDataFunc = (): ISelectWithApiFetchData<O> => {\r\n return this.props.fetchData ?? params?.fetchData ?? (() => Promise.resolve([]))\r\n }\r\n\r\n getWrappedRenderOption = () => {\r\n const userRenderOption = this.props.slots?.renderOption ?? params?.renderOption\r\n if (!userRenderOption) return undefined\r\n\r\n return (props: any, option: O, state: AutocompleteRenderOptionState) => {\r\n const { key, ...propsWithoutKey } = props\r\n return (\r\n <li key={key} {...(propsWithoutKey as any)} style={{ width: '100%', boxSizing: 'border-box', ...propsWithoutKey.style }}>\r\n {userRenderOption(propsWithoutKey as React.HTMLAttributes<HTMLElement>, option, state)}\r\n </li>\r\n )\r\n }\r\n }\r\n\r\n timer = {\r\n _timer: 0,\r\n _second: 500,\r\n callback: async (value: string) => {\r\n try {\r\n this.abortController.signalController = new AbortController()\r\n const res = await this.getFetchDataFunc()(value, this.abortController.signalController.signal)\r\n const options = this.getOptionsFilter(res, this.existedIds)\r\n this.setState({ options })\r\n } catch (error) {\r\n // console.log(error)\r\n ApiAlertContext.ApiAlert?.PushError('Error from server!')\r\n } finally {\r\n this.setState({ statusText: 'no items' })\r\n }\r\n },\r\n start: (text: string) => {\r\n this.timer.clear()\r\n this.timer._timer = window.setTimeout(() => this.timer.callback(text), this.timer._second)\r\n },\r\n clear: () => {\r\n this.abortController.signalController.abort()\r\n clearTimeout(this.timer._timer)\r\n }\r\n }\r\n\r\n fetchData = async () => {\r\n try {\r\n const defaultValue = this.getDefaultValue()\r\n const res = await this.getFetchDataFunc()(defaultValue, this.abortController.signalController.signal)\r\n if (!Array.isArray(res)) return\r\n const options = this.getOptionsFilter(res, this.existedIds)\r\n const optionSelected = options.find((x) => x.Id === defaultValue) ?? null\r\n this.setState({ options, optionSelected, loading: false })\r\n return\r\n } catch (error) {\r\n // console.log(error)\r\n ApiAlertContext.ApiAlert?.PushError('Error from server!')\r\n } finally {\r\n this.setState({ statusText: 'no items', loading: false })\r\n }\r\n }\r\n\r\n handleChange = (_: React.SyntheticEvent, value: O | null) => {\r\n this.setState({ optionSelected: value })\r\n if (this.refInput) this.refInput.value = value?.Id ?? ''\r\n this.props.onChange && this.props.onChange(value)\r\n }\r\n\r\n handleInputChange = (_: React.SyntheticEvent, value: string) => {\r\n const state: Pick<ISelectWithApiState<O>, 'inputValue' | 'statusText' | 'loading'> = { inputValue: value }\r\n if (value === this.state.optionSelected?.Name) {\r\n this.setState(state)\r\n return\r\n }\r\n const valueFormated = value.trim().toLowerCase()\r\n const selectedIndex = this.state.options.findIndex((x) => {\r\n return x.Name?.trim().toLowerCase().includes(valueFormated)\r\n })\r\n if (selectedIndex < 0 || valueFormated === '') state.statusText = 'loading...'\r\n this.setState(state, () => {\r\n if (selectedIndex < 0 || valueFormated === '') this.timer.start(valueFormated)\r\n })\r\n }\r\n\r\n fillterOptions = (options: O[], state: FilterOptionsState<O>) => {\r\n return options.filter((x) => {\r\n const value = state.inputValue.toLowerCase()\r\n return x.Id.toLowerCase().includes(value) || x.Name?.toLowerCase().includes(value)\r\n })\r\n }\r\n\r\n getLabel = () => {\r\n return this.props.label ?? this.props.name?.toString()\r\n }\r\n\r\n getDefaultValue = () => {\r\n if (!this.props.name) return\r\n return (this.props.defaultValue ?? this.props.data?.[this.props.name])?.toString()\r\n }\r\n\r\n getOptionsFilter<O extends ISelectWithApiOption = ISelectWithApiOption>(options: O[], existedId: string[] = []): O[] {\r\n const ids = new Set<string | number>(existedId)\r\n return options.reduce<O[]>((a, b) => {\r\n if (!ids.has(b.Id)) {\r\n a.push(b)\r\n ids.add(b.Id)\r\n }\r\n return a\r\n }, [])\r\n }\r\n\r\n clear = () => {\r\n this.setState({ optionSelected: null, inputValue: '' })\r\n if (this.refInput) this.refInput.value = ''\r\n }\r\n }\r\n return SelectWithApi\r\n}\r\nexport default createSelectWithApi\r\n\r\nconst selectWithApiClasses = {\r\n root: 'SelectWithApi-root',\r\n tooltip: 'SelectWithApi-tooltip',\r\n tooltipWrap: 'SelectWithApi-tooltipWrap'\r\n}\r\n\r\nconst getSelectWithApiClass = (key: keyof typeof selectWithApiClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${selectWithApiClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst SelectWithApiStyled = styled(Box)(({ theme }) => ({\r\n [getSelectWithApiClass('root', { suffix: '&' })]: {\r\n width: '100%',\r\n position: 'relative'\r\n },\r\n [getSelectWithApiClass('tooltipWrap')]: {\r\n position: 'absolute',\r\n top: theme.spacing(2.25),\r\n right: theme.spacing(1.5),\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(0.5)\r\n },\r\n [getSelectWithApiClass('tooltip', { suffix: '&' })]: {\r\n '.MuiInputBase-root .MuiAutocomplete-endAdornment': {\r\n right: theme.spacing(4.5)\r\n }\r\n }\r\n}))\r\n"],"names":["createSelectWithApi","params","SelectWithApi","props","_props$existedIds","_this","_callback","_classCallCheck","_callSuper","_defineProperty","signalController","AbortController","tooltip","_jsx","className","selectWithApiClasses","tooltipWrap","children","RichTooltip","panel","HelpOutlinePulseIcon","fontSize","classes","root","push","join","_ref","_this$props$fetchData","fetchData","Promise","resolve","_this$props$slots$ren","_this$props$slots","userRenderOption","slots","renderOption","option","state","key","propsWithoutKey","_objectWithoutProperties","_excluded","_objectSpread","style","width","boxSizing","_timer","_second","callback","_asyncToGenerator","_regenerator","m","_callee","value","res","options","_ApiAlertContext$ApiA","w","_context","p","n","abortController","getFetchDataFunc","signal","v","getOptionsFilter","existedIds","setState","ApiAlertContext","ApiAlert","PushError","statusText","f","a","_x","apply","this","arguments","start","text","timer","clear","window","setTimeout","abort","clearTimeout","_callee2","_options$find","defaultValue","optionSelected","_ApiAlertContext$ApiA2","_context2","getDefaultValue","Array","isArray","find","x","Id","loading","_","_value$Id","refInput","onChange","_this$state$optionSel","inputValue","Name","valueFormated","trim","toLowerCase","selectedIndex","findIndex","_x$Name","includes","filter","_x$Name2","_this$props$label","_this$props$name","label","name","toString","_ref3","_this$props$defaultVa","_this$props$data","data","_inherits","Component","_createClass","prevProps","_this$props$existedId","JSON","stringify","_this$props$name2","_this$state$optionSel2","_this$props$name3","_this$state$optionSel3","_this2","eMessage","getErrorMessage","messageErrors","getWrappedRenderOption","_jsxs","SelectWithApiStyled","getRootClasses","Autocomplete","disabled","fullWidth","noOptionsText","getOptionLabel","_x$Name3","getOptionKey","isOptionEqualToValue","o","filterOptions","fillterOptions","handleChange","onInputChange","handleInputChange","renderInput","_this2$props$slots","TextField","getLabel","error","helperText","message","onBlur","textFieldProps","ref","hidden","Other","concat","renderTooltip","ids","Set","length","undefined","reduce","b","has","add","getSelectWithApiClass","prefix","suffix","styled","Box","_ref5","theme","position","top","spacing","right","display","alignItems","gap"],"mappings":"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"}
1
+ {"version":3,"file":"create.select-with-api.js","sources":["../../../src/form/create.select-with-api.tsx"],"sourcesContent":["// imports\r\nimport { Component } from 'react'\r\nimport { Autocomplete, Box, styled, TextField } from '@mui/material'\r\nimport { IFormInputBase } from './types'\r\nimport { getErrorMessage } from './helpers'\r\nimport { ApiAlertContext } from '../api-context'\r\nimport { RichTooltip, HelpOutlinePulseIcon } from '../components/rich-tooltip'\r\n// types\r\nimport type { ComponentClass } from 'react'\r\nimport type { FilterOptionsState, TextFieldProps, AutocompleteRenderOptionState } from '@mui/material'\r\nimport type { IRichTooltipPanelConfig } from '../components/rich-tooltip'\r\n\r\nexport interface ISelectWithApiOption<TOther = any> {\r\n Id: string\r\n Name?: string\r\n Other?: TOther\r\n}\r\n\r\nexport interface ISelectWithApiPropsSlots<O extends ISelectWithApiOption = ISelectWithApiOption> {\r\n textFieldProps: TextFieldProps\r\n renderOption?: (props: React.HTMLAttributes<HTMLElement>, option: O, state: AutocompleteRenderOptionState) => React.ReactNode\r\n}\r\n\r\nexport type ISelectWithApiFetchData<O extends ISelectWithApiOption> = (value?: string, signal?: AbortSignal) => Promise<O[]>\r\n\r\nexport interface ISelectWithApiProps<T, O extends ISelectWithApiOption> extends IFormInputBase<T>, ISelectWithApiParams<O> {\r\n tooltip?: IRichTooltipPanelConfig\r\n onChange?: (value: O | null) => void\r\n existedIds?: string[]\r\n slots?: ISelectWithApiPropsSlots<O>\r\n}\r\n\r\nexport interface ISelectWithApiState<O extends ISelectWithApiOption> {\r\n options: O[]\r\n statusText?: string\r\n optionSelected: O | null\r\n inputValue: string\r\n loading?: boolean\r\n}\r\n\r\nexport interface ISelectWithApiParams<O extends ISelectWithApiOption> {\r\n fetchData?: ISelectWithApiFetchData<O>\r\n tooltip?: IRichTooltipPanelConfig\r\n renderOption?: (props: React.HTMLAttributes<HTMLElement>, option: O, state: AutocompleteRenderOptionState) => React.ReactNode\r\n}\r\n\r\nexport interface ISelectWithApiHandle {\r\n clear: () => void\r\n}\r\n\r\nfunction createSelectWithApi<T, O extends ISelectWithApiOption = ISelectWithApiOption>(params?: ISelectWithApiParams<O>) {\r\n class SelectWithApi extends Component<ISelectWithApiProps<T, O>, ISelectWithApiState<O>> implements ISelectWithApiHandle {\r\n abortController = { signalController: new AbortController() }\r\n refInput: HTMLInputElement | null = null\r\n existedIds: string[] = []\r\n constructor(props: ISelectWithApiProps<T, O>) {\r\n super(props)\r\n this.state = {\r\n options: [],\r\n statusText: 'no items',\r\n optionSelected: null,\r\n inputValue: '',\r\n loading: true\r\n }\r\n this.existedIds = props.existedIds ?? []\r\n }\r\n\r\n componentDidMount() {\r\n this.fetchData()\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.timer.clear()\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<ISelectWithApiProps<T, O>>): void {\r\n if (JSON.stringify(prevProps.existedIds) !== JSON.stringify(this.props.existedIds)) {\r\n this.existedIds = this.props.existedIds ?? []\r\n }\r\n }\r\n\r\n render() {\r\n const defaultValue = this.getDefaultValue()\r\n const eMessage = getErrorMessage(this.props.messageErrors, this.props.name)\r\n const renderOption = this.getWrappedRenderOption()\r\n return (\r\n <SelectWithApiStyled className={this.getRootClasses()}>\r\n <Autocomplete\r\n disabled={this.state.loading || this.props.disabled}\r\n fullWidth\r\n noOptionsText={this.state.statusText}\r\n options={this.state.options}\r\n getOptionLabel={(x) => x.Name ?? x.Id}\r\n getOptionKey={(x) => JSON.stringify(x)}\r\n isOptionEqualToValue={(o, v) => o.Id.toString() === v.Id.toString() && o.Name === v.Name}\r\n filterOptions={this.fillterOptions}\r\n renderOption={renderOption}\r\n // select\r\n value={this.state.optionSelected}\r\n onChange={this.handleChange}\r\n // input\r\n inputValue={this.state.inputValue}\r\n onInputChange={this.handleInputChange}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={this.getLabel()}\r\n error={eMessage.error}\r\n helperText={eMessage.message}\r\n onBlur={() => {\r\n if (!this.props.name) return\r\n this.props.onBlur && this.props.onBlur(this.props.name)\r\n }}\r\n {...this.props.slots?.textFieldProps}\r\n />\r\n )}\r\n />\r\n <input ref={(ref) => (this.refInput = ref)} hidden name={this.props.name?.toString()} defaultValue={defaultValue} />\r\n {this.state.optionSelected?.Other && (\r\n <input\r\n hidden\r\n name={`${this.props.name?.toString()}Other`}\r\n key={this.state.optionSelected.Id ?? 'key'}\r\n defaultValue={JSON.stringify(this.state.optionSelected.Other)}\r\n />\r\n )}\r\n {this.renderTooltip()}\r\n </SelectWithApiStyled>\r\n )\r\n }\r\n\r\n renderTooltip = () => {\r\n const tooltip = this.props.tooltip || params?.tooltip\r\n if (!tooltip) return null\r\n return (\r\n <div className={selectWithApiClasses.tooltipWrap}>\r\n <RichTooltip panel={tooltip}>\r\n <HelpOutlinePulseIcon fontSize='small' />\r\n </RichTooltip>\r\n </div>\r\n )\r\n }\r\n\r\n getRootClasses = () => {\r\n const classes = [selectWithApiClasses.root]\r\n const tooltip = this.props.tooltip || params?.tooltip\r\n if (tooltip) classes.push(selectWithApiClasses.tooltip)\r\n return classes.join(' ')\r\n }\r\n\r\n getFetchDataFunc = (): ISelectWithApiFetchData<O> => {\r\n return this.props.fetchData ?? params?.fetchData ?? (() => Promise.resolve([]))\r\n }\r\n\r\n getWrappedRenderOption = () => {\r\n const userRenderOption = this.props.slots?.renderOption ?? params?.renderOption\r\n if (!userRenderOption) return undefined\r\n\r\n return (props: any, option: O, state: AutocompleteRenderOptionState) => {\r\n const { key, ...propsWithoutKey } = props\r\n return (\r\n <li key={key} {...(propsWithoutKey as any)} style={{ width: '100%', boxSizing: 'border-box', ...propsWithoutKey.style }}>\r\n {userRenderOption(propsWithoutKey as React.HTMLAttributes<HTMLElement>, option, state)}\r\n </li>\r\n )\r\n }\r\n }\r\n\r\n timer = {\r\n _timer: 0,\r\n _second: 500,\r\n callback: async (value: string) => {\r\n try {\r\n this.abortController.signalController = new AbortController()\r\n const res = await this.getFetchDataFunc()(value, this.abortController.signalController.signal)\r\n const options = this.getOptionsFilter(res, this.existedIds)\r\n this.setState({ options })\r\n } catch (error) {\r\n // console.log(error)\r\n ApiAlertContext.ApiAlert?.PushError('Error from server!')\r\n } finally {\r\n this.setState({ statusText: 'no items' })\r\n }\r\n },\r\n start: (text: string) => {\r\n this.timer.clear()\r\n this.timer._timer = window.setTimeout(() => this.timer.callback(text), this.timer._second)\r\n },\r\n clear: () => {\r\n this.abortController.signalController.abort()\r\n clearTimeout(this.timer._timer)\r\n }\r\n }\r\n\r\n fetchData = async () => {\r\n try {\r\n const defaultValue = this.getDefaultValue()\r\n const res = await this.getFetchDataFunc()(defaultValue, this.abortController.signalController.signal)\r\n if (!Array.isArray(res)) return\r\n const options = this.getOptionsFilter(res, this.existedIds)\r\n const optionSelected = options.find((x) => x.Id === defaultValue) ?? null\r\n this.setState({ options, optionSelected, loading: false })\r\n return\r\n } catch (error) {\r\n // console.log(error)\r\n ApiAlertContext.ApiAlert?.PushError('Error from server!')\r\n } finally {\r\n this.setState({ statusText: 'no items', loading: false })\r\n }\r\n }\r\n\r\n handleChange = (_: React.SyntheticEvent, value: O | null) => {\r\n this.setState({ optionSelected: value })\r\n if (this.refInput) this.refInput.value = value?.Id ?? ''\r\n this.props.onChange && this.props.onChange(value)\r\n }\r\n\r\n handleInputChange = (_: React.SyntheticEvent, value: string) => {\r\n const state: Pick<ISelectWithApiState<O>, 'inputValue' | 'statusText' | 'loading'> = { inputValue: value }\r\n if (value === this.state.optionSelected?.Name) {\r\n this.setState(state)\r\n return\r\n }\r\n const valueFormated = value.trim().toLowerCase()\r\n const selectedIndex = this.state.options.findIndex((x) => {\r\n return x.Name?.trim().toLowerCase().includes(valueFormated)\r\n })\r\n if (selectedIndex < 0 || valueFormated === '') state.statusText = 'loading...'\r\n this.setState(state, () => {\r\n if (selectedIndex < 0 || valueFormated === '') this.timer.start(valueFormated)\r\n })\r\n }\r\n\r\n fillterOptions = (options: O[], state: FilterOptionsState<O>) => {\r\n return options.filter((x) => {\r\n const value = state.inputValue.toLowerCase()\r\n return x.Id.toLowerCase().includes(value) || x.Name?.toLowerCase().includes(value)\r\n })\r\n }\r\n\r\n getLabel = () => {\r\n return this.props.label ?? this.props.name?.toString()\r\n }\r\n\r\n getDefaultValue = () => {\r\n if (!this.props.name) return\r\n return (this.props.defaultValue ?? this.props.data?.[this.props.name])?.toString()\r\n }\r\n\r\n getOptionsFilter<O extends ISelectWithApiOption = ISelectWithApiOption>(options: O[], existedId: string[] = []): O[] {\r\n const ids = new Set<string | number>(existedId)\r\n return options.reduce<O[]>((a, b) => {\r\n if (!ids.has(b.Id)) {\r\n a.push(b)\r\n ids.add(b.Id)\r\n }\r\n return a\r\n }, [])\r\n }\r\n\r\n clear = () => {\r\n this.setState({ optionSelected: null, inputValue: '' })\r\n if (this.refInput) this.refInput.value = ''\r\n }\r\n }\r\n return SelectWithApi\r\n}\r\nexport default createSelectWithApi\r\n\r\nconst selectWithApiClasses = {\r\n root: 'SelectWithApi-root',\r\n tooltip: 'SelectWithApi-tooltip',\r\n tooltipWrap: 'SelectWithApi-tooltipWrap'\r\n}\r\n\r\nconst getSelectWithApiClass = (key: keyof typeof selectWithApiClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${selectWithApiClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst SelectWithApiStyled = styled(Box)(({ theme }) => ({\r\n [getSelectWithApiClass('root', { suffix: '&' })]: {\r\n width: '100%',\r\n position: 'relative'\r\n },\r\n [getSelectWithApiClass('tooltipWrap')]: {\r\n position: 'absolute',\r\n top: theme.spacing(2.25),\r\n right: theme.spacing(1.5),\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(0.5)\r\n },\r\n [getSelectWithApiClass('tooltip', { suffix: '&' })]: {\r\n '.MuiInputBase-root .MuiAutocomplete-endAdornment': {\r\n right: theme.spacing(4.5)\r\n }\r\n }\r\n}))\r\n"],"names":["createSelectWithApi","params","SelectWithApi","props","_props$existedIds","_this","_callback","_classCallCheck","_callSuper","_defineProperty","signalController","AbortController","tooltip","_jsx","className","selectWithApiClasses","tooltipWrap","children","RichTooltip","panel","HelpOutlinePulseIcon","fontSize","classes","root","push","join","_ref","_this$props$fetchData","fetchData","Promise","resolve","_this$props$slots$ren","_this$props$slots","userRenderOption","slots","renderOption","option","state","key","propsWithoutKey","_objectWithoutProperties","_excluded","_objectSpread","style","width","boxSizing","_timer","_second","callback","_asyncToGenerator","_regenerator","m","_callee","value","res","options","_ApiAlertContext$ApiA","w","_context","p","n","abortController","getFetchDataFunc","signal","v","getOptionsFilter","existedIds","setState","ApiAlertContext","ApiAlert","PushError","statusText","f","a","_x","apply","this","arguments","start","text","timer","clear","window","setTimeout","abort","clearTimeout","_callee2","_options$find","defaultValue","optionSelected","_ApiAlertContext$ApiA2","_context2","getDefaultValue","Array","isArray","find","x","Id","loading","_","_value$Id","refInput","onChange","_this$state$optionSel","inputValue","Name","valueFormated","trim","toLowerCase","selectedIndex","findIndex","_x$Name","includes","filter","_x$Name2","_this$props$label","_this$props$name","label","name","toString","_ref3","_this$props$defaultVa","_this$props$data","data","_inherits","Component","_createClass","prevProps","_this$props$existedId","JSON","stringify","_this$props$name2","_this$state$optionSel2","_this$props$name3","_this$state$optionSel3","_this2","eMessage","getErrorMessage","messageErrors","getWrappedRenderOption","_jsxs","SelectWithApiStyled","getRootClasses","Autocomplete","disabled","fullWidth","noOptionsText","getOptionLabel","_x$Name3","getOptionKey","isOptionEqualToValue","o","filterOptions","fillterOptions","handleChange","onInputChange","handleInputChange","renderInput","_this2$props$slots","TextField","getLabel","error","helperText","message","onBlur","textFieldProps","ref","hidden","Other","concat","renderTooltip","ids","Set","length","undefined","reduce","b","has","add","getSelectWithApiClass","prefix","suffix","styled","Box","_ref5","theme","position","top","spacing","right","display","alignItems","gap"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as o,objectSpread2 as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i,Fragment as t}from"react/jsx-runtime";import{styled as r,Paper as n,IconButton as a,colors as s,Box as c,Tooltip as p,Typography as d}from"@mui/material";import u from"@mui/icons-material/Close";import v from"@mui/icons-material/ChevronLeft";import{mapGlobalModalContext as m}from"../api-context/global-modal.js";var f=function(o){return m(function(r){var n,a,s,m,f,w,C,k,H,P,z,j=[h.root,null===(n=o.slots)||void 0===n||null===(n=n.wrapProps)||void 0===n?void 0:n.className];o.fullHeight&&j.push(h.fullHeight);var S,W=[h.topBar,null===(a=o.slots)||void 0===a||null===(a=a.topBarProps)||void 0===a?void 0:a.className].filter(Boolean).join(" ");return e(x,l(l({size:o.size},null===(s=o.slots)||void 0===s?void 0:s.wrapProps),{},{className:j.filter(Boolean).join(" "),children:[e(B,l(l({},null===(m=o.slots)||void 0===m?void 0:m.topBarProps),{},{className:W,children:[Boolean(o.enableBackButton)&&i(p,{title:"Back",placement:"top",arrow:!0,children:i(b,l(l({onClick:o.onBackClick},null===(f=o.slots)||void 0===f?void 0:f.iconBackProps),{},{children:i(v,{fontSize:null!==(w=null===(C=o.slots)||void 0===C?void 0:C.iconSize)&&void 0!==w?w:"medium"})}))}),(null===(k=o.slots)||void 0===k?void 0:k.beforeTitle)&&e(t,{children:[o.slots.beforeTitle,i(c,{flex:1})]}),(S=o.title,"string"==typeof S?i(d,{component:"h3",variant:"subtitle1",sx:{mt:"2px",ml:"8px",fontWeight:700},children:S}):S),i(c,{flex:1}),!1!==o.enableCloseButton&&i(p,{title:"Close",placement:"top",arrow:!0,children:i(g,l(l({onClick:function(l){o.onCloseClick&&o.onCloseClick(l),r.close()}},null===(H=o.slots)||void 0===H?void 0:H.iconCloseProps),{},{children:i(u,{fontSize:null!==(P=null===(z=o.slots)||void 0===z?void 0:z.iconSize)&&void 0!==P?P:"medium"})}))})]})),i("div",{className:h.content,children:o.children})]}))})},h={root:"Dino-ModalWrapper-root",topBar:"Dino-ModalWrapper-topBar",content:"Dino-ModalWrapper-content",fullHeight:"Dino-ModalWrapper-fullHeight"},x=r(n)(function(l){var e=l.theme,i=l.size;return o(o(o({maxHeight:"calc(100vh - 24px)",overflow:"hidden",display:"flex",flexDirection:"column",position:"relative",maxWidth:"calc(100vw - 24px)",width:e.breakpoints.values[null!=i?i:"lg"]},e.breakpoints.down("sm"),{width:"calc(100vw - 24px)"}),"&.".concat(h.fullHeight),{height:"calc(100vh - 24px)"}),".".concat(h.content),{overflowY:"auto",flex:"1 1 auto",minHeight:0})}),g=r(a)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:s.red[600],transform:"rotate(90deg)"}}),b=r(a)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:s.blue[600],transform:"scale(1.2)"}}),B=r(c)(function(o){return{height:"var(--dino-h-top-bar, 48px)",display:"flex",alignItems:"center",padding:o.theme.spacing(0,1),flex:"0 0 auto",boxShadow:"rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px"}});export{f as default};
1
+ import{defineProperty as o,objectSpread2 as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as t,Fragment as i}from"react/jsx-runtime";import{styled as r,Paper as n,IconButton as a,colors as s,Box as c,Tooltip as p,Typography as d}from"@mui/material";import u from"@mui/icons-material/Close";import m from"@mui/icons-material/ChevronLeft";import"react";import"../api-context/alert-global.js";import"../api-context/drawer-global.js";import{mapGlobalModalContext as v}from"../api-context/global-modal.js";var f=function(o){return v(function(r){var n,a,s,v,f,w,C,k,j,H,P,z=[h.root,null===(n=o.slots)||void 0===n||null===(n=n.wrapProps)||void 0===n?void 0:n.className];o.fullHeight&&z.push(h.fullHeight);var S,W=[h.topBar,null===(a=o.slots)||void 0===a||null===(a=a.topBarProps)||void 0===a?void 0:a.className].filter(Boolean).join(" ");return e(x,l(l({size:o.size},null===(s=o.slots)||void 0===s?void 0:s.wrapProps),{},{className:z.filter(Boolean).join(" "),children:[e(B,l(l({},null===(v=o.slots)||void 0===v?void 0:v.topBarProps),{},{className:W,children:[Boolean(o.enableBackButton)&&t(p,{title:"Back",placement:"top",arrow:!0,children:t(b,l(l({onClick:o.onBackClick},null===(f=o.slots)||void 0===f?void 0:f.iconBackProps),{},{children:t(m,{fontSize:null!==(w=null===(C=o.slots)||void 0===C?void 0:C.iconSize)&&void 0!==w?w:"medium"})}))}),(null===(k=o.slots)||void 0===k?void 0:k.beforeTitle)&&e(i,{children:[o.slots.beforeTitle,t(c,{flex:1})]}),(S=o.title,"string"==typeof S?t(d,{component:"h3",variant:"subtitle1",sx:{mt:"2px",ml:"8px",fontWeight:700},children:S}):S),t(c,{flex:1}),!1!==o.enableCloseButton&&t(p,{title:"Close",placement:"top",arrow:!0,children:t(g,l(l({onClick:function(l){o.onCloseClick&&o.onCloseClick(l),r.close()}},null===(j=o.slots)||void 0===j?void 0:j.iconCloseProps),{},{children:t(u,{fontSize:null!==(H=null===(P=o.slots)||void 0===P?void 0:P.iconSize)&&void 0!==H?H:"medium"})}))})]})),t("div",{className:h.content,children:o.children})]}))})},h={root:"Dino-ModalWrapper-root",topBar:"Dino-ModalWrapper-topBar",content:"Dino-ModalWrapper-content",fullHeight:"Dino-ModalWrapper-fullHeight"},x=r(n)(function(l){var e=l.theme,t=l.size;return o(o(o({maxHeight:"calc(100vh - 24px)",overflow:"hidden",display:"flex",flexDirection:"column",position:"relative",maxWidth:"calc(100vw - 24px)",width:e.breakpoints.values[null!=t?t:"lg"]},e.breakpoints.down("sm"),{width:"calc(100vw - 24px)"}),"&.".concat(h.fullHeight),{height:"calc(100vh - 24px)"}),".".concat(h.content),{overflowY:"auto",flex:"1 1 auto",minHeight:0})}),g=r(a)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:s.red[600],transform:"rotate(90deg)"}}),b=r(a)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:s.blue[600],transform:"scale(1.2)"}}),B=r(c)(function(o){return{height:"var(--dino-h-top-bar, 48px)",display:"flex",alignItems:"center",padding:o.theme.spacing(0,1),flex:"0 0 auto",boxShadow:"rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px"}});export{f as default};
2
2
  //# sourceMappingURL=modal-wrapper.js.map