dinocollab-core 2.2.11 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/data-surface/index.create.js +1 -1
- package/dist/src/data-surface/index.create.js.map +1 -1
- package/dist/src/data-surface/view-grid/hooks.js +1 -1
- package/dist/src/data-surface/view-grid/hooks.js.map +1 -1
- package/dist/src/data-surface/view-grid/index.js +1 -1
- package/dist/src/data-surface/view-grid/index.js.map +1 -1
- package/dist/src/data-surface/view-grid/styleds.js +1 -1
- package/dist/src/data-surface/view-grid/styleds.js.map +1 -1
- package/dist/src/data-surface/view-list/hooks.js +1 -1
- package/dist/src/data-surface/view-list/hooks.js.map +1 -1
- package/dist/src/data-surface/view-list/index.js +1 -1
- package/dist/src/data-surface/view-list/index.js.map +1 -1
- package/dist/src/data-surface/view-list/styled.js +1 -1
- package/dist/src/data-surface/view-list/styled.js.map +1 -1
- package/dist/src/data-surface/view-list/types.js.map +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js.map +1 -1
- package/dist/src/filter-bar/components/filter-sort.js +1 -1
- package/dist/src/filter-bar/components/filter-sort.js.map +1 -1
- package/dist/src/filter-bar/components/filter-summary.js +1 -1
- package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
- package/dist/src/filter-bar/components/{units.js → icons.js} +1 -1
- package/dist/src/filter-bar/components/{units.js.map → icons.js.map} +1 -1
- package/dist/src/filter-bar/components/popper-custom.js +1 -1
- package/dist/src/filter-bar/components/popper-custom.js.map +1 -1
- package/dist/src/filter-bar/components/ui.units.js +2 -0
- package/dist/src/filter-bar/components/ui.units.js.map +1 -0
- package/dist/src/filter-bar/index.create.js +1 -1
- package/dist/src/filter-bar/index.create.js.map +1 -1
- package/dist/src/filter-bar/index.dino.js +1 -1
- package/dist/src/filter-bar/index.dino.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-select.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-select.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-string.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -0
- package/dist/src/filter-bar/menu/create.js +2 -0
- package/dist/src/filter-bar/menu/create.js.map +1 -0
- package/dist/src/form/create.form-base.js +1 -1
- package/dist/src/form/create.text-editor.js +1 -1
- package/dist/src/form/helpers.js +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/csv-export-helper.js +2 -0
- package/dist/src/table/csv-export-helper.js.map +1 -0
- package/dist/src/table/custom.export-button.js +2 -0
- package/dist/src/table/custom.export-button.js.map +1 -0
- package/dist/src/table/dino.js +1 -1
- package/dist/src/table/dino.js.map +1 -1
- package/dist/src/table/toolbar-pannel.js +1 -1
- package/dist/src/table/toolbar-pannel.js.map +1 -1
- package/dist/src/utils/helpers.js +1 -1
- package/dist/types/data-surface/index.create.d.ts +10 -2
- package/dist/types/data-surface/view-grid/hooks.d.ts +6 -0
- package/dist/types/data-surface/view-grid/styleds.d.ts +2 -0
- package/dist/types/data-surface/view-grid/types.d.ts +15 -3
- package/dist/types/data-surface/view-list/hooks.d.ts +6 -0
- package/dist/types/data-surface/view-list/styled.d.ts +2 -0
- package/dist/types/data-surface/view-list/types.d.ts +15 -3
- package/dist/types/filter-bar/components/chip-viewer.d.ts +1 -3
- package/dist/types/filter-bar/components/popper-custom.d.ts +2 -2
- package/dist/types/filter-bar/components/ui.units.d.ts +22 -0
- package/dist/types/filter-bar/index.create.d.ts +1 -1
- package/dist/types/filter-bar/index.dino.d.ts +6 -0
- package/dist/types/filter-bar/menu/create-form-field-select-multiple.d.ts +13 -0
- package/dist/types/filter-bar/menu/create-form-field-select.d.ts +17 -0
- package/dist/types/filter-bar/menu/create-form-field-string.d.ts +10 -0
- package/dist/types/filter-bar/{components/filter-menu.d.ts → menu/create.d.ts} +2 -2
- package/dist/types/filter-bar/{components/filter-menu.types.d.ts → menu/types.d.ts} +6 -1
- package/dist/types/table/csv-export-helper.d.ts +20 -0
- package/dist/types/table/custom.export-button.d.ts +8 -0
- package/dist/types/table/dino.d.ts +1 -0
- package/dist/types/table/index.d.ts +1 -0
- package/dist/types/table/toolbar-pannel.d.ts +2 -0
- package/package.json +1 -1
- package/dist/src/filter-bar/components/filter-menu.js +0 -2
- package/dist/src/filter-bar/components/filter-menu.js.map +0 -1
- package/dist/src/filter-bar/components/filter-menu.units.js +0 -2
- package/dist/src/filter-bar/components/filter-menu.units.js.map +0 -1
- package/dist/types/filter-bar/components/filter-menu.units.d.ts +0 -18
- /package/dist/types/filter-bar/components/{units.d.ts → icons.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, ...rest } = props\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled className={rootClasses.join(' ')} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.footer}>{children}</div>\r\n}\r\n\r\nexport const PopperBody: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.body}>{children}</div>\r\n}\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '350px',\r\n maxWidth: '550px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '240px',\r\n maxWidth: '90vw'\r\n }\r\n }\r\n },\r\n [`.${popperCustomClasses.body}`]: {\r\n padding: theme.spacing(1),\r\n maxHeight: '70vh',\r\n overflow: 'auto'\r\n },\r\n [`.${popperCustomClasses.header}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: theme.spacing(0.5),\r\n backgroundColor: theme.palette.grey[900],\r\n padding: theme.spacing(0.5, 1),\r\n color: theme.palette.common.white\r\n },\r\n [`.${popperCustomClasses.title}`]: {\r\n fontSize: '0.875rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n flexGrow: 1\r\n },\r\n [`.${popperCustomClasses.buttonClose}`]: {\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '.MuiSvgIcon-root': { transition: theme.transitions.create('transform') },\r\n '&:hover': {\r\n color: theme.palette.error.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1),\r\n '.MuiSvgIcon-root': { transform: 'rotate(90deg)' }\r\n }\r\n },\r\n [`.${popperCustomClasses.footer}`]: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n gap: theme.spacing(1),\r\n borderTop: `1px solid ${theme.palette.grey[100]}`,\r\n padding: theme.spacing(0.5, 1),\r\n [`.MuiButtonBase-root`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n padding: theme.spacing(1, 1.5)\r\n }\r\n },\r\n [`&.${popperCustomClasses.disableGutter}`]: {\r\n [`.${popperCustomClasses.body}`]: { padding: 0 },\r\n [`.${popperCustomClasses.header}`]: { padding: theme.spacing(0.5, 1) },\r\n [`.${popperCustomClasses.footer}`]: { padding: theme.spacing(0.5, 1.5), margin: theme.spacing(1, 1, 0) }\r\n }\r\n}))\r\n"],"names":["PopperCustom","styled","_ref","children","props","_objectWithoutProperties","_excluded","_jsx","Popper","_objectSpread","_ref2","TransitionProps","Fade","timeout","_jsxs","_ref3","zIndex","theme","modal","maxWidth","PopperContent","classes","useMemo","popperCustomClasses","title","onClose","disableGutter","disableMinMaxWidth","slots","rest","_excluded2","rootClasses","root","push","PopperContentStyled","className","join","header","beforeTitle","Typography","variant","afterTitle","Tooltip","placement","arrow","IconButton","size","buttonClose","onClick","CloseIcon","fontSize","PopperFooter","_ref4","footer","PopperBody","_ref5","body","Box","_ref6","_defineProperty","concat","borderRadius","shape","boxShadow","backgroundColor","palette","background","paper","overflow","minWidth","breakpoints","down","padding","spacing","maxHeight","display","alignItems","justifyContent","gap","grey","color","common","white","fontWeight","lineHeight","flexGrow","transition","transitions","create","error","light","alpha","transform","borderTop","textTransform","margin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, ...rest } = props\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled className={rootClasses.join(' ')} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.footer} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nexport const PopperBody: FC<BoxProps & Required<PropsWithChildren>> = ({ children, ...rest }) => (\r\n <Box className={popperCustomClasses.body} {...rest}>\r\n {children}\r\n </Box>\r\n)\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '350px',\r\n maxWidth: '550px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '240px',\r\n maxWidth: '90vw'\r\n }\r\n }\r\n },\r\n [`.${popperCustomClasses.body}`]: {\r\n padding: theme.spacing(1),\r\n maxHeight: '70vh',\r\n overflow: 'auto'\r\n },\r\n [`.${popperCustomClasses.header}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: theme.spacing(0.5),\r\n backgroundColor: theme.palette.grey[900],\r\n padding: theme.spacing(0.5, 1),\r\n color: theme.palette.common.white\r\n },\r\n [`.${popperCustomClasses.title}`]: {\r\n fontSize: '0.875rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n flexGrow: 1\r\n },\r\n [`.${popperCustomClasses.buttonClose}`]: {\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '.MuiSvgIcon-root': { transition: theme.transitions.create('transform') },\r\n '&:hover': {\r\n color: theme.palette.error.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1),\r\n '.MuiSvgIcon-root': { transform: 'rotate(90deg)' }\r\n }\r\n },\r\n [`.${popperCustomClasses.footer}`]: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n gap: theme.spacing(1),\r\n borderTop: `1px solid ${theme.palette.grey[100]}`,\r\n padding: theme.spacing(0.5, 1),\r\n [`.MuiButtonBase-root`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n padding: theme.spacing(1, 1.5)\r\n }\r\n },\r\n [`&.${popperCustomClasses.disableGutter}`]: {\r\n [`.${popperCustomClasses.body}`]: { padding: 0 },\r\n [`.${popperCustomClasses.header}`]: { padding: theme.spacing(0.5, 1) },\r\n [`.${popperCustomClasses.footer}`]: { padding: theme.spacing(0.5, 1.5), margin: theme.spacing(1, 1, 0) }\r\n }\r\n}))\r\n"],"names":["PopperCustom","styled","_ref","children","props","_objectWithoutProperties","_excluded","_jsx","Popper","_objectSpread","_ref2","TransitionProps","Fade","timeout","_jsxs","_ref3","zIndex","theme","modal","maxWidth","PopperContent","classes","useMemo","popperCustomClasses","title","onClose","disableGutter","disableMinMaxWidth","slots","rest","_excluded2","rootClasses","root","push","PopperContentStyled","className","join","header","beforeTitle","Typography","variant","afterTitle","Tooltip","placement","arrow","IconButton","size","buttonClose","onClick","CloseIcon","fontSize","PopperFooter","_ref4","_excluded3","Box","footer","PopperBody","_ref5","_excluded4","body","_ref6","_defineProperty","concat","borderRadius","shape","boxShadow","backgroundColor","palette","background","paper","overflow","minWidth","breakpoints","down","padding","spacing","maxHeight","display","alignItems","justifyContent","gap","grey","color","common","white","fontWeight","lineHeight","flexGrow","transition","transitions","create","error","light","alpha","transform","borderTop","textTransform","margin"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as t}from"react/jsx-runtime";import{styled as l,Tooltip as i,IconButton as n,alpha as a,Chip as c,ToggleButtonGroup as m,ToggleButton as u,Typography as p}from"@mui/material";import h from"@mui/icons-material/ChevronLeft";import{PopperContent as d}from"./popper-custom.js";var s=["children"],f=function(e){var o=e.onClose;return r(d,{title:"Filter by",onClose:o,children:r(p,{variant:"body2",sx:{p:2,textAlign:"center"},children:"No field to filter"})})},g=l(function(t){var l=t.children,a=e(t,s);return r(i,{title:"Back",placement:"top",arrow:!0,children:r(n,o(o({},a),{},{children:l||r(h,{fontSize:"small"})}))})})(function(e){var o=e.theme;return{color:o.palette.common.white,transition:o.transitions.create("color"),"&:hover":{color:o.palette.primary.light,backgroundColor:a(o.palette.common.white,.1)}}}),b=l(c)(function(e){var o=e.theme;return{backgroundColor:"dark"===o.palette.mode?o.palette.grey[900]:o.palette.grey[800],color:o.palette.common.white,border:"1px solid ".concat(a(o.palette.common.white,.1)),height:20,fontSize:"0.75rem","& .MuiChip-label":{color:o.palette.common.white}}}),v=function(e){return t(C,{size:"small",value:e.value||"and",exclusive:!0,onChange:function(o,r){r&&e.onChange&&e.onChange(o,r)},sx:e.sx,children:[r(u,{size:"small",value:"and","aria-label":"and logic",children:"AND"}),r(u,{size:"small",value:"or","aria-label":"or logic",children:"OR"})]})},C=l(m)({"& .MuiToggleButton-root":{color:"#fff",borderColor:"rgba(255, 255, 255, 0.3)",fontSize:"0.65rem",fontWeight:600,lineHeight:1,minWidth:"40px",padding:"6px 8px","&.Mui-selected":{backgroundColor:"#1976d2",color:"#fff","&:hover":{backgroundColor:"#1565c0"}},"&:hover":{backgroundColor:"rgba(255, 255, 255, 0.08)"}}});export{g as ButtonBack,b as ChipDark,v as FilterLogicToggle,f as FilterMenuNoField};
|
|
2
|
+
//# sourceMappingURL=ui.units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.units.js","sources":["../../../../src/filter-bar/components/ui.units.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { alpha, Box, Chip, IconButton, styled, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@mui/material'\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft'\r\nimport { PopperContent } from './popper-custom'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IconButtonProps, ToggleButtonGroupProps } from '@mui/material'\r\nimport type { TLogic } from '../types'\r\n\r\n//#region Other components\r\ninterface IFilterMenuNoFieldProps {\r\n onClose: () => void\r\n}\r\n\r\nexport const FilterMenuNoField: FC<IFilterMenuNoFieldProps> = ({ onClose }) => (\r\n <PopperContent title='Filter by' onClose={onClose}>\r\n <Typography variant='body2' sx={{ p: 2, textAlign: 'center' }}>\r\n No field to filter\r\n </Typography>\r\n </PopperContent>\r\n)\r\n\r\nexport const ButtonBack = styled(({ children, ...props }: IconButtonProps) => (\r\n <Tooltip title='Back' placement='top' arrow>\r\n <IconButton {...props}>{children || <ChevronLeftIcon fontSize='small' />}</IconButton>\r\n </Tooltip>\r\n))(({ theme }) => ({\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '&:hover': {\r\n color: theme.palette.primary.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1)\r\n }\r\n}))\r\n\r\nexport const ChipDark = styled(Chip)(({ theme }) => ({\r\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette.grey[900] : theme.palette.grey[800],\r\n color: theme.palette.common.white,\r\n border: `1px solid ${alpha(theme.palette.common.white, 0.1)}`,\r\n height: 20,\r\n fontSize: '0.75rem',\r\n '& .MuiChip-label': {\r\n color: theme.palette.common.white\r\n }\r\n}))\r\n//#endregion\r\n//#region Toggle logic\r\nexport interface FilterLogicToggleProps {\r\n value?: TLogic\r\n onChange?: (event: React.MouseEvent<HTMLElement>, value: TLogic) => void\r\n sx?: ToggleButtonGroupProps['sx']\r\n}\r\n\r\nexport const FilterLogicToggle: FC<FilterLogicToggleProps> = (props) => {\r\n const handleChange = (event: React.MouseEvent<HTMLElement>, newValue: string | null) => {\r\n if (newValue && props.onChange) {\r\n props.onChange(event, newValue as TLogic)\r\n }\r\n }\r\n\r\n return (\r\n <ToggleButtonGroupCustom size='small' value={props.value || 'and'} exclusive onChange={handleChange} sx={props.sx}>\r\n <ToggleButton size='small' value='and' aria-label='and logic'>\r\n AND\r\n </ToggleButton>\r\n <ToggleButton size='small' value='or' aria-label='or logic'>\r\n OR\r\n </ToggleButton>\r\n </ToggleButtonGroupCustom>\r\n )\r\n}\r\n\r\nconst ToggleButtonGroupCustom = styled(ToggleButtonGroup)({\r\n '& .MuiToggleButton-root': {\r\n color: '#fff',\r\n borderColor: 'rgba(255, 255, 255, 0.3)',\r\n fontSize: '0.65rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n minWidth: '40px',\r\n padding: '6px 8px',\r\n '&.Mui-selected': {\r\n backgroundColor: '#1976d2',\r\n color: '#fff',\r\n '&:hover': { backgroundColor: '#1565c0' }\r\n },\r\n '&:hover': { backgroundColor: 'rgba(255, 255, 255, 0.08)' }\r\n }\r\n})\r\n//#endregion\r\n"],"names":["FilterMenuNoField","_ref","onClose","_jsx","PopperContent","title","Typography","variant","sx","p","textAlign","children","ButtonBack","styled","_ref2","props","_objectWithoutProperties","_excluded","Tooltip","placement","arrow","IconButton","_objectSpread","ChevronLeftIcon","fontSize","_ref3","theme","color","palette","common","white","transition","transitions","create","primary","light","backgroundColor","alpha","ChipDark","Chip","_ref4","mode","grey","border","concat","height","FilterLogicToggle","_jsxs","ToggleButtonGroupCustom","size","value","exclusive","onChange","event","newValue","ToggleButton","ToggleButtonGroup","borderColor","fontWeight","lineHeight","minWidth","padding"],"mappings":"qaAgBaA,EAAiD,SAAhCC,GAAA,IAAmCC,EAAOD,EAAPC,QAAO,OACtEC,EAACC,EAAc,CAAAC,MAAM,YAAYH,QAASA,WACxCC,EAACG,GAAWC,QAAQ,QAAQC,GAAI,CAAEC,EAAG,EAAGC,UAAW,UAEtCC,SAAA,wBACC,EAGLC,EAAaC,EAAO,SAAAC,GAAA,IAAGH,EAAQG,EAARH,SAAaI,EAAKC,EAAAF,EAAAG,GAAA,OACpDd,EAACe,EAAO,CAACb,MAAM,OAAOc,UAAU,MAAMC,OACpC,EAAAT,SAAAR,EAACkB,EAAUC,EAAAA,EAAA,GAAKP,GAAK,GAAA,CAAAJ,SAAGA,GAAYR,EAACoB,EAAgB,CAAAC,SAAS,cACtD,EAHcX,CAIvB,SAAAY,GAAA,IAAGC,EAAKD,EAALC,MAAK,MAAQ,CACjBC,MAAOD,EAAME,QAAQC,OAAOC,MAC5BC,WAAYL,EAAMM,YAAYC,OAAO,SACrC,UAAW,CACTN,MAAOD,EAAME,QAAQM,QAAQC,MAC7BC,gBAAiBC,EAAMX,EAAME,QAAQC,OAAOC,MAAO,KAEtD,GAEYQ,EAAWzB,EAAO0B,EAAP1B,CAAa,SAAA2B,GAAA,IAAGd,EAAKc,EAALd,MAAK,MAAQ,CACnDU,gBAAwC,SAAvBV,EAAME,QAAQa,KAAkBf,EAAME,QAAQc,KAAK,KAAOhB,EAAME,QAAQc,KAAK,KAC9Ff,MAAOD,EAAME,QAAQC,OAAOC,MAC5Ba,OAAMC,aAAAA,OAAeP,EAAMX,EAAME,QAAQC,OAAOC,MAAO,KACvDe,OAAQ,GACRrB,SAAU,UACV,mBAAoB,CAClBG,MAAOD,EAAME,QAAQC,OAAOC,OAE/B,GASYgB,EAAgD,SAAC/B,GAO5D,OACEgC,EAACC,EAAwB,CAAAC,KAAK,QAAQC,MAAOnC,EAAMmC,OAAS,MAAOC,WAAS,EAACC,SAP1D,SAACC,EAAsCC,GACtDA,GAAYvC,EAAMqC,UACpBrC,EAAMqC,SAASC,EAAOC,EAEzB,EAGsG9C,GAAIO,EAAMP,GAAEG,SAAA,CAC/GR,EAACoD,EAAY,CAACN,KAAK,QAAQC,MAAM,MAAK,aAAY,YAAWvC,SAAA,QAG7DR,EAACoD,EAAY,CAACN,KAAK,QAAQC,MAAM,KAAI,aAAY,WAAUvC,SAAA,SAKjE,EAEMqC,EAA0BnC,EAAO2C,EAAP3C,CAA0B,CACxD,0BAA2B,CACzBc,MAAO,OACP8B,YAAa,2BACbjC,SAAU,UACVkC,WAAY,IACZC,WAAY,EACZC,SAAU,OACVC,QAAS,UACT,iBAAkB,CAChBzB,gBAAiB,UACjBT,MAAO,OACP,UAAW,CAAES,gBAAiB,YAEhC,UAAW,CAAEA,gBAAiB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,slicedToArray as r,objectSpread2 as e,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as
|
|
1
|
+
import{defineProperty as t,slicedToArray as r,objectSpread2 as e,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{useState as l,useRef as u,useEffect as m}from"react";import{styled as s,Box as c,useMediaQuery as f}from"@mui/material";import{useTheme as p}from"@mui/material/styles";import{fetchDelay as d}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{createFilterBarContext as v}from"./index.context.js";import{createFilterSort as g}from"./components/filter-sort.js";import{createFilterMenu as y}from"./menu/create.js";import{createFilterInput as S}from"./components/filter-input.js";import{createFilterSummary as C}from"./components/filter-summary.js";function b(t){var s,b=null!==(s=t.debounceDelay)&&void 0!==s?s:300;if(!t.InputComponent){var j=t.inputConfig||{fields:{}};t.inputConfig=j,t.InputComponent=S(j)}if(!t.MenuComponent){var P=t.menuConfig||{fields:{}};t.menuConfig=P,t.MenuComponent=y(P)}if(!t.SummaryComponent&&!1!==t.enableSummary){var w=t.summaryConfig||{fields:{}};t.summaryConfig=w,t.SummaryComponent=C(w)}if(!t.SortComponent){var F=t.sortConfig||{fields:{}};t.sortConfig=F,t.SortComponent=g(F)}var I=t.defaultFilterLogic||"and",B=v();return function(s){var v,g=s.slots,y=t.InputComponent,S=t.MenuComponent,C=t.SummaryComponent,j=t.SortComponent,P=function(){return Object.assign({filterLogic:I},t.defaultFilterState,s.defaultValue)},w=l(function(){return s.value?{filterState:s.value}:{filterState:P()}}),F=r(w,2),T=F[0],k=F[1],D=l(!1),L=r(D,2),M=L[0],N=L[1],W=u(null),A=u(null);m(function(){return function(){W.current&&(clearTimeout(W.current),W.current=null)}},[]),m(function(){s.value&&k({filterState:s.value})},[s.value]);var _=function(){var t=n(o().m(function t(r,e){var i;return o().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,k(function(t){var r;return{filterState:null!==(r=null==e?void 0:e.filterState)&&void 0!==r?r:t.filterState}}),N(!0),t.n=1,d(n(o().m(function t(){var e;return o().w(function(t){for(;;)if(0===t.n)return t.a(2,null===(e=s.onChange)||void 0===e?void 0:e.call(s,r))},t)})),b);case 1:N(!1),t.n=3;break;case 2:throw t.p=2,i=t.v,N(!1),i;case 3:return t.a(2)}},t,null,[[0,2]])}));return function(r,e){return t.apply(this,arguments)}}(),q={filterState:s.value||T.filterState,defaultFilterState:P(),isLoading:M,setFilterState:function(t){A.current=t,s.value||k({filterState:t}),W.current&&clearTimeout(W.current),W.current=window.setTimeout(function(){var t=A.current;s.value?_(t):_(t,{filterState:t}),W.current=null,A.current=null},b)}},z=p(),G=f(z.breakpoints.down("md"));return i(B.Provider,{value:q,children:a(h,{className:x.root,sx:s.sx,children:[a(c,{className:x.inner,children:[(null==g?void 0:g.before)||null,a("div",{className:x.action,children:[i(S,{slots:{popperProps:{placement:"bottom-start"}}}),i(j,{slots:{popperProps:{placement:"bottom-start"}}})]}),i(y,{slots:{minimalInput:G,popperProps:{placement:"bottom-start"}}}),(null==g?void 0:g.after)||null]}),a(c,e(e({},null==g?void 0:g.summaryWrapProps),{},{sx:e({display:"flex",alignItems:"center"},null==g||null===(v=g.summaryWrapProps)||void 0===v?void 0:v.sx),children:[(null==g?void 0:g.summaryBefore)||null,i(c,{sx:{flex:1,minWidth:0},children:!1!==t.enableSummary&&i(C,{})}),(null==g?void 0:g.summaryAfter)||null]}))]})})}}var x={root:"DinoFilterBar-root",inner:"DinoFilterBar-inner",action:"DinoFilterBar-action"},h=s(c)(function(r){var e=r.theme;return t(t(t({},"&.".concat(x.root),{backgroundColor:e.palette.background.paper,boxSizing:"border-box"}),".".concat(x.inner),{display:"flex",alignItems:"center",gap:e.spacing(1)}),".".concat(x.action),{display:"flex",alignItems:"center"})});export{b as createFilterBar};
|
|
2
2
|
//# sourceMappingURL=index.create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useState, useEffect, useRef } from 'react'\r\nimport { Box, BoxProps, styled, useMediaQuery } from '@mui/material'\r\nimport { useTheme } from '@mui/material/styles'\r\nimport { fetchDelay } from '../utils'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './components/filter-menu'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './components/filter-menu.types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n /** Debounce delay for filter input changes in milliseconds @default 300 */\r\n debounceDelay?: number\r\n defaultFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n InputComponent?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n MenuComponent?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n sortConfig?: IFilterSortConfig<T>\r\n SortComponent?: ComponentType<IFilterSortProps<T>>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n SummaryComponent?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n}\r\n\r\nexport interface IFilterBarSlots {\r\n summaryWrapProps?: BoxProps\r\n summaryBefore?: React.ReactNode\r\n summaryAfter?: React.ReactNode\r\n before?: React.ReactNode\r\n after?: React.ReactNode\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n defaultValue?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => Promise<void> | void\r\n slots?: IFilterBarSlots\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n const debounceDelay = configs.debounceDelay ?? 300\r\n\r\n if (!configs.InputComponent) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.inputConfig = configInput\r\n configs.InputComponent = createFilterInput<T>(configInput)\r\n }\r\n if (!configs.MenuComponent) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menuConfig = configMenu\r\n configs.MenuComponent = createFilterMenu<T>(configMenu)\r\n }\r\n if (!configs.SummaryComponent && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summaryConfig = configSummary\r\n configs.SummaryComponent = createFilterSummary<T>(configSummary)\r\n }\r\n if (!configs.SortComponent) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sortConfig = configSort\r\n configs.SortComponent = createFilterSort<T>(configSort)\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n const FilterBar: FC<IFilterBarProps<T>> = (props) => {\r\n const { slots } = props\r\n const InputComponent = configs.InputComponent as ComponentType<IFilterInputProps<T>>\r\n const MenuComponent = configs.MenuComponent as ComponentType<IFilterMenuProps<T>>\r\n const SummaryComponent = configs.SummaryComponent as ComponentType<IFilterSummaryProps<T>>\r\n const SortComponent = configs.SortComponent as ComponentType<IFilterSortProps<T>>\r\n\r\n const getDefaultFilterState = (): TFilterState<T> => {\r\n return Object.assign({ filterLogic: defaultFilterLogic }, configs.defaultFilterState, props.defaultValue)\r\n }\r\n\r\n const computeInitial = (): IFilterBarState<T> => {\r\n if (props.value) return { filterState: props.value }\r\n return { filterState: getDefaultFilterState() }\r\n }\r\n\r\n const [localState, setLocalState] = useState<IFilterBarState<T>>(computeInitial)\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n const debounceTimer = useRef<number | null>(null)\r\n const pendingStateRef = useRef<TFilterState<T> | null>(null)\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (debounceTimer.current) {\r\n clearTimeout(debounceTimer.current)\r\n debounceTimer.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n // keep local state in sync if controlled\r\n if (props.value) setLocalState({ filterState: props.value })\r\n }, [props.value])\r\n\r\n const handleChange = async (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => {\r\n try {\r\n setLocalState((prev) => ({ filterState: state?.filterState ?? prev.filterState }))\r\n setIsLoading(true)\r\n await fetchDelay(async () => props.onChange?.(filterState), debounceDelay)\r\n setIsLoading(false)\r\n } catch (error) {\r\n setIsLoading(false)\r\n throw error\r\n }\r\n }\r\n\r\n // Action handlers to manipulate filter state\r\n // Debounce or throttle can be added to these handlers if needed to optimize performance for rapid changes\r\n const setFilterState = (state: TFilterState<T>) => {\r\n // store latest requested state\r\n pendingStateRef.current = state\r\n\r\n // If uncontrolled, update UI immediately for responsiveness\r\n if (!props.value) {\r\n setLocalState({ filterState: state })\r\n }\r\n\r\n // debounce actual handler calls so only the last one within delay fires\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current)\r\n debounceTimer.current = window.setTimeout(() => {\r\n const s = pendingStateRef.current as TFilterState<T>\r\n if (props.value) {\r\n handleChange(s)\r\n } else {\r\n handleChange(s, { filterState: s })\r\n }\r\n debounceTimer.current = null\r\n pendingStateRef.current = null\r\n }, debounceDelay)\r\n }\r\n\r\n const contextValue: IFilterBarContext<T> = {\r\n filterState: props.value || localState.filterState,\r\n defaultFilterState: getDefaultFilterState(),\r\n isLoading: isLoading,\r\n setFilterState\r\n }\r\n\r\n const theme = useTheme()\r\n const isSmall = useMediaQuery(theme.breakpoints.down('md'))\r\n\r\n //TODO - add panel: định vị trí, ẩn hiện, trạng thái,...\r\n return (\r\n <Context.Provider value={contextValue}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={props.sx}>\r\n <Box className={filterbarClasses.inner}>\r\n {slots?.before || null}\r\n <div className={filterbarClasses.action}>\r\n <MenuComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <SortComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n <InputComponent slots={{ minimalInput: isSmall, popperProps: { placement: 'bottom-start' } }} />\r\n {slots?.after || null}\r\n </Box>\r\n <Box {...slots?.summaryWrapProps} sx={{ display: 'flex', alignItems: 'center', ...slots?.summaryWrapProps?.sx }}>\r\n {slots?.summaryBefore || null}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{configs.enableSummary !== false && <SummaryComponent />}</Box>\r\n {slots?.summaryAfter || null}\r\n </Box>\r\n </FilterBarStyled>\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner',\r\n action: 'DinoFilterBar-action'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper,\r\n boxSizing: 'border-box'\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n },\r\n [`.${filterbarClasses.action}`]: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","_configs$debounceDela","debounceDelay","InputComponent","configInput","inputConfig","fields","createFilterInput","MenuComponent","configMenu","menuConfig","createFilterMenu","SummaryComponent","enableSummary","configSummary","summaryConfig","createFilterSummary","SortComponent","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","props","_slots$summaryWrapPro","slots","getDefaultFilterState","Object","assign","filterLogic","defaultFilterState","defaultValue","_useState","useState","value","filterState","_useState2","_slicedToArray","localState","setLocalState","_useState3","_useState4","isLoading","setIsLoading","debounceTimer","useRef","pendingStateRef","useEffect","current","clearTimeout","handleChange","_ref","_asyncToGenerator","_regenerator","m","_callee2","state","_t","w","_context2","p","n","prev","_state$filterState","fetchDelay","_callee","_props$onChange","_context","a","onChange","call","v","_x","_x2","apply","this","arguments","contextValue","setFilterState","window","setTimeout","s","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","Box","inner","before","action","popperProps","placement","minimalInput","after","_objectSpread","summaryWrapProps","display","alignItems","summaryBefore","flex","minWidth","summaryAfter","styled","_ref3","_defineProperty","concat","backgroundColor","palette","background","paper","boxSizing","gap","spacing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useState, useEffect, useRef } from 'react'\r\nimport { Box, BoxProps, styled, useMediaQuery } from '@mui/material'\r\nimport { useTheme } from '@mui/material/styles'\r\nimport { fetchDelay } from '../utils'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './menu/create'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './menu/types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n /** Debounce delay for filter input changes in milliseconds @default 300 */\r\n debounceDelay?: number\r\n defaultFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n InputComponent?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n MenuComponent?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n sortConfig?: IFilterSortConfig<T>\r\n SortComponent?: ComponentType<IFilterSortProps<T>>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n SummaryComponent?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n}\r\n\r\nexport interface IFilterBarSlots {\r\n summaryWrapProps?: BoxProps\r\n summaryBefore?: React.ReactNode\r\n summaryAfter?: React.ReactNode\r\n before?: React.ReactNode\r\n after?: React.ReactNode\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n defaultValue?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => Promise<void> | void\r\n slots?: IFilterBarSlots\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n const debounceDelay = configs.debounceDelay ?? 300\r\n\r\n if (!configs.InputComponent) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.inputConfig = configInput\r\n configs.InputComponent = createFilterInput<T>(configInput)\r\n }\r\n if (!configs.MenuComponent) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menuConfig = configMenu\r\n configs.MenuComponent = createFilterMenu<T>(configMenu)\r\n }\r\n if (!configs.SummaryComponent && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summaryConfig = configSummary\r\n configs.SummaryComponent = createFilterSummary<T>(configSummary)\r\n }\r\n if (!configs.SortComponent) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sortConfig = configSort\r\n configs.SortComponent = createFilterSort<T>(configSort)\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n const FilterBar: FC<IFilterBarProps<T>> = (props) => {\r\n const { slots } = props\r\n const InputComponent = configs.InputComponent as ComponentType<IFilterInputProps<T>>\r\n const MenuComponent = configs.MenuComponent as ComponentType<IFilterMenuProps<T>>\r\n const SummaryComponent = configs.SummaryComponent as ComponentType<IFilterSummaryProps<T>>\r\n const SortComponent = configs.SortComponent as ComponentType<IFilterSortProps<T>>\r\n\r\n const getDefaultFilterState = (): TFilterState<T> => {\r\n return Object.assign({ filterLogic: defaultFilterLogic }, configs.defaultFilterState, props.defaultValue)\r\n }\r\n\r\n const computeInitial = (): IFilterBarState<T> => {\r\n if (props.value) return { filterState: props.value }\r\n return { filterState: getDefaultFilterState() }\r\n }\r\n\r\n const [localState, setLocalState] = useState<IFilterBarState<T>>(computeInitial)\r\n const [isLoading, setIsLoading] = useState<boolean>(false)\r\n const debounceTimer = useRef<number | null>(null)\r\n const pendingStateRef = useRef<TFilterState<T> | null>(null)\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (debounceTimer.current) {\r\n clearTimeout(debounceTimer.current)\r\n debounceTimer.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n // keep local state in sync if controlled\r\n if (props.value) setLocalState({ filterState: props.value })\r\n }, [props.value])\r\n\r\n const handleChange = async (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => {\r\n try {\r\n setLocalState((prev) => ({ filterState: state?.filterState ?? prev.filterState }))\r\n setIsLoading(true)\r\n await fetchDelay(async () => props.onChange?.(filterState), debounceDelay)\r\n setIsLoading(false)\r\n } catch (error) {\r\n setIsLoading(false)\r\n throw error\r\n }\r\n }\r\n\r\n // Action handlers to manipulate filter state\r\n // Debounce or throttle can be added to these handlers if needed to optimize performance for rapid changes\r\n const setFilterState = (state: TFilterState<T>) => {\r\n // store latest requested state\r\n pendingStateRef.current = state\r\n\r\n // If uncontrolled, update UI immediately for responsiveness\r\n if (!props.value) {\r\n setLocalState({ filterState: state })\r\n }\r\n\r\n // debounce actual handler calls so only the last one within delay fires\r\n if (debounceTimer.current) clearTimeout(debounceTimer.current)\r\n debounceTimer.current = window.setTimeout(() => {\r\n const s = pendingStateRef.current as TFilterState<T>\r\n if (props.value) {\r\n handleChange(s)\r\n } else {\r\n handleChange(s, { filterState: s })\r\n }\r\n debounceTimer.current = null\r\n pendingStateRef.current = null\r\n }, debounceDelay)\r\n }\r\n\r\n const contextValue: IFilterBarContext<T> = {\r\n filterState: props.value || localState.filterState,\r\n defaultFilterState: getDefaultFilterState(),\r\n isLoading: isLoading,\r\n setFilterState\r\n }\r\n\r\n const theme = useTheme()\r\n const isSmall = useMediaQuery(theme.breakpoints.down('md'))\r\n\r\n //TODO - add panel: định vị trí, ẩn hiện, trạng thái,...\r\n return (\r\n <Context.Provider value={contextValue}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={props.sx}>\r\n <Box className={filterbarClasses.inner}>\r\n {slots?.before || null}\r\n <div className={filterbarClasses.action}>\r\n <MenuComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <SortComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n <InputComponent slots={{ minimalInput: isSmall, popperProps: { placement: 'bottom-start' } }} />\r\n {slots?.after || null}\r\n </Box>\r\n <Box {...slots?.summaryWrapProps} sx={{ display: 'flex', alignItems: 'center', ...slots?.summaryWrapProps?.sx }}>\r\n {slots?.summaryBefore || null}\r\n <Box sx={{ flex: 1, minWidth: 0 }}>{configs.enableSummary !== false && <SummaryComponent />}</Box>\r\n {slots?.summaryAfter || null}\r\n </Box>\r\n </FilterBarStyled>\r\n </Context.Provider>\r\n )\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner',\r\n action: 'DinoFilterBar-action'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper,\r\n boxSizing: 'border-box'\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n },\r\n [`.${filterbarClasses.action}`]: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","_configs$debounceDela","debounceDelay","InputComponent","configInput","inputConfig","fields","createFilterInput","MenuComponent","configMenu","menuConfig","createFilterMenu","SummaryComponent","enableSummary","configSummary","summaryConfig","createFilterSummary","SortComponent","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","props","_slots$summaryWrapPro","slots","getDefaultFilterState","Object","assign","filterLogic","defaultFilterState","defaultValue","_useState","useState","value","filterState","_useState2","_slicedToArray","localState","setLocalState","_useState3","_useState4","isLoading","setIsLoading","debounceTimer","useRef","pendingStateRef","useEffect","current","clearTimeout","handleChange","_ref","_asyncToGenerator","_regenerator","m","_callee2","state","_t","w","_context2","p","n","prev","_state$filterState","fetchDelay","_callee","_props$onChange","_context","a","onChange","call","v","_x","_x2","apply","this","arguments","contextValue","setFilterState","window","setTimeout","s","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","Box","inner","before","action","popperProps","placement","minimalInput","after","_objectSpread","summaryWrapProps","display","alignItems","summaryBefore","flex","minWidth","summaryAfter","styled","_ref3","_defineProperty","concat","backgroundColor","palette","background","paper","boxSizing","gap","spacing"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as
|
|
1
|
+
import{createClass as e,classCallCheck as t,defineProperty as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createFilterBar as i}from"./index.create.js";import{createLocalFilterBuilder as l}from"./local-filter-builder.js";import{createConvertToGraphQL as s,mapLogic as o,mapSortDirection as a}from"./convert-to-graphql.js";import{isEmptyFilterState as m,removeNullValues as c,isFilterStateEqual as p,setFilterToURL as h,getFilterFromURL as f}from"./helpers.js";import n from"./menu/create-form-field-string.js";import u from"./menu/create-form-field-select.js";import F from"./menu/create-form-field-select-multiple.js";var d=e(function e(){t(this,e),r(this,"createFilterBar",i),r(this,"createConvertToGraphQL",s),r(this,"createLocalFilterBuilder",l),r(this,"createFormFieldString",n),r(this,"createFormFieldSelect",u),r(this,"createFormFieldSelectMultiple",F),r(this,"mapLogic",o),r(this,"mapDirection",a),r(this,"isEmptyFilterState",m),r(this,"removeNullValues",c),r(this,"isFilterStateEqual",p),r(this,"setFilterToURL",h),r(this,"getFilterFromURL",f)}),j=new d;export{d as DinoFilterBar,j as dinoFilterBar};
|
|
2
2
|
//# sourceMappingURL=index.dino.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.dino.js","sources":["../../../src/filter-bar/index.dino.tsx"],"sourcesContent":["import { createFilterBar } from './index.create'\r\nimport { createLocalFilterBuilder } from './local-filter-builder'\r\nimport { createConvertToGraphQL, mapLogic, mapSortDirection } from './convert-to-graphql'\r\nimport { getFilterFromURL, isEmptyFilterState, isFilterStateEqual, removeNullValues, setFilterToURL } from './helpers'\r\n\r\nexport class DinoFilterBar {\r\n createFilterBar = createFilterBar\r\n createConvertToGraphQL = createConvertToGraphQL\r\n createLocalFilterBuilder = createLocalFilterBuilder\r\n\r\n // support\r\n mapLogic = mapLogic\r\n mapDirection = mapSortDirection\r\n\r\n // helpers\r\n isEmptyFilterState = isEmptyFilterState\r\n removeNullValues = removeNullValues\r\n isFilterStateEqual = isFilterStateEqual\r\n setFilterToURL = setFilterToURL\r\n getFilterFromURL = getFilterFromURL\r\n}\r\n\r\nexport const dinoFilterBar = new DinoFilterBar()\r\n"],"names":["DinoFilterBar","_createClass","_classCallCheck","_defineProperty","createFilterBar","createConvertToGraphQL","createLocalFilterBuilder","mapLogic","mapSortDirection","isEmptyFilterState","removeNullValues","isFilterStateEqual","setFilterToURL","getFilterFromURL","dinoFilterBar"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.dino.js","sources":["../../../src/filter-bar/index.dino.tsx"],"sourcesContent":["import { createFilterBar } from './index.create'\r\nimport { createLocalFilterBuilder } from './local-filter-builder'\r\nimport { createConvertToGraphQL, mapLogic, mapSortDirection } from './convert-to-graphql'\r\nimport { getFilterFromURL, isEmptyFilterState, isFilterStateEqual, removeNullValues, setFilterToURL } from './helpers'\r\nimport createFormFieldString from './menu/create-form-field-string'\r\nimport createFormFieldSelect from './menu/create-form-field-select'\r\nimport createFormFieldSelectMultiple from './menu/create-form-field-select-multiple'\r\n\r\nexport class DinoFilterBar {\r\n createFilterBar = createFilterBar\r\n createConvertToGraphQL = createConvertToGraphQL\r\n createLocalFilterBuilder = createLocalFilterBuilder\r\n\r\n // Form fields\r\n createFormFieldString = createFormFieldString\r\n createFormFieldSelect = createFormFieldSelect\r\n createFormFieldSelectMultiple = createFormFieldSelectMultiple\r\n\r\n // support\r\n mapLogic = mapLogic\r\n mapDirection = mapSortDirection\r\n\r\n // helpers\r\n isEmptyFilterState = isEmptyFilterState\r\n removeNullValues = removeNullValues\r\n isFilterStateEqual = isFilterStateEqual\r\n setFilterToURL = setFilterToURL\r\n getFilterFromURL = getFilterFromURL\r\n}\r\n\r\nexport const dinoFilterBar = new DinoFilterBar()\r\n"],"names":["DinoFilterBar","_createClass","_classCallCheck","_defineProperty","createFilterBar","createConvertToGraphQL","createLocalFilterBuilder","createFormFieldString","createFormFieldSelect","createFormFieldSelectMultiple","mapLogic","mapSortDirection","isEmptyFilterState","removeNullValues","isFilterStateEqual","setFilterToURL","getFilterFromURL","dinoFilterBar"],"mappings":"ynBAQA,IAAaA,EAAaC,EAAA,SAAAD,IAAAE,OAAAF,GAAAG,yBACNC,GAAeD,gCACRE,GAAsBF,kCACpBG,GAE3BH,+BACwBI,GAAqBJ,+BACrBK,GAAqBL,uCACbM,GAEhCN,kBACWO,GAAQP,sBACJQ,GAEfR,4BACqBS,GAAkBT,0BACpBU,GAAgBV,4BACdW,GAAkBX,wBACtBY,GAAcZ,0BACZa,EAAgB,GAGxBC,EAAgB,IAAIjB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defineProperty as e,slicedToArray as l,toConsumableArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,jsxs as o}from"react/jsx-runtime";import{useMemo as r,useState as t}from"react";import{styled as a,formGroupClasses as u,FormGroup as s,FormControlLabel as c,Checkbox as v,Button as d,Box as m}from"@mui/material";import{createChipViewers as f}from"../components/chip-viewer.js";import{PopperContent as p,PopperBody as b,PopperFooter as g}from"../components/popper-custom.js";import{ButtonBack as h,ChipDark as y,FilterLogicToggle as C}from"../components/ui.units.js";import{getErrorMessage as x}from"../../form/helpers.js";function j(a){var u=f(),j=(a||{}).options,A=void 0===j?[]:j;return function(f){var j,z=r(function(){return Object.assign({},f.currentConfig,null==a?void 0:a.config)},[null==a?void 0:a.config,f.currentConfig]),S=f.value,B=void 0===S?{values:[],logic:"or"}:S,R=t(B.logic),T=l(R,2),V=T[0],w=T[1],F=null!==(j=null==z?void 0:z.label)&&void 0!==j?j:z.field.toString(),I=r(function(){var e=Array.isArray(B.values)?B.values:[B.values];return A.filter(function(l){return e.includes(l.value)}).map(function(e){return e.value})},[]),L=t(I),N=l(L,2),O=N[0],P=N[1],_=t({}),D=l(_,2),E=D[0],H=D[1],M=function(e){f.onSubmit(z.field,e,z)},q=x(E,z.field),G=r(function(){var e=Array.isArray(B.values)?B.values:[B.values];return{field:z.field,items:e.map(function(e){return{value:e}})}},[z.field,B]),J=[];return f.isLoading&&J.push("disabled"),n(k,{className:J.join(" "),noValidate:!0,onSubmit:function(l){var i;l.preventDefault();var n=e({},z.field,O),o=null===(i=f.validator)||void 0===i?void 0:i.run(n);(H(o||{}),o&&0!==Object.keys(o).length)||M({values:O,logic:V})},children:o(p,{title:"Filter by ".concat(F),onClose:f.onClose,slots:{beforeTitle:n(h,{size:"small",onClick:f.onBack}),afterTitle:z.singleValue?n(y,{sx:{ml:1.5},size:"small",label:"Last value only"}):!B.values||B.values.length<2?null:n(C,{sx:{ml:1},value:V,onChange:function(e,l){return function(e){w(e);var l={values:B.values,logic:e};M(l)}(l)}})},children:[o(b,{children:[n(u,{sx:{mb:1,borderBottom:"none!important"},label:"Applied",placement:"horizontal",enableMinimalesticView:!0,value:G,onRemove:f.onRemove}),n(s,{className:q.error?"error":"",children:A.map(function(e,l){var o,r=O.includes(e.value);return n(c,{value:e.value,label:null!==(o=e.label)&&void 0!==o?o:e.value,control:n(v,{name:z.field.toString(),checked:r,onChange:function(l){return n=e.value,o=l.target.checked,void P(function(e){return o?[].concat(i(e),[n]):e.filter(function(e){return e!==n})});var n,o}})},e.value.toString()+l)})})]}),o(g,{children:[n(d,{size:"small",color:"error",variant:"text",disabled:!B.values||0===B.values.length,onClick:function(){var e;null===(e=f.onRemoveField)||void 0===e||e.call(f,z.field)},children:"Clear All"}),n(m,{sx:{flex:1}}),n(d,{size:"small",color:"inherit",variant:"text",onClick:f.onClose,children:"Cancel"}),n(d,{size:"small",type:"submit",color:"primary",variant:"contained",children:"Apply"})]})]})})}}var k=a("form")(e({position:"relative","&::after":{content:'""',display:"block",position:"absolute",inset:0,backgroundColor:"rgba(0, 0, 0, 0.2)",filter:"blur(2px)",zIndex:-1,opacity:0,transition:"opacity 0.3s",visibility:"hidden"},"&.disabled":{pointerEvents:"none","&::after":{zIndex:1,opacity:1,visibility:"visible"}}},".".concat(u.root),{}));export{j as default};
|
|
2
|
+
//# sourceMappingURL=create-form-field-select-multiple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-form-field-select-multiple.js","sources":["../../../../src/filter-bar/menu/create-form-field-select-multiple.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { Box, Button, Checkbox, FormControlLabel, FormGroup, formGroupClasses, styled } from '@mui/material'\r\nimport { createChipViewers, TChipViewerGroup } from '../components/chip-viewer'\r\nimport { PopperBody, PopperContent, PopperFooter } from '../components/popper-custom'\r\nimport { ButtonBack, ChipDark, FilterLogicToggle } from '../components/ui.units'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IPartialError } from '../../form/validator'\r\nimport type { IFieldSelectOption } from './create-form-field-select'\r\nimport type { TFieldModelValid, TFieldValid, TFieldValue, TLogic } from '../types'\r\nimport type { IFieldMenuConfig, IFilterMenuFormProps } from './types'\r\nimport { getErrorMessage } from '../../form'\r\n\r\nexport interface IFormFieldSelectMultipleProps<T> extends IFilterMenuFormProps<T> {}\r\n\r\nexport interface IFormFieldSelectMultipleParam<T> {\r\n /** Optional configuration for the form field */\r\n config?: IFieldMenuConfig<T>\r\n /** List of options for the select field */\r\n options: IFieldSelectOption[]\r\n}\r\n\r\nfunction createFormFieldSelectMultiple<T>(params?: IFormFieldSelectMultipleParam<T>) {\r\n const ChipViewers = createChipViewers<T>()\r\n const { options = [] } = params || {}\r\n\r\n const FormFieldSelectMultiple: FC<IFormFieldSelectMultipleProps<T>> = (props) => {\r\n /** Merge `props.currentConfig` with `params.config` (if provided).\r\n * Fields from `params.config` override the corresponding keys in `props.currentConfig`.\r\n * Any keys not present in `params.config` are preserved from `props.currentConfig`.\r\n */\r\n const mergedConfig = useMemo(() => Object.assign({}, props.currentConfig, params?.config), [params?.config, props.currentConfig])\r\n\r\n const { value = { values: [], logic: 'or' } } = props\r\n const [filterLogic, setFilterLogic] = useState<TLogic>(value.logic!)\r\n\r\n const label = mergedConfig?.label ?? mergedConfig.field.toString()\r\n\r\n // Track checked values as controlled state to avoid the uncontrolled→controlled MUI warning\r\n const initialChecked = useMemo<TFieldValid[]>(() => {\r\n const values = Array.isArray(value.values) ? value.values : [value.values]\r\n return options.filter((opt) => values.includes(opt.value)).map((opt) => opt.value)\r\n }, [])\r\n const [checkedValues, setCheckedValues] = useState<TFieldValid[]>(initialChecked)\r\n\r\n const [errorData, setErrorData] = useState<IPartialError<TFieldModelValid<T>>>({})\r\n\r\n const handleCheckboxChange = (optionValue: TFieldValid, checked: boolean) => {\r\n setCheckedValues((prev) => (checked ? [...prev, optionValue] : prev.filter((v) => v !== optionValue)))\r\n }\r\n\r\n const handleSubmit = (newValue: TFieldValue) => {\r\n props.onSubmit(mergedConfig.field, newValue, mergedConfig)\r\n }\r\n\r\n const handleSubmitForm = (event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n const obj = { [mergedConfig.field]: checkedValues } as Partial<TFieldModelValid<T>>\r\n let errorData = props.validator?.run(obj) as IPartialError<TFieldModelValid<T>>\r\n\r\n setErrorData(errorData || {})\r\n\r\n if (!errorData || Object.keys(errorData).length === 0) {\r\n const newValue: TFieldValue = { values: checkedValues, logic: filterLogic }\r\n handleSubmit(newValue)\r\n }\r\n }\r\n\r\n const errorResult = getErrorMessage(errorData, mergedConfig.field)\r\n const filterViewerValue = useMemo<TChipViewerGroup<T>>(() => {\r\n const items = Array.isArray(value.values) ? value.values : [value.values]\r\n return { field: mergedConfig.field, items: items.map((v) => ({ value: v })) }\r\n }, [mergedConfig.field, value])\r\n\r\n const handleChangeLogic = (newLogic: TLogic) => {\r\n setFilterLogic(newLogic)\r\n const newValue: TFieldValue = { values: value.values, logic: newLogic }\r\n handleSubmit(newValue)\r\n }\r\n\r\n const handleClearAll = () => {\r\n props.onRemoveField?.(mergedConfig.field)\r\n }\r\n\r\n const renderAfterTitle = () => {\r\n if (mergedConfig.singleValue) return <ChipDark sx={{ ml: 1.5 }} size='small' label='Last value only' />\r\n if (!value.values || value.values.length < 2) return null\r\n return <FilterLogicToggle sx={{ ml: 1 }} value={filterLogic} onChange={(_, nVal) => handleChangeLogic(nVal)} />\r\n }\r\n\r\n const rootClasses: string[] = []\r\n if (props.isLoading) rootClasses.push('disabled')\r\n\r\n return (\r\n <RootStyled className={rootClasses.join(' ')} noValidate onSubmit={handleSubmitForm}>\r\n <PopperContent\r\n title={`Filter by ${label}`}\r\n onClose={props.onClose}\r\n slots={{\r\n beforeTitle: <ButtonBack size='small' onClick={props.onBack} />,\r\n afterTitle: renderAfterTitle()\r\n }}\r\n >\r\n <PopperBody>\r\n <ChipViewers\r\n sx={{ mb: 1, borderBottom: 'none!important' }}\r\n label='Applied'\r\n placement='horizontal'\r\n enableMinimalesticView\r\n value={filterViewerValue}\r\n onRemove={props.onRemove}\r\n />\r\n <FormGroup className={errorResult.error ? 'error' : ''}>\r\n {options.map((x, i) => {\r\n const isChecked = checkedValues.includes(x.value as TFieldValid)\r\n return (\r\n <FormControlLabel\r\n key={x.value.toString() + i}\r\n value={x.value}\r\n label={x.label ?? x.value}\r\n control={\r\n <Checkbox\r\n name={mergedConfig.field.toString()}\r\n checked={isChecked}\r\n onChange={(e) => handleCheckboxChange(x.value as TFieldValid, e.target.checked)}\r\n />\r\n }\r\n />\r\n )\r\n })}\r\n </FormGroup>\r\n </PopperBody>\r\n <PopperFooter>\r\n <Button size='small' color='error' variant='text' disabled={!value.values || value.values.length === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n <Box sx={{ flex: 1 }} />\r\n <Button size='small' color='inherit' variant='text' onClick={props.onClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' type='submit' color='primary' variant='contained'>\r\n Apply\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n </RootStyled>\r\n )\r\n }\r\n\r\n return FormFieldSelectMultiple\r\n}\r\n\r\nexport default createFormFieldSelectMultiple\r\n\r\nconst RootStyled = styled('form')({\r\n position: 'relative',\r\n '&::after': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n filter: 'blur(2px)',\r\n zIndex: -1,\r\n opacity: 0,\r\n transition: 'opacity 0.3s',\r\n visibility: 'hidden'\r\n },\r\n '&.disabled': {\r\n pointerEvents: 'none',\r\n '&::after': {\r\n zIndex: 1,\r\n opacity: 1,\r\n visibility: 'visible'\r\n }\r\n },\r\n [`.${formGroupClasses.root}`]: {}\r\n})\r\n"],"names":["createFormFieldSelectMultiple","params","ChipViewers","createChipViewers","_ref$options","options","props","_mergedConfig$label","mergedConfig","useMemo","Object","assign","currentConfig","config","_props$value","value","values","logic","_useState","useState","_useState2","_slicedToArray","filterLogic","setFilterLogic","label","field","toString","initialChecked","Array","isArray","filter","opt","includes","map","_useState3","_useState4","checkedValues","setCheckedValues","_useState5","_useState6","errorData","setErrorData","handleSubmit","newValue","onSubmit","errorResult","getErrorMessage","filterViewerValue","items","v","rootClasses","isLoading","push","_jsx","RootStyled","className","join","noValidate","event","_props$validator","preventDefault","obj","_defineProperty","validator","run","keys","length","children","_jsxs","PopperContent","title","concat","onClose","slots","beforeTitle","ButtonBack","size","onClick","onBack","afterTitle","singleValue","ChipDark","sx","ml","FilterLogicToggle","onChange","_","nVal","newLogic","handleChangeLogic","PopperBody","mb","borderBottom","placement","enableMinimalesticView","onRemove","FormGroup","error","x","i","_x$label","isChecked","FormControlLabel","control","Checkbox","name","checked","e","optionValue","target","prev","_toConsumableArray","PopperFooter","Button","color","variant","disabled","_props$onRemoveField","onRemoveField","call","Box","flex","type","styled","position","content","display","inset","backgroundColor","zIndex","opacity","transition","visibility","pointerEvents","formGroupClasses","root"],"mappings":"qpBAyBA,SAASA,EAAiCC,GACxC,IAAMC,EAAcC,IACiBC,GAAZH,GAAU,CAAE,GAA7BI,QAAAA,OAAU,IAAHD,EAAG,GAAEA,EA6HpB,OA3HsE,SAACE,GAAS,IAAAC,EAKxEC,EAAeC,EAAQ,WAAA,OAAMC,OAAOC,OAAO,GAAIL,EAAMM,cAAeX,eAAAA,EAAQY,OAAO,EAAE,CAACZ,aAAAA,EAAAA,EAAQY,OAAQP,EAAMM,gBAElHE,EAAgDR,EAAxCS,MAAAA,OAAQ,IAAHD,EAAG,CAAEE,OAAQ,GAAIC,MAAO,MAAMH,EAC3CI,EAAsCC,EAAiBJ,EAAME,OAAOG,EAAAC,EAAAH,EAAA,GAA7DI,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAE5BI,UAAKjB,EAAGC,aAAAA,EAAAA,EAAcgB,aAAK,IAAAjB,EAAAA,EAAIC,EAAaiB,MAAMC,WAGlDC,EAAiBlB,EAAuB,WAC5C,IAAMO,EAASY,MAAMC,QAAQd,EAAMC,QAAUD,EAAMC,OAAS,CAACD,EAAMC,QACnE,OAAOX,EAAQyB,OAAO,SAACC,GAAG,OAAKf,EAAOgB,SAASD,EAAIhB,MAAM,GAAEkB,IAAI,SAACF,GAAG,OAAKA,EAAIhB,OAC7E,EAAE,IACHmB,EAA0Cf,EAAwBQ,GAAeQ,EAAAd,EAAAa,EAAA,GAA1EE,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAEtCG,EAAkCnB,EAA6C,IAAGoB,EAAAlB,EAAAiB,EAAA,GAA3EE,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAMxBG,EAAe,SAACC,GACpBrC,EAAMsC,SAASpC,EAAaiB,MAAOkB,EAAUnC,EAC9C,EAeKqC,EAAcC,EAAgBN,EAAWhC,EAAaiB,OACtDsB,EAAoBtC,EAA6B,WACrD,IAAMuC,EAAQpB,MAAMC,QAAQd,EAAMC,QAAUD,EAAMC,OAAS,CAACD,EAAMC,QAClE,MAAO,CAAES,MAAOjB,EAAaiB,MAAOuB,MAAOA,EAAMf,IAAI,SAACgB,GAAC,MAAM,CAAElC,MAAOkC,EAAI,GAC3E,EAAE,CAACzC,EAAaiB,MAAOV,IAkBlBmC,EAAwB,GAG9B,OAFI5C,EAAM6C,WAAWD,EAAYE,KAAK,YAGpCC,EAACC,EAAU,CAACC,UAAWL,EAAYM,KAAK,KAAMC,cAAWb,SAvClC,SAACc,GAA2C,IAAAC,EACnED,EAAME,iBACN,IAAMC,EAAGC,EAAA,CAAA,EAAMtD,EAAaiB,MAAQW,GAChCI,EAA2BmB,QAAlBA,EAAGrD,EAAMyD,qBAASJ,SAAfA,EAAiBK,IAAIH,IAErCpB,EAAaD,GAAa,IAErBA,GAA+C,IAAlC9B,OAAOuD,KAAKzB,GAAW0B,SAEvCxB,EAD8B,CAAE1B,OAAQoB,EAAenB,MAAOK,GAGjE,EA4BoF6C,SACjFC,EAACC,EAAa,CACZC,MAAKC,aAAAA,OAAe/C,GACpBgD,QAASlE,EAAMkE,QACfC,MAAO,CACLC,YAAarB,EAACsB,EAAU,CAACC,KAAK,QAAQC,QAASvE,EAAMwE,SACrDC,WAfFvE,EAAawE,YAAoB3B,EAAC4B,EAAQ,CAACC,GAAI,CAAEC,GAAI,KAAOP,KAAK,QAAQpD,MAAM,qBAC9ET,EAAMC,QAAUD,EAAMC,OAAOkD,OAAS,EAAU,KAC9Cb,EAAC+B,EAAkB,CAAAF,GAAI,CAAEC,GAAI,GAAKpE,MAAOO,EAAa+D,SAAU,SAACC,EAAGC,GAAI,OAbvD,SAACC,GACzBjE,EAAeiE,GACf,IAAM7C,EAAwB,CAAE3B,OAAQD,EAAMC,OAAQC,MAAOuE,GAC7D9C,EAAaC,EACd,CASqF8C,CAAkBF,EAAK,KActGpB,SAAA,CAEDC,EAACsB,EACC,CAAAvB,SAAA,CAAAd,EAACnD,EAAW,CACVgF,GAAI,CAAES,GAAI,EAAGC,aAAc,kBAC3BpE,MAAM,UACNqE,UAAU,aACVC,wBACA,EAAA/E,MAAOgC,EACPgD,SAAUzF,EAAMyF,WAElB1C,EAAC2C,EAAS,CAACzC,UAAWV,EAAYoD,MAAQ,QAAU,YACjD5F,EAAQ4B,IAAI,SAACiE,EAAGC,GAAK,IAAAC,EACdC,EAAYjE,EAAcJ,SAASkE,EAAEnF,OAC3C,OACEsC,EAACiD,EAAgB,CAEfvF,MAAOmF,EAAEnF,MACTS,MAAc4E,QAATA,EAAEF,EAAE1E,aAAK4E,IAAAA,EAAAA,EAAIF,EAAEnF,MACpBwF,QACElD,EAACmD,EAAQ,CACPC,KAAMjG,EAAaiB,MAAMC,WACzBgF,QAASL,EACThB,SAAU,SAACsB,GAAC,OA7EFC,EA6E4BV,EAAEnF,MA7EJ2F,EA6E0BC,EAAEE,OAAOH,aA5EzFrE,EAAiB,SAACyE,GAAI,OAAMJ,EAAO,GAAAnC,OAAAwC,EAAOD,GAAMF,CAAAA,IAAeE,EAAKhF,OAAO,SAACmB,GAAC,OAAKA,IAAM2D,GAAY,GADzE,IAACA,EAA0BF,CA6E2C,KAP9ER,EAAEnF,MAAMW,WAAayE,EAY/B,QAGL/B,EAAC4C,EAAY,CAAA7C,SAAA,CACXd,EAAC4D,EAAM,CAACrC,KAAK,QAAQsC,MAAM,QAAQC,QAAQ,OAAOC,UAAWrG,EAAMC,QAAkC,IAAxBD,EAAMC,OAAOkD,OAAcW,QArDzF,WAAK,IAAAwC,UAC1BA,EAAA/G,EAAMgH,qBAAa,IAAAD,GAAnBA,EAAAE,KAAAjH,EAAsBE,EAAaiB,MACpC,EAqDgB0C,SAAA,cACTd,EAACmE,EAAG,CAACtC,GAAI,CAAEuC,KAAM,KACjBpE,EAAC4D,EAAO,CAAArC,KAAK,QAAQsC,MAAM,UAAUC,QAAQ,OAAOtC,QAASvE,EAAMkE,QAAOL,SAAA,WAG1Ed,EAAC4D,GAAOrC,KAAK,QAAQ8C,KAAK,SAASR,MAAM,UAAUC,QAAQ,sCAOpE,CAGH,CAIA,IAAM7D,EAAaqE,EAAO,OAAPA,CAAc7D,EAAA,CAC/B8D,SAAU,WACV,WAAY,CACVC,QAAS,KACTC,QAAS,QACTF,SAAU,WACVG,MAAO,EACPC,gBAAiB,qBACjBlG,OAAQ,YACRmG,QAAU,EACVC,QAAS,EACTC,WAAY,eACZC,WAAY,UAEd,aAAc,CACZC,cAAe,OACf,WAAY,CACVJ,OAAQ,EACRC,QAAS,EACTE,WAAY,aAEf7D,IAAAA,OACI+D,EAAiBC,MAAS,CAAE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defineProperty as e,slicedToArray as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as r}from"react/jsx-runtime";import{useMemo as i,useState as n}from"react";import{styled as a,radioGroupClasses as t,RadioGroup as s,FormControlLabel as u,Typography as c,Radio as m,Button as v,Box as d}from"@mui/material";import{PopperContent as f,PopperBody as p,PopperFooter as b}from"../components/popper-custom.js";import{getErrorMessage as g,convertFormDataToJson as h}from"../../form/helpers.js";import{createChipViewers as y}from"../components/chip-viewer.js";import{ButtonBack as x,ChipDark as C,FilterLogicToggle as j}from"../components/ui.units.js";function z(e){var a=y(),t=e.options;return function(y){var z,A=i(function(){return Object.assign({},y.currentConfig,null==e?void 0:e.config)},[null==e?void 0:e.config,y.currentConfig]),F=y.value,S=void 0===F?{values:[],logic:"or"}:F,L=n(S.logic),M=o(L,2),R=M[0],T=M[1],w=null!==(z=null==A?void 0:A.label)&&void 0!==z?z:A.field.toString(),B=n({}),V=o(B,2),D=V[0],I=V[1],N=function(e){y.onSubmit(A.field,e,A)},O=g(D,A.field),P=i(function(){var e=Array.isArray(S.values)?S.values:[S.values];return{field:A.field,items:e.map(function(e){return{value:e}})}},[A.field,S]),_=[];return y.isLoading&&_.push("disabled"),l(k,{className:_.join(" "),noValidate:!0,onSubmit:function(e){var o;e.preventDefault();var l=new FormData(e.currentTarget),r=h(l),i=null===(o=y.validator)||void 0===o?void 0:o.run(r);if(I(i||{}),!i||0===Object.keys(i).length){var n=A.field,a=Array.isArray(r[n])?r[n]:[r[n]];N({values:a,logic:R})}},children:r(f,{title:"Filter by ".concat(w),onClose:y.onClose,slots:{beforeTitle:l(x,{size:"small",onClick:y.onBack}),afterTitle:A.singleValue?l(C,{sx:{ml:1.5},size:"small",label:"Last value only"}):!S.values||S.values.length<2?null:l(j,{sx:{ml:1},value:R,onChange:function(e,o){return function(e){T(e);var o={values:S.values,logic:e};N(o)}(o)}})},children:[r(p,{children:[l(a,{sx:{mb:1,borderBottom:"none!important"},label:"Applied",placement:"horizontal",enableMinimalesticView:!0,value:P,onRemove:y.onRemove}),l(s,{sx:{mx:-1},name:A.field.toString(),className:O.error?"error":"",children:t.map(function(e,o){var r;return l(u,{value:e.value,control:l(m,{size:"small"}),label:l(c,{variant:"body2",children:null!==(r=e.label)&&void 0!==r?r:e.value})},e.value.toString()+o)})}),O.error&&l(c,{variant:"caption",color:"error",sx:{mt:.5},children:O.message})]}),r(b,{children:[l(v,{size:"small",color:"error",variant:"text",disabled:!S.values||0===S.values.length,onClick:function(){var e;null===(e=y.onRemoveField)||void 0===e||e.call(y,A.field)},children:"Clear All"}),l(d,{sx:{flex:1}}),l(v,{size:"small",color:"inherit",variant:"text",onClick:y.onClose,children:"Cancel"}),l(v,{size:"small",type:"submit",color:"primary",variant:"contained",children:"Apply"})]})]})})}}var k=a("form")(e({position:"relative","&::after":{content:'""',display:"block",position:"absolute",inset:0,backgroundColor:"rgba(0, 0, 0, 0.2)",filter:"blur(2px)",zIndex:-1,opacity:0,transition:"opacity 0.3s",visibility:"hidden"},"&.disabled":{pointerEvents:"none","&::after":{zIndex:1,opacity:1,visibility:"visible"}}},".".concat(t.root),{"&.error .MuiRadio-root":{color:"#d32f2f"},".MuiFormControlLabel-root":{margin:0},".MuiFormControlLabel-root:hover":{backgroundColor:"rgba(25, 118, 210, 0.04)"}}));export{z as default};
|
|
2
|
+
//# sourceMappingURL=create-form-field-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-form-field-select.js","sources":["../../../../src/filter-bar/menu/create-form-field-select.tsx"],"sourcesContent":["import { createRef, FC, useMemo, useState } from 'react'\r\nimport { Box, Button, FormControlLabel, Radio, RadioGroup, radioGroupClasses, styled, Typography } from '@mui/material'\r\nimport { PopperBody, PopperContent, PopperFooter } from '../components/popper-custom'\r\nimport { convertFormDataToJson, getErrorMessage } from '../../form/helpers'\r\nimport { createChipViewers, TChipViewerGroup } from '../components/chip-viewer'\r\nimport { ButtonBack, ChipDark, FilterLogicToggle } from '../components/ui.units'\r\nimport type { IPartialError } from '../../form/validator'\r\nimport type { IFieldMenuConfig, IFilterMenuFormProps } from './types'\r\nimport type { TFieldModelValid, TFieldValid, TFieldValue, TLogic } from '../types'\r\n\r\nexport interface IFormFieldSelectProps<T> extends IFilterMenuFormProps<T> {}\r\n\r\nexport interface IFieldSelectOption {\r\n value: TFieldValid\r\n label?: string\r\n}\r\n\r\nexport interface IFormFieldSelectParams<T> {\r\n /** Optional configuration for the form field */\r\n config?: IFieldMenuConfig<T>\r\n /** List of options for the select field */\r\n options: IFieldSelectOption[]\r\n}\r\n\r\nfunction createFormFieldSelect<T>(params: IFormFieldSelectParams<T>) {\r\n const ChipViewers = createChipViewers<T>()\r\n const { options } = params\r\n\r\n const FormFieldSelect: FC<IFormFieldSelectProps<T>> = (props) => {\r\n /** Merge `props.currentConfig` with `params.config` (if provided).\r\n * Fields from `params.config` override the corresponding keys in `props.currentConfig`.\r\n * Any keys not present in `params.config` are preserved from `props.currentConfig`.\r\n */\r\n const mergedConfig = useMemo(() => Object.assign({}, props.currentConfig, params?.config), [params?.config, props.currentConfig])\r\n\r\n const { value = { values: [], logic: 'or' } } = props\r\n const [filterLogic, setFilterLogic] = useState<TLogic>(value.logic!)\r\n\r\n const label = mergedConfig?.label ?? mergedConfig.field.toString()\r\n\r\n const [errorData, setErrorData] = useState<IPartialError<TFieldModelValid<T>>>({})\r\n const handleSubmit = (newValue: TFieldValue) => {\r\n props.onSubmit(mergedConfig.field, newValue, mergedConfig)\r\n }\r\n\r\n const handleSubmitForm = (event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n const formData = new FormData(event.currentTarget)\r\n const obj = convertFormDataToJson<TFieldModelValid<T>>(formData)\r\n let errorData = props.validator?.run(obj) as IPartialError<TFieldModelValid<T>>\r\n\r\n setErrorData(errorData || {})\r\n\r\n if (!errorData || Object.keys(errorData).length === 0) {\r\n const { field } = mergedConfig\r\n const newValues = (Array.isArray(obj[field]) ? obj[field] : [obj[field]]) as TFieldValid[]\r\n const newValue: TFieldValue = { values: newValues, logic: filterLogic }\r\n handleSubmit(newValue)\r\n }\r\n }\r\n\r\n const errorResult = getErrorMessage(errorData, mergedConfig.field)\r\n const filterViewerValue = useMemo<TChipViewerGroup<T>>(() => {\r\n const items = Array.isArray(value.values) ? value.values : [value.values]\r\n return { field: mergedConfig.field, items: items.map((v) => ({ value: v })) }\r\n }, [mergedConfig.field, value])\r\n\r\n const handleChangeLogic = (newLogic: TLogic) => {\r\n setFilterLogic(newLogic)\r\n const newValue: TFieldValue = { values: value.values, logic: newLogic }\r\n handleSubmit(newValue)\r\n }\r\n\r\n const handleClearAll = () => {\r\n props.onRemoveField?.(mergedConfig.field)\r\n }\r\n\r\n const renderAfterTitle = () => {\r\n if (mergedConfig.singleValue) return <ChipDark sx={{ ml: 1.5 }} size='small' label='Last value only' />\r\n if (!value.values || value.values.length < 2) return null\r\n return <FilterLogicToggle sx={{ ml: 1 }} value={filterLogic} onChange={(_, nVal) => handleChangeLogic(nVal)} />\r\n }\r\n\r\n const rootClasses: string[] = []\r\n if (props.isLoading) rootClasses.push('disabled')\r\n\r\n return (\r\n <RootStyled className={rootClasses.join(' ')} noValidate onSubmit={handleSubmitForm}>\r\n <PopperContent\r\n title={`Filter by ${label}`}\r\n onClose={props.onClose}\r\n slots={{\r\n beforeTitle: <ButtonBack size='small' onClick={props.onBack} />,\r\n afterTitle: renderAfterTitle()\r\n }}\r\n >\r\n <PopperBody>\r\n <ChipViewers\r\n sx={{ mb: 1, borderBottom: 'none!important' }}\r\n label='Applied'\r\n placement='horizontal'\r\n enableMinimalesticView\r\n value={filterViewerValue}\r\n onRemove={props.onRemove}\r\n />\r\n <RadioGroup sx={{ mx: -1 }} name={mergedConfig.field.toString()} className={errorResult.error ? 'error' : ''}>\r\n {options.map((x, i) => (\r\n <FormControlLabel\r\n key={x.value.toString() + i}\r\n value={x.value}\r\n control={<Radio size='small' />}\r\n label={<Typography variant='body2'>{x.label ?? x.value}</Typography>}\r\n />\r\n ))}\r\n </RadioGroup>\r\n {errorResult.error && (\r\n <Typography variant='caption' color='error' sx={{ mt: 0.5 }}>\r\n {errorResult.message}\r\n </Typography>\r\n )}\r\n </PopperBody>\r\n <PopperFooter>\r\n <Button size='small' color='error' variant='text' disabled={!value.values || value.values.length === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n <Box sx={{ flex: 1 }} />\r\n <Button size='small' color='inherit' variant='text' onClick={props.onClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' type='submit' color='primary' variant='contained'>\r\n Apply\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n </RootStyled>\r\n )\r\n }\r\n\r\n return FormFieldSelect\r\n}\r\n\r\nexport default createFormFieldSelect\r\n\r\nconst RootStyled = styled('form')({\r\n position: 'relative',\r\n '&::after': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n filter: 'blur(2px)',\r\n zIndex: -1,\r\n opacity: 0,\r\n transition: 'opacity 0.3s',\r\n visibility: 'hidden'\r\n },\r\n '&.disabled': {\r\n pointerEvents: 'none',\r\n '&::after': {\r\n zIndex: 1,\r\n opacity: 1,\r\n visibility: 'visible'\r\n }\r\n },\r\n [`.${radioGroupClasses.root}`]: {\r\n '&.error .MuiRadio-root': { color: '#d32f2f' },\r\n '.MuiFormControlLabel-root': { margin: 0 },\r\n '.MuiFormControlLabel-root:hover': { backgroundColor: 'rgba(25, 118, 210, 0.04)' }\r\n }\r\n})\r\n"],"names":["createFormFieldSelect","params","ChipViewers","createChipViewers","options","props","_mergedConfig$label","mergedConfig","useMemo","Object","assign","currentConfig","config","_props$value","value","values","logic","_useState","useState","_useState2","_slicedToArray","filterLogic","setFilterLogic","label","field","toString","_useState3","_useState4","errorData","setErrorData","handleSubmit","newValue","onSubmit","errorResult","getErrorMessage","filterViewerValue","items","Array","isArray","map","v","rootClasses","isLoading","push","_jsx","RootStyled","className","join","noValidate","event","_props$validator","preventDefault","formData","FormData","currentTarget","obj","convertFormDataToJson","validator","run","keys","length","newValues","children","_jsxs","PopperContent","title","concat","onClose","slots","beforeTitle","ButtonBack","size","onClick","onBack","afterTitle","singleValue","ChipDark","sx","ml","FilterLogicToggle","onChange","_","nVal","newLogic","handleChangeLogic","PopperBody","mb","borderBottom","placement","enableMinimalesticView","onRemove","RadioGroup","mx","name","error","x","i","_x$label","FormControlLabel","control","Radio","Typography","variant","color","mt","message","PopperFooter","Button","disabled","_props$onRemoveField","onRemoveField","call","Box","flex","type","styled","_defineProperty","position","content","display","inset","backgroundColor","filter","zIndex","opacity","transition","visibility","pointerEvents","radioGroupClasses","root","margin"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{slicedToArray as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as i}from"react/jsx-runtime";import{useMemo as r,useState as o,createRef as n}from"react";import{styled as t,TextField as a,Button as s,Box as u}from"@mui/material";import{createChipViewers as c}from"../components/chip-viewer.js";import{getErrorMessage as m,convertFormDataToJson as v}from"../../form/helpers.js";import{ButtonBack as d,ChipDark as p,FilterLogicToggle as f}from"../components/ui.units.js";import{PopperContent as b,PopperBody as g,PopperFooter as h}from"../components/popper-custom.js";function y(t){var y=c();return function(c){var C,j=r(function(){return Object.assign({},c.currentConfig,null==t?void 0:t.config)},[null==t?void 0:t.config,c.currentConfig]),z=n(),A=c.value,k=void 0===A?{values:[],logic:"or"}:A,T=o(k.logic),B=e(T,2),F=B[0],R=B[1],S=null!==(C=null==j?void 0:j.label)&&void 0!==C?C:j.field.toString(),w=o({}),I=e(w,2),V=I[0],D=I[1],E=function(e){c.onSubmit(j.field,e,j)},H=m(V,j.field),L=r(function(){var e=Array.isArray(k.values)?k.values:[k.values];return{field:j.field,items:e.map(function(e){return{value:e}})}},[j.field,k]),M=[];return c.isLoading&&M.push("disabled"),l(x,{className:M.join(" "),noValidate:!0,onSubmit:function(e){var l;e.preventDefault(),e.stopPropagation();var i=new FormData(e.currentTarget),r=v(i),o=null===(l=c.validator)||void 0===l?void 0:l.run(r);if(D(o||{}),!o||0===Object.keys(o).length){var n=j.field,t=Array.isArray(r[n])?r[n]:[r[n]];E({values:t,logic:F}),z.current&&(z.current.blur(),z.current.value="")}},children:i(b,{title:"Filter by ".concat(S),onClose:c.onClose,slots:{beforeTitle:l(d,{size:"small",onClick:c.onBack}),afterTitle:j.singleValue?l(p,{sx:{ml:1.5},size:"small",label:"Last value only"}):!k.values||k.values.length<2?null:l(f,{sx:{ml:1},value:F,onChange:function(e,l){return function(e){R(e);var l={values:k.values,logic:e};E(l)}(l)}})},children:[i(g,{children:[l(y,{sx:{mb:1,borderBottom:"none!important"},label:"Applied",placement:"horizontal",enableMinimalesticView:!0,value:L,onRemove:c.onRemove}),l(a,{inputRef:z,autoFocus:!0,name:j.field.toString(),size:"small",fullWidth:!0,placeholder:"Enter value",error:H.error,helperText:H.message,sx:{".MuiInputBase-root":{minHeight:"42px"}}})]}),i(h,{children:[l(s,{size:"small",color:"error",variant:"text",disabled:!k.values||0===k.values.length,onClick:function(){var e;null===(e=c.onRemoveField)||void 0===e||e.call(c,j.field)},children:"Clear All"}),l(u,{sx:{flex:1}}),l(s,{size:"small",color:"inherit",variant:"text",onClick:c.onClose,children:"Cancel"}),l(s,{size:"small",type:"submit",color:"primary",variant:"contained",children:"Apply"})]})]})})}}var x=t("form")({position:"relative","&::after":{content:'""',display:"block",position:"absolute",inset:0,backgroundColor:"rgba(0, 0, 0, 0.2)",filter:"blur(2px)",zIndex:-1,opacity:0,transition:"opacity 0.3s",visibility:"hidden"},"&.disabled":{pointerEvents:"none","&::after":{zIndex:1,opacity:1,visibility:"visible"}}});export{y as default};
|
|
2
|
+
//# sourceMappingURL=create-form-field-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-form-field-string.js","sources":["../../../../src/filter-bar/menu/create-form-field-string.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRef, useMemo, useState } from 'react'\r\nimport { Box, Button, styled, TextField } from '@mui/material'\r\nimport { createChipViewers } from '../components/chip-viewer'\r\nimport { convertFormDataToJson, getErrorMessage } from '../../form/helpers'\r\nimport { ButtonBack, ChipDark, FilterLogicToggle } from '../components/ui.units'\r\nimport { PopperBody, PopperContent, PopperFooter } from '../components/popper-custom'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IPartialError } from '../../form/validator'\r\nimport type { TChipViewerGroup } from '../components/chip-viewer'\r\nimport type { IFieldMenuConfig, IFilterMenuFormProps } from './types'\r\nimport type { TFieldModelValid, TFieldValid, TFieldValue, TLogic } from '../types'\r\n\r\nexport interface IFormFieldStringProps<T> extends IFilterMenuFormProps<T> {}\r\n\r\nexport interface IFormFieldStringParam<T> {\r\n /** Optional configuration for the form field */\r\n config?: IFieldMenuConfig<T>\r\n}\r\n\r\nfunction createFormFieldString<T>(params?: IFormFieldStringParam<T>) {\r\n const ChipViewers = createChipViewers<T>()\r\n\r\n const FormFieldString: FC<IFormFieldStringProps<T>> = (props) => {\r\n /** Merge `props.currentConfig` with `params.config` (if provided).\r\n * Fields from `params.config` override the corresponding keys in `props.currentConfig`.\r\n * Any keys not present in `params.config` are preserved from `props.currentConfig`.\r\n */\r\n const mergedConfig = useMemo(() => Object.assign({}, props.currentConfig, params?.config), [params?.config, props.currentConfig])\r\n\r\n const refInput = createRef<HTMLInputElement>()\r\n const { value = { values: [], logic: 'or' } } = props\r\n const [filterLogic, setFilterLogic] = useState<TLogic>(value.logic!)\r\n\r\n const label = mergedConfig?.label ?? mergedConfig.field.toString()\r\n\r\n const [errorData, setErrorData] = useState<IPartialError<TFieldModelValid<T>>>({})\r\n\r\n const handleSubmit = (newValue: TFieldValue) => {\r\n props.onSubmit(mergedConfig.field, newValue, mergedConfig)\r\n }\r\n\r\n const handleSubmitForm = (event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault() // Prevent default form submission behavior\r\n event.stopPropagation() // Stop the event from bubbling up to parent elements (like Popper) which might cause it to close prematurely\r\n const formData = new FormData(event.currentTarget)\r\n const obj = convertFormDataToJson<TFieldModelValid<T>>(formData)\r\n let errorData = props.validator?.run(obj) as IPartialError<TFieldModelValid<T>>\r\n\r\n setErrorData(errorData || {})\r\n\r\n if (!errorData || Object.keys(errorData).length === 0) {\r\n const { field } = mergedConfig\r\n const newValues = (Array.isArray(obj[field]) ? obj[field] : [obj[field]]) as TFieldValid[]\r\n const newValue: TFieldValue = { values: newValues, logic: filterLogic }\r\n handleSubmit(newValue)\r\n\r\n if (refInput.current) {\r\n refInput.current.blur()\r\n refInput.current.value = ''\r\n }\r\n }\r\n }\r\n\r\n const error = getErrorMessage(errorData, mergedConfig.field)\r\n\r\n const filterViewerValue = useMemo<TChipViewerGroup<T>>(() => {\r\n const items = Array.isArray(value.values) ? value.values : [value.values]\r\n return { field: mergedConfig.field, items: items.map((v) => ({ value: v })) }\r\n }, [mergedConfig.field, value])\r\n\r\n const handleChangeLogic = (newLogic: TLogic) => {\r\n setFilterLogic(newLogic)\r\n const newValue: TFieldValue = { values: value.values, logic: newLogic }\r\n handleSubmit(newValue)\r\n }\r\n\r\n const handleClearAll = () => {\r\n props.onRemoveField?.(mergedConfig.field)\r\n }\r\n\r\n const renderAfterTitle = () => {\r\n if (mergedConfig.singleValue) return <ChipDark sx={{ ml: 1.5 }} size='small' label='Last value only' />\r\n if (!value.values || value.values.length < 2) return null\r\n return <FilterLogicToggle sx={{ ml: 1 }} value={filterLogic} onChange={(_, nVal) => handleChangeLogic(nVal)} />\r\n }\r\n\r\n const rootClasses: string[] = []\r\n if (props.isLoading) rootClasses.push('disabled')\r\n\r\n return (\r\n <RootStyled className={rootClasses.join(' ')} noValidate onSubmit={handleSubmitForm}>\r\n <PopperContent\r\n title={`Filter by ${label}`}\r\n onClose={props.onClose}\r\n slots={{\r\n beforeTitle: <ButtonBack size='small' onClick={props.onBack} />,\r\n afterTitle: renderAfterTitle()\r\n }}\r\n >\r\n <PopperBody>\r\n <ChipViewers\r\n sx={{ mb: 1, borderBottom: 'none!important' }}\r\n label='Applied'\r\n placement='horizontal'\r\n enableMinimalesticView\r\n value={filterViewerValue}\r\n onRemove={props.onRemove}\r\n />\r\n <TextField\r\n inputRef={refInput}\r\n autoFocus\r\n name={mergedConfig.field.toString()}\r\n size='small'\r\n fullWidth\r\n placeholder='Enter value'\r\n error={error.error}\r\n helperText={error.message}\r\n sx={{ '.MuiInputBase-root': { minHeight: '42px' } }}\r\n />\r\n </PopperBody>\r\n <PopperFooter>\r\n <Button size='small' color='error' variant='text' disabled={!value.values || value.values.length === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n <Box sx={{ flex: 1 }} />\r\n <Button size='small' color='inherit' variant='text' onClick={props.onClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' type='submit' color='primary' variant='contained'>\r\n Apply\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n </RootStyled>\r\n )\r\n }\r\n\r\n return FormFieldString\r\n}\r\n\r\nexport default createFormFieldString\r\n\r\nconst RootStyled = styled('form')({\r\n position: 'relative',\r\n '&::after': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n filter: 'blur(2px)',\r\n zIndex: -1,\r\n opacity: 0,\r\n transition: 'opacity 0.3s',\r\n visibility: 'hidden'\r\n },\r\n '&.disabled': {\r\n pointerEvents: 'none',\r\n '&::after': {\r\n zIndex: 1,\r\n opacity: 1,\r\n visibility: 'visible'\r\n }\r\n }\r\n})\r\n"],"names":["createFormFieldString","params","ChipViewers","createChipViewers","props","_mergedConfig$label","mergedConfig","useMemo","Object","assign","currentConfig","config","refInput","createRef","_props$value","value","values","logic","_useState","useState","_useState2","_slicedToArray","filterLogic","setFilterLogic","label","field","toString","_useState3","_useState4","errorData","setErrorData","handleSubmit","newValue","onSubmit","error","getErrorMessage","filterViewerValue","items","Array","isArray","map","v","rootClasses","isLoading","push","_jsx","RootStyled","className","join","noValidate","event","_props$validator","preventDefault","stopPropagation","formData","FormData","currentTarget","obj","convertFormDataToJson","validator","run","keys","length","newValues","current","blur","children","_jsxs","PopperContent","title","concat","onClose","slots","beforeTitle","ButtonBack","size","onClick","onBack","afterTitle","singleValue","ChipDark","sx","ml","FilterLogicToggle","onChange","_","nVal","newLogic","handleChangeLogic","PopperBody","mb","borderBottom","placement","enableMinimalesticView","onRemove","TextField","inputRef","autoFocus","name","fullWidth","placeholder","helperText","message","minHeight","PopperFooter","Button","color","variant","disabled","_props$onRemoveField","onRemoveField","call","Box","flex","type","styled","position","content","display","inset","backgroundColor","filter","zIndex","opacity","transition","visibility","pointerEvents"],"mappings":"0lBAuBA,SAASA,EAAyBC,GAChC,IAAMC,EAAcC,IAqHpB,OAnHsD,SAACC,GAAS,IAAAC,EAKxDC,EAAeC,EAAQ,WAAA,OAAMC,OAAOC,OAAO,GAAIL,EAAMM,cAAeT,eAAAA,EAAQU,OAAO,EAAE,CAACV,aAAAA,EAAAA,EAAQU,OAAQP,EAAMM,gBAE5GE,EAAWC,IACjBC,EAAgDV,EAAxCW,MAAAA,OAAQ,IAAHD,EAAG,CAAEE,OAAQ,GAAIC,MAAO,MAAMH,EAC3CI,EAAsCC,EAAiBJ,EAAME,OAAOG,EAAAC,EAAAH,EAAA,GAA7DI,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAE5BI,UAAKnB,EAAGC,aAAAA,EAAAA,EAAckB,aAAK,IAAAnB,EAAAA,EAAIC,EAAamB,MAAMC,WAExDC,EAAkCR,EAA6C,IAAGS,EAAAP,EAAAM,EAAA,GAA3EE,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAExBG,EAAe,SAACC,GACpB5B,EAAM6B,SAAS3B,EAAamB,MAAOO,EAAU1B,EAC9C,EAwBK4B,EAAQC,EAAgBN,EAAWvB,EAAamB,OAEhDW,EAAoB7B,EAA6B,WACrD,IAAM8B,EAAQC,MAAMC,QAAQxB,EAAMC,QAAUD,EAAMC,OAAS,CAACD,EAAMC,QAClE,MAAO,CAAES,MAAOnB,EAAamB,MAAOY,MAAOA,EAAMG,IAAI,SAACC,GAAC,MAAM,CAAE1B,MAAO0B,EAAI,GAC3E,EAAE,CAACnC,EAAamB,MAAOV,IAkBlB2B,EAAwB,GAG9B,OAFItC,EAAMuC,WAAWD,EAAYE,KAAK,YAGpCC,EAACC,EAAU,CAACC,UAAWL,EAAYM,KAAK,KAAMC,cAAWhB,SAjDlC,SAACiB,GAA2C,IAAAC,EACnED,EAAME,iBACNF,EAAMG,kBACN,IAAMC,EAAW,IAAIC,SAASL,EAAMM,eAC9BC,EAAMC,EAA2CJ,GACnDzB,EAA2BsB,QAAlBA,EAAG/C,EAAMuD,qBAASR,SAAfA,EAAiBS,IAAIH,GAIrC,GAFA3B,EAAaD,GAAa,KAErBA,GAA+C,IAAlCrB,OAAOqD,KAAKhC,GAAWiC,OAAc,CACrD,IAAQrC,EAAUnB,EAAVmB,MACFsC,EAAazB,MAAMC,QAAQkB,EAAIhC,IAAUgC,EAAIhC,GAAS,CAACgC,EAAIhC,IAEjEM,EAD8B,CAAEf,OAAQ+C,EAAW9C,MAAOK,IAGtDV,EAASoD,UACXpD,EAASoD,QAAQC,OACjBrD,EAASoD,QAAQjD,MAAQ,GAE5B,CACF,EA6BoFmD,SACjFC,EAACC,EAAa,CACZC,MAAKC,aAAAA,OAAe9C,GACpB+C,QAASnE,EAAMmE,QACfC,MAAO,CACLC,YAAa5B,EAAC6B,EAAU,CAACC,KAAK,QAAQC,QAASxE,EAAMyE,SACrDC,WAfFxE,EAAayE,YAAoBlC,EAACmC,EAAQ,CAACC,GAAI,CAAEC,GAAI,KAAOP,KAAK,QAAQnD,MAAM,qBAC9ET,EAAMC,QAAUD,EAAMC,OAAO8C,OAAS,EAAU,KAC9CjB,EAACsC,EAAkB,CAAAF,GAAI,CAAEC,GAAI,GAAKnE,MAAOO,EAAa8D,SAAU,SAACC,EAAGC,GAAI,OAbvD,SAACC,GACzBhE,EAAegE,GACf,IAAMvD,EAAwB,CAAEhB,OAAQD,EAAMC,OAAQC,MAAOsE,GAC7DxD,EAAaC,EACd,CASqFwD,CAAkBF,EAAK,KAgBvGpB,SAAA,CAAAC,EAACsB,EACC,CAAAvB,SAAA,CAAArB,EAAC3C,EACC,CAAA+E,GAAI,CAAES,GAAI,EAAGC,aAAc,kBAC3BnE,MAAM,UACNoE,UAAU,aACVC,wBAAsB,EACtB9E,MAAOqB,EACP0D,SAAU1F,EAAM0F,WAElBjD,EAACkD,EACC,CAAAC,SAAUpF,EACVqF,WACA,EAAAC,KAAM5F,EAAamB,MAAMC,WACzBiD,KAAK,QACLwB,WACA,EAAAC,YAAY,cACZlE,MAAOA,EAAMA,MACbmE,WAAYnE,EAAMoE,QAClBrB,GAAI,CAAE,qBAAsB,CAAEsB,UAAW,cAG7CpC,EAACqC,EACC,CAAAtC,SAAA,CAAArB,EAAC4D,EAAO,CAAA9B,KAAK,QAAQ+B,MAAM,QAAQC,QAAQ,OAAOC,UAAW7F,EAAMC,QAAkC,IAAxBD,EAAMC,OAAO8C,OAAcc,QA7CzF,WAAK,IAAAiC,UAC1BA,EAAAzG,EAAM0G,qBAAa,IAAAD,GAAnBA,EAAAE,KAAA3G,EAAsBE,EAAamB,MACpC,EA2CsIyC,SAAA,cAG/HrB,EAACmE,GAAI/B,GAAI,CAAEgC,KAAM,KACjBpE,EAAC4D,GAAO9B,KAAK,QAAQ+B,MAAM,UAAUC,QAAQ,OAAO/B,QAASxE,EAAMmE,4BAGnE1B,EAAC4D,EAAO,CAAA9B,KAAK,QAAQuC,KAAK,SAASR,MAAM,UAAUC,QAAQ,YAAWzC,SAAA,iBAO/E,CAGH,CAIA,IAAMpB,EAAaqE,EAAO,OAAPA,CAAe,CAChCC,SAAU,WACV,WAAY,CACVC,QAAS,KACTC,QAAS,QACTF,SAAU,WACVG,MAAO,EACPC,gBAAiB,qBACjBC,OAAQ,YACRC,QAAU,EACVC,QAAS,EACTC,WAAY,eACZC,WAAY,UAEd,aAAc,CACZC,cAAe,OACf,WAAY,CACVJ,OAAQ,EACRC,QAAS,EACTE,WAAY"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defineProperty as e,objectWithoutProperties as n,objectSpread2 as r,slicedToArray as t,asyncToGenerator as o,regenerator as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as a}from"react/jsx-runtime";import{useState as u,useContext as c,useMemo as s,createRef as m}from"react";import{styled as d,Box as f,MenuList as p,Tooltip as v,IconButton as h,Badge as b,MenuItem as g,Typography as y,Button as j}from"@mui/material";import F from"@mui/icons-material/FilterList";import C from"@mui/material/ClickAwayListener";import{KeySpecial as k}from"../types.js";import{useFilterActions as I}from"../hooks.js";import{FilterBarContext as x}from"../index.context.js";import{mapSpecialLabel as S,mapSpecialTexts as w}from"../helpers.js";import{SingleRuleValidate as P,FormValidator as R}from"../../form/validator.js";import{PopperCustom as q,PopperContent as T,PopperFooter as A}from"../components/popper-custom.js";import{FilterMenuNoField as B}from"../components/ui.units.js";import O from"./create-form-field-string.js";var M=["fields","validation","enableQuickSearch"];function D(d){var f=L,p=function(e){var t=e.fields,o=e.validation,i=e.enableQuickSearch,l=void 0===i||i,a=n(e,M),u=k.quickSearch,c=r({},t);if(l){var s=c[u],m=null!=s&&s.label?s.label:S[u],d=Object.assign({},c[u],{field:u,label:m,singleValue:!0});c[u]=d}else delete c[u];var f=Object.keys(c),p=f.reduce(function(e,n){var t=c[n];return t?(e[n]=r(r({},t),{},{field:n}),e):e},{}),v=r({},o);return f.forEach(function(e){var n,r,t,o=v[e],i=null!==(n=null!==(r=null==o?void 0:o.label)&&void 0!==r?r:null===(t=c[e])||void 0===t?void 0:t.label)&&void 0!==n?n:e.toString();o?o.Rules.some(function(e){return e.rule===P.Required})||(o.label=i,o.Rules.push({rule:P.Required})):v[e]={Rules:[{rule:P.Required}],label:i}}),r(r({},a),{},{fields:p,validation:v,enableQuickSearch:l})}(d),D=function(n){return Object.keys(n.fields).reduce(function(r,t){var o,i=t,l=null===(o=n.validation)||void 0===o?void 0:o[i];return l&&(r[i]=new R(e({},i,l))),r},{})}(p),V=function(e){var n=e.fields;return Object.keys(n).reduce(function(e,r){var t,o=r,i=n[o];return i&&(e[o]=null!==(t=i.FormComponent)&&void 0!==t?t:O()),e},{})}(p),z=d.quickSearchHint;return function(e){var n=m(),S=u(null),P=t(S,2),R=P[0],O=P[1],M=Boolean(R),L=c(x),E=I(L),H=u(null),_=t(H,2),G=_[0],W=_[1],J=s(function(){var n=d.popperProps,r=d.rootProps;return Object.assign({},{popperProps:n,rootProps:r},e.slots)},[d,e.slots]),K=function(){O(null),setTimeout(function(){W(null)},300)},U=function(){E.clearAllFilters(),K()},X=function(){var e=o(i().m(function e(n,r,t){return i().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return e.a(2);case 1:null!=t&&t.singleValue?E.replaceFilter(n,r,{logic:r.logic}):E.upsertManyFilter(n,r,{logic:r.logic});case 2:return e.a(2)}},e)}));return function(n,r,t){return e.apply(this,arguments)}}(),Y=s(function(){var e=Object.values(p.fields);return Array.from(e)},[p.fields]),Z=E.getTotalCount(),$="".concat(Z," Filter").concat(1!==Z?"s":"");return l(C,{onClickAway:K,children:a(N,r(r({className:f.root},J.rootProps),{},{children:[l(v,{title:$,arrow:!0,placement:"top",children:l(h,{size:"small",ref:n,onClick:function(){W(null),O(n.current)},children:l(b,{badgeContent:Z,color:"primary",invisible:0===Z,children:l(F,{fontSize:"small"})})})}),l(q,r(r({open:M,anchorEl:R,placement:"bottom",transition:!0,disablePortal:!0},J.popperProps),{},{children:function(){if(0===Y.length)return l(B,{onClose:K});var e=G?p.fields[G]:void 0;if(G&&e){var n,t=V[G];if(!t)return null;var o=r({},e);null!=o&&o.FormComponent&&delete o.FormComponent;var i=null===(n=L.filterState.storeFilter)||void 0===n?void 0:n[G];return l(t,{currentConfig:o,value:i,isLoading:L.isLoading,onRemove:E.removeFilterByFieldValue,validator:D[G],onSubmit:X,onClose:K,onRemoveField:function(e){return E.removeFilter(e)},onBack:function(){return W(null)}})}return a(T,{title:"Filter by",onClose:K,children:[l(Q,{className:f.menu,children:Y.map(function(e){var n,r,t=e.field.toString();if(!t)return null;var o=E.getFieldInfo(e.field),i=null!==(n=null==o?void 0:o.values.join(", "))&&void 0!==n?n:"",u=o?o.values.length:0,c=u>0?" (".concat(u,")"):"",s=null!==(r=e.label)&&void 0!==r?r:t.toString(),m=u>0?"Filter by ".concat(s,": ").concat(i):void 0;if(e.field===k.quickSearch){var d=w.qsTooltip;m="function"==typeof z?z(d):null!=z?z:d}return l(g,{className:f.menuItem,sx:{justifyContent:"space-between"},onClick:function(){return n=e.field,void W(n);var n},children:l(v,{title:m,placement:"right",arrow:!0,children:a("div",{className:f.menuItemInner,children:[l(y,{variant:"body2",children:s}),l(y,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:c})]})})},t)})}),l(A,{children:l(j,{color:"error",disabled:0===Z,onClick:U,children:"Clear All"})})]})}()}))]}))})}}var L={root:"DinoFilterMenu-root",menu:"DinoFilterMenu-menu",menuItem:"DinoFilterMenu-menuItem",menuItemInner:"DinoFilterMenu-menuItemInner"},N=d(f)(e({},"&.".concat(L.root),{display:"inline-flex",justifyContent:"center",alignItems:"center",flex:"0 0 auto"})),Q=d(p)(e(e({},".".concat(L.menuItem),{paddingTop:0,paddingBottom:0}),".".concat(L.menuItemInner),{display:"flex",justifyContent:"space-between",alignItems:"center",width:"100%",gap:"4px",paddingTop:"6px",paddingBottom:"6px"}));export{D as createFilterMenu,L as filterMenuClasses};
|
|
2
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +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 { mapSpecialLabel, mapSpecialTexts } from '../helpers'\r\nimport { FormValidator, SingleRuleValidate } from '../../form/validator'\r\nimport { PopperContent, PopperCustom, PopperFooter } from '../components/popper-custom'\r\nimport { FilterMenuNoField } from '../components/ui.units'\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\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\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\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\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 }\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\r\n// styles\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}`]: {\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n },\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"],"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","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 a,callSuper as o,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,
|
|
1
|
+
import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as a,callSuper as o,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 a(this,m),e=o(this,m,[r]),s(e,"refForm",null),s(e,"mapContext",function(){var r=e,t=r.setError,a=r.removeError,o=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:o,removeError:a}}),s(e,"setModelState",function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})}),s(e,"getValidate",function(){var r=new S({});return f(r,null==j?void 0:j.validate,e.props.validate)}),s(e,"setError",function(r,t){var a=s({},r,[{rule:h.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,a)})}),s(e,"removeError",function(r){var a=t({},e.state.messageErrors);Array.isArray(r)?r.forEach(function(r){a[r]&&delete a[r]}):a[r]&&delete a[r],e.setState({messageErrors:a})}),s(e,"clearErrorAll",function(){e.setState({messageErrors:{}})}),s(e,"onSubmit",function(){var r=n(l().m(function r(a){var o,s,n,i,u,m,c,f;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(a.preventDefault(),o=new FormData(a.currentTarget),s=p(o),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,a);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,a=new FormData(e.refForm),o=p(a),s=d(o);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=this;return i(u,t(t({component:"form",ref:function(r){return e.refForm=r},onSubmit:this.onSubmit},null===(r=this.props.slots)||void 0===r?void 0:r.formProps),{},{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};
|
|
2
2
|
//# sourceMappingURL=create.form-base.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,objectWithoutProperties as t,objectSpread2 as n,inherits as r,createClass as l,classCallCheck as o,callSuper as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{
|
|
1
|
+
import{defineProperty as e,objectWithoutProperties as t,objectSpread2 as n,inherits as r,createClass as l,classCallCheck as o,callSuper as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{createRef as a,Component as u}from"react";import{styled as h,Box as p,IconButton as d,Typography as f,Tooltip as m}from"@mui/material";import g from"@mui/icons-material/Fullscreen";import v from"@mui/icons-material/FullscreenExit";import{getErrorMessage as x}from"./helpers.js";import F,{textEditorClasses as C}from"../components/text-editor.js";var y=["children"];function b(t){return function(){function n(t){var r;return o(this,n),r=i(this,n,[t]),e(r,"handleFullscreenChange",function(){r.setState({isFullscreen:!!document.fullscreenElement})}),e(r,"handleFullscreenToggle",function(){r.contentRef.current&&(document.fullscreenElement?document.exitFullscreen():r.contentRef.current.requestFullscreen().catch(function(e){console.error("Error attempting to enable full-screen mode: ".concat(e.message))}))}),e(r,"getWrapClasses",function(){var e=[];return r.state.isFullscreen&&e.push(C.fullscreen),e.join(" ")}),r.state={isFullscreen:!1},r.contentRef=a(),r}return r(n,u),l(n,[{key:"componentDidMount",value:function(){document.addEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"render",value:function(){var e,n,r,l,o,i=this,a=x(this.props.messageErrors,this.props.name),u=null!==(e=null===(n=this.props.name?null===(r=this.props.data)||void 0===r?void 0:r[this.props.name]:"")||void 0===n?void 0:n.toString())&&void 0!==e?e:"";return c(p,{id:t.id,ref:this.contentRef,sx:{backgroundColor:"#fff"},children:[this.state.isFullscreen&&s(j,{children:s(f,{variant:"h4",sx:{fontWeight:600,flex:1,textAlign:"center"},children:t.title})}),c(k,{className:this.getWrapClasses(),children:[s(E,{children:s(m,{title:this.state.isFullscreen?"Exit Fullscreen":"Fullscreen",arrow:!0,children:s(S,{sx:{color:"#06c"},onClick:this.handleFullscreenToggle,children:this.state.isFullscreen?s(v,{}):s(g,{})})})}),s(W,{children:s(F,{defautValue:u,name:null!==(l=null===(o=this.props.name)||void 0===o?void 0:o.toString())&&void 0!==l?l:"",readOnly:this.props.disabled,error:a.error,onBlur:function(){var e,t;i.props.name&&(null===(e=(t=i.props).onBlur)||void 0===e||e.call(t,i.props.name))}})})]})]})}}])}()}var k=h(p)(function(t){var n=t.theme;return e(e({maxWidth:n.breakpoints.values.xl,margin:"0 auto",position:"relative"},"&.".concat(C.fullscreen," .").concat(C.root),{height:"calc(100vh - ".concat(74,"px)")}),"&.".concat(C.fullscreen),{width:"871px"})}),j=h(p)({height:"".concat(64,"px"),display:"flex",justifyContent:"center",alignItems:"center"}),E=h(function(e){var r=e.children,l=t(e,y);return s(p,n(n({},l),{},{children:s(p,{children:r})}))})({position:"sticky",top:"-1px",zIndex:2,"& > div":{height:0,display:"flex",justifyContent:"right",padding:"0 6px"}}),S=h(d)({flex:"0 0 auto",marginTop:"1px",width:"40px",height:"40px"}),W=h(p)({backgroundColor:"#fff",width:"100%","& .ql-container":{fontFamily:'"Roboto", serif',fontSize:"14px"},"& .ql-toolbar":{position:"sticky",top:"-1px",backgroundColor:"#fff",zIndex:1}});export{b as default};
|
|
2
2
|
//# sourceMappingURL=create.text-editor.js.map
|
package/dist/src/form/helpers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{FormValidator as i}from"./validator.js";var o=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter(function(r){return r}).reduce(function(r,n){return r=Object.assign(r,n)},r)},a=function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),u=1;u<t;u++)i[u-1]=arguments[u];if((i=i.filter(function(r){return!!r})).length<1)return e;for(var f=[e].concat(r(i)).filter(function(r){return r}),c=f.reduce(function(e,t){if(!t)return e;var i=Object.keys(t).filter(function(r){return"object"===n(t[r])&&!Array.isArray(t[r])});return e.push.apply(e,r(i)),e},[]),l=o.apply(void 0,[e].concat(r(f.slice(1)))),s=l,v=f.slice(1).filter(function(r){return!!r}),p=function(){var n=c[y];s[n]=a.apply(void 0,[{},s[n]].concat(r(v.map(function(r){return r[n]}))))},y=0;y<c.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},f=function(r){var n=Array.from(r).reduce(function(r,n){return r[n[0]]?Array.isArray(r[n[0]])?r[n[0]].push(n[1]):r[n[0]]=[r[n[0]],n[1]]:r[n[0]]=n[1],r},{});return Object.keys(n).forEach(function(r){var e=n[r];"string"!=typeof e||"true"!==e.toString().toLocaleLowerCase()&&"false"!==e.toString().toLocaleLowerCase()||(n[r]="true"===e.toString().toLocaleLowerCase())}),n},c=function(r){if("string"==typeof r)return r.startsWith("#")&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(r)?r:r.trim();if(Array.isArray(r))return r.map(function(r){return c(r)});if(r instanceof File)return r;if(r instanceof FileList)return r;if(r instanceof Date)return r;if("number"==typeof r||"boolean"==typeof r||null==r)return r;if(r instanceof HTMLElement)return r;if("function"==typeof r)return r;if(r&&"object"===n(r)){var e={};return Object.keys(r).forEach(function(n){e[n]=c(r[n])}),e}return r},l=function(r,n,e,t){var i=t.run(n);if(i){var o=e||{},a=Object.keys(n).filter(function(r){return!!n[r]}).filter(function(r){return n[r]instanceof File&&!!n[r].size});return a.push(r),a.forEach(function(r){i[r]?o[r]=i[r]:delete o[r]}),o}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data,i=(null==t?void 0:t.errors)||t;if(i){var o=Object.keys(n),a={};return o.forEach(function(r){var n=i[r];Array.isArray(n)&&n.length>0&&(a[r]=[{message:n[0]}])}),a}},v=function(r){var n,e=null===(n=r.response)||void 0===n?void 0:n.data,t=(null==e?void 0:e.errors)||e;if(t&&t[""]){var i=t[""];if(Array.isArray(i))return i.filter(function(r){return r&&"string"==typeof r&&""!==r.trim()})}return[]},p=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var o=e.map(function(r){return null==r?void 0:r.configs}).filter(function(r){return!!r}),u=Object.assign.apply(Object,[{}].concat(r(o))),f=function(){var n=Object.keys(u)[c];u[n]=a.apply(void 0,[{}].concat(r(o.map(function(r){return r?r[n]:{Rules:[]}})))),u[n].Rules=o.map(function(r){return r?r[n]:{Rules:[]}}).reduce(function(n,e){var t;return n.push.apply(n,r(null!==(t=null==e?void 0:e.Rules)&&void 0!==t?t:[])),n},[])},c=0;c<Object.keys(u).length;c++)f();return new i(u)},y=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),i=n.filter(function(r){return!e.includes(r)});if(i.length>0)return{valid:!1,message:"Missing required columns: ".concat(i.join(", "))};for(var o=0;o<r.length;o++){var a,u=r[o],f=t(n);try{for(f.s();!(a=f.n()).done;){var c=a.value,l=u[c];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(c.toString(),'" at row ').concat(o+2)}}}catch(r){f.e(r)}finally{f.f()}}return{valid:!0}};export{f as convertFormDataToJson,v as getErrorCommonFromResponse,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,c as trimAllStrings,y as validateCsvModel,p as validateMerge};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as a,classCallCheck as t,callSuper as l,toConsumableArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as i,inherits as r,createClass as a,classCallCheck as t,callSuper as l,toConsumableArray as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Component as d,Fragment as u}from"react";import{styled as p,Box as c}from"@mui/material";import{DataGrid as g}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{TableBaseContext as h}from"./context.js";import{customFilterOperators as f}from"./custom.filter-operators.js";import v,{dinoTableClasses as b}from"./helpers.js";import y from"./toolbar-pannel.js";import{GlobalModal as C,mapGlobalModalContext as P}from"../api-context/global-modal.js";var w=["children"];function S(e){return function(){function p(r){var a;return t(this,p),a=l(this,p,[r]),i(a,"setTableQueryParams",function(e){a.tableQueryParams=m({},a.tableQueryParams,e)}),i(a,"renderWrapContext",function(o){var i=e.disableGlobalModalProvider?u:C;return s(i,{children:P(function(e){return s(h.Provider,{value:{showModal:e.show,closeModal:e.close},children:o})})})}),i(a,"getDataGridProps",function(){var o,i,r,t,l=v.mapInitialState(a.props.query,{columns:{columnVisibilityModel:e.columnVisibilityModel}}),n={getRowId:e.getRowId,initialState:l,columns:a.columns,rows:null!==(o=null===(i=a.props.data)||void 0===i?void 0:i.items)&&void 0!==o?o:[],checkboxSelection:!0,pagination:!0,density:null!==(r=null===(t=a.props.slots)||void 0===t?void 0:t.density)&&void 0!==r?r:"standard",filterDebounceMs:800,sx:{border:0},slots:{toolbar:a.mergeConfig.toolbar},rowSelectionModel:a.rowSelecteds,onRowSelectionModelChange:a.handleRowSelectionChange};if("server"===e.featureMode){var s,d,u={filterMode:"server",sortingMode:"server",paginationMode:"server",onPaginationModelChange:a.onPaginationModelChange,onFilterModelChange:a.onFilterModelChange,onSortModelChange:a.onSortModelChange,rowCount:null!==(s=null===(d=a.props.data)||void 0===d?void 0:d.rowTotal)&&void 0!==s?s:0,paginationModel:a.tableQueryParams.pagination,filterModel:a.tableQueryParams.filter,sortModel:v.mapSortModel(a.tableQueryParams.sort),loading:a.mergeConfig.loading};Object.assign(n,u)}return m(n,a.mergeConfig.dataGridProps)}),i(a,"initialColumns",function(){var i,r,t=a.mergeConfig,l=t.ActionRow,d=t.disableActionRow,u=[];return l&&!0!==d&&u.push(o({field:"Actions",minWidth:100,headerAlign:"right",align:"right",filterable:!1,sortable:!1,renderCell:function(e){return s(l,{value:e.row})}},e.actionRow)),i=u,r=Object.keys(e.columns).map(function(i){var r=o({field:i},e.columns[i]);return r.filterOperators=e.filterOperators?e.filterOperators(r):f(r),r}),i&&i.length>0&&r.push.apply(r,n(i)),r}),i(a,"onPaginationModelChange",function(e,o){a.mergeConfig.loading||(a.setTableQueryParams({pagination:e,detail:"pagination"}),a.handleChange())}),i(a,"onFilterModelChange",function(e,o){var i;if(!a.mergeConfig.loading){var r=a.tableQueryParams.pagination;a.setTableQueryParams({filter:e,pagination:{page:0,pageSize:null!==(i=null==r?void 0:r.pageSize)&&void 0!==i?i:25},detail:v.detectSearchType(e)}),a.handleChange()}}),i(a,"onSortModelChange",function(e,o){if(!a.mergeConfig.loading){var i,r,t,l,n,s=e,d=a.tableQueryParams.sort;if(null!=d&&d.length&&!s.length)if((null==d||null===(i=d[0])||void 0===i?void 0:i.field)===(null===(r=a.defaultTableQueryParams.sort)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.field))s=[{field:null===(t=d[0])||void 0===t?void 0:t.field,sort:"desc"===(null===(l=d[0])||void 0===l?void 0:l.sort)?"asc":"desc"}];else s=null!==(n=a.defaultTableQueryParams.sort)&&void 0!==n?n:[];a.setTableQueryParams({sort:s,detail:"sort"}),a.handleChange()}}),i(a,"handleChange",function(){a.changeTimeout&&clearTimeout(a.changeTimeout),a.changeTimeout=setTimeout(function(){a.props.onChange&&a.props.onChange(a.tableQueryParams)},300)}),i(a,"handleRowSelectionChange",function(e,o){a.mergeConfig.maxSelcion&&e.length>a.mergeConfig.maxSelcion?a.rowSelecteds=e.slice(0,a.mergeConfig.maxSelcion):a.rowSelecteds=e,a.props.onRowSelectionChange&&a.props.onRowSelectionChange(a.rowSelecteds,o),a.forceUpdate()}),a.columns=a.initialColumns(),a.tableQueryParams=o({},r.query),a.defaultTableQueryParams=a.tableQueryParams,a.rowSelecteds=[],a}return r(p,d),a(p,[{key:"mergeConfig",get:function(){var i,r,a,t,l,n,d,u,p,c,g=m({},null==e?void 0:e.toolbarProps,null===(i=this.props.slots)||void 0===i?void 0:i.toolbarProps);return{toolbar:null!==(r=null===(a=this.props.slots)||void 0===a?void 0:a.toolbar)&&void 0!==r?r:function(){return s(y,o({},g))},ActionRow:null===(t=this.props.slots)||void 0===t?void 0:t.actionRow,disableActionRow:e.disableActionRow,columnVisibilityModel:e.columnVisibilityModel,maxSelcion:null!==(l=null===(n=this.props.slots)||void 0===n?void 0:n.maxSelection)&&void 0!==l?l:e.maxSelection,dataGridProps:m({},e.dataGridProps,null===(d=this.props.slots)||void 0===d?void 0:d.dataGridProps),wrapProps:m({},e.wrapProps,null===(u=this.props.slots)||void 0===u?void 0:u.wrapProps),loading:null!==(p=void 0!==this.props.loading?this.props.loading:null===(c=this.tableQueryParams)||void 0===c?void 0:c.loading)&&void 0!==p&&p}}},{key:"componentWillUnmount",value:function(){this.changeTimeout&&clearTimeout(this.changeTimeout)}},{key:"shouldComponentUpdate",value:function(o){var i;return"server"!==e.featureMode||(v.equalTableQueryParams(o.query,this.props.query)?JSON.stringify(o.data)!==JSON.stringify(this.props.data)||o.loading!==this.props.loading:(this.setTableQueryParams(null!==(i=o.query)&&void 0!==i?i:{}),!0))}},{key:"render",value:function(){return this.renderWrapContext(s(M,o(o({},this.mergeConfig.wrapProps),{},{children:s(g,o({loading:this.props.loading},this.getDataGridProps()))})))}}])}()}var M=p(function(i){var r=i.children,a=e(i,w);return s(c,o(o({},a),{},{children:s("div",{children:r})}))})(i(i({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},".MuiDataGrid-root":{"--unstable_DataGrid-radius":0,overflow:"hidden"}},".MuiDataGrid-cell.".concat(b.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}),".MuiTablePagination-root p",{marginBottom:0}));export{S as CreateTable,S as default};
|
|
2
2
|
//# sourceMappingURL=create.table.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createClass as e,classCallCheck as t,toConsumableArray as r,typeof as n}from"../../_virtual/_rollupPluginBabelHelpers.js";var a=function(e){return e},i=function(){return e(function e(){t(this,e)},null,[{key:"exportToCsv",value:function(e,t){var n=this;try{var a,i=t.fields.map(function(e){return String(e)}),o=e.map(function(e){return t.fields.map(function(t){var r=e[t];return n.formatFieldValue(r)})}),l=[i].concat(r(o)).map(function(e){return e.join(",")}).join("\n");if(t.utf8WithBom){a=new Blob(["\ufeff"+l],{type:"text/csv;charset=utf-8;"})}else a=new Blob([l],{type:"text/csv;charset=utf-8;"});var u=document.createElement("a"),c=URL.createObjectURL(a);u.setAttribute("href",c),u.setAttribute("download","".concat(t.fileName,".csv")),u.style.visibility="hidden",document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(c)}catch(e){throw console.error("Error exporting CSV:",e),new Error("Failed to export CSV file")}}},{key:"formatFieldValue",value:function(e){return null==e?"":e instanceof Date?this.escapeCSVValue(e.toISOString()):Array.isArray(e)?this.escapeCSVValue(e.join("; ")):"object"===n(e)?this.escapeCSVValue(JSON.stringify(e)):this.escapeCSVValue(String(e))}},{key:"escapeCSVValue",value:function(e){return e.includes(",")||e.includes("\n")||e.includes("\r")||e.includes('"')?'"'+e.replace(/"/g,'""')+'"':e}}])}();export{i as CsvExportHelper,a as generateExportCsvOptions};
|
|
2
|
+
//# sourceMappingURL=csv-export-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-export-helper.js","sources":["../../../src/table/csv-export-helper.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nexport interface IExportCsvOptionsModel<T = any> {\r\n fileName: string\r\n fields: (keyof T)[]\r\n utf8WithBom?: boolean\r\n}\r\n\r\nexport const generateExportCsvOptions = <T>(options: IExportCsvOptionsModel<T>): IExportCsvOptionsModel<T> => {\r\n return options\r\n}\r\n\r\nexport class CsvExportHelper {\r\n /**\r\n * Export data to CSV with UTF-8 BOM encoding support\r\n */\r\n static exportToCsv<T = any>(data: T[], options: IExportCsvOptionsModel<T>): void {\r\n try {\r\n // Extract headers\r\n const headers = options.fields.map((field) => String(field))\r\n\r\n // Extract rows data\r\n const rows = data.map((item) =>\r\n options.fields.map((field) => {\r\n const value = item[field]\r\n return this.formatFieldValue(value)\r\n })\r\n )\r\n\r\n // Combine headers and rows\r\n const csvContent = [headers, ...rows].map((row) => row.join(',')).join('\\n')\r\n\r\n // Create blob with UTF-8 BOM\r\n let blob: Blob\r\n if (options.utf8WithBom) {\r\n // UTF-8 BOM (Byte Order Mark) - helps Excel and other apps recognize UTF-8 encoding\r\n const BOM = '\\uFEFF'\r\n blob = new Blob([BOM + csvContent], { type: 'text/csv;charset=utf-8;' })\r\n } else {\r\n blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })\r\n }\r\n\r\n // Create download link\r\n const link = document.createElement('a')\r\n const url = URL.createObjectURL(blob)\r\n link.setAttribute('href', url)\r\n link.setAttribute('download', `${options.fileName}.csv`)\r\n link.style.visibility = 'hidden'\r\n\r\n // Trigger download\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n\r\n // Clean up\r\n URL.revokeObjectURL(url)\r\n } catch (error) {\r\n console.error('Error exporting CSV:', error)\r\n throw new Error('Failed to export CSV file')\r\n }\r\n }\r\n\r\n /**\r\n * Format field value for CSV export\r\n */\r\n private static formatFieldValue(value: any): string {\r\n if (value === null || value === undefined) return ''\r\n\r\n // Handle dates\r\n if (value instanceof Date) {\r\n return this.escapeCSVValue(value.toISOString())\r\n }\r\n\r\n // Handle arrays\r\n if (Array.isArray(value)) {\r\n return this.escapeCSVValue(value.join('; '))\r\n }\r\n\r\n // Handle objects\r\n if (typeof value === 'object') {\r\n return this.escapeCSVValue(JSON.stringify(value))\r\n }\r\n\r\n return this.escapeCSVValue(String(value))\r\n }\r\n\r\n /**\r\n * Escape CSV value by wrapping in quotes if needed\r\n */\r\n private static escapeCSVValue(value: string): string {\r\n // If value contains comma, newline, or quote, wrap in quotes and escape internal quotes\r\n if (value.includes(',') || value.includes('\\n') || value.includes('\\r') || value.includes('\"')) {\r\n return '\"' + value.replace(/\"/g, '\"\"') + '\"'\r\n }\r\n return value\r\n }\r\n}\r\n"],"names":["generateExportCsvOptions","options","CsvExportHelper","_createClass","_classCallCheck","key","value","data","_this","this","blob","headers","fields","map","field","String","rows","item","formatFieldValue","csvContent","concat","_toConsumableArray","row","join","utf8WithBom","Blob","type","link","document","createElement","url","URL","createObjectURL","setAttribute","fileName","style","visibility","body","appendChild","click","removeChild","revokeObjectURL","error","console","Error","Date","escapeCSVValue","toISOString","Array","isArray","_typeof","JSON","stringify","includes","replace"],"mappings":"qIAQaA,EAA2B,SAAIC,GAC1C,OAAOA,CACT,EAEaC,EAAe,WAAA,OAAAC,EAAA,SAAAD,IAAAE,OAAAF,EAAA,EAAA,KAAA,CAAA,CAAAG,IAAA,cAAAC,MAI1B,SAA4BC,EAAWN,GAAkC,IAAAO,EAAAC,KACvE,IAEE,IAcIC,EAdEC,EAAUV,EAAQW,OAAOC,IAAI,SAACC,GAAK,OAAKC,OAAOD,KAG/CE,EAAOT,EAAKM,IAAI,SAACI,GAAI,OACzBhB,EAAQW,OAAOC,IAAI,SAACC,GAClB,IAAMR,EAAQW,EAAKH,GACnB,OAAON,EAAKU,iBAAiBZ,EAC/B,KAIIa,EAAa,CAACR,GAAOS,OAAAC,EAAKL,IAAMH,IAAI,SAACS,GAAG,OAAKA,EAAIC,KAAK,IAAI,GAAEA,KAAK,MAIvE,GAAItB,EAAQuB,YAAa,CAGvBd,EAAO,IAAIe,KAAK,CADJ,SACWN,GAAa,CAAEO,KAAM,2BAC7C,MACChB,EAAO,IAAIe,KAAK,CAACN,GAAa,CAAEO,KAAM,4BAIxC,IAAMC,EAAOC,SAASC,cAAc,KAC9BC,EAAMC,IAAIC,gBAAgBtB,GAChCiB,EAAKM,aAAa,OAAQH,GAC1BH,EAAKM,aAAa,WAAU,GAAAb,OAAKnB,EAAQiC,SAAQ,SACjDP,EAAKQ,MAAMC,WAAa,SAGxBR,SAASS,KAAKC,YAAYX,GAC1BA,EAAKY,QACLX,SAASS,KAAKG,YAAYb,GAG1BI,IAAIU,gBAAgBX,EACrB,CAAC,MAAOY,GAEP,MADAC,QAAQD,MAAM,uBAAwBA,GAChC,IAAIE,MAAM,4BACjB,CACH,GAEA,CAAAvC,IAAA,mBAAAC,MAGQ,SAAwBA,GAC9B,OAAIA,QAA8C,GAG9CA,aAAiBuC,KACZpC,KAAKqC,eAAexC,EAAMyC,eAI/BC,MAAMC,QAAQ3C,GACTG,KAAKqC,eAAexC,EAAMiB,KAAK,OAInB,WAAjB2B,EAAO5C,GACFG,KAAKqC,eAAeK,KAAKC,UAAU9C,IAGrCG,KAAKqC,eAAe/B,OAAOT,GACpC,GAEA,CAAAD,IAAA,iBAAAC,MAGQ,SAAsBA,GAE5B,OAAIA,EAAM+C,SAAS,MAAQ/C,EAAM+C,SAAS,OAAS/C,EAAM+C,SAAS,OAAS/C,EAAM+C,SAAS,KACjF,IAAM/C,EAAMgD,QAAQ,KAAM,MAAQ,IAEpChD,CACT,IAAC,CAnFyB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{objectWithoutProperties as r,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t}from"react/jsx-runtime";import{Tooltip as e,Button as i}from"@mui/material";import{Download as a}from"@mui/icons-material";import{useGridApiContext as n,useGridSelector as l,gridRowsLookupSelector as p,GridToolbarExport as s}from"@mui/x-data-grid";import{CsvExportHelper as c}from"./csv-export-helper.js";var m=["csvOptions","tooltip","children"],v=function(v){var u=v.csvOptions,d=v.tooltip,f=void 0===d?"Export CSV with UTF-8 encoding":d,x=v.children,h=r(v,m),j=n(),b=l(j,p);return u?t(e,{title:f,arrow:!0,children:t(i,o(o({size:"small",variant:"text",startIcon:t(a,{}),onClick:function(){try{if(!u)return void console.warn("No CSV export options provided");var r=Object.values(b);if(0===r.length)return void console.warn("No data available for export");var o=j.current.getSelectedRows();return 0===o.size?c.exportToCsv(r,u):c.exportToCsv(Array.from(o.values()),u)}catch(r){console.error("Export failed:",r)}}},h),{},{children:x||"Export"}))}):t(s,{})};export{v as CustomExportButton};
|
|
2
|
+
//# sourceMappingURL=custom.export-button.js.map
|