@judo/components 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","sources":["../../src/dialog/ConfirmationDialog.tsx","../../../components-api/dist/esm/components-api.mjs","../../../utilities/dist/esm/utilities.mjs","../../../theme/dist/esm/theme.mjs","../../../data-api-common/dist/esm/data-api-common.mjs","../../src/DropdownButton.tsx","../../src/TrinaryLogicCombobox.tsx","../../src/dialog/FilterDialog.tsx","../../src/dialog/PageDialog.tsx","../../src/CustomTablePagination.tsx","../../src/dialog/hooks.tsx","../../src/dialog/RangeDialog.tsx","../../src/dialog/DialogProvider.tsx","../../src/table/table-row-actions.tsx","../../src/AggregationInput.tsx","../../src/CustomBreadcrumb.tsx","../../src/CustomLink.tsx","../../src/Hero.tsx","../../src/Logo.tsx","../../src/PageHeader.tsx"],"sourcesContent":["import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ConfirmationDialogProps } from '@judo/components-api';\n\nexport const ConfirmationDialog = ({\n confirmationMessage,\n title,\n resolve,\n open,\n handleClose,\n}: ConfirmationDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(false);\n };\n\n const ok = () => {\n handleClose();\n resolve(true);\n };\n\n return (\n <Dialog open={open} onClose={handleClose} scroll=\"paper\" fullWidth={true} maxWidth={'xs'}>\n {title && <DialogTitle id=\"scroll-dialog-title\">{title}</DialogTitle>}\n <DialogContent dividers={!!title}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n {confirmationMessage}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={cancel}>\n No\n </Button>\n <Button variant=\"text\" onClick={ok}>\n Yes\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","const TRINARY_LOGIC = new Map([\n [null, 'Unknown'],\n [true, 'Yes'],\n [false, 'No'],\n]);\n\nvar FilterType;\n(function (FilterType) {\n FilterType[FilterType[\"boolean\"] = 0] = \"boolean\";\n FilterType[FilterType[\"numeric\"] = 1] = \"numeric\";\n FilterType[FilterType[\"string\"] = 2] = \"string\";\n FilterType[FilterType[\"enumeration\"] = 3] = \"enumeration\";\n FilterType[FilterType[\"date\"] = 4] = \"date\";\n FilterType[FilterType[\"dateTime\"] = 5] = \"dateTime\";\n // time,\n FilterType[FilterType[\"trinaryLogic\"] = 6] = \"trinaryLogic\";\n})(FilterType || (FilterType = {}));\n\nexport { FilterType, TRINARY_LOGIC };\n","const e=e=>null!=e,t=e=>e?e.toISOString().substring(0,10):e,r=(t,r,s)=>{if(!t||\"boolean\"!=typeof t.isAxiosError||!0!==t.isAxiosError)return void a(r);const n=t.response;if(e(n))if(n?.status)if(422===n?.status)r(o(t.response?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0});else{if(400===n?.status)return i(n.data,r,s);r(o(n?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0})}else a(r);else a(r)},i=(t,r,i)=>{if(e(t[0].location)){if(r(\"Please make sure all fields are filled in correctly.\",{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0}),void 0!==i?.setValidation){let e=new Map;t.forEach((t=>e.set(t.location,t.code))),i?.setValidation(e)}}else r(t[0].code,{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0})},a=e=>{e(\"Something went wrong. Please contact with the system admins.\",{variant:\"error\",preventDuplicate:!0,persist:!0})},o=e=>({message:e.code}),s=(e,t)=>{if(e.some((e=>e.filterOption.attributeName===t)))return e.filter((e=>e.filterOption.attributeName===t&&e.filterBy.value)).map((e=>({value:e.filterBy.value,operator:e.filterBy.operator})))},n=(e,...t)=>{let r={};for(const i of t)r[i]=s(e,i);return r};export{t as dateToJudoDateString,r as errorHandling,e as exists,n as mapAllFiltersToQueryCustomizerProperties,s as mapFiltersToQueryCustomizerProperty};\n//# sourceMappingURL=utilities.mjs.map\n","import{createTheme as e,alpha as o}from\"@mui/material\";const i={marginTop:8,marginBottom:8,display:\"flex\",flexDirection:\"column\",alignItems:\"center\"},t=e({palette:{mode:\"light\",primary:{main:\"#3C4166FF\"},secondary:{main:\"#E7501DFF\"},text:{primary:\"#17191DFF\",secondary:\"#434448FF\"},background:{default:\"#FAFAFAFF\"},subtitleColor:{main:\"#8c8c8c\"}},typography:{h5:{fontWeight:500,fontSize:26,letterSpacing:.5}},shape:{borderRadius:8},components:{MuiTab:{defaultProps:{disableRipple:!0}}},mixins:{toolbar:{minHeight:48}}}),r={...t,components:{MuiAppBar:{styleOverrides:{colorPrimary:{backgroundColor:t.palette.background.default}}},MuiButton:{defaultProps:{variant:\"contained\",size:\"small\"},styleOverrides:{root:{textTransform:\"none\",borderRadius:\"20px 20px 20px 20px\",paddingLeft:15,paddingRight:15},contained:{boxShadow:\"none\",\"&:active\":{boxShadow:\"none\"}},outlined:{border:\"2px solid\",fontWeight:\"bold\",\"&:hover\":{border:\"2px solid\",background:o(t.palette.primary.main,.15)}}}},MuiInputLabel:{styleOverrides:{root:{color:t.palette.subtitleColor.main,fontWeight:500,fontSize:16,\"&.Mui-focused\":{color:t.palette.subtitleColor.main}}}},MuiFilledInput:{styleOverrides:{input:{\"&:-webkit-autofill\":{WebkitBackgroundClip:\"text !important\"}},root:{background:\"inherit\",\"&.Mui-focused\":{background:\"inherit\"},\"&:hover:not(.Mui-disabled):not(.Mui-focused)\":{background:o(t.palette.secondary.main,.1)},\"&:hover:not(.Mui-disabled):before\":{borderBottom:\"none\"},\"&.Mui-focused .MuiInputAdornment-root .MuiSvgIcon-root\":{color:t.palette.secondary.main}}}},MuiTextField:{defaultProps:{fullWidth:!0,variant:\"filled\",color:\"secondary\"},styleOverrides:{root:{background:\"white\",\"& .MuiFilledInput-underline:before\":{borderBottom:\"none\"},\"&.Mui-readOnly:not(.Mui-disabled):not(.Mui-focused)\":{borderBottom:`1px solid ${o(t.palette.primary.main,.2)}`,background:\"transparent\"},\"&:not(.Mui-readOnly):not(.Mui-disabled)\":{boxShadow:\"0px 0px 8px 2px rgba(0,0,0,0.05)\",borderRadius:\"8px 8px 0 0\"}}}},MuiSelect:{styleOverrides:{filled:{\"&:focus\":{backgroundColor:\"white\"}}}},MuiDataGrid:{styleOverrides:{root:{border:\"none\"},toolbarContainer:{padding:\"8px 8px 4px 8px\"}}},MuiPaper:{styleOverrides:{rounded:{boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\",borderRadius:16,padding:8}}},MuiDrawer:{styleOverrides:{paper:{border:\"none\",boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\"}}},MuiTabs:{styleOverrides:{root:{marginLeft:t.spacing(1)},indicator:{height:3,borderTopLeftRadius:3,borderTopRightRadius:3,backgroundColor:t.palette.common.white}}},MuiTab:{styleOverrides:{root:{textTransform:\"none\",margin:\"0 16px\",minWidth:0,padding:0,[t.breakpoints.up(\"md\")]:{padding:0,minWidth:0}}}},MuiIconButton:{styleOverrides:{root:{color:t.palette.secondary.main,padding:t.spacing(1)}}},MuiTooltip:{styleOverrides:{tooltip:{borderRadius:4}}},MuiDivider:{styleOverrides:{root:{backgroundColor:\"rgb(255,255,255,0.15)\"},middle:{marginTop:8,marginBottom:8}}},MuiListItemButton:{defaultProps:{disableTouchRipple:!0}},MuiListItemText:{styleOverrides:{primary:{fontSize:14,fontWeight:t.typography.fontWeightMedium}}},MuiListItemIcon:{styleOverrides:{root:{color:\"inherit\",minWidth:\"auto\",marginRight:t.spacing(2),\"& svg\":{fontSize:20}}}},MuiAvatar:{styleOverrides:{root:{width:32,height:32}}},MuiCard:{styleOverrides:{root:{width:\"100%\",length:\"100%\",padding:10}}}}};export{i as mainContainerPadding,r as theme,t as themeBase};\n//# sourceMappingURL=theme.mjs.map\n","var a,e,l,r;!function(a){a.equals=\"equals\"}(a||(a={})),function(a){a.equals=\"equals\",a.notEquals=\"notEquals\"}(e||(e={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\"}(l||(l={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\",a.matches=\"matches\",a.like=\"like\"}(r||(r={}));export{a as _BooleanOperation,e as _EnumerationOperation,l as _NumericOperation,r as _StringOperation};\n//# sourceMappingURL=data-api-common.mjs.map\n","import { Button, ClickAwayListener, Grow, MenuItem, MenuList, Paper, Popper } from '@mui/material';\nimport { useState, useRef, useEffect } from 'react';\nimport type { ReactNode, KeyboardEvent, SyntheticEvent } from 'react';\nimport { KeyboardArrowDown } from '@mui/icons-material';\n\ninterface DropdownMenuItem {\n disabled?: boolean;\n visible?: boolean;\n label?: string;\n onClick: () => void;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n}\n\ninterface DropdownButtonProps {\n children?: ReactNode;\n id?: string | undefined;\n menuItems: DropdownMenuItem[];\n disabled?: boolean;\n showDropdownIcon?: boolean;\n fullWidth?: boolean;\n variant?: 'text' | 'outlined' | 'contained' | undefined;\n}\n\nexport function DropdownButton({\n children,\n id,\n menuItems,\n disabled = false,\n showDropdownIcon = true,\n fullWidth = false,\n variant = 'contained',\n}: DropdownButtonProps) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: Event | SyntheticEvent) => {\n if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n } else if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <>\n <Button\n ref={anchorRef}\n id={id}\n onClick={handleToggle}\n endIcon={showDropdownIcon && <KeyboardArrowDown />}\n disabled={disabled}\n fullWidth={fullWidth}\n variant={variant}\n >\n {children}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n placement=\"bottom\"\n transition\n style={{ zIndex: 1400, minWidth: anchorRef.current?.scrollWidth }}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom-start' ? 'left top' : 'left bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList autoFocusItem={open} onKeyDown={handleListKeyDown}>\n {menuItems\n .filter((menuItem) => menuItem.visible ?? true)\n .map((menuItem, index) => {\n return (\n <MenuItem\n id={menuItem.label ?? '' + index}\n disabled={menuItem.disabled ?? false}\n onClick={(event) => {\n handleClose(event);\n menuItem.onClick();\n }}\n >\n {menuItem.startIcon}\n {menuItem.label}\n {menuItem.endIcon}\n </MenuItem>\n );\n })}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </>\n );\n}\n","import { CheckBoxOutlined } from '@mui/icons-material';\nimport { TextField, InputAdornment, MenuItem } from '@mui/material';\nimport type { ChangeEvent } from 'react';\nimport { TRINARY_LOGIC } from '@judo/components-api';\n\ninterface TrinaryLogicProps {\n readOnly?: boolean;\n value?: boolean | null;\n id?: string;\n label: string;\n name?: string;\n error?: boolean | undefined;\n helperText?: string | undefined;\n onChange?: (value: boolean | null) => void;\n}\n\nconst TrinaryLogicCombobox = ({\n readOnly = false,\n value = null,\n id,\n label,\n name,\n error,\n helperText,\n onChange,\n}: TrinaryLogicProps) => {\n const onChangeHandler = onChange\n ? (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n const index = Array.from(TRINARY_LOGIC.values()).indexOf(event.target.value);\n const keysArray = Array.from(TRINARY_LOGIC.keys());\n onChange(keysArray[index]);\n }\n : undefined;\n\n return (\n <TextField\n name={name}\n id={id}\n label={label}\n select\n value={TRINARY_LOGIC.get(value)}\n onChange={onChangeHandler}\n className={readOnly ? 'Mui-readOnly' : undefined}\n error={error}\n helperText={helperText}\n InputProps={{\n readOnly: readOnly,\n startAdornment: (\n <InputAdornment position=\"start\">\n <CheckBoxOutlined />\n </InputAdornment>\n ),\n }}\n >\n {Array.from(TRINARY_LOGIC.keys()).map((key) => (\n <MenuItem key={TRINARY_LOGIC.get(key)} value={TRINARY_LOGIC.get(key)}>\n {TRINARY_LOGIC.get(key)}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default TrinaryLogicCombobox;\n","import { mdiCalendarClock, mdiCalendarMonth, mdiFormatTextVariant, mdiNumeric } from '@mdi/js';\nimport Icon from '@mdi/react';\nimport { Close } from '@mui/icons-material';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Slide,\n Box,\n Container,\n Grid,\n TextField,\n MenuItem,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n Typography,\n} from '@mui/material';\nimport type { TransitionProps } from '@mui/material/transitions';\nimport { DatePicker, DateTimePicker } from '@mui/x-date-pickers';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { ChangeEvent, ReactElement, Ref } from 'react';\nimport type {\n Filter,\n FilterDialogProps,\n FilterInputProps,\n FilterOperatorProps,\n FilterProps,\n Operation,\n} from '@judo/components-api';\nimport { FilterType } from '@judo/components-api';\nimport { dateToJudoDateString, exists } from '@judo/utilities';\nimport { mainContainerPadding } from '@judo/theme';\nimport { _BooleanOperation, _EnumerationOperation, _NumericOperation, _StringOperation } from '@judo/data-api-common';\nimport { DropdownButton } from '../DropdownButton';\nimport TrinaryLogicCombobox from '../TrinaryLogicCombobox';\n\nconst getDefaultOperator = (filterType: FilterType) => {\n switch (filterType) {\n case FilterType.boolean:\n return _BooleanOperation['equals'];\n case FilterType.date:\n return _NumericOperation['equal'];\n case FilterType.dateTime:\n return _NumericOperation['equal'];\n // case FilterType.time:\n // return _NumericOperation['equal'];\n case FilterType.enumeration:\n return _EnumerationOperation['equals'];\n case FilterType.numeric:\n return _NumericOperation['equal'];\n case FilterType.string:\n return _StringOperation['equal'];\n case FilterType.trinaryLogic:\n return _BooleanOperation['equals'];\n }\n};\n\nconst getOperationEnumValue = (filter: Filter, operator: string) => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.date:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.dateTime:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n // case FilterType.time:\n // return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.enumeration:\n return _EnumerationOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.numeric:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.string:\n return _StringOperation[operator as keyof typeof _StringOperation];\n case FilterType.trinaryLogic:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n }\n};\n\nconst getOperatorsByFilter = (filter: Filter): string[] => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return Object.values(_BooleanOperation);\n case FilterType.date:\n return Object.values(_NumericOperation);\n case FilterType.dateTime:\n return Object.values(_NumericOperation);\n // case FilterType.time:\n // return Object.values(_NumericOperation);\n case FilterType.enumeration:\n return Object.values(_EnumerationOperation);\n case FilterType.numeric:\n return Object.values(_NumericOperation);\n case FilterType.string:\n return Object.values(_StringOperation);\n case FilterType.trinaryLogic:\n return Object.values(_BooleanOperation);\n }\n};\n\nconst FilterOperator = ({ filter, setFilterOperator }: FilterOperatorProps) => {\n const onChangeHandler = (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n setFilterOperator(filter, getOperationEnumValue(filter, event.target.value));\n };\n\n return (\n <TextField\n name={'operation'}\n id={'operation'}\n label={'Operation'}\n select\n value={filter.filterBy.operator}\n onChange={onChangeHandler}\n >\n {getOperatorsByFilter(filter).map((item) => (\n <MenuItem key={item} value={item}>\n {/* TODO: do not forget localization here*/}\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nconst FilterInput = ({ filter, setFilterValue }: FilterInputProps) => {\n if (filter.filterOption.filterType === FilterType.enumeration && !exists(filter.filterOption.enumValues)) {\n throw new Error(`Missing enumValues from FilterOptions of ${filter.filterOption.attributeName}`);\n }\n\n return (\n <>\n {(() => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, !!event.target.value)}\n />\n }\n label={filter.filterOption.attributeName}\n />\n );\n case FilterType.date:\n return (\n <DatePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, dateToJudoDateString(newValue))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarMonth} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.dateTime:\n return (\n <DateTimePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, newValue)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarClock} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n // case FilterType.time:\n // return (\n // <TextField\n // label={filter.filterOption.attributeName}\n // value={filter.filterBy.value}\n // onChange={(event) => setFilterValue(filter, event.target.value)}\n // InputProps={{\n // startAdornment: (\n // <InputAdornment position=\"start\">\n // <Icon path={mdiClockOutline} size={1} />\n // </InputAdornment>\n // ),\n // }}\n // />\n // );\n case FilterType.enumeration:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n select\n onChange={(event) => setFilterValue(filter, event.target.value)}\n >\n {filter.filterOption.enumValues?.map((item) => (\n <MenuItem key={item} value={item}>\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n case FilterType.numeric:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n type=\"number\"\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, Number(event.target.value))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiNumeric} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.string:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiFormatTextVariant} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.trinaryLogic:\n return (\n <TrinaryLogicCombobox\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(value) => setFilterValue(filter, value)}\n />\n );\n }\n })()}\n </>\n );\n};\n\nconst FilterRow = ({ filter, closeHandler, setFilterOperator, setFilterValue }: FilterProps) => {\n return (\n <Grid item container spacing={2} alignItems={'center'}>\n <Grid item xs={4}>\n {filter && <FilterOperator filter={filter} setFilterOperator={setFilterOperator} />}\n </Grid>\n <Grid item xs={7}>\n {filter && <FilterInput filter={filter} setFilterValue={setFilterValue} />}\n </Grid>\n <Grid item xs={1}>\n <IconButton onClick={() => closeHandler(filter)}>\n <Close />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & {\n children: ReactElement<any, any>;\n },\n ref: Ref<unknown>,\n) {\n return <Slide direction=\"left\" ref={ref} {...props} />;\n});\n\nexport const FilterDialog = ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [tempFilters, setTempFilters] = useState<Filter[]>(filters ?? []);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const updateFilterValue = (filter: Filter, value: any) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: value, operator: tempFilter.filterBy.operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const updateFilterOperator = (filter: Filter, operator: Operation) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: tempFilter.filterBy.value, operator: operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const filterCloseHandler = (filter: Filter) => {\n setTempFilters((prevTempFilters) => [...prevTempFilters.filter((tempFilter) => tempFilter.id !== filter.id)]);\n };\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(tempFilters);\n };\n\n return (\n <Dialog\n open={open}\n onClose={cancel}\n scroll=\"paper\"\n TransitionComponent={Transition}\n disableEnforceFocus\n fullWidth\n maxWidth=\"sm\"\n sx={{\n '& .MuiDialog-container': {\n justifyContent: 'flex-end',\n },\n }}\n PaperProps={{\n sx: {\n m: 0,\n height: '100%',\n },\n }}\n >\n <DialogTitle id=\"scroll-dialog-title\">\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n Filters\n </Typography>\n </DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <Container component=\"main\" maxWidth=\"xs\">\n <Box sx={mainContainerPadding}>\n <Grid container spacing={2}>\n {tempFilters.map((filter) => (\n <FilterRow\n key={filter.id}\n filter={filter}\n closeHandler={filterCloseHandler}\n setFilterOperator={updateFilterOperator}\n setFilterValue={updateFilterValue}\n />\n ))}\n <Grid item container>\n <DropdownButton\n fullWidth={true}\n showDropdownIcon={false}\n menuItems={filterOptions.map((filterOption) => {\n return {\n label: filterOption.label ?? filterOption.attributeName,\n onClick: () =>\n setTempFilters((prevTempFilters) => [\n ...prevTempFilters,\n {\n id: prevTempFilters.length,\n filterOption: {\n attributeName: filterOption.attributeName,\n label: filterOption.label,\n filterType: filterOption.filterType,\n },\n filterBy: {\n operator: getDefaultOperator(filterOption.filterType),\n },\n },\n ]),\n };\n })}\n >\n Add new filter\n </DropdownButton>\n </Grid>\n </Grid>\n </Box>\n </Container>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button fullWidth variant=\"outlined\" onClick={cancel}>\n Cancel\n </Button>\n <Button fullWidth onClick={ok}>\n Apply {'(' + tempFilters.length + ')'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface PageDialogProps {\n page: ReactNode;\n open: boolean;\n handleClose: () => void;\n resolve: () => void;\n}\n\nexport const PageDialog = ({ page, open, handleClose, resolve }: PageDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const ok = () => {\n resolve();\n handleClose();\n };\n\n return (\n <Dialog open={open} onClose={ok} scroll=\"paper\">\n <DialogContent dividers={true}>\n <DialogContentText ref={descriptionElementRef} tabIndex={-1}>\n {page}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { TablePagination } from '@mui/material';\nimport type { MouseEvent, Dispatch, SetStateAction } from 'react';\n\nexport interface CustomTablePaginationProps {\n pageChange: (isNext: boolean) => Promise<void>;\n isNextButtonEnabled: boolean;\n page: number;\n rowPerPage: number;\n setPage: Dispatch<SetStateAction<number>>;\n}\n\nexport const CustomTablePagination = (props: CustomTablePaginationProps) => {\n const handleChangePage = async (event: MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n let isNext = true;\n if (newPage < props.page) {\n isNext = false;\n }\n\n props.setPage(newPage);\n\n await props.pageChange(isNext);\n };\n\n return (\n <TablePagination\n component=\"div\"\n count={-1}\n page={props.page}\n onPageChange={handleChangePage}\n rowsPerPage={props.rowPerPage}\n rowsPerPageOptions={[props.rowPerPage]}\n labelDisplayedRows={({ from, to }) => `${from}–${to}`}\n nextIconButtonProps={{\n disabled: !props.isNextButtonEnabled,\n }}\n backIconButtonProps={{\n disabled: props.page === 0,\n }}\n />\n );\n};\n","import { createContext, useContext } from 'react';\nimport {\n ConfirmDialogProviderContext,\n FilterDialogProviderContext,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\n\n// @ts-ignore\nexport const PageDialogContextState = createContext<PageDialogProviderContext>();\n\n// @ts-ignore\nexport const ConfirmDialogContextState = createContext<ConfirmDialogProviderContext>();\n\n// @ts-ignore\nexport const RangeDialogContextState = createContext<RangeDialogProviderContext>();\n\n// @ts-ignore\nexport const FilterDialogContextState = createContext<FilterDialogProviderContext>();\n\nexport const useFilterDialog = () => {\n const context = useContext(FilterDialogContextState);\n\n if (context === undefined) {\n throw new Error('useFilterDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst usePageDialog = () => {\n const context = useContext(PageDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useConfirmDialog = () => {\n const context = useContext(ConfirmDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useRangeDialog = () => {\n const context = useContext(RangeDialogContextState);\n\n if (context === undefined) {\n throw new Error('useRangeDialog was used outside of its Provider');\n }\n\n return context;\n};\n","import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport {\n GridSortModel,\n GridRowModel,\n DataGrid,\n GridRowParams,\n GridColumns,\n GridSortItem,\n GridSelectionModel,\n GridToolbarContainer,\n GridRowId,\n} from '@mui/x-data-grid';\nimport { useSnackbar } from 'notistack';\nimport { useEffect, useRef, useState } from 'react';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport { errorHandling } from '@judo/utilities';\nimport { CustomTablePagination } from '../CustomTablePagination';\nimport { useFilterDialog } from './hooks';\n\ninterface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {\n resolve: (value: any) => void;\n open: boolean;\n handleClose: () => void;\n single?: boolean;\n columns: GridColumns<T>;\n defaultSortField: GridSortItem;\n rangeCall: (queryCustomizer: U) => Promise<Array<T>>;\n alreadySelectedItems: GridSelectionModel | GridRowId;\n initalQueryCustomizer: U;\n filterOptions: FilterOption[];\n}\n\nexport const RangeDialog = <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n resolve,\n open,\n handleClose,\n single = false,\n columns,\n defaultSortField,\n rangeCall,\n alreadySelectedItems,\n initalQueryCustomizer,\n filterOptions,\n}: RangeDialogProps<T, U>) => {\n const { openFilterDialog } = useFilterDialog();\n const { enqueueSnackbar } = useSnackbar();\n\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [rowCount, setRowCount] = useState<number>(0);\n const [sortModel, setSortModel] = useState<GridSortModel>([defaultSortField]);\n const [lastItem, setLastItem] = useState<T>();\n const [firstItem, setFirstItem] = useState<T>();\n const [isNextButtonEnabled, setIsNextButtonEnabled] = useState<boolean>(true);\n const [page, setPage] = useState<number>(0);\n const [data, setData] = useState<GridRowModel<T>[]>([]);\n const [selectionModel, setSelectionModel] = useState<GridSelectionModel | GridRowId | undefined>(\n alreadySelectedItems ?? (single ? undefined : []),\n );\n const [selectedItems, setSelectedItems] = useState<T[] | T | undefined>([]);\n const [filters, setFilters] = useState<Filter[]>([]);\n const [queryCustomizer, setQueryCustomizer] = useState<U>({\n ...initalQueryCustomizer,\n _seek: {\n limit: 6,\n },\n });\n\n const handlePageChange = async (isNext: boolean) => {\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _seek: {\n limit: isNext ? 6 : 5,\n reverse: !isNext,\n lastItem: isNext ? lastItem : firstItem,\n },\n };\n });\n\n setIsNextButtonEnabled(!isNext);\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const res = await rangeCall(queryCustomizer);\n\n if (res.length > 5) {\n setIsNextButtonEnabled(true);\n res.pop();\n } else if (queryCustomizer._seek?.limit === 6) {\n setIsNextButtonEnabled(false);\n }\n\n setData(res);\n setFirstItem(res[0]);\n setLastItem(res[res.length - 1]);\n setRowCount(res.length || 0);\n } catch (error) {\n errorHandling(error, enqueueSnackbar);\n }\n setIsLoading(false);\n };\n\n const handleFiltersChange = (newFilters: Filter[]) => {\n setPage(0);\n setFilters(newFilters);\n\n // @ts-ignore\n setQueryCustomizer((prevQueryCustomizer) => {\n const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n filterOptions.forEach(\n (filter) =>\n // @ts-ignore\n (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n newFilters,\n filter.attributeName,\n )),\n );\n\n return {\n ...prevQueryCustomizer,\n _seek: {\n lastItem: undefined,\n limit: 6,\n reverse: undefined,\n },\n ...tempQueryCustomizer,\n };\n });\n };\n\n const handleSortModelChange = (newModel: GridSortModel) => {\n setPage(0);\n setSortModel(newModel);\n\n const { field, sort } = newModel[0];\n\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n };\n });\n };\n\n // useEffect(() => {\n // setPage(0);\n // const { field, sort } = sortModel[0];\n\n // setQueryCustomizer((prevQueryCustomizer) => {\n // const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n // filterOptions.forEach(\n // (filter) =>\n // // @ts-ignore\n // (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n // filters,\n // filter.attributeName,\n // )),\n // );\n\n // return {\n // ...prevQueryCustomizer,\n // _seek: {\n // lastItem: undefined,\n // limit: 6,\n // reverse: undefined,\n // },\n // _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n // ...tempQueryCustomizer,\n // };\n // });\n // }, [sortModel, filters]);\n\n useEffect(() => {\n fetchData();\n }, [queryCustomizer]);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(selectedItems);\n };\n\n const handleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (!Array.isArray(selectionModel)) return;\n\n // added new items\n if (newSelectionModel.length > selectionModel.length) {\n const diff = newSelectionModel.length - selectionModel.length;\n const newItemsId = [...newSelectionModel].slice(diff * -1);\n const newItems = data.filter((value) => newItemsId.indexOf(value.__identifier as GridRowId) !== -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems, ...newItems];\n });\n }\n\n // removed items\n if (newSelectionModel.length < selectionModel.length) {\n const removedItemsId = selectionModel.filter((value) => newSelectionModel.indexOf(value) === -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems.filter((value) => removedItemsId.indexOf(value.__identifier as GridRowId) === -1)];\n });\n }\n\n setSelectionModel(newSelectionModel);\n };\n\n const handleSingleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (Array.isArray(selectionModel)) return;\n\n if (newSelectionModel.length === 0) {\n setSelectionModel('');\n setSelectedItems(undefined);\n return;\n }\n\n const lastId = newSelectionModel[newSelectionModel.length - 1];\n\n setSelectionModel(lastId);\n setSelectedItems(data.find((value) => value.__identifier === lastId));\n };\n\n const handleIsRowSelectable = (params: GridRowParams<T>) => {\n if (alreadySelectedItems) {\n if (!Array.isArray(alreadySelectedItems)) throw Error('Range dialog gets wrong alreadySelectedItems.');\n\n return !alreadySelectedItems.includes(params.id);\n }\n\n return true;\n };\n\n return (\n <Dialog open={open} onClose={cancel} scroll=\"paper\" fullWidth={true} maxWidth={'sm'}>\n <DialogTitle id=\"scroll-dialog-title\">Select</DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <DataGrid\n sx={\n single\n ? {\n '.MuiDataGrid-columnHeaderCheckbox .MuiDataGrid-columnHeaderTitleContainer': {\n display: 'none',\n },\n }\n : undefined\n }\n autoHeight\n getRowId={(row: T) => row.__identifier as GridRowId}\n loading={isLoading}\n paginationMode=\"server\"\n rows={data}\n rowCount={rowCount}\n sortingOrder={['desc', 'asc']}\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n checkboxSelection\n onSelectionModelChange={!single ? handleOnSelection : handleSingleOnSelection}\n isRowSelectable={!single ? handleIsRowSelectable : undefined}\n selectionModel={selectionModel}\n hideFooterSelectedRowCount={single}\n columns={columns}\n keepNonExistentRowsSelected\n components={{\n Toolbar: () => (\n <GridToolbarContainer>\n <Button\n variant=\"outlined\"\n onClick={async () => {\n const newFilters = await openFilterDialog(filterOptions, filters);\n\n if (newFilters) {\n handleFiltersChange(newFilters);\n }\n }}\n disabled={isLoading}\n >\n Set filters {filters.length !== 0 ? '(' + filters.length + ')' : ''}\n </Button>\n </GridToolbarContainer>\n ),\n Pagination: () => (\n <CustomTablePagination\n pageChange={handlePageChange}\n isNextButtonEnabled={isNextButtonEnabled}\n page={page}\n setPage={setPage}\n rowPerPage={5}\n />\n ),\n }}\n />\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel}>Cancel</Button>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { ConfirmationDialog } from './ConfirmationDialog';\nimport { FilterDialog } from './FilterDialog';\nimport { PageDialog } from './PageDialog';\nimport { RangeDialog } from './RangeDialog';\nimport type {\n ConfirmDialogProviderContext,\n DialogProviderProps,\n FilterDialogProviderContext,\n OpenRangeDialogProps,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport {\n ConfirmDialogContextState,\n FilterDialogContextState,\n PageDialogContextState,\n RangeDialogContextState,\n} from './hooks';\n\nexport const DialogProvider = ({ children }: DialogProviderProps) => {\n // Page Dialog\n const [isOpenPageDialog, setIsOpenPageDialog] = useState(false);\n const [pageDialog, setPageDialog] = useState<ReactNode>();\n\n const handleClosePageDialog = () => {\n setIsOpenPageDialog(false);\n };\n\n const handleOpenPageDialog = async (page: ReactNode) => {\n setIsOpenPageDialog(true);\n return new Promise<void>((resolve) => {\n setPageDialog(<PageDialog page={page} handleClose={handleClosePageDialog} open={true} resolve={resolve} />);\n });\n };\n\n const pageDialogContext: PageDialogProviderContext = {\n openPageDialog: handleOpenPageDialog,\n };\n\n // Range Dialog\n const [isOpenRangeDialog, setIsOpenRangeDialog] = useState(false);\n const [rangeDialog, setRangeDialog] = useState<ReactNode>();\n\n const handleCloseRangeDialog = () => {\n setIsOpenRangeDialog(false);\n };\n\n const handleOpenRangeDialog = async <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n columns,\n defaultSortField,\n rangeCall,\n single = false,\n alreadySelectedItems,\n filterOptions,\n initialQueryCustomizer,\n }: OpenRangeDialogProps<T, U>) => {\n setIsOpenRangeDialog(true);\n\n return new Promise<T[] | T>((resolve) => {\n setRangeDialog(\n <RangeDialog<T, U>\n handleClose={handleCloseRangeDialog}\n open={true}\n resolve={resolve}\n columns={columns}\n defaultSortField={defaultSortField}\n rangeCall={rangeCall}\n single={single}\n alreadySelectedItems={alreadySelectedItems}\n filterOptions={filterOptions}\n initalQueryCustomizer={initialQueryCustomizer}\n />,\n );\n });\n };\n\n const customDialogContext: RangeDialogProviderContext = {\n openRangeDialog: handleOpenRangeDialog,\n };\n\n // Confirmation Dialog\n const [isOpenConfirmDialog, setIsOpenConfirmDialog] = useState(false);\n const [confirmDialog, setConfirmDialog] = useState<ReactNode>();\n\n const handleCloseConfirmDialog = () => {\n setIsOpenConfirmDialog(false);\n return false;\n };\n\n const handleOpenConfirmDialog = async (confirmationMessage: string | ReactNode, title?: string | ReactNode) => {\n setIsOpenConfirmDialog(true);\n\n return new Promise<boolean>((resolve) => {\n setConfirmDialog(\n <ConfirmationDialog\n confirmationMessage={confirmationMessage}\n title={title}\n handleClose={handleCloseConfirmDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const confirmDialogContext: ConfirmDialogProviderContext = {\n openConfirmDialog: handleOpenConfirmDialog,\n };\n\n // Filter dialog\n const [isOpenFilterDialog, setIsOpenFilterDialog] = useState(false);\n const [filterDialog, setFilterDialog] = useState<ReactNode>();\n\n const handleCloseFilterDialog = () => {\n setIsOpenFilterDialog(false);\n return false;\n };\n\n const handleOpenFilterDialog = async (filterOptions: FilterOption[], filters?: Filter[]) => {\n setIsOpenFilterDialog(true);\n\n return new Promise<Filter[]>((resolve) => {\n setFilterDialog(\n <FilterDialog\n filters={filters}\n filterOptions={filterOptions}\n handleClose={handleCloseFilterDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const filterDialogContext: FilterDialogProviderContext = {\n openFilterDialog: handleOpenFilterDialog,\n };\n\n return (\n <PageDialogContextState.Provider value={pageDialogContext}>\n <ConfirmDialogContextState.Provider value={confirmDialogContext}>\n <RangeDialogContextState.Provider value={customDialogContext}>\n <FilterDialogContextState.Provider value={filterDialogContext}>\n {children}\n {isOpenPageDialog && pageDialog}\n {isOpenConfirmDialog && confirmDialog}\n {isOpenRangeDialog && rangeDialog}\n {isOpenFilterDialog && filterDialog}\n </FilterDialogContextState.Provider>\n </RangeDialogContextState.Provider>\n </ConfirmDialogContextState.Provider>\n </PageDialogContextState.Provider>\n );\n};\n","import type { ColumnActionsProvider, ColumnsActionsOptions, TableRowAction } from '@judo/utilities';\nimport { exists } from '@judo/utilities';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { GridColDef, GridRenderCellParams } from '@mui/x-data-grid';\nimport { DropdownButton } from '../DropdownButton';\n\nexport const columnsActionCalculator: ColumnActionsProvider<any> = (\n actions: TableRowAction<any>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n if (!exists(actions) || actions.length === 0) {\n return [];\n }\n\n let shownActionsNumber = 1;\n if (options?.shownActions) {\n shownActionsNumber = actions.length < options.shownActions ? actions.length : options.shownActions;\n }\n\n if (shownActionsNumber < 0) {\n return standaloneActions(actions, options);\n } else if (shownActionsNumber === 0) {\n return [];\n } else if (shownActionsNumber === 1) {\n return dropdownActions(actions, options);\n } else {\n const sliceNumber = actions.length === shownActionsNumber ? shownActionsNumber : shownActionsNumber - 1;\n const standaloneRowActions = actions.slice(0, sliceNumber);\n const dropdownRowActions = actions.slice(sliceNumber);\n\n return [...standaloneActions(standaloneRowActions, options), ...dropdownActions(dropdownRowActions, options)];\n }\n};\n\nconst standaloneActions: ColumnActionsProvider<unknown> = (\n actions: TableRowAction<unknown>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n return actions.map((action, index) => {\n return {\n field: action.label + index,\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <Button variant=\"text\" onClick={() => action.action(params.row)}>\n {action.icon}\n {(options?.showLabel ?? true) && action.label}\n </Button>\n );\n },\n };\n });\n};\n\nconst dropdownActions: ColumnActionsProvider<unknown> = (actions: TableRowAction<unknown>[]): GridColDef[] => {\n if (actions.length === 0) return [];\n\n return [\n {\n field: 'actions',\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <DropdownButton\n variant=\"text\"\n showDropdownIcon={false}\n menuItems={actions.map((action) => {\n return {\n label: action.label,\n startIcon: action.icon,\n onClick: () => action.action(params.row),\n };\n })}\n >\n <MoreHoriz />\n </DropdownButton>\n );\n },\n },\n ];\n};\n","import { Delete, LinkOff, NoteAdd, Visibility } from '@mui/icons-material';\nimport { ButtonBase, Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { exists } from '@judo/utilities';\n\ninterface AggregationInputProps {\n name?: string;\n id?: string;\n label?: string;\n value: any | undefined | null;\n error?: boolean | undefined;\n helperText?: string | undefined;\n disabled?: boolean | undefined;\n readonly?: boolean | undefined;\n labelList: string[];\n icon?: ReactNode;\n onSet?: () => Promise<void> | undefined;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n onRemove?: () => void | undefined;\n}\n\ninterface ViewIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n}\n\ninterface EditIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onRemove?: () => void | undefined;\n}\n\nexport const AggregationInput = ({\n name,\n id,\n label,\n value,\n error = false,\n helperText,\n disabled = false,\n readonly = true,\n labelList,\n icon,\n onSet,\n onView,\n onCreate,\n onRemove,\n onDelete,\n}: AggregationInputProps) => {\n const [focused, setFocused] = useState(false);\n\n let icons: ReactNode;\n\n if (readonly) {\n icons = <ViewIcons value={value} disabled={disabled} onCreate={onCreate} onView={onView} onDelete={onDelete} />;\n } else {\n icons = <EditIcons value={value} disabled={disabled} onRemove={onRemove} />;\n }\n\n return (\n <Grid container item direction=\"row\" justifyContent=\"stretch\" alignContent=\"stretch\">\n <ButtonBase\n sx={{ padding: 0 }}\n disabled={disabled || readonly}\n onFocusCapture={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onClick={onSet}\n >\n <TextField\n disabled={!onSet || disabled}\n name={name}\n id={id}\n label={label}\n error={error}\n helperText={helperText}\n focused={focused}\n fullWidth\n value={labelList.join(' - ')}\n className={!readonly ? undefined : 'Mui-readOnly'}\n sx={{\n ':hover': {\n cursor: 'pointer',\n },\n '.MuiFilledInput-input:hover': {\n cursor: 'pointer',\n },\n }}\n InputProps={{\n readOnly: true,\n startAdornment: <InputAdornment position=\"start\">{icon}</InputAdornment>,\n }}\n />\n </ButtonBase>\n {icons}\n </Grid>\n );\n};\n\nconst ViewIcons = ({ value, disabled, onCreate, onDelete, onView }: ViewIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onView && (\n <IconButton disabled={disabled} onClick={onView}>\n <Visibility />\n </IconButton>\n )}\n {onDelete && (\n <IconButton disabled={disabled} onClick={onDelete}>\n <Delete />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = (\n <>\n {onCreate && (\n <IconButton disabled={disabled} onClick={onCreate}>\n <NoteAdd />\n </IconButton>\n )}\n </>\n );\n }\n\n return <>{icons}</>;\n};\n\nconst EditIcons = ({ value, disabled, onRemove }: EditIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onRemove && (\n <IconButton disabled={disabled} onClick={onRemove}>\n <LinkOff />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = <></>;\n }\n\n return <>{icons}</>;\n};\n","import { Home } from '@mui/icons-material';\nimport { Breadcrumbs, Typography } from '@mui/material';\nimport { useState, useContext, createContext, useMemo, useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport type { To } from 'react-router-dom';\n\ninterface BreadcrumbProviderProps {\n children: ReactNode;\n}\n\nexport type JudoNavigationSetTitle = (pageTitle: string) => void;\n\ninterface JudoNavigationProviderContext {\n clearNavigate: (to: To) => void;\n navigate: (to: To) => void;\n back: () => void;\n isBackDisabled: boolean;\n setTitle: JudoNavigationSetTitle;\n}\n\ninterface BreadcrumbItem {\n key: string;\n path: To;\n label: string | null;\n}\n\n// @ts-ignore\nconst JudoNavigationContextState = createContext<JudoNavigationProviderContext>();\n\nconst BreadcrumbContextState = createContext<BreadcrumbItem[]>([]);\n\nexport const useJudoNavigation = () => {\n const context = useContext(JudoNavigationContextState);\n\n if (context === undefined) {\n throw new Error('useJudoNavigation was used outside of its Provider');\n }\n\n return context;\n};\n\nexport const BreadcrumbProvider = ({ children }: BreadcrumbProviderProps) => {\n const navigate = useNavigate();\n const location = useLocation();\n\n const [breadcrumbItems, setBreadcrumbItems] = useState<BreadcrumbItem[]>([]);\n const [nextBreadcrumbItem, setNextBreadcrumbItem] = useState<BreadcrumbItem>({} as any);\n\n useEffect(() => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return {\n ...prevNextBreadcrumbItem,\n key: '0.' + location.pathname,\n path: location.pathname,\n };\n });\n }, []);\n\n const isBackDisabled = useMemo(() => {\n return breadcrumbItems.length === 0;\n }, [breadcrumbItems]);\n\n const judoNavigationContext = {\n clearNavigate: (to: To) => {\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n navigate: (to: To) => {\n if (nextBreadcrumbItem.label === null) {\n throw Error('Page title has not been set!');\n }\n\n setBreadcrumbItems((prevBreadCrumbItems) => {\n return [...prevBreadCrumbItems, nextBreadcrumbItem];\n });\n\n setNextBreadcrumbItem({\n key: breadcrumbItems.length + '.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n back: () => {\n if (breadcrumbItems.length !== 0) {\n const lastItem = breadcrumbItems[breadcrumbItems.length - 1];\n setNextBreadcrumbItem(lastItem);\n setBreadcrumbItems((prevBreadcrumbItems) => {\n return [...prevBreadcrumbItems.slice(0, prevBreadcrumbItems.length - 1)];\n });\n navigate(lastItem.path);\n return;\n }\n\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + '/'.toString(),\n label: null,\n path: '/',\n });\n\n navigate('/');\n },\n isBackDisabled: isBackDisabled,\n setTitle: (pageTitle: string) => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return { ...prevNextBreadcrumbItem, label: pageTitle };\n });\n },\n };\n\n return (\n <BreadcrumbContextState.Provider value={breadcrumbItems}>\n <JudoNavigationContextState.Provider value={judoNavigationContext}>\n {children}\n </JudoNavigationContextState.Provider>\n </BreadcrumbContextState.Provider>\n );\n};\n\nexport const CustomBreadcrumb = () => {\n const breadcrumbItems = useContext(BreadcrumbContextState);\n\n return (\n <Breadcrumbs maxItems={2} separator=\">\">\n <Home />\n {breadcrumbItems.map(({ label, key }, index) => {\n return (\n <Typography color=\"text.primary\" key={key}>\n {label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n","import { useMatch, useResolvedPath } from 'react-router-dom';\nimport type { LinkProps } from 'react-router-dom';\nimport { theme } from '@judo/theme';\nimport { ListItem, ListItemButton } from '@mui/material';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\nconst customLinkItemStyle = {\n py: '2px',\n px: 3,\n color: theme.palette.text.secondary,\n '&:hover, &:focus': {\n color: theme.palette.secondary.main,\n },\n '&.Mui-selected': {\n color: theme.palette.secondary.main,\n },\n};\n\nexport function CustomLink({ children, to, ...props }: LinkProps) {\n const resolved = useResolvedPath(to);\n const match = useMatch({ path: resolved.pathname, end: true });\n const { clearNavigate } = useJudoNavigation();\n\n const onClickHandler = () => {\n clearNavigate(to);\n };\n\n return (\n <ListItem disablePadding style={{ textDecoration: 'none' }}>\n <ListItemButton selected={!!match} sx={customLinkItemStyle} onClick={onClickHandler}>\n {children}\n </ListItemButton>\n </ListItem>\n );\n}\n","import { Box, Typography } from '@mui/material';\nimport type { HeroProps } from '@judo/components-api';\n\nexport function Hero(props: HeroProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"hero\"\n style={{\n width: '4rem',\n marginRight: '1rem',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n color: 'secondary.main',\n }}\n >\n {props.text}\n </Typography>\n </Box>\n );\n}\n","import { Box, Typography } from '@mui/material';\nimport type { LogoProps } from '@judo/components-api';\n\nexport function Logo(props: LogoProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"logo\"\n style={{\n width: '100%',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n }}\n >\n {props.subTitle}\n </Typography>\n </Box>\n );\n}\n","import { AppBar, Toolbar, Grid, Typography, Divider } from '@mui/material';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ninterface PageHeaderProps {\n title: string;\n children: ReactNode;\n}\n\nexport const PageHeader = ({ title, children }: PageHeaderProps) => {\n const { setTitle } = useJudoNavigation();\n\n useEffect(() => {\n setTitle(title);\n }, [title]);\n\n return (\n <>\n <AppBar component=\"div\" position=\"static\" elevation={0} sx={{ zIndex: 0 }}>\n <Toolbar>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item xs>\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n {title}\n </Typography>\n </Grid>\n {children}\n </Grid>\n </Toolbar>\n </AppBar>\n <Divider />\n </>\n );\n};\n"],"names":["ConfirmationDialog","confirmationMessage","title","resolve","open","handleClose","descriptionElementRef","useRef","useEffect","current","descriptionElement","focus","_jsxs","Dialog","onClose","scroll","fullWidth","maxWidth","children","_jsx","DialogTitle","id","DialogContent","dividers","DialogContentText","ref","tabIndex","DialogActions","Button","variant","onClick","TRINARY_LOGIC","Map","FilterType","e","i","t","r","location","preventDuplicate","persist","duration","autoHideDuration","setValidation","forEach","set","code","a","o","message","marginTop","marginBottom","display","flexDirection","alignItems","palette","mode","primary","main","secondary","text","background","default","subtitleColor","typography","h5","fontWeight","fontSize","letterSpacing","shape","borderRadius","components","MuiTab","defaultProps","disableRipple","mixins","toolbar","minHeight","MuiAppBar","styleOverrides","colorPrimary","backgroundColor","MuiButton","size","root","textTransform","paddingLeft","paddingRight","contained","boxShadow","outlined","border","MuiInputLabel","color","MuiFilledInput","input","WebkitBackgroundClip","borderBottom","MuiTextField","MuiSelect","filled","MuiDataGrid","toolbarContainer","padding","MuiPaper","rounded","MuiDrawer","paper","MuiTabs","marginLeft","spacing","indicator","height","borderTopLeftRadius","borderTopRightRadius","common","white","margin","minWidth","breakpoints","up","MuiIconButton","MuiTooltip","tooltip","MuiDivider","middle","MuiListItemButton","disableTouchRipple","MuiListItemText","fontWeightMedium","MuiListItemIcon","marginRight","MuiAvatar","width","MuiCard","length","l","DropdownButton","menuItems","disabled","showDropdownIcon","setOpen","useState","anchorRef","event","contains","target","handleListKeyDown","key","preventDefault","prevOpen","_Fragment","endIcon","KeyboardArrowDown","Popper","anchorEl","placement","transition","style","zIndex","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","equals","notEquals","lessThan","greaterThan","lessOrEqual","greaterOrEqual","equal","notEqual","matches","like","TrinaryLogicCombobox","readOnly","value","name","error","helperText","onChange","onChangeHandler","Array","from","values","indexOf","keysArray","keys","undefined","TextField","select","get","className","InputProps","startAdornment","InputAdornment","position","CheckBoxOutlined","getDefaultOperator","filterType","boolean","_BooleanOperation","date","dateTime","_NumericOperation","enumeration","_EnumerationOperation","numeric","string","_StringOperation","trinaryLogic","getOperatorsByFilter","filterOption","Object","FilterOperator","setFilterOperator","filterBy","operator","getOperationEnumValue","item","FilterInput","setFilterValue","exists","enumValues","Error","attributeName","FormControlLabel","control","Checkbox","checked","DatePicker","renderInput","props","newValue","toISOString","substring","dateToJudoDateString","Icon","path","mdiCalendarMonth","DateTimePicker","mdiCalendarClock","type","Number","mdiNumeric","mdiFormatTextVariant","FilterRow","closeHandler","Grid","container","xs","IconButton","Close","Transition","forwardRef","Slide","direction","FilterDialog","filters","filterOptions","tempFilters","setTempFilters","updateFilterValue","prevTempFilters","tempFilter","updateFilterOperator","filterCloseHandler","cancel","TransitionComponent","disableEnforceFocus","sx","justifyContent","PaperProps","m","Typography","component","Container","Box","mainContainerPadding","PageDialog","page","ok","CustomTablePagination","TablePagination","count","onPageChange","async","newPage","isNext","setPage","pageChange","rowsPerPage","rowPerPage","rowsPerPageOptions","labelDisplayedRows","to","nextIconButtonProps","isNextButtonEnabled","backIconButtonProps","PageDialogContextState","createContext","ConfirmDialogContextState","RangeDialogContextState","FilterDialogContextState","useFilterDialog","context","useContext","RangeDialog","single","columns","defaultSortField","rangeCall","alreadySelectedItems","initalQueryCustomizer","openFilterDialog","enqueueSnackbar","useSnackbar","isLoading","setIsLoading","rowCount","setRowCount","sortModel","setSortModel","lastItem","setLastItem","firstItem","setFirstItem","setIsNextButtonEnabled","data","setData","selectionModel","setSelectionModel","selectedItems","setSelectedItems","setFilters","queryCustomizer","setQueryCustomizer","_seek","limit","handlePageChange","prevQueryCustomizer","reverse","fetchData","res","pop","s","isAxiosError","n","response","status","errorHandling","DataGrid","autoHeight","getRowId","row","__identifier","loading","paginationMode","rows","sortingOrder","sortingMode","onSortModelChange","newModel","field","sort","_orderBy","attribute","descending","checkboxSelection","onSelectionModelChange","newSelectionModel","isArray","lastId","find","diff","newItemsId","slice","newItems","prevSelectedItems","removedItemsId","isRowSelectable","params","includes","hideFooterSelectedRowCount","keepNonExistentRowsSelected","Toolbar","GridToolbarContainer","newFilters","tempQueryCustomizer","mapFiltersToQueryCustomizerProperty","handleFiltersChange","Pagination","DialogProvider","isOpenPageDialog","setIsOpenPageDialog","pageDialog","setPageDialog","handleClosePageDialog","pageDialogContext","openPageDialog","Promise","isOpenRangeDialog","setIsOpenRangeDialog","rangeDialog","setRangeDialog","handleCloseRangeDialog","customDialogContext","openRangeDialog","initialQueryCustomizer","isOpenConfirmDialog","setIsOpenConfirmDialog","confirmDialog","setConfirmDialog","handleCloseConfirmDialog","confirmDialogContext","openConfirmDialog","isOpenFilterDialog","setIsOpenFilterDialog","filterDialog","setFilterDialog","handleCloseFilterDialog","filterDialogContext","Provider","columnsActionCalculator","actions","options","shownActionsNumber","shownActions","standaloneActions","dropdownActions","sliceNumber","standaloneRowActions","dropdownRowActions","action","headerName","align","renderCell","icon","showLabel","MoreHoriz","AggregationInput","readonly","labelList","onSet","onView","onCreate","onRemove","onDelete","focused","setFocused","icons","ViewIcons","EditIcons","alignContent","ButtonBase","onFocusCapture","onBlur","join","cursor","Visibility","Delete","NoteAdd","LinkOff","JudoNavigationContextState","BreadcrumbContextState","useJudoNavigation","BreadcrumbProvider","navigate","useNavigate","useLocation","breadcrumbItems","setBreadcrumbItems","nextBreadcrumbItem","setNextBreadcrumbItem","prevNextBreadcrumbItem","pathname","judoNavigationContext","clearNavigate","toString","prevBreadCrumbItems","back","prevBreadcrumbItems","isBackDisabled","useMemo","setTitle","pageTitle","CustomBreadcrumb","Breadcrumbs","maxItems","separator","Home","customLinkItemStyle","py","px","theme","CustomLink","resolved","useResolvedPath","match","useMatch","end","ListItem","disablePadding","textDecoration","ListItemButton","selected","Hero","p","src","imgSrc","alt","Logo","subTitle","PageHeader","AppBar","elevation","Divider"],"mappings":"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"}
1
+ {"version":3,"file":"components.mjs","sources":["../../src/dialog/ConfirmationDialog.tsx","../../../components-api/dist/esm/components-api.mjs","../../../utilities/dist/esm/utilities.mjs","../../../theme/dist/esm/theme.mjs","../../../data-api-common/dist/esm/data-api-common.mjs","../../src/DropdownButton.tsx","../../src/TrinaryLogicCombobox.tsx","../../src/dialog/FilterDialog.tsx","../../src/dialog/PageDialog.tsx","../../src/CustomTablePagination.tsx","../../src/dialog/hooks.tsx","../../src/dialog/RangeDialog.tsx","../../src/dialog/DialogProvider.tsx","../../src/table/table-row-actions.tsx","../../src/AggregationInput.tsx","../../src/CustomBreadcrumb.tsx","../../src/Hero.tsx","../../src/Logo.tsx","../../src/MenuTree.tsx","../../src/PageHeader.tsx"],"sourcesContent":["import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ConfirmationDialogProps } from '@judo/components-api';\n\nexport const ConfirmationDialog = ({\n confirmationMessage,\n title,\n resolve,\n open,\n handleClose,\n}: ConfirmationDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(false);\n };\n\n const ok = () => {\n handleClose();\n resolve(true);\n };\n\n return (\n <Dialog open={open} onClose={handleClose} scroll=\"paper\" fullWidth={true} maxWidth={'xs'}>\n {title && <DialogTitle id=\"scroll-dialog-title\">{title}</DialogTitle>}\n <DialogContent dividers={!!title}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n {confirmationMessage}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={cancel}>\n No\n </Button>\n <Button variant=\"text\" onClick={ok}>\n Yes\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","const TRINARY_LOGIC = new Map([\n [null, 'Unknown'],\n [true, 'Yes'],\n [false, 'No'],\n]);\n\nvar FilterType;\n(function (FilterType) {\n FilterType[FilterType[\"boolean\"] = 0] = \"boolean\";\n FilterType[FilterType[\"numeric\"] = 1] = \"numeric\";\n FilterType[FilterType[\"string\"] = 2] = \"string\";\n FilterType[FilterType[\"enumeration\"] = 3] = \"enumeration\";\n FilterType[FilterType[\"date\"] = 4] = \"date\";\n FilterType[FilterType[\"dateTime\"] = 5] = \"dateTime\";\n // time,\n FilterType[FilterType[\"trinaryLogic\"] = 6] = \"trinaryLogic\";\n})(FilterType || (FilterType = {}));\n\nexport { FilterType, TRINARY_LOGIC };\n","const e=e=>null!=e,t=e=>e?e.toISOString().substring(0,10):e,r=(t,r,s)=>{if(!t||\"boolean\"!=typeof t.isAxiosError||!0!==t.isAxiosError)return void a(r);const n=t.response;if(e(n))if(n?.status)if(422===n?.status)r(o(t.response?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0});else{if(400===n?.status)return i(n.data,r,s);r(o(n?.data).message,{variant:\"error\",preventDuplicate:!0,persist:!0})}else a(r);else a(r)},i=(t,r,i)=>{if(e(t[0].location)){if(r(\"Please make sure all fields are filled in correctly.\",{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0}),void 0!==i?.setValidation){let e=new Map;t.forEach((t=>e.set(t.location,t.code))),i?.setValidation(e)}}else r(t[0].code,{variant:\"error\",preventDuplicate:!0,persist:!i?.duration,autoHideDuration:i?.duration??void 0})},a=e=>{e(\"Something went wrong. Please contact with the system admins.\",{variant:\"error\",preventDuplicate:!0,persist:!0})},o=e=>({message:e.code}),s=(e,t)=>{if(e.some((e=>e.filterOption.attributeName===t)))return e.filter((e=>e.filterOption.attributeName===t&&e.filterBy.value)).map((e=>({value:e.filterBy.value,operator:e.filterBy.operator})))},n=(e,...t)=>{let r={};for(const i of t)r[i]=s(e,i);return r};export{t as dateToJudoDateString,r as errorHandling,e as exists,n as mapAllFiltersToQueryCustomizerProperties,s as mapFiltersToQueryCustomizerProperty};\n//# sourceMappingURL=utilities.mjs.map\n","import{createTheme as e,alpha as o}from\"@mui/material\";const i={marginTop:8,marginBottom:8,display:\"flex\",flexDirection:\"column\",alignItems:\"center\"},t=e({palette:{mode:\"light\",primary:{main:\"#3C4166FF\"},secondary:{main:\"#E7501DFF\"},text:{primary:\"#17191DFF\",secondary:\"#434448FF\"},background:{default:\"#FAFAFAFF\"},subtitleColor:{main:\"#8c8c8c\"}},typography:{h5:{fontWeight:500,fontSize:26,letterSpacing:.5}},shape:{borderRadius:8},components:{MuiTab:{defaultProps:{disableRipple:!0}}},mixins:{toolbar:{minHeight:48}}}),r={...t,components:{MuiAppBar:{styleOverrides:{colorPrimary:{backgroundColor:t.palette.background.default}}},MuiButton:{defaultProps:{variant:\"contained\",size:\"small\"},styleOverrides:{root:{textTransform:\"none\",borderRadius:\"20px 20px 20px 20px\",paddingLeft:15,paddingRight:15},contained:{boxShadow:\"none\",\"&:active\":{boxShadow:\"none\"}},outlined:{border:\"2px solid\",fontWeight:\"bold\",\"&:hover\":{border:\"2px solid\",background:o(t.palette.primary.main,.15)}}}},MuiInputLabel:{styleOverrides:{root:{color:t.palette.subtitleColor.main,fontWeight:500,fontSize:16,\"&.Mui-focused\":{color:t.palette.subtitleColor.main}}}},MuiFilledInput:{styleOverrides:{input:{\"&:-webkit-autofill\":{WebkitBackgroundClip:\"text !important\"}},root:{background:\"inherit\",\"&.Mui-focused\":{background:\"inherit\"},\"&:hover:not(.Mui-disabled):not(.Mui-focused)\":{background:o(t.palette.secondary.main,.1)},\"&:hover:not(.Mui-disabled):before\":{borderBottom:\"none\"},\"&.Mui-focused .MuiInputAdornment-root .MuiSvgIcon-root\":{color:t.palette.secondary.main}}}},MuiTextField:{defaultProps:{fullWidth:!0,variant:\"filled\",color:\"secondary\"},styleOverrides:{root:{background:\"white\",\"& .MuiFilledInput-underline:before\":{borderBottom:\"none\"},\"&.Mui-readOnly:not(.Mui-disabled):not(.Mui-focused)\":{borderBottom:`1px solid ${o(t.palette.primary.main,.2)}`,background:\"transparent\"},\"&:not(.Mui-readOnly):not(.Mui-disabled)\":{boxShadow:\"0px 0px 8px 2px rgba(0,0,0,0.05)\",borderRadius:\"8px 8px 0 0\"}}}},MuiSelect:{styleOverrides:{filled:{\"&:focus\":{backgroundColor:\"white\"}}}},MuiDataGrid:{styleOverrides:{root:{border:\"none\"},toolbarContainer:{padding:\"8px 8px 4px 8px\"}}},MuiPaper:{styleOverrides:{rounded:{boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\",borderRadius:16,padding:8}}},MuiDrawer:{styleOverrides:{paper:{border:\"none\",boxShadow:\"0px 0px 8px 1px rgba(0,0,0,0.05)\"}}},MuiTabs:{styleOverrides:{root:{marginLeft:t.spacing(1)},indicator:{height:3,borderTopLeftRadius:3,borderTopRightRadius:3,backgroundColor:t.palette.common.white}}},MuiTab:{styleOverrides:{root:{textTransform:\"none\",margin:\"0 16px\",minWidth:0,padding:0,[t.breakpoints.up(\"md\")]:{padding:0,minWidth:0}}}},MuiIconButton:{styleOverrides:{root:{color:t.palette.secondary.main,padding:t.spacing(1)}}},MuiTooltip:{styleOverrides:{tooltip:{borderRadius:4}}},MuiDivider:{styleOverrides:{root:{backgroundColor:\"rgb(255,255,255,0.15)\"},middle:{marginTop:8,marginBottom:8}}},MuiListItemButton:{defaultProps:{disableTouchRipple:!0}},MuiListItemText:{styleOverrides:{primary:{fontSize:14,fontWeight:t.typography.fontWeightMedium}}},MuiListItemIcon:{styleOverrides:{root:{color:\"inherit\",minWidth:\"auto\",marginRight:t.spacing(2),\"& svg\":{fontSize:20}}}},MuiAvatar:{styleOverrides:{root:{width:32,height:32}}},MuiCard:{styleOverrides:{root:{width:\"100%\",length:\"100%\",padding:10}}}}};export{i as mainContainerPadding,r as theme,t as themeBase};\n//# sourceMappingURL=theme.mjs.map\n","var a,e,l,r;!function(a){a.equals=\"equals\"}(a||(a={})),function(a){a.equals=\"equals\",a.notEquals=\"notEquals\"}(e||(e={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\"}(l||(l={})),function(a){a.lessThan=\"lessThan\",a.greaterThan=\"greaterThan\",a.lessOrEqual=\"lessOrEqual\",a.greaterOrEqual=\"greaterOrEqual\",a.equal=\"equal\",a.notEqual=\"notEqual\",a.matches=\"matches\",a.like=\"like\"}(r||(r={}));export{a as _BooleanOperation,e as _EnumerationOperation,l as _NumericOperation,r as _StringOperation};\n//# sourceMappingURL=data-api-common.mjs.map\n","import { Button, ClickAwayListener, Grow, MenuItem, MenuList, Paper, Popper } from '@mui/material';\nimport { useState, useRef, useEffect } from 'react';\nimport type { ReactNode, KeyboardEvent, SyntheticEvent } from 'react';\nimport { KeyboardArrowDown } from '@mui/icons-material';\n\ninterface DropdownMenuItem {\n disabled?: boolean;\n visible?: boolean;\n label?: string;\n onClick: () => void;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n}\n\ninterface DropdownButtonProps {\n children?: ReactNode;\n id?: string | undefined;\n menuItems: DropdownMenuItem[];\n disabled?: boolean;\n showDropdownIcon?: boolean;\n fullWidth?: boolean;\n variant?: 'text' | 'outlined' | 'contained' | undefined;\n}\n\nexport function DropdownButton({\n children,\n id,\n menuItems,\n disabled = false,\n showDropdownIcon = true,\n fullWidth = false,\n variant = 'contained',\n}: DropdownButtonProps) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLButtonElement>(null);\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: Event | SyntheticEvent) => {\n if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) {\n return;\n }\n\n setOpen(false);\n };\n\n function handleListKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n event.preventDefault();\n setOpen(false);\n } else if (event.key === 'Escape') {\n setOpen(false);\n }\n }\n\n // return focus to the button when we transitioned from !open -> open\n const prevOpen = useRef(open);\n useEffect(() => {\n if (prevOpen.current && !open) {\n anchorRef.current!.focus();\n }\n\n prevOpen.current = open;\n }, [open]);\n\n return (\n <>\n <Button\n ref={anchorRef}\n id={id}\n onClick={handleToggle}\n endIcon={showDropdownIcon && <KeyboardArrowDown />}\n disabled={disabled}\n fullWidth={fullWidth}\n variant={variant}\n >\n {children}\n </Button>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n placement=\"bottom\"\n transition\n style={{ zIndex: 1400, minWidth: anchorRef.current?.scrollWidth }}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom-start' ? 'left top' : 'left bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList autoFocusItem={open} onKeyDown={handleListKeyDown}>\n {menuItems\n .filter((menuItem) => menuItem.visible ?? true)\n .map((menuItem, index) => {\n return (\n <MenuItem\n id={menuItem.label ?? '' + index}\n disabled={menuItem.disabled ?? false}\n onClick={(event) => {\n handleClose(event);\n menuItem.onClick();\n }}\n >\n {menuItem.startIcon}\n {menuItem.label}\n {menuItem.endIcon}\n </MenuItem>\n );\n })}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </>\n );\n}\n","import { CheckBoxOutlined } from '@mui/icons-material';\nimport { TextField, InputAdornment, MenuItem } from '@mui/material';\nimport type { ChangeEvent } from 'react';\nimport { TRINARY_LOGIC } from '@judo/components-api';\n\ninterface TrinaryLogicProps {\n readOnly?: boolean;\n value?: boolean | null;\n id?: string;\n label: string;\n name?: string;\n error?: boolean | undefined;\n helperText?: string | undefined;\n onChange?: (value: boolean | null) => void;\n}\n\nconst TrinaryLogicCombobox = ({\n readOnly = false,\n value = null,\n id,\n label,\n name,\n error,\n helperText,\n onChange,\n}: TrinaryLogicProps) => {\n const onChangeHandler = onChange\n ? (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n const index = Array.from(TRINARY_LOGIC.values()).indexOf(event.target.value);\n const keysArray = Array.from(TRINARY_LOGIC.keys());\n onChange(keysArray[index]);\n }\n : undefined;\n\n return (\n <TextField\n name={name}\n id={id}\n label={label}\n select\n value={TRINARY_LOGIC.get(value)}\n onChange={onChangeHandler}\n className={readOnly ? 'Mui-readOnly' : undefined}\n error={error}\n helperText={helperText}\n InputProps={{\n readOnly: readOnly,\n startAdornment: (\n <InputAdornment position=\"start\">\n <CheckBoxOutlined />\n </InputAdornment>\n ),\n }}\n >\n {Array.from(TRINARY_LOGIC.keys()).map((key) => (\n <MenuItem key={TRINARY_LOGIC.get(key)} value={TRINARY_LOGIC.get(key)}>\n {TRINARY_LOGIC.get(key)}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default TrinaryLogicCombobox;\n","import { mdiCalendarClock, mdiCalendarMonth, mdiFormatTextVariant, mdiNumeric } from '@mdi/js';\nimport Icon from '@mdi/react';\nimport { Close } from '@mui/icons-material';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n Slide,\n Box,\n Container,\n Grid,\n TextField,\n MenuItem,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n Typography,\n} from '@mui/material';\nimport type { TransitionProps } from '@mui/material/transitions';\nimport { DatePicker, DateTimePicker } from '@mui/x-date-pickers';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { ChangeEvent, ReactElement, Ref } from 'react';\nimport type {\n Filter,\n FilterDialogProps,\n FilterInputProps,\n FilterOperatorProps,\n FilterProps,\n Operation,\n} from '@judo/components-api';\nimport { FilterType } from '@judo/components-api';\nimport { dateToJudoDateString, exists } from '@judo/utilities';\nimport { mainContainerPadding } from '@judo/theme';\nimport { _BooleanOperation, _EnumerationOperation, _NumericOperation, _StringOperation } from '@judo/data-api-common';\nimport { DropdownButton } from '../DropdownButton';\nimport TrinaryLogicCombobox from '../TrinaryLogicCombobox';\n\nconst getDefaultOperator = (filterType: FilterType) => {\n switch (filterType) {\n case FilterType.boolean:\n return _BooleanOperation['equals'];\n case FilterType.date:\n return _NumericOperation['equal'];\n case FilterType.dateTime:\n return _NumericOperation['equal'];\n // case FilterType.time:\n // return _NumericOperation['equal'];\n case FilterType.enumeration:\n return _EnumerationOperation['equals'];\n case FilterType.numeric:\n return _NumericOperation['equal'];\n case FilterType.string:\n return _StringOperation['equal'];\n case FilterType.trinaryLogic:\n return _BooleanOperation['equals'];\n }\n};\n\nconst getOperationEnumValue = (filter: Filter, operator: string) => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.date:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.dateTime:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n // case FilterType.time:\n // return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.enumeration:\n return _EnumerationOperation[operator as keyof typeof _BooleanOperation];\n case FilterType.numeric:\n return _NumericOperation[operator as keyof typeof _NumericOperation];\n case FilterType.string:\n return _StringOperation[operator as keyof typeof _StringOperation];\n case FilterType.trinaryLogic:\n return _BooleanOperation[operator as keyof typeof _BooleanOperation];\n }\n};\n\nconst getOperatorsByFilter = (filter: Filter): string[] => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return Object.values(_BooleanOperation);\n case FilterType.date:\n return Object.values(_NumericOperation);\n case FilterType.dateTime:\n return Object.values(_NumericOperation);\n // case FilterType.time:\n // return Object.values(_NumericOperation);\n case FilterType.enumeration:\n return Object.values(_EnumerationOperation);\n case FilterType.numeric:\n return Object.values(_NumericOperation);\n case FilterType.string:\n return Object.values(_StringOperation);\n case FilterType.trinaryLogic:\n return Object.values(_BooleanOperation);\n }\n};\n\nconst FilterOperator = ({ filter, setFilterOperator }: FilterOperatorProps) => {\n const onChangeHandler = (event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {\n setFilterOperator(filter, getOperationEnumValue(filter, event.target.value));\n };\n\n return (\n <TextField\n name={'operation'}\n id={'operation'}\n label={'Operation'}\n select\n value={filter.filterBy.operator}\n onChange={onChangeHandler}\n >\n {getOperatorsByFilter(filter).map((item) => (\n <MenuItem key={item} value={item}>\n {/* TODO: do not forget localization here*/}\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nconst FilterInput = ({ filter, setFilterValue }: FilterInputProps) => {\n if (filter.filterOption.filterType === FilterType.enumeration && !exists(filter.filterOption.enumValues)) {\n throw new Error(`Missing enumValues from FilterOptions of ${filter.filterOption.attributeName}`);\n }\n\n return (\n <>\n {(() => {\n switch (filter.filterOption.filterType) {\n case FilterType.boolean:\n return (\n <FormControlLabel\n control={\n <Checkbox\n checked={!!filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, !!event.target.value)}\n />\n }\n label={filter.filterOption.attributeName}\n />\n );\n case FilterType.date:\n return (\n <DatePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, dateToJudoDateString(newValue))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarMonth} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.dateTime:\n return (\n <DateTimePicker\n renderInput={(props) => <TextField {...props} />}\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value ?? null}\n onChange={(newValue) => setFilterValue(filter, newValue)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiCalendarClock} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n // case FilterType.time:\n // return (\n // <TextField\n // label={filter.filterOption.attributeName}\n // value={filter.filterBy.value}\n // onChange={(event) => setFilterValue(filter, event.target.value)}\n // InputProps={{\n // startAdornment: (\n // <InputAdornment position=\"start\">\n // <Icon path={mdiClockOutline} size={1} />\n // </InputAdornment>\n // ),\n // }}\n // />\n // );\n case FilterType.enumeration:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n select\n onChange={(event) => setFilterValue(filter, event.target.value)}\n >\n {filter.filterOption.enumValues?.map((item) => (\n <MenuItem key={item} value={item}>\n {item}\n </MenuItem>\n ))}\n </TextField>\n );\n case FilterType.numeric:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n type=\"number\"\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, Number(event.target.value))}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiNumeric} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.string:\n return (\n <TextField\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(event) => setFilterValue(filter, event.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Icon path={mdiFormatTextVariant} size={1} />\n </InputAdornment>\n ),\n }}\n />\n );\n case FilterType.trinaryLogic:\n return (\n <TrinaryLogicCombobox\n label={filter.filterOption.attributeName}\n value={filter.filterBy.value}\n onChange={(value) => setFilterValue(filter, value)}\n />\n );\n }\n })()}\n </>\n );\n};\n\nconst FilterRow = ({ filter, closeHandler, setFilterOperator, setFilterValue }: FilterProps) => {\n return (\n <Grid item container spacing={2} alignItems={'center'}>\n <Grid item xs={4}>\n {filter && <FilterOperator filter={filter} setFilterOperator={setFilterOperator} />}\n </Grid>\n <Grid item xs={7}>\n {filter && <FilterInput filter={filter} setFilterValue={setFilterValue} />}\n </Grid>\n <Grid item xs={1}>\n <IconButton onClick={() => closeHandler(filter)}>\n <Close />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & {\n children: ReactElement<any, any>;\n },\n ref: Ref<unknown>,\n) {\n return <Slide direction=\"left\" ref={ref} {...props} />;\n});\n\nexport const FilterDialog = ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [tempFilters, setTempFilters] = useState<Filter[]>(filters ?? []);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const updateFilterValue = (filter: Filter, value: any) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: value, operator: tempFilter.filterBy.operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const updateFilterOperator = (filter: Filter, operator: Operation) => {\n setTempFilters((prevTempFilters) => {\n return prevTempFilters.map((tempFilter) => {\n if (filter.id === tempFilter.id) {\n return {\n ...tempFilter,\n filterBy: { value: tempFilter.filterBy.value, operator: operator },\n };\n }\n\n return tempFilter;\n });\n });\n };\n\n const filterCloseHandler = (filter: Filter) => {\n setTempFilters((prevTempFilters) => [...prevTempFilters.filter((tempFilter) => tempFilter.id !== filter.id)]);\n };\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(tempFilters);\n };\n\n return (\n <Dialog\n open={open}\n onClose={cancel}\n scroll=\"paper\"\n TransitionComponent={Transition}\n disableEnforceFocus\n fullWidth\n maxWidth=\"sm\"\n sx={{\n '& .MuiDialog-container': {\n justifyContent: 'flex-end',\n },\n }}\n PaperProps={{\n sx: {\n m: 0,\n height: '100%',\n },\n }}\n >\n <DialogTitle id=\"scroll-dialog-title\">\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n Filters\n </Typography>\n </DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <Container component=\"main\" maxWidth=\"xs\">\n <Box sx={mainContainerPadding}>\n <Grid container spacing={2}>\n {tempFilters.map((filter) => (\n <FilterRow\n key={filter.id}\n filter={filter}\n closeHandler={filterCloseHandler}\n setFilterOperator={updateFilterOperator}\n setFilterValue={updateFilterValue}\n />\n ))}\n <Grid item container>\n <DropdownButton\n fullWidth={true}\n showDropdownIcon={false}\n menuItems={filterOptions.map((filterOption) => {\n return {\n label: filterOption.label ?? filterOption.attributeName,\n onClick: () =>\n setTempFilters((prevTempFilters) => [\n ...prevTempFilters,\n {\n id: prevTempFilters.length,\n filterOption: {\n attributeName: filterOption.attributeName,\n label: filterOption.label,\n filterType: filterOption.filterType,\n },\n filterBy: {\n operator: getDefaultOperator(filterOption.filterType),\n },\n },\n ]),\n };\n })}\n >\n Add new filter\n </DropdownButton>\n </Grid>\n </Grid>\n </Box>\n </Container>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button fullWidth variant=\"outlined\" onClick={cancel}>\n Cancel\n </Button>\n <Button fullWidth onClick={ok}>\n Apply {'(' + tempFilters.length + ')'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface PageDialogProps {\n page: ReactNode;\n open: boolean;\n handleClose: () => void;\n resolve: () => void;\n}\n\nexport const PageDialog = ({ page, open, handleClose, resolve }: PageDialogProps) => {\n const descriptionElementRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const ok = () => {\n resolve();\n handleClose();\n };\n\n return (\n <Dialog open={open} onClose={ok} scroll=\"paper\">\n <DialogContent dividers={true}>\n <DialogContentText ref={descriptionElementRef} tabIndex={-1}>\n {page}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { TablePagination } from '@mui/material';\nimport type { MouseEvent, Dispatch, SetStateAction } from 'react';\n\nexport interface CustomTablePaginationProps {\n pageChange: (isNext: boolean) => Promise<void>;\n isNextButtonEnabled: boolean;\n page: number;\n rowPerPage: number;\n setPage: Dispatch<SetStateAction<number>>;\n}\n\nexport const CustomTablePagination = (props: CustomTablePaginationProps) => {\n const handleChangePage = async (event: MouseEvent<HTMLButtonElement> | null, newPage: number) => {\n let isNext = true;\n if (newPage < props.page) {\n isNext = false;\n }\n\n props.setPage(newPage);\n\n await props.pageChange(isNext);\n };\n\n return (\n <TablePagination\n component=\"div\"\n count={-1}\n page={props.page}\n onPageChange={handleChangePage}\n rowsPerPage={props.rowPerPage}\n rowsPerPageOptions={[props.rowPerPage]}\n labelDisplayedRows={({ from, to }) => `${from}–${to}`}\n nextIconButtonProps={{\n disabled: !props.isNextButtonEnabled,\n }}\n backIconButtonProps={{\n disabled: props.page === 0,\n }}\n />\n );\n};\n","import { createContext, useContext } from 'react';\nimport {\n ConfirmDialogProviderContext,\n FilterDialogProviderContext,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\n\n// @ts-ignore\nexport const PageDialogContextState = createContext<PageDialogProviderContext>();\n\n// @ts-ignore\nexport const ConfirmDialogContextState = createContext<ConfirmDialogProviderContext>();\n\n// @ts-ignore\nexport const RangeDialogContextState = createContext<RangeDialogProviderContext>();\n\n// @ts-ignore\nexport const FilterDialogContextState = createContext<FilterDialogProviderContext>();\n\nexport const useFilterDialog = () => {\n const context = useContext(FilterDialogContextState);\n\n if (context === undefined) {\n throw new Error('useFilterDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst usePageDialog = () => {\n const context = useContext(PageDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useConfirmDialog = () => {\n const context = useContext(ConfirmDialogContextState);\n\n if (context === undefined) {\n throw new Error('useConfirmDialog was used outside of its Provider');\n }\n\n return context;\n};\n\nconst useRangeDialog = () => {\n const context = useContext(RangeDialogContextState);\n\n if (context === undefined) {\n throw new Error('useRangeDialog was used outside of its Provider');\n }\n\n return context;\n};\n","import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport {\n GridSortModel,\n GridRowModel,\n DataGrid,\n GridRowParams,\n GridColumns,\n GridSortItem,\n GridSelectionModel,\n GridToolbarContainer,\n GridRowId,\n} from '@mui/x-data-grid';\nimport { useSnackbar } from 'notistack';\nimport { useEffect, useRef, useState } from 'react';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport { errorHandling } from '@judo/utilities';\nimport { CustomTablePagination } from '../CustomTablePagination';\nimport { useFilterDialog } from './hooks';\n\ninterface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {\n resolve: (value: any) => void;\n open: boolean;\n handleClose: () => void;\n single?: boolean;\n columns: GridColumns<T>;\n defaultSortField: GridSortItem;\n rangeCall: (queryCustomizer: U) => Promise<Array<T>>;\n alreadySelectedItems: GridSelectionModel | GridRowId;\n initalQueryCustomizer: U;\n filterOptions: FilterOption[];\n}\n\nexport const RangeDialog = <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n resolve,\n open,\n handleClose,\n single = false,\n columns,\n defaultSortField,\n rangeCall,\n alreadySelectedItems,\n initalQueryCustomizer,\n filterOptions,\n}: RangeDialogProps<T, U>) => {\n const { openFilterDialog } = useFilterDialog();\n const { enqueueSnackbar } = useSnackbar();\n\n const descriptionElementRef = useRef<HTMLElement>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [rowCount, setRowCount] = useState<number>(0);\n const [sortModel, setSortModel] = useState<GridSortModel>([defaultSortField]);\n const [lastItem, setLastItem] = useState<T>();\n const [firstItem, setFirstItem] = useState<T>();\n const [isNextButtonEnabled, setIsNextButtonEnabled] = useState<boolean>(true);\n const [page, setPage] = useState<number>(0);\n const [data, setData] = useState<GridRowModel<T>[]>([]);\n const [selectionModel, setSelectionModel] = useState<GridSelectionModel | GridRowId | undefined>(\n alreadySelectedItems ?? (single ? undefined : []),\n );\n const [selectedItems, setSelectedItems] = useState<T[] | T | undefined>([]);\n const [filters, setFilters] = useState<Filter[]>([]);\n const [queryCustomizer, setQueryCustomizer] = useState<U>({\n ...initalQueryCustomizer,\n _seek: {\n limit: 6,\n },\n });\n\n const handlePageChange = async (isNext: boolean) => {\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _seek: {\n limit: isNext ? 6 : 5,\n reverse: !isNext,\n lastItem: isNext ? lastItem : firstItem,\n },\n };\n });\n\n setIsNextButtonEnabled(!isNext);\n };\n\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const res = await rangeCall(queryCustomizer);\n\n if (res.length > 5) {\n setIsNextButtonEnabled(true);\n res.pop();\n } else if (queryCustomizer._seek?.limit === 6) {\n setIsNextButtonEnabled(false);\n }\n\n setData(res);\n setFirstItem(res[0]);\n setLastItem(res[res.length - 1]);\n setRowCount(res.length || 0);\n } catch (error) {\n errorHandling(error, enqueueSnackbar);\n }\n setIsLoading(false);\n };\n\n const handleFiltersChange = (newFilters: Filter[]) => {\n setPage(0);\n setFilters(newFilters);\n\n // @ts-ignore\n setQueryCustomizer((prevQueryCustomizer) => {\n const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n filterOptions.forEach(\n (filter) =>\n // @ts-ignore\n (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n newFilters,\n filter.attributeName,\n )),\n );\n\n return {\n ...prevQueryCustomizer,\n _seek: {\n lastItem: undefined,\n limit: 6,\n reverse: undefined,\n },\n ...tempQueryCustomizer,\n };\n });\n };\n\n const handleSortModelChange = (newModel: GridSortModel) => {\n setPage(0);\n setSortModel(newModel);\n\n const { field, sort } = newModel[0];\n\n setQueryCustomizer((prevQueryCustomizer) => {\n return {\n ...prevQueryCustomizer,\n _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n };\n });\n };\n\n // useEffect(() => {\n // setPage(0);\n // const { field, sort } = sortModel[0];\n\n // setQueryCustomizer((prevQueryCustomizer) => {\n // const tempQueryCustomizer = { ...prevQueryCustomizer };\n\n // filterOptions.forEach(\n // (filter) =>\n // // @ts-ignore\n // (tempQueryCustomizer[filter.attributeName] = mapFiltersToQueryCustomizerProperty(\n // filters,\n // filter.attributeName,\n // )),\n // );\n\n // return {\n // ...prevQueryCustomizer,\n // _seek: {\n // lastItem: undefined,\n // limit: 6,\n // reverse: undefined,\n // },\n // _orderBy: [{ attribute: field, descending: sort === 'desc' }],\n // ...tempQueryCustomizer,\n // };\n // });\n // }, [sortModel, filters]);\n\n useEffect(() => {\n fetchData();\n }, [queryCustomizer]);\n\n useEffect(() => {\n if (open) {\n const { current: descriptionElement } = descriptionElementRef;\n if (descriptionElement !== null) {\n descriptionElement.focus();\n }\n }\n }, [open]);\n\n const cancel = () => {\n handleClose();\n resolve(undefined);\n };\n\n const ok = () => {\n handleClose();\n resolve(selectedItems);\n };\n\n const handleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (!Array.isArray(selectionModel)) return;\n\n // added new items\n if (newSelectionModel.length > selectionModel.length) {\n const diff = newSelectionModel.length - selectionModel.length;\n const newItemsId = [...newSelectionModel].slice(diff * -1);\n const newItems = data.filter((value) => newItemsId.indexOf(value.__identifier as GridRowId) !== -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems, ...newItems];\n });\n }\n\n // removed items\n if (newSelectionModel.length < selectionModel.length) {\n const removedItemsId = selectionModel.filter((value) => newSelectionModel.indexOf(value) === -1);\n setSelectedItems((prevSelectedItems) => {\n if (!Array.isArray(prevSelectedItems)) return;\n\n return [...prevSelectedItems.filter((value) => removedItemsId.indexOf(value.__identifier as GridRowId) === -1)];\n });\n }\n\n setSelectionModel(newSelectionModel);\n };\n\n const handleSingleOnSelection = (newSelectionModel: GridSelectionModel) => {\n if (Array.isArray(selectionModel)) return;\n\n if (newSelectionModel.length === 0) {\n setSelectionModel('');\n setSelectedItems(undefined);\n return;\n }\n\n const lastId = newSelectionModel[newSelectionModel.length - 1];\n\n setSelectionModel(lastId);\n setSelectedItems(data.find((value) => value.__identifier === lastId));\n };\n\n const handleIsRowSelectable = (params: GridRowParams<T>) => {\n if (alreadySelectedItems) {\n if (!Array.isArray(alreadySelectedItems)) throw Error('Range dialog gets wrong alreadySelectedItems.');\n\n return !alreadySelectedItems.includes(params.id);\n }\n\n return true;\n };\n\n return (\n <Dialog open={open} onClose={cancel} scroll=\"paper\" fullWidth={true} maxWidth={'sm'}>\n <DialogTitle id=\"scroll-dialog-title\">Select</DialogTitle>\n <DialogContent dividers={true}>\n <DialogContentText id=\"scroll-dialog-description\" ref={descriptionElementRef} tabIndex={-1}>\n <DataGrid\n sx={\n single\n ? {\n '.MuiDataGrid-columnHeaderCheckbox .MuiDataGrid-columnHeaderTitleContainer': {\n display: 'none',\n },\n }\n : undefined\n }\n autoHeight\n getRowId={(row: T) => row.__identifier as GridRowId}\n loading={isLoading}\n paginationMode=\"server\"\n rows={data}\n rowCount={rowCount}\n sortingOrder={['desc', 'asc']}\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n checkboxSelection\n onSelectionModelChange={!single ? handleOnSelection : handleSingleOnSelection}\n isRowSelectable={!single ? handleIsRowSelectable : undefined}\n selectionModel={selectionModel}\n hideFooterSelectedRowCount={single}\n columns={columns}\n keepNonExistentRowsSelected\n components={{\n Toolbar: () => (\n <GridToolbarContainer>\n <Button\n variant=\"outlined\"\n onClick={async () => {\n const newFilters = await openFilterDialog(filterOptions, filters);\n\n if (newFilters) {\n handleFiltersChange(newFilters);\n }\n }}\n disabled={isLoading}\n >\n Set filters {filters.length !== 0 ? '(' + filters.length + ')' : ''}\n </Button>\n </GridToolbarContainer>\n ),\n Pagination: () => (\n <CustomTablePagination\n pageChange={handlePageChange}\n isNextButtonEnabled={isNextButtonEnabled}\n page={page}\n setPage={setPage}\n rowPerPage={5}\n />\n ),\n }}\n />\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancel}>Cancel</Button>\n <Button onClick={ok}>Ok</Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { ConfirmationDialog } from './ConfirmationDialog';\nimport { FilterDialog } from './FilterDialog';\nimport { PageDialog } from './PageDialog';\nimport { RangeDialog } from './RangeDialog';\nimport type {\n ConfirmDialogProviderContext,\n DialogProviderProps,\n FilterDialogProviderContext,\n OpenRangeDialogProps,\n PageDialogProviderContext,\n RangeDialogProviderContext,\n} from '@judo/components-api';\nimport type { Filter, FilterOption } from '@judo/components-api';\nimport type { JudoStored, QueryCustomizer } from '@judo/data-api-common';\nimport {\n ConfirmDialogContextState,\n FilterDialogContextState,\n PageDialogContextState,\n RangeDialogContextState,\n} from './hooks';\n\nexport const DialogProvider = ({ children }: DialogProviderProps) => {\n // Page Dialog\n const [isOpenPageDialog, setIsOpenPageDialog] = useState(false);\n const [pageDialog, setPageDialog] = useState<ReactNode>();\n\n const handleClosePageDialog = () => {\n setIsOpenPageDialog(false);\n };\n\n const handleOpenPageDialog = async (page: ReactNode) => {\n setIsOpenPageDialog(true);\n return new Promise<void>((resolve) => {\n setPageDialog(<PageDialog page={page} handleClose={handleClosePageDialog} open={true} resolve={resolve} />);\n });\n };\n\n const pageDialogContext: PageDialogProviderContext = {\n openPageDialog: handleOpenPageDialog,\n };\n\n // Range Dialog\n const [isOpenRangeDialog, setIsOpenRangeDialog] = useState(false);\n const [rangeDialog, setRangeDialog] = useState<ReactNode>();\n\n const handleCloseRangeDialog = () => {\n setIsOpenRangeDialog(false);\n };\n\n const handleOpenRangeDialog = async <T extends JudoStored<T>, U extends QueryCustomizer<T>>({\n columns,\n defaultSortField,\n rangeCall,\n single = false,\n alreadySelectedItems,\n filterOptions,\n initialQueryCustomizer,\n }: OpenRangeDialogProps<T, U>) => {\n setIsOpenRangeDialog(true);\n\n return new Promise<T[] | T>((resolve) => {\n setRangeDialog(\n <RangeDialog<T, U>\n handleClose={handleCloseRangeDialog}\n open={true}\n resolve={resolve}\n columns={columns}\n defaultSortField={defaultSortField}\n rangeCall={rangeCall}\n single={single}\n alreadySelectedItems={alreadySelectedItems}\n filterOptions={filterOptions}\n initalQueryCustomizer={initialQueryCustomizer}\n />,\n );\n });\n };\n\n const customDialogContext: RangeDialogProviderContext = {\n openRangeDialog: handleOpenRangeDialog,\n };\n\n // Confirmation Dialog\n const [isOpenConfirmDialog, setIsOpenConfirmDialog] = useState(false);\n const [confirmDialog, setConfirmDialog] = useState<ReactNode>();\n\n const handleCloseConfirmDialog = () => {\n setIsOpenConfirmDialog(false);\n return false;\n };\n\n const handleOpenConfirmDialog = async (confirmationMessage: string | ReactNode, title?: string | ReactNode) => {\n setIsOpenConfirmDialog(true);\n\n return new Promise<boolean>((resolve) => {\n setConfirmDialog(\n <ConfirmationDialog\n confirmationMessage={confirmationMessage}\n title={title}\n handleClose={handleCloseConfirmDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const confirmDialogContext: ConfirmDialogProviderContext = {\n openConfirmDialog: handleOpenConfirmDialog,\n };\n\n // Filter dialog\n const [isOpenFilterDialog, setIsOpenFilterDialog] = useState(false);\n const [filterDialog, setFilterDialog] = useState<ReactNode>();\n\n const handleCloseFilterDialog = () => {\n setIsOpenFilterDialog(false);\n return false;\n };\n\n const handleOpenFilterDialog = async (filterOptions: FilterOption[], filters?: Filter[]) => {\n setIsOpenFilterDialog(true);\n\n return new Promise<Filter[]>((resolve) => {\n setFilterDialog(\n <FilterDialog\n filters={filters}\n filterOptions={filterOptions}\n handleClose={handleCloseFilterDialog}\n open={true}\n resolve={resolve}\n />,\n );\n });\n };\n\n const filterDialogContext: FilterDialogProviderContext = {\n openFilterDialog: handleOpenFilterDialog,\n };\n\n return (\n <PageDialogContextState.Provider value={pageDialogContext}>\n <ConfirmDialogContextState.Provider value={confirmDialogContext}>\n <RangeDialogContextState.Provider value={customDialogContext}>\n <FilterDialogContextState.Provider value={filterDialogContext}>\n {children}\n {isOpenPageDialog && pageDialog}\n {isOpenConfirmDialog && confirmDialog}\n {isOpenRangeDialog && rangeDialog}\n {isOpenFilterDialog && filterDialog}\n </FilterDialogContextState.Provider>\n </RangeDialogContextState.Provider>\n </ConfirmDialogContextState.Provider>\n </PageDialogContextState.Provider>\n );\n};\n","import type { ColumnActionsProvider, ColumnsActionsOptions, TableRowAction } from '@judo/utilities';\nimport { exists } from '@judo/utilities';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { GridColDef, GridRenderCellParams } from '@mui/x-data-grid';\nimport { DropdownButton } from '../DropdownButton';\n\nexport const columnsActionCalculator: ColumnActionsProvider<any> = (\n actions: TableRowAction<any>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n if (!exists(actions) || actions.length === 0) {\n return [];\n }\n\n let shownActionsNumber = 1;\n if (options?.shownActions) {\n shownActionsNumber = actions.length < options.shownActions ? actions.length : options.shownActions;\n }\n\n if (shownActionsNumber < 0) {\n return standaloneActions(actions, options);\n } else if (shownActionsNumber === 0) {\n return [];\n } else if (shownActionsNumber === 1) {\n return dropdownActions(actions, options);\n } else {\n const sliceNumber = actions.length === shownActionsNumber ? shownActionsNumber : shownActionsNumber - 1;\n const standaloneRowActions = actions.slice(0, sliceNumber);\n const dropdownRowActions = actions.slice(sliceNumber);\n\n return [...standaloneActions(standaloneRowActions, options), ...dropdownActions(dropdownRowActions, options)];\n }\n};\n\nconst standaloneActions: ColumnActionsProvider<unknown> = (\n actions: TableRowAction<unknown>[],\n options?: ColumnsActionsOptions,\n): GridColDef[] => {\n return actions.map((action, index) => {\n return {\n field: action.label + index,\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <Button variant=\"text\" onClick={() => action.action(params.row)}>\n {action.icon}\n {(options?.showLabel ?? true) && action.label}\n </Button>\n );\n },\n };\n });\n};\n\nconst dropdownActions: ColumnActionsProvider<unknown> = (actions: TableRowAction<unknown>[]): GridColDef[] => {\n if (actions.length === 0) return [];\n\n return [\n {\n field: 'actions',\n headerName: '',\n align: 'center',\n type: 'actions',\n renderCell: (params: GridRenderCellParams) => {\n return (\n <DropdownButton\n variant=\"text\"\n showDropdownIcon={false}\n menuItems={actions.map((action) => {\n return {\n label: action.label,\n startIcon: action.icon,\n onClick: () => action.action(params.row),\n };\n })}\n >\n <MoreHoriz />\n </DropdownButton>\n );\n },\n },\n ];\n};\n","import { Delete, LinkOff, NoteAdd, Visibility } from '@mui/icons-material';\nimport { ButtonBase, Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { exists } from '@judo/utilities';\n\ninterface AggregationInputProps {\n name?: string;\n id?: string;\n label?: string;\n value: any | undefined | null;\n error?: boolean | undefined;\n helperText?: string | undefined;\n disabled?: boolean | undefined;\n readonly?: boolean | undefined;\n labelList: string[];\n icon?: ReactNode;\n onSet?: () => Promise<void> | undefined;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n onRemove?: () => void | undefined;\n}\n\ninterface ViewIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onView?: () => void | undefined;\n onCreate?: () => void | undefined;\n onDelete?: () => Promise<void> | undefined;\n}\n\ninterface EditIconsProps {\n value: any | undefined | null;\n disabled: boolean;\n onRemove?: () => void | undefined;\n}\n\nexport const AggregationInput = ({\n name,\n id,\n label,\n value,\n error = false,\n helperText,\n disabled = false,\n readonly = true,\n labelList,\n icon,\n onSet,\n onView,\n onCreate,\n onRemove,\n onDelete,\n}: AggregationInputProps) => {\n const [focused, setFocused] = useState(false);\n\n let icons: ReactNode;\n\n if (readonly) {\n icons = <ViewIcons value={value} disabled={disabled} onCreate={onCreate} onView={onView} onDelete={onDelete} />;\n } else {\n icons = <EditIcons value={value} disabled={disabled} onRemove={onRemove} />;\n }\n\n return (\n <Grid container item direction=\"row\" justifyContent=\"stretch\" alignContent=\"stretch\">\n <ButtonBase\n sx={{ padding: 0 }}\n disabled={disabled || readonly}\n onFocusCapture={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onClick={onSet}\n >\n <TextField\n disabled={!onSet || disabled}\n name={name}\n id={id}\n label={label}\n error={error}\n helperText={helperText}\n focused={focused}\n fullWidth\n value={labelList.join(' - ')}\n className={!readonly ? undefined : 'Mui-readOnly'}\n sx={{\n ':hover': {\n cursor: 'pointer',\n },\n '.MuiFilledInput-input:hover': {\n cursor: 'pointer',\n },\n }}\n InputProps={{\n readOnly: true,\n startAdornment: <InputAdornment position=\"start\">{icon}</InputAdornment>,\n }}\n />\n </ButtonBase>\n {icons}\n </Grid>\n );\n};\n\nconst ViewIcons = ({ value, disabled, onCreate, onDelete, onView }: ViewIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onView && (\n <IconButton disabled={disabled} onClick={onView}>\n <Visibility />\n </IconButton>\n )}\n {onDelete && (\n <IconButton disabled={disabled} onClick={onDelete}>\n <Delete />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = (\n <>\n {onCreate && (\n <IconButton disabled={disabled} onClick={onCreate}>\n <NoteAdd />\n </IconButton>\n )}\n </>\n );\n }\n\n return <>{icons}</>;\n};\n\nconst EditIcons = ({ value, disabled, onRemove }: EditIconsProps) => {\n let icons: ReactNode;\n\n if (exists(value)) {\n icons = (\n <>\n {onRemove && (\n <IconButton disabled={disabled} onClick={onRemove}>\n <LinkOff />\n </IconButton>\n )}\n </>\n );\n } else {\n icons = <></>;\n }\n\n return <>{icons}</>;\n};\n","import { Home } from '@mui/icons-material';\nimport { Breadcrumbs, Typography } from '@mui/material';\nimport { useState, useContext, createContext, useMemo, useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport type { To } from 'react-router-dom';\n\ninterface BreadcrumbProviderProps {\n children: ReactNode;\n}\n\nexport type JudoNavigationSetTitle = (pageTitle: string) => void;\n\ninterface JudoNavigationProviderContext {\n clearNavigate: (to: To) => void;\n navigate: (to: To) => void;\n back: () => void;\n isBackDisabled: boolean;\n setTitle: JudoNavigationSetTitle;\n}\n\ninterface BreadcrumbItem {\n key: string;\n path: To;\n label: string | null;\n}\n\n// @ts-ignore\nconst JudoNavigationContextState = createContext<JudoNavigationProviderContext>();\n\nconst BreadcrumbContextState = createContext<BreadcrumbItem[]>([]);\n\nexport const useJudoNavigation = () => {\n const context = useContext(JudoNavigationContextState);\n\n if (context === undefined) {\n throw new Error('useJudoNavigation was used outside of its Provider');\n }\n\n return context;\n};\n\nexport const BreadcrumbProvider = ({ children }: BreadcrumbProviderProps) => {\n const navigate = useNavigate();\n const location = useLocation();\n\n const [breadcrumbItems, setBreadcrumbItems] = useState<BreadcrumbItem[]>([]);\n const [nextBreadcrumbItem, setNextBreadcrumbItem] = useState<BreadcrumbItem>({} as any);\n\n useEffect(() => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return {\n ...prevNextBreadcrumbItem,\n key: '0.' + location.pathname,\n path: location.pathname,\n };\n });\n }, []);\n\n const isBackDisabled = useMemo(() => {\n return breadcrumbItems.length === 0;\n }, [breadcrumbItems]);\n\n const judoNavigationContext = {\n clearNavigate: (to: To) => {\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n navigate: (to: To) => {\n if (nextBreadcrumbItem.label === null) {\n throw Error('Page title has not been set!');\n }\n\n setBreadcrumbItems((prevBreadCrumbItems) => {\n return [...prevBreadCrumbItems, nextBreadcrumbItem];\n });\n\n setNextBreadcrumbItem({\n key: breadcrumbItems.length + '.' + to.toString(),\n label: null,\n path: to,\n });\n\n navigate(to);\n },\n back: () => {\n if (breadcrumbItems.length !== 0) {\n const lastItem = breadcrumbItems[breadcrumbItems.length - 1];\n setNextBreadcrumbItem(lastItem);\n setBreadcrumbItems((prevBreadcrumbItems) => {\n return [...prevBreadcrumbItems.slice(0, prevBreadcrumbItems.length - 1)];\n });\n navigate(lastItem.path);\n return;\n }\n\n setBreadcrumbItems([]);\n setNextBreadcrumbItem({\n key: '0.' + '/'.toString(),\n label: null,\n path: '/',\n });\n\n navigate('/');\n },\n isBackDisabled: isBackDisabled,\n setTitle: (pageTitle: string) => {\n setNextBreadcrumbItem((prevNextBreadcrumbItem) => {\n return { ...prevNextBreadcrumbItem, label: pageTitle };\n });\n },\n };\n\n return (\n <BreadcrumbContextState.Provider value={breadcrumbItems}>\n <JudoNavigationContextState.Provider value={judoNavigationContext}>\n {children}\n </JudoNavigationContextState.Provider>\n </BreadcrumbContextState.Provider>\n );\n};\n\nexport const CustomBreadcrumb = () => {\n const breadcrumbItems = useContext(BreadcrumbContextState);\n\n return (\n <Breadcrumbs maxItems={2} separator=\">\">\n <Home />\n {breadcrumbItems.map(({ label, key }, index) => {\n return (\n <Typography color=\"text.primary\" key={key}>\n {label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n","import { Box, Typography } from '@mui/material';\nimport type { HeroProps } from '@judo/components-api';\n\nexport function Hero(props: HeroProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"hero\"\n style={{\n width: '4rem',\n marginRight: '1rem',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n color: 'secondary.main',\n }}\n >\n {props.text}\n </Typography>\n </Box>\n );\n}\n","import { Box, Typography } from '@mui/material';\nimport type { LogoProps } from '@judo/components-api';\n\nexport function Logo(props: LogoProps) {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <img\n src={props.imgSrc}\n alt=\"logo\"\n style={{\n width: '100%',\n }}\n />\n <Typography\n sx={{\n fontSize: 18,\n fontWeight: 'bold',\n }}\n >\n {props.subTitle}\n </Typography>\n </Box>\n );\n}\n","import type { JudoTreeItemProps, MenuProps, StyledTreeItemProps } from '@judo/components-api';\nimport { ArrowDropDown, ArrowRight } from '@mui/icons-material';\nimport { Box, styled, Typography } from '@mui/material';\nimport { TreeItem, treeItemClasses } from '@mui/lab';\nimport { useIntl } from 'react-intl';\nimport { TreeView } from '@mui/lab';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ndeclare module 'react' {\n interface CSSProperties {\n '--tree-view-color'?: string;\n '--tree-view-bg-color'?: string;\n }\n}\n\nconst StyledTreeItemRoot = styled(TreeItem)(({ theme }) => ({\n color: theme.palette.text.secondary,\n [`& .${treeItemClasses.content}`]: {\n color: theme.palette.text.secondary,\n // borderTopRightRadius: theme.spacing(2),\n // borderBottomRightRadius: theme.spacing(2),\n // paddingRight: theme.spacing(1),\n padding: 0,\n marginBottom: '1rem',\n width: 'auto',\n fontWeight: theme.typography.fontWeightMedium,\n '&.Mui-expanded': {\n fontWeight: theme.typography.fontWeightRegular,\n },\n '&:hover': {\n // backgroundColor: theme.palette.action.hover,\n backgroundColor: 'inherit',\n },\n '&.Mui-focused, &.Mui-selected, &.Mui-selected.Mui-focused': {\n // backgroundColor: `var(--tree-view-bg-color, ${theme.palette.action.selected})`,\n backgroundColor: 'inherit',\n color: 'var(--tree-view-color)',\n },\n [`& .${treeItemClasses.label}`]: {\n fontWeight: 'inherit',\n color: 'inherit',\n },\n },\n [`& .${treeItemClasses.group}`]: {\n marginLeft: 0,\n [`& .${treeItemClasses.content}`]: {\n paddingLeft: theme.spacing(2),\n },\n },\n}));\n\nfunction StyledTreeItem(props: StyledTreeItemProps) {\n const { bgColor, color, labelIcon: LabelIcon, labelInfo, labelText, ...other } = props;\n\n return (\n <StyledTreeItemRoot\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', p: 0.5, pr: 0 }}>\n <Box component={LabelIcon} color=\"inherit\" sx={{ mr: 1 }} />\n <Typography variant=\"body2\" sx={{ fontWeight: 'inherit', flexGrow: 1 }}>\n {labelText}\n </Typography>\n <Typography variant=\"caption\" color=\"inherit\">\n {labelInfo}\n </Typography>\n </Box>\n }\n style={{\n '--tree-view-color': color,\n '--tree-view-bg-color': bgColor,\n }}\n {...other}\n />\n );\n}\n\nexport const MenuTree = ({ items, height, maxWidth, defaultExpanded }: MenuProps) => {\n const { clearNavigate } = useJudoNavigation();\n const intl = useIntl();\n\n return (\n <TreeView\n aria-label=\"MenuTree\"\n defaultExpanded={defaultExpanded}\n defaultCollapseIcon={<ArrowDropDown />}\n defaultExpandIcon={<ArrowRight />}\n defaultEndIcon={<div style={{ width: 24 }} />}\n sx={{ height, flexGrow: 1, maxWidth, overflowY: 'auto' }}\n >\n {items.map(({ labelText, to, items, ...iRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={labelText}\n labelText={intl.formatMessage({ id: `menuTree.${labelText}`, defaultMessage: labelText })}\n onClick={() => to && clearNavigate(to)}\n to={to}\n {...iRest}\n >\n {items &&\n items.map(({ labelText: jLabelText, to: jTo, ...jRest }: JudoTreeItemProps) => (\n <StyledTreeItem\n nodeId={jLabelText}\n labelText={intl.formatMessage({ id: `menuTree.${jLabelText}`, defaultMessage: jLabelText })}\n onClick={() => clearNavigate(jTo)}\n to={jTo}\n {...jRest}\n />\n ))}\n </StyledTreeItem>\n ))}\n </TreeView>\n );\n};\n","import { AppBar, Toolbar, Grid, Typography, Divider } from '@mui/material';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { useJudoNavigation } from './CustomBreadcrumb';\n\ninterface PageHeaderProps {\n title: string;\n children: ReactNode;\n}\n\nexport const PageHeader = ({ title, children }: PageHeaderProps) => {\n const { setTitle } = useJudoNavigation();\n\n useEffect(() => {\n setTitle(title);\n }, [title]);\n\n return (\n <>\n <AppBar component=\"div\" position=\"static\" elevation={0} sx={{ zIndex: 0 }}>\n <Toolbar>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item xs>\n <Typography component=\"span\" color=\"text.primary\" variant=\"h5\">\n {title}\n </Typography>\n </Grid>\n {children}\n </Grid>\n </Toolbar>\n </AppBar>\n <Divider />\n </>\n );\n};\n"],"names":["ConfirmationDialog","confirmationMessage","title","resolve","open","handleClose","descriptionElementRef","useRef","useEffect","current","descriptionElement","focus","_jsxs","Dialog","onClose","scroll","fullWidth","maxWidth","children","_jsx","DialogTitle","id","DialogContent","dividers","DialogContentText","ref","tabIndex","DialogActions","Button","variant","onClick","TRINARY_LOGIC","Map","FilterType","e","i","t","r","location","preventDuplicate","persist","duration","autoHideDuration","setValidation","forEach","set","code","a","o","message","marginTop","marginBottom","display","flexDirection","alignItems","palette","mode","primary","main","secondary","text","background","default","subtitleColor","typography","h5","fontWeight","fontSize","letterSpacing","shape","borderRadius","components","MuiTab","defaultProps","disableRipple","mixins","toolbar","minHeight","l","DropdownButton","menuItems","disabled","showDropdownIcon","setOpen","useState","anchorRef","event","contains","target","handleListKeyDown","key","preventDefault","prevOpen","_Fragment","endIcon","KeyboardArrowDown","Popper","anchorEl","placement","transition","style","zIndex","minWidth","scrollWidth","TransitionProps","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","filter","menuItem","visible","map","index","MenuItem","label","startIcon","spacing","common","white","breakpoints","up","fontWeightMedium","equals","notEquals","lessThan","greaterThan","lessOrEqual","greaterOrEqual","equal","notEqual","matches","like","TrinaryLogicCombobox","readOnly","value","name","error","helperText","onChange","onChangeHandler","Array","from","values","indexOf","keysArray","keys","undefined","TextField","select","get","className","InputProps","startAdornment","InputAdornment","position","CheckBoxOutlined","getDefaultOperator","filterType","boolean","_BooleanOperation","date","dateTime","_NumericOperation","enumeration","_EnumerationOperation","numeric","string","_StringOperation","trinaryLogic","getOperatorsByFilter","filterOption","Object","FilterOperator","setFilterOperator","filterBy","operator","getOperationEnumValue","item","FilterInput","setFilterValue","exists","enumValues","Error","attributeName","FormControlLabel","control","Checkbox","checked","DatePicker","renderInput","props","newValue","toISOString","substring","dateToJudoDateString","Icon","path","mdiCalendarMonth","size","DateTimePicker","mdiCalendarClock","type","Number","mdiNumeric","mdiFormatTextVariant","FilterRow","closeHandler","Grid","container","xs","IconButton","Close","Transition","forwardRef","Slide","direction","FilterDialog","filters","filterOptions","tempFilters","setTempFilters","updateFilterValue","prevTempFilters","tempFilter","updateFilterOperator","filterCloseHandler","cancel","TransitionComponent","disableEnforceFocus","sx","justifyContent","PaperProps","m","height","Typography","component","color","Container","Box","mainContainerPadding","length","PageDialog","page","ok","CustomTablePagination","TablePagination","count","onPageChange","async","newPage","isNext","setPage","pageChange","rowsPerPage","rowPerPage","rowsPerPageOptions","labelDisplayedRows","to","nextIconButtonProps","isNextButtonEnabled","backIconButtonProps","PageDialogContextState","createContext","ConfirmDialogContextState","RangeDialogContextState","FilterDialogContextState","useFilterDialog","context","useContext","RangeDialog","single","columns","defaultSortField","rangeCall","alreadySelectedItems","initalQueryCustomizer","openFilterDialog","enqueueSnackbar","useSnackbar","isLoading","setIsLoading","rowCount","setRowCount","sortModel","setSortModel","lastItem","setLastItem","firstItem","setFirstItem","setIsNextButtonEnabled","data","setData","selectionModel","setSelectionModel","selectedItems","setSelectedItems","setFilters","queryCustomizer","setQueryCustomizer","_seek","limit","handlePageChange","prevQueryCustomizer","reverse","fetchData","res","pop","s","isAxiosError","n","response","status","errorHandling","DataGrid","autoHeight","getRowId","row","__identifier","loading","paginationMode","rows","sortingOrder","sortingMode","onSortModelChange","newModel","field","sort","_orderBy","attribute","descending","checkboxSelection","onSelectionModelChange","newSelectionModel","isArray","lastId","find","diff","newItemsId","slice","newItems","prevSelectedItems","removedItemsId","isRowSelectable","params","includes","hideFooterSelectedRowCount","keepNonExistentRowsSelected","Toolbar","GridToolbarContainer","newFilters","tempQueryCustomizer","mapFiltersToQueryCustomizerProperty","handleFiltersChange","Pagination","DialogProvider","isOpenPageDialog","setIsOpenPageDialog","pageDialog","setPageDialog","handleClosePageDialog","pageDialogContext","openPageDialog","Promise","isOpenRangeDialog","setIsOpenRangeDialog","rangeDialog","setRangeDialog","handleCloseRangeDialog","customDialogContext","openRangeDialog","initialQueryCustomizer","isOpenConfirmDialog","setIsOpenConfirmDialog","confirmDialog","setConfirmDialog","handleCloseConfirmDialog","confirmDialogContext","openConfirmDialog","isOpenFilterDialog","setIsOpenFilterDialog","filterDialog","setFilterDialog","handleCloseFilterDialog","filterDialogContext","Provider","columnsActionCalculator","actions","options","shownActionsNumber","shownActions","standaloneActions","dropdownActions","sliceNumber","standaloneRowActions","dropdownRowActions","action","headerName","align","renderCell","icon","showLabel","MoreHoriz","AggregationInput","readonly","labelList","onSet","onView","onCreate","onRemove","onDelete","focused","setFocused","icons","ViewIcons","EditIcons","alignContent","ButtonBase","padding","onFocusCapture","onBlur","join","cursor","Visibility","Delete","NoteAdd","LinkOff","JudoNavigationContextState","BreadcrumbContextState","useJudoNavigation","BreadcrumbProvider","navigate","useNavigate","useLocation","breadcrumbItems","setBreadcrumbItems","nextBreadcrumbItem","setNextBreadcrumbItem","prevNextBreadcrumbItem","pathname","judoNavigationContext","clearNavigate","toString","prevBreadCrumbItems","back","prevBreadcrumbItems","isBackDisabled","useMemo","setTitle","pageTitle","CustomBreadcrumb","Breadcrumbs","maxItems","separator","Home","Hero","p","src","imgSrc","alt","width","marginRight","Logo","subTitle","StyledTreeItemRoot","styled","TreeItem","theme","treeItemClasses","content","fontWeightRegular","backgroundColor","group","marginLeft","paddingLeft","StyledTreeItem","bgColor","labelIcon","LabelIcon","labelInfo","labelText","other","pr","mr","flexGrow","MenuTree","items","defaultExpanded","intl","useIntl","TreeView","defaultCollapseIcon","ArrowDropDown","defaultExpandIcon","ArrowRight","defaultEndIcon","overflowY","iRest","nodeId","formatMessage","defaultMessage","jLabelText","jTo","jRest","PageHeader","AppBar","elevation","Divider"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@judo/components",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/components.cjs",
6
6
  "module": "./dist/esm/components.mjs",
@@ -42,21 +42,23 @@
42
42
  "url": "https://github.com/BlackBeltTechnology/judo-web-toolbox/issues"
43
43
  },
44
44
  "devDependencies": {
45
- "@judo/components-api": "^0.3.0",
46
- "@judo/data-api-common": "^0.3.0",
47
- "@judo/theme": "^0.3.0",
48
- "@judo/utilities": "^0.3.0"
45
+ "@judo/components-api": "^0.4.1",
46
+ "@judo/data-api-common": "^0.4.1",
47
+ "@judo/theme": "^0.4.1",
48
+ "@judo/utilities": "^0.4.1"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@mdi/js": "^6.7.96",
52
52
  "@mdi/react": "^1.6.0",
53
53
  "@mui/icons-material": "^5.6.2",
54
+ "@mui/lab": "^5.0.0-alpha.100",
54
55
  "@mui/material": "^5.6.3",
55
56
  "@mui/x-data-grid": "^5.12.2",
56
57
  "@mui/x-date-pickers": "^5.0.1",
57
58
  "notistack": "^2.0.5",
58
59
  "react": "^18.1.0",
60
+ "react-intl": "^5.25.1",
59
61
  "react-router-dom": "^6.3.0"
60
62
  },
61
- "gitHead": "b82c7015ee1bba07a304bf56cbfff699e2182458"
63
+ "gitHead": "7af661d7aa62db8b643010c8f1fe382a5218b7c3"
62
64
  }