@judo/components 0.1.1-alpha.0

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.
@@ -0,0 +1,111 @@
1
+ /// <reference types="react" />
2
+ import { ConfirmationDialogProps, ConfirmDialogProviderContext, DialogProviderProps, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterDialogProps, FilterOption } from "@judo/components-api";
3
+ import { ReactNode, Dispatch, SetStateAction } from "react";
4
+ import { GridColumns, GridSortItem, GridSelectionModel, GridRowId } from "@mui/x-data-grid";
5
+ import { JudoStored, QueryCustomizer } from "@judo/data-api-common";
6
+ import { ColumnActionsProvider } from "@judo/utilities";
7
+ import { To, LinkProps } from "react-router-dom";
8
+ declare const ConfirmationDialog: ({ confirmationMessage, title, resolve, open, handleClose }: ConfirmationDialogProps) => JSX.Element;
9
+ declare const usePageDialog: () => PageDialogProviderContext;
10
+ declare const useConfirmDialog: () => ConfirmDialogProviderContext;
11
+ declare const useRangeDialog: () => RangeDialogProviderContext;
12
+ declare const useFilterDialog: () => FilterDialogProviderContext;
13
+ declare const DialogProvider: ({ children }: DialogProviderProps) => JSX.Element;
14
+ declare const FilterDialog: ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => JSX.Element;
15
+ interface PageDialogProps {
16
+ page: ReactNode;
17
+ open: boolean;
18
+ handleClose: () => void;
19
+ resolve: () => void;
20
+ }
21
+ declare const PageDialog: ({ page, open, handleClose, resolve }: PageDialogProps) => JSX.Element;
22
+ interface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {
23
+ resolve: (value: any) => void;
24
+ open: boolean;
25
+ handleClose: () => void;
26
+ single?: boolean;
27
+ columns: GridColumns<T>;
28
+ defaultSortField: GridSortItem;
29
+ rangeCall: (queryCustomizer: U) => Promise<Array<T>>;
30
+ alreadySelectedItems: GridSelectionModel | GridRowId;
31
+ initalQueryCustomizer: U;
32
+ filterOptions: FilterOption[];
33
+ }
34
+ declare const RangeDialog: <T extends JudoStored<T>, U extends QueryCustomizer<T>>({ resolve, open, handleClose, single, columns, defaultSortField, rangeCall, alreadySelectedItems, initalQueryCustomizer, filterOptions }: RangeDialogProps<T, U>) => JSX.Element;
35
+ declare const columnsActionCalculator: ColumnActionsProvider<any>;
36
+ interface AggregationInputProps {
37
+ name?: string;
38
+ id?: string;
39
+ label?: string;
40
+ value: any | undefined | null;
41
+ error?: boolean | undefined;
42
+ helperText?: string | undefined;
43
+ disabled?: boolean | undefined;
44
+ readonly?: boolean | undefined;
45
+ labelList: string[];
46
+ icon?: ReactNode;
47
+ onSet?: () => Promise<void> | undefined;
48
+ onView?: () => void | undefined;
49
+ onCreate?: () => void | undefined;
50
+ onDelete?: () => Promise<void> | undefined;
51
+ onRemove?: () => void | undefined;
52
+ }
53
+ declare const AggregationInput: ({ name, id, label, value, error, helperText, disabled, readonly, labelList, icon, onSet, onView, onCreate, onRemove, onDelete }: AggregationInputProps) => JSX.Element;
54
+ interface BreadcrumbProviderProps {
55
+ children: ReactNode;
56
+ }
57
+ type JudoNavigationSetTitle = (pageTitle: string) => void;
58
+ interface JudoNavigationProviderContext {
59
+ clearNavigate: (to: To) => void;
60
+ navigate: (to: To) => void;
61
+ back: () => void;
62
+ isBackDisabled: boolean;
63
+ setTitle: JudoNavigationSetTitle;
64
+ }
65
+ declare const useJudoNavigation: () => JudoNavigationProviderContext;
66
+ declare const BreadcrumbProvider: ({ children }: BreadcrumbProviderProps) => JSX.Element;
67
+ declare const CustomBreadcrumb: () => JSX.Element;
68
+ declare function CustomLink({ children, to, ...props }: LinkProps): JSX.Element;
69
+ interface CustomTablePaginationProps {
70
+ pageChange: (isNext: boolean) => Promise<void>;
71
+ isNextButtonEnabled: boolean;
72
+ page: number;
73
+ rowPerPage: number;
74
+ setPage: Dispatch<SetStateAction<number>>;
75
+ }
76
+ declare const CustomTablePagination: (props: CustomTablePaginationProps) => JSX.Element;
77
+ interface DropdownMenuItem {
78
+ disabled?: boolean;
79
+ visible?: boolean;
80
+ label?: string;
81
+ onClick: () => void;
82
+ startIcon?: ReactNode;
83
+ endIcon?: ReactNode;
84
+ }
85
+ interface DropdownButtonProps {
86
+ children?: ReactNode;
87
+ id?: string | undefined;
88
+ menuItems: DropdownMenuItem[];
89
+ disabled?: boolean;
90
+ showDropdownIcon?: boolean;
91
+ fullWidth?: boolean;
92
+ variant?: "text" | "outlined" | "contained" | undefined;
93
+ }
94
+ declare function DropdownButton({ children, id, menuItems, disabled, showDropdownIcon, fullWidth, variant }: DropdownButtonProps): JSX.Element;
95
+ interface PageHeaderProps {
96
+ title: string;
97
+ children: ReactNode;
98
+ }
99
+ declare const PageHeader: ({ title, children }: PageHeaderProps) => JSX.Element;
100
+ interface TrinaryLogicProps {
101
+ readOnly?: boolean;
102
+ value?: boolean | null;
103
+ id?: string;
104
+ label: string;
105
+ name?: string;
106
+ error?: boolean | undefined;
107
+ helperText?: string | undefined;
108
+ onChange?: (value: boolean | null) => void;
109
+ }
110
+ declare const TrinaryLogicCombobox: ({ readOnly, value, id, label, name, error, helperText, onChange }: TrinaryLogicProps) => JSX.Element;
111
+ export { ConfirmationDialog, DialogProvider, useConfirmDialog, useRangeDialog, useFilterDialog, usePageDialog, FilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, PageHeader, TrinaryLogicCombobox };
@@ -0,0 +1,111 @@
1
+ /// <reference types="react" />
2
+ import { ConfirmationDialogProps, ConfirmDialogProviderContext, DialogProviderProps, FilterDialogProviderContext, PageDialogProviderContext, RangeDialogProviderContext, FilterDialogProps, FilterOption } from "@judo/components-api";
3
+ import { ReactNode, Dispatch, SetStateAction } from "react";
4
+ import { GridColumns, GridSortItem, GridSelectionModel, GridRowId } from "@mui/x-data-grid";
5
+ import { JudoStored, QueryCustomizer } from "@judo/data-api-common";
6
+ import { ColumnActionsProvider } from "@judo/utilities";
7
+ import { To, LinkProps } from "react-router-dom";
8
+ declare const ConfirmationDialog: ({ confirmationMessage, title, resolve, open, handleClose }: ConfirmationDialogProps) => JSX.Element;
9
+ declare const usePageDialog: () => PageDialogProviderContext;
10
+ declare const useConfirmDialog: () => ConfirmDialogProviderContext;
11
+ declare const useRangeDialog: () => RangeDialogProviderContext;
12
+ declare const useFilterDialog: () => FilterDialogProviderContext;
13
+ declare const DialogProvider: ({ children }: DialogProviderProps) => JSX.Element;
14
+ declare const FilterDialog: ({ filters, filterOptions, resolve, open, handleClose }: FilterDialogProps) => JSX.Element;
15
+ interface PageDialogProps {
16
+ page: ReactNode;
17
+ open: boolean;
18
+ handleClose: () => void;
19
+ resolve: () => void;
20
+ }
21
+ declare const PageDialog: ({ page, open, handleClose, resolve }: PageDialogProps) => JSX.Element;
22
+ interface RangeDialogProps<T extends JudoStored<T>, U extends QueryCustomizer<T>> {
23
+ resolve: (value: any) => void;
24
+ open: boolean;
25
+ handleClose: () => void;
26
+ single?: boolean;
27
+ columns: GridColumns<T>;
28
+ defaultSortField: GridSortItem;
29
+ rangeCall: (queryCustomizer: U) => Promise<Array<T>>;
30
+ alreadySelectedItems: GridSelectionModel | GridRowId;
31
+ initalQueryCustomizer: U;
32
+ filterOptions: FilterOption[];
33
+ }
34
+ declare const RangeDialog: <T extends JudoStored<T>, U extends QueryCustomizer<T>>({ resolve, open, handleClose, single, columns, defaultSortField, rangeCall, alreadySelectedItems, initalQueryCustomizer, filterOptions }: RangeDialogProps<T, U>) => JSX.Element;
35
+ declare const columnsActionCalculator: ColumnActionsProvider<any>;
36
+ interface AggregationInputProps {
37
+ name?: string;
38
+ id?: string;
39
+ label?: string;
40
+ value: any | undefined | null;
41
+ error?: boolean | undefined;
42
+ helperText?: string | undefined;
43
+ disabled?: boolean | undefined;
44
+ readonly?: boolean | undefined;
45
+ labelList: string[];
46
+ icon?: ReactNode;
47
+ onSet?: () => Promise<void> | undefined;
48
+ onView?: () => void | undefined;
49
+ onCreate?: () => void | undefined;
50
+ onDelete?: () => Promise<void> | undefined;
51
+ onRemove?: () => void | undefined;
52
+ }
53
+ declare const AggregationInput: ({ name, id, label, value, error, helperText, disabled, readonly, labelList, icon, onSet, onView, onCreate, onRemove, onDelete }: AggregationInputProps) => JSX.Element;
54
+ interface BreadcrumbProviderProps {
55
+ children: ReactNode;
56
+ }
57
+ type JudoNavigationSetTitle = (pageTitle: string) => void;
58
+ interface JudoNavigationProviderContext {
59
+ clearNavigate: (to: To) => void;
60
+ navigate: (to: To) => void;
61
+ back: () => void;
62
+ isBackDisabled: boolean;
63
+ setTitle: JudoNavigationSetTitle;
64
+ }
65
+ declare const useJudoNavigation: () => JudoNavigationProviderContext;
66
+ declare const BreadcrumbProvider: ({ children }: BreadcrumbProviderProps) => JSX.Element;
67
+ declare const CustomBreadcrumb: () => JSX.Element;
68
+ declare function CustomLink({ children, to, ...props }: LinkProps): JSX.Element;
69
+ interface CustomTablePaginationProps {
70
+ pageChange: (isNext: boolean) => Promise<void>;
71
+ isNextButtonEnabled: boolean;
72
+ page: number;
73
+ rowPerPage: number;
74
+ setPage: Dispatch<SetStateAction<number>>;
75
+ }
76
+ declare const CustomTablePagination: (props: CustomTablePaginationProps) => JSX.Element;
77
+ interface DropdownMenuItem {
78
+ disabled?: boolean;
79
+ visible?: boolean;
80
+ label?: string;
81
+ onClick: () => void;
82
+ startIcon?: ReactNode;
83
+ endIcon?: ReactNode;
84
+ }
85
+ interface DropdownButtonProps {
86
+ children?: ReactNode;
87
+ id?: string | undefined;
88
+ menuItems: DropdownMenuItem[];
89
+ disabled?: boolean;
90
+ showDropdownIcon?: boolean;
91
+ fullWidth?: boolean;
92
+ variant?: "text" | "outlined" | "contained" | undefined;
93
+ }
94
+ declare function DropdownButton({ children, id, menuItems, disabled, showDropdownIcon, fullWidth, variant }: DropdownButtonProps): JSX.Element;
95
+ interface PageHeaderProps {
96
+ title: string;
97
+ children: ReactNode;
98
+ }
99
+ declare const PageHeader: ({ title, children }: PageHeaderProps) => JSX.Element;
100
+ interface TrinaryLogicProps {
101
+ readOnly?: boolean;
102
+ value?: boolean | null;
103
+ id?: string;
104
+ label: string;
105
+ name?: string;
106
+ error?: boolean | undefined;
107
+ helperText?: string | undefined;
108
+ onChange?: (value: boolean | null) => void;
109
+ }
110
+ declare const TrinaryLogicCombobox: ({ readOnly, value, id, label, name, error, helperText, onChange }: TrinaryLogicProps) => JSX.Element;
111
+ export { ConfirmationDialog, DialogProvider, useConfirmDialog, useRangeDialog, useFilterDialog, usePageDialog, FilterDialog, PageDialog, RangeDialog, columnsActionCalculator, AggregationInput, JudoNavigationSetTitle, useJudoNavigation, BreadcrumbProvider, CustomBreadcrumb, CustomLink, CustomTablePaginationProps, CustomTablePagination, DropdownButton, PageHeader, TrinaryLogicCombobox };
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as r,Fragment as t}from"react/jsx-runtime";import{Dialog as i,DialogTitle as n,DialogContent as o,DialogContentText as l,DialogActions as a,Button as s,createTheme as d,alpha as c,Popper as u,Grow as p,Paper as h,ClickAwayListener as m,MenuList as g,MenuItem as f,TextField as v,InputAdornment as b,Slide as y,Typography as x,Container as C,Box as w,Grid as O,IconButton as k,FormControlLabel as M,Checkbox as P,TablePagination as I,ButtonBase as T,Breadcrumbs as F,ListItem as D,ListItemButton as S,AppBar as A,Toolbar as E,Divider as B}from"@mui/material";import{useRef as q,useEffect as N,useState as W,forwardRef as R,createContext as z,useContext as L,useMemo as _}from"react";import{mdiFormatTextVariant as V,mdiNumeric as j,mdiCalendarClock as H,mdiCalendarMonth as Q}from"@mdi/js";import $ from"@mdi/react";import{KeyboardArrowDown as G,CheckBoxOutlined as Y,Close as J,MoreHoriz as K,Visibility as U,Delete as X,NoteAdd as Z,LinkOff as ee,Home as re}from"@mui/icons-material";import{DateTimePicker as te,DatePicker as ie}from"@mui/x-date-pickers";import{DataGrid as ne,GridToolbarContainer as oe}from"@mui/x-data-grid";import{useSnackbar as le}from"notistack";import{useNavigate as ae,useLocation as se,useResolvedPath as de,useMatch as ce}from"react-router-dom";const ue=({confirmationMessage:t,title:d,resolve:c,open:u,handleClose:p})=>{const h=q(null);N((()=>{if(u){const{current:e}=h;null!==e&&e.focus()}}),[u]);return e(i,{open:u,onClose:p,scroll:"paper",fullWidth:!0,maxWidth:"xs",children:[d&&r(n,{id:"scroll-dialog-title",children:d}),r(o,{dividers:!!d,children:r(l,{id:"scroll-dialog-description",ref:h,tabIndex:-1,children:t})}),e(a,{children:[r(s,{variant:"text",onClick:()=>{p(),c(!1)},children:"No"}),r(s,{variant:"text",onClick:()=>{p(),c(!0)},children:"Yes"})]})]})},pe=new Map([[null,"Unknown"],[!0,"Yes"],[!1,"No"]]);var he;!function(e){e[e.boolean=0]="boolean",e[e.numeric=1]="numeric",e[e.string=2]="string",e[e.enumeration=3]="enumeration",e[e.date=4]="date",e[e.dateTime=5]="dateTime",e[e.trinaryLogic=6]="trinaryLogic"}(he||(he={}));const me=e=>null!=e,ge=(e,r,t)=>{if(me(e[0].location)){if(r("Please make sure all fields are filled in correctly.",{variant:"error",preventDuplicate:!0,persist:!t?.duration,autoHideDuration:t?.duration??void 0}),void 0!==t?.setValidation){let r=new Map;e.forEach((e=>r.set(e.location,e.code))),t?.setValidation(r)}}else r(e[0].code,{variant:"error",preventDuplicate:!0,persist:!t?.duration,autoHideDuration:t?.duration??void 0})},fe=e=>{e("Something went wrong. Please contact with the system admins.",{variant:"error",preventDuplicate:!0,persist:!0})},ve=e=>({message:e.code}),be={marginTop:8,marginBottom:8,display:"flex",flexDirection:"column",alignItems:"center"},ye=d({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}}}),xe={...ye,components:{MuiAppBar:{styleOverrides:{colorPrimary:{backgroundColor:ye.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:c(ye.palette.primary.main,.15)}}}},MuiInputLabel:{styleOverrides:{root:{color:ye.palette.subtitleColor.main,fontWeight:500,fontSize:16,"&.Mui-focused":{color:ye.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:c(ye.palette.secondary.main,.1)},"&:hover:not(.Mui-disabled):before":{borderBottom:"none"},"&.Mui-focused .MuiInputAdornment-root .MuiSvgIcon-root":{color:ye.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 ${c(ye.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:ye.spacing(1)},indicator:{height:3,borderTopLeftRadius:3,borderTopRightRadius:3,backgroundColor:ye.palette.common.white}}},MuiTab:{styleOverrides:{root:{textTransform:"none",margin:"0 16px",minWidth:0,padding:0,[ye.breakpoints.up("md")]:{padding:0,minWidth:0}}}},MuiIconButton:{styleOverrides:{root:{color:ye.palette.secondary.main,padding:ye.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:ye.typography.fontWeightMedium}}},MuiListItemIcon:{styleOverrides:{root:{color:"inherit",minWidth:"auto",marginRight:ye.spacing(2),"& svg":{fontSize:20}}}},MuiAvatar:{styleOverrides:{root:{width:32,height:32}}},MuiCard:{styleOverrides:{root:{width:"100%",length:"100%",padding:10}}}}};var Ce,we,Oe,ke;function Me({children:i,id:n,menuItems:o,disabled:l=!1,showDropdownIcon:a=!0,fullWidth:d=!1,variant:c="contained"}){const[v,b]=W(!1),y=q(null),x=e=>{y.current&&y.current.contains(e.target)||b(!1)};function C(e){"Tab"===e.key?(e.preventDefault(),b(!1)):"Escape"===e.key&&b(!1)}const w=q(v);return N((()=>{w.current&&!v&&y.current.focus(),w.current=v}),[v]),e(t,{children:[r(s,{ref:y,id:n,onClick:()=>{b((e=>!e))},endIcon:a&&r(G,{}),disabled:l,fullWidth:d,variant:c,children:i}),r(u,{open:v,anchorEl:y.current,placement:"bottom",transition:!0,style:{zIndex:1400,minWidth:y.current?.scrollWidth},children:({TransitionProps:t,placement:i})=>r(p,{...t,style:{transformOrigin:"bottom-start"===i?"left top":"left bottom"},children:r(h,{children:r(m,{onClickAway:x,children:r(g,{autoFocusItem:v,onKeyDown:C,children:o.filter((e=>e.visible??!0)).map(((r,t)=>e(f,{id:r.label??""+t,disabled:r.disabled??!1,onClick:e=>{x(e),r.onClick()},children:[r.startIcon,r.label,r.endIcon]})))})})})})})]})}!function(e){e.equals="equals"}(Ce||(Ce={})),function(e){e.equals="equals",e.notEquals="notEquals"}(we||(we={})),function(e){e.lessThan="lessThan",e.greaterThan="greaterThan",e.lessOrEqual="lessOrEqual",e.greaterOrEqual="greaterOrEqual",e.equal="equal",e.notEqual="notEqual"}(Oe||(Oe={})),function(e){e.lessThan="lessThan",e.greaterThan="greaterThan",e.lessOrEqual="lessOrEqual",e.greaterOrEqual="greaterOrEqual",e.equal="equal",e.notEqual="notEqual",e.matches="matches",e.like="like"}(ke||(ke={}));const Pe=({readOnly:e=!1,value:t=null,id:i,label:n,name:o,error:l,helperText:a,onChange:s})=>{const d=s?e=>{const r=Array.from(pe.values()).indexOf(e.target.value),t=Array.from(pe.keys());s(t[r])}:void 0;return r(v,{name:o,id:i,label:n,select:!0,value:pe.get(t),onChange:d,className:e?"Mui-readOnly":void 0,error:l,helperText:a,InputProps:{readOnly:e,startAdornment:r(b,{position:"start",children:r(Y,{})})},children:Array.from(pe.keys()).map((e=>r(f,{value:pe.get(e),children:pe.get(e)},pe.get(e))))})},Ie=e=>{switch(e){case he.boolean:return Ce.equals;case he.date:case he.dateTime:return Oe.equal;case he.enumeration:return we.equals;case he.numeric:return Oe.equal;case he.string:return ke.equal;case he.trinaryLogic:return Ce.equals}},Te=e=>{switch(e.filterOption.filterType){case he.boolean:return Object.values(Ce);case he.date:case he.dateTime:return Object.values(Oe);case he.enumeration:return Object.values(we);case he.numeric:return Object.values(Oe);case he.string:return Object.values(ke);case he.trinaryLogic:return Object.values(Ce)}},Fe=({filter:e,setFilterOperator:t})=>r(v,{name:"operation",id:"operation",label:"Operation",select:!0,value:e.filterBy.operator,onChange:r=>{t(e,((e,r)=>{switch(e.filterOption.filterType){case he.boolean:return Ce[r];case he.date:case he.dateTime:return Oe[r];case he.enumeration:return we[r];case he.numeric:return Oe[r];case he.string:return ke[r];case he.trinaryLogic:return Ce[r]}})(e,r.target.value))},children:Te(e).map((e=>r(f,{value:e,children:e},e)))}),De=({filter:e,setFilterValue:i})=>{if(e.filterOption.filterType===he.enumeration&&!me(e.filterOption.enumValues))throw new Error(`Missing enumValues from FilterOptions of ${e.filterOption.attributeName}`);return r(t,{children:(()=>{switch(e.filterOption.filterType){case he.boolean:return r(M,{control:r(P,{checked:!!e.filterBy.value,onChange:r=>i(e,!!r.target.value)}),label:e.filterOption.attributeName});case he.date:return r(ie,{renderInput:e=>r(v,{...e}),label:e.filterOption.attributeName,value:e.filterBy.value??null,onChange:r=>i(e,(e=>e?e.toISOString().substring(0,10):e)(r)),InputProps:{startAdornment:r(b,{position:"start",children:r($,{path:Q,size:1})})}});case he.dateTime:return r(te,{renderInput:e=>r(v,{...e}),label:e.filterOption.attributeName,value:e.filterBy.value??null,onChange:r=>i(e,r),InputProps:{startAdornment:r(b,{position:"start",children:r($,{path:H,size:1})})}});case he.enumeration:return r(v,{label:e.filterOption.attributeName,value:e.filterBy.value,select:!0,onChange:r=>i(e,r.target.value),children:e.filterOption.enumValues?.map((e=>r(f,{value:e,children:e},e)))});case he.numeric:return r(v,{label:e.filterOption.attributeName,type:"number",value:e.filterBy.value,onChange:r=>i(e,Number(r.target.value)),InputProps:{startAdornment:r(b,{position:"start",children:r($,{path:j,size:1})})}});case he.string:return r(v,{label:e.filterOption.attributeName,value:e.filterBy.value,onChange:r=>i(e,r.target.value),InputProps:{startAdornment:r(b,{position:"start",children:r($,{path:V,size:1})})}});case he.trinaryLogic:return r(Pe,{label:e.filterOption.attributeName,value:e.filterBy.value,onChange:r=>i(e,r)})}})()})},Se=({filter:t,closeHandler:i,setFilterOperator:n,setFilterValue:o})=>e(O,{item:!0,container:!0,spacing:2,alignItems:"center",children:[r(O,{item:!0,xs:4,children:t&&r(Fe,{filter:t,setFilterOperator:n})}),r(O,{item:!0,xs:7,children:t&&r(De,{filter:t,setFilterValue:o})}),r(O,{item:!0,xs:1,children:r(k,{onClick:()=>i(t),children:r(J,{})})})]}),Ae=R((function(e,t){return r(y,{direction:"left",ref:t,...e})})),Ee=({filters:t,filterOptions:d,resolve:c,open:u,handleClose:p})=>{const h=q(null),[m,g]=W(t??[]);N((()=>{if(u){const{current:e}=h;null!==e&&e.focus()}}),[u]);const f=(e,r)=>{g((t=>t.map((t=>e.id===t.id?{...t,filterBy:{value:r,operator:t.filterBy.operator}}:t))))},v=(e,r)=>{g((t=>t.map((t=>e.id===t.id?{...t,filterBy:{value:t.filterBy.value,operator:r}}:t))))},b=e=>{g((r=>[...r.filter((r=>r.id!==e.id))]))},y=()=>{p(),c(void 0)};return e(i,{open:u,onClose:y,scroll:"paper",TransitionComponent:Ae,disableEnforceFocus:!0,fullWidth:!0,maxWidth:"sm",sx:{"& .MuiDialog-container":{justifyContent:"flex-end"}},PaperProps:{sx:{m:0,height:"100%"}},children:[r(n,{id:"scroll-dialog-title",children:r(x,{component:"span",color:"text.primary",variant:"h5",children:"Filters"})}),r(o,{dividers:!0,children:r(l,{id:"scroll-dialog-description",ref:h,tabIndex:-1,children:r(C,{component:"main",maxWidth:"xs",children:r(w,{sx:be,children:e(O,{container:!0,spacing:2,children:[m.map((e=>r(Se,{filter:e,closeHandler:b,setFilterOperator:v,setFilterValue:f},e.id))),r(O,{item:!0,container:!0,children:r(Me,{fullWidth:!0,showDropdownIcon:!1,menuItems:d.map((e=>({label:e.label??e.attributeName,onClick:()=>g((r=>[...r,{id:r.length,filterOption:{attributeName:e.attributeName,label:e.label,filterType:e.filterType},filterBy:{operator:Ie(e.filterType)}}]))}))),children:"Add new filter"})})]})})})})}),e(a,{children:[r(s,{fullWidth:!0,variant:"outlined",onClick:y,children:"Cancel"}),e(s,{fullWidth:!0,onClick:()=>{p(),c(m)},children:["Apply ","("+m.length+")"]})]})]})},Be=({page:t,open:n,handleClose:d,resolve:c})=>{const u=q(null);N((()=>{if(n){const{current:e}=u;null!==e&&e.focus()}}),[n]);const p=()=>{c(),d()};return e(i,{open:n,onClose:p,scroll:"paper",children:[r(o,{dividers:!0,children:r(l,{ref:u,tabIndex:-1,children:t})}),r(a,{children:r(s,{onClick:p,children:"Ok"})})]})},qe=e=>r(I,{component:"div",count:-1,page:e.page,onPageChange:async(r,t)=>{let i=!0;t<e.page&&(i=!1),e.setPage(t),await e.pageChange(i)},rowsPerPage:e.rowPerPage,rowsPerPageOptions:[e.rowPerPage],labelDisplayedRows:({from:e,to:r})=>`${e}–${r}`,nextIconButtonProps:{disabled:!e.isNextButtonEnabled},backIconButtonProps:{disabled:0===e.page}}),Ne=({resolve:t,open:d,handleClose:c,single:u=!1,columns:p,defaultSortField:h,rangeCall:m,alreadySelectedItems:g,initalQueryCustomizer:f,filterOptions:v})=>{const{openFilterDialog:b}=He(),{enqueueSnackbar:y}=le(),x=q(null),[C,w]=W(!1),[O,k]=W(0),[M,P]=W([h]),[I,T]=W(),[F,D]=W(),[S,A]=W(!0),[E,B]=W(0),[R,z]=W([]),[L,_]=W(g??(u?void 0:[])),[V,j]=W([]),[H,Q]=W([]),[$,G]=W({...f,_seek:{limit:6}}),Y=async e=>{G((r=>({...r,_seek:{limit:e?6:5,reverse:!e,lastItem:e?I:F}}))),A(!e)},J=async()=>{w(!0);try{const e=await m($);e.length>5?(A(!0),e.pop()):6===$._seek?.limit&&A(!1),z(e),D(e[0]),T(e[e.length-1]),k(e.length||0)}catch(e){((e,r,t)=>{if(!e||"boolean"!=typeof e.isAxiosError||!0!==e.isAxiosError)return void fe(r);const i=e.response;if(me(i))if(i?.status)if(422===i?.status)r(ve(e.response?.data).message,{variant:"error",preventDuplicate:!0,persist:!0});else{if(400===i?.status)return ge(i.data,r,t);r(ve(i?.data).message,{variant:"error",preventDuplicate:!0,persist:!0})}else fe(r);else fe(r)})(e,y)}w(!1)};N((()=>{J()}),[$]),N((()=>{if(d){const{current:e}=x;null!==e&&e.focus()}}),[d]);const K=()=>{c(),t(void 0)};return e(i,{open:d,onClose:K,scroll:"paper",fullWidth:!0,maxWidth:"sm",children:[r(n,{id:"scroll-dialog-title",children:"Select"}),r(o,{dividers:!0,children:r(l,{id:"scroll-dialog-description",ref:x,tabIndex:-1,children:r(ne,{sx:u?{".MuiDataGrid-columnHeaderCheckbox .MuiDataGrid-columnHeaderTitleContainer":{display:"none"}}:void 0,autoHeight:!0,getRowId:e=>e.__identifier,loading:C,paginationMode:"server",rows:R,rowCount:O,sortingOrder:["desc","asc"],sortingMode:"server",sortModel:M,onSortModelChange:e=>{B(0),P(e);const{field:r,sort:t}=e[0];G((e=>({...e,_orderBy:[{attribute:r,descending:"desc"===t}]})))},checkboxSelection:!0,onSelectionModelChange:u?e=>{if(Array.isArray(L))return;if(0===e.length)return _(""),void j(void 0);const r=e[e.length-1];_(r),j(R.find((e=>e.__identifier===r)))}:e=>{if(Array.isArray(L)){if(e.length>L.length){const r=e.length-L.length,t=[...e].slice(-1*r),i=R.filter((e=>-1!==t.indexOf(e.__identifier)));j((e=>{if(Array.isArray(e))return[...e,...i]}))}if(e.length<L.length){const r=L.filter((r=>-1===e.indexOf(r)));j((e=>{if(Array.isArray(e))return[...e.filter((e=>-1===r.indexOf(e.__identifier)))]}))}_(e)}},isRowSelectable:u?void 0:e=>{if(g){if(!Array.isArray(g))throw Error("Range dialog gets wrong alreadySelectedItems.");return!g.includes(e.id)}return!0},selectionModel:L,hideFooterSelectedRowCount:u,columns:p,keepNonExistentRowsSelected:!0,components:{Toolbar:()=>r(oe,{children:e(s,{variant:"outlined",onClick:async()=>{const e=await b(v,H);e&&(e=>{B(0),Q(e),G((r=>{const t={...r};return v.forEach((r=>t[r.attributeName]=mapFiltersToQueryCustomizerProperty(e,r.attributeName))),{...r,_seek:{lastItem:void 0,limit:6,reverse:void 0},...t}}))})(e)},disabled:C,children:["Set filters ",0!==H.length?"("+H.length+")":""]})}),Pagination:()=>r(qe,{pageChange:Y,isNextButtonEnabled:S,page:E,setPage:B,rowPerPage:5})}})})}),e(a,{children:[r(s,{onClick:K,children:"Cancel"}),r(s,{onClick:()=>{c(),t(V)},children:"Ok"})]})]})},We=z(),Re=z(),ze=z(),Le=z(),_e=()=>{const e=L(We);if(void 0===e)throw new Error("useConfirmDialog was used outside of its Provider");return e},Ve=()=>{const e=L(Re);if(void 0===e)throw new Error("useConfirmDialog was used outside of its Provider");return e},je=()=>{const e=L(ze);if(void 0===e)throw new Error("useRangeDialog was used outside of its Provider");return e},He=()=>{const e=L(Le);if(void 0===e)throw new Error("useFilterDialog was used outside of its Provider");return e},Qe=({children:t})=>{const[i,n]=W(!1),[o,l]=W(),a=()=>{n(!1)},s={openPageDialog:async e=>(n(!0),new Promise((t=>{l(r(Be,{page:e,handleClose:a,open:!0,resolve:t}))})))},[d,c]=W(!1),[u,p]=W(),h=()=>{c(!1)},m={openRangeDialog:async({columns:e,defaultSortField:t,rangeCall:i,single:n=!1,alreadySelectedItems:o,filterOptions:l,initialQueryCustomizer:a})=>(c(!0),new Promise((s=>{p(r(Ne,{handleClose:h,open:!0,resolve:s,columns:e,defaultSortField:t,rangeCall:i,single:n,alreadySelectedItems:o,filterOptions:l,initalQueryCustomizer:a}))})))},[g,f]=W(!1),[v,b]=W(),y=()=>(f(!1),!1),x={openConfirmDialog:async(e,t)=>(f(!0),new Promise((i=>{b(r(ue,{confirmationMessage:e,title:t,handleClose:y,open:!0,resolve:i}))})))},[C,w]=W(!1),[O,k]=W(),M=()=>(w(!1),!1),P={openFilterDialog:async(e,t)=>(w(!0),new Promise((i=>{k(r(Ee,{filters:t,filterOptions:e,handleClose:M,open:!0,resolve:i}))})))};return r(We.Provider,{value:s,children:r(Re.Provider,{value:x,children:r(ze.Provider,{value:m,children:e(Le.Provider,{value:P,children:[t,i&&o,g&&v,d&&u,C&&O]})})})})},$e=(e,r)=>{if(!me(e)||0===e.length)return[];let t=1;if(r?.shownActions&&(t=e.length<r.shownActions?e.length:r.shownActions),t<0)return Ge(e,r);if(0===t)return[];if(1===t)return Ye(e);{const i=e.length===t?t:t-1,n=e.slice(0,i),o=e.slice(i);return[...Ge(n,r),...Ye(o)]}},Ge=(r,t)=>r.map(((r,i)=>({field:r.label+i,headerName:"",align:"center",type:"actions",renderCell:i=>e(s,{variant:"text",onClick:()=>r.action(i.row),children:[r.icon,(t?.showLabel??!0)&&r.label]})}))),Ye=e=>0===e.length?[]:[{field:"actions",headerName:"",align:"center",type:"actions",renderCell:t=>r(Me,{variant:"text",showDropdownIcon:!1,menuItems:e.map((e=>({label:e.label,startIcon:e.icon,onClick:()=>e.action(t.row)}))),children:r(K,{})})}],Je=({name:t,id:i,label:n,value:o,error:l=!1,helperText:a,disabled:s=!1,readonly:d=!0,labelList:c,icon:u,onSet:p,onView:h,onCreate:m,onRemove:g,onDelete:f})=>{const[y,x]=W(!1);let C;return C=d?r(Ke,{value:o,disabled:s,onCreate:m,onView:h,onDelete:f}):r(Ue,{value:o,disabled:s,onRemove:g}),e(O,{container:!0,item:!0,direction:"row",justifyContent:"stretch",alignContent:"stretch",children:[r(T,{sx:{padding:0},disabled:s||d,onFocusCapture:()=>x(!0),onBlur:()=>x(!1),onClick:p,children:r(v,{disabled:!p||s,name:t,id:i,label:n,error:l,helperText:a,focused:y,fullWidth:!0,value:c.join(" - "),className:d?"Mui-readOnly":void 0,sx:{":hover":{cursor:"pointer"},".MuiFilledInput-input:hover":{cursor:"pointer"}},InputProps:{readOnly:!0,startAdornment:r(b,{position:"start",children:u})}})}),C]})},Ke=({value:i,disabled:n,onCreate:o,onDelete:l,onView:a})=>{let s;return s=me(i)?e(t,{children:[a&&r(k,{disabled:n,onClick:a,children:r(U,{})}),l&&r(k,{disabled:n,onClick:l,children:r(X,{})})]}):r(t,{children:o&&r(k,{disabled:n,onClick:o,children:r(Z,{})})}),r(t,{children:s})},Ue=({value:e,disabled:i,onRemove:n})=>{let o;return o=me(e)?r(t,{children:n&&r(k,{disabled:i,onClick:n,children:r(ee,{})})}):r(t,{}),r(t,{children:o})},Xe=z(),Ze=z([]),er=()=>{const e=L(Xe);if(void 0===e)throw new Error("useJudoNavigation was used outside of its Provider");return e},rr=({children:e})=>{const t=ae(),i=se(),[n,o]=W([]),[l,a]=W({});N((()=>{a((e=>({...e,key:"0."+i.pathname,path:i.pathname})))}),[]);const s={clearNavigate:e=>{o([]),a({key:"0."+e.toString(),label:null,path:e}),t(e)},navigate:e=>{if(null===l.label)throw Error("Page title has not been set!");o((e=>[...e,l])),a({key:n.length+"."+e.toString(),label:null,path:e}),t(e)},back:()=>{if(0!==n.length){const e=n[n.length-1];return a(e),o((e=>[...e.slice(0,e.length-1)])),void t(e.path)}o([]),a({key:"0."+"/".toString(),label:null,path:"/"}),t("/")},isBackDisabled:_((()=>0===n.length),[n]),setTitle:e=>{a((r=>({...r,label:e})))}};return r(Ze.Provider,{value:n,children:r(Xe.Provider,{value:s,children:e})})},tr=()=>{const t=L(Ze);return e(F,{maxItems:2,separator:">",children:[r(re,{}),t.map((({label:e,key:t},i)=>r(x,{color:"text.primary",children:e},t)))]})},ir={py:"2px",px:3,color:xe.palette.text.secondary,"&:hover, &:focus":{color:xe.palette.secondary.main},"&.Mui-selected":{color:xe.palette.secondary.main}};function nr({children:e,to:t,...i}){const n=de(t),o=ce({path:n.pathname,end:!0}),{clearNavigate:l}=er();return r(D,{disablePadding:!0,style:{textDecoration:"none"},children:r(S,{selected:!!o,sx:ir,onClick:()=>{l(t)},children:e})})}const or=({title:i,children:n})=>{const{setTitle:o}=er();return N((()=>{o(i)}),[i]),e(t,{children:[r(A,{component:"div",position:"static",elevation:0,sx:{zIndex:0},children:r(E,{children:e(O,{container:!0,alignItems:"center",spacing:1,children:[r(O,{item:!0,xs:!0,children:r(x,{component:"span",color:"text.primary",variant:"h5",children:i})}),n]})})}),r(B,{})]})};export{Je as AggregationInput,rr as BreadcrumbProvider,ue as ConfirmationDialog,tr as CustomBreadcrumb,nr as CustomLink,qe as CustomTablePagination,Qe as DialogProvider,Me as DropdownButton,Ee as FilterDialog,Be as PageDialog,or as PageHeader,Ne as RangeDialog,$e as columnsActionCalculator,Ve as useConfirmDialog,He as useFilterDialog,er as useJudoNavigation,_e as usePageDialog,je as useRangeDialog};
2
+ //# sourceMappingURL=components.mjs.map
@@ -0,0 +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/RangeDialog.tsx","../../src/dialog/DialogContext.tsx","../../src/table/table-row-actions.tsx","../../src/AggregationInput.tsx","../../src/CustomBreadcrumb.tsx","../../src/CustomLink.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 { 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 './DialogContext';\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 { createContext, useContext, 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';\n\n// @ts-ignore\nconst PageDialogContextState = createContext<PageDialogProviderContext>();\n\n// @ts-ignore\nconst ConfirmDialogContextState = createContext<ConfirmDialogProviderContext>();\n\n// @ts-ignore\nconst RangeDialogContextState = createContext<RangeDialogProviderContext>();\n\n// @ts-ignore\nconst FilterDialogContextState = createContext<FilterDialogProviderContext>();\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\nconst 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 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\nexport { DialogProvider, useConfirmDialog, useRangeDialog, useFilterDialog, usePageDialog };\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 { 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","RangeDialog","single","columns","defaultSortField","rangeCall","alreadySelectedItems","initalQueryCustomizer","openFilterDialog","useFilterDialog","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","PageDialogContextState","createContext","ConfirmDialogContextState","RangeDialogContextState","FilterDialogContextState","usePageDialog","context","useContext","useConfirmDialog","useRangeDialog","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","PageHeader","AppBar","elevation","Divider"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@judo/components",
3
+ "version": "0.1.1-alpha.0+8b31607",
4
+ "description": "",
5
+ "main": "./dist/cjs/components.cjs",
6
+ "module": "./dist/esm/components.mjs",
7
+ "types": "./dist/components.d.mts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "require": "./dist/cjs/components.cjs",
12
+ "default": "./dist/esm/components.mjs"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "rollup -c --environment=PRODUCTION",
17
+ "build:dev": "rollup -c"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "src"
25
+ ],
26
+ "keywords": [
27
+ "judo",
28
+ "web",
29
+ "components",
30
+ "react",
31
+ "mui"
32
+ ],
33
+ "author": "Norbert Herczeg <norbert.herczeg@blackbelt.hu>",
34
+ "license": "EPL-2.0",
35
+ "homepage": "https://github.com/BlackBeltTechnology/judo-web-toolbox",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/BlackBeltTechnology/judo-web-toolbox.git",
39
+ "directory": "packages/components"
40
+ },
41
+ "bugs": {
42
+ "url": "https://github.com/BlackBeltTechnology/judo-web-toolbox/issues"
43
+ },
44
+ "devDependencies": {
45
+ "@judo/components-api": "^0.1.1-alpha.0+8b31607",
46
+ "@judo/data-api-common": "^0.1.1-alpha.0+8b31607",
47
+ "@judo/utilities": "^0.1.1-alpha.0+8b31607"
48
+ },
49
+ "peerDependencies": {
50
+ "@judo/theme": "^0.1.0",
51
+ "@judo/utilities": "^0.1.0",
52
+ "@mdi/js": "^6.7.96",
53
+ "@mdi/react": "^1.6.0",
54
+ "@mui/icons-material": "^5.6.2",
55
+ "@mui/material": "^5.6.3",
56
+ "@mui/x-data-grid": "^5.12.2",
57
+ "@mui/x-date-pickers": "^5.0.1",
58
+ "notistack": "^2.0.5",
59
+ "react": "^18.1.0",
60
+ "react-router-dom": "^6.3.0"
61
+ },
62
+ "gitHead": "8b31607b7421452dac629262687d4e1198c01d4a"
63
+ }