{"version":3,"sources":["../src/component/RegistryEntity.tsx","../src/component/RegistryFilter.tsx","../src/component/RegistryForm.tsx","../src/component/RegistryTable.tsx","../src/component/RegistryEntityPicker.tsx"],"sourcesContent":["/*\r\n *    Copyright 2023 CROZ d.o.o, the original author or authors.\r\n *\r\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n *    you may not use this file except in compliance with the License.\r\n *    You may obtain a copy of the License at\r\n *\r\n *        http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *    Unless required by applicable law or agreed to in writing, software\r\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n *    See the License for the specific language governing permissions and\r\n *    limitations under the License.\r\n *\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport {\r\n  Backdrop, Box, Button, CircularProgress, Modal, Paper,\r\n} from \"@mui/material\";\r\n\r\nimport { RegistryEntityContextProvider, useRegistryEntityAdministration } from \"@croz/nrich-registry-core\";\r\n\r\nimport { RegistryFilter } from \"./RegistryFilter\";\r\nimport { RegistryForm } from \"./RegistryForm\";\r\nimport { RegistryTable } from \"./RegistryTable\";\r\n\r\nconst modalStyle = {\r\n  position: \"absolute\" as \"absolute\",\r\n  top: \"50%\",\r\n  left: \"50%\",\r\n  transform: \"translate(-50%, -50%)\",\r\n  width: 600,\r\n  bgcolor: \"background.paper\",\r\n  boxShadow: 12,\r\n};\r\n\r\n/**\r\n * {@link RegistryEntity} properties\r\n */\r\nexport interface Props {\r\n  /**\r\n   * Name of the registry entity\r\n   */\r\n  entityName: string;\r\n}\r\n\r\n/**\r\n * Component that manages full administration for single registry entity. Includes table with paging and filtering, adding, editing\r\n * and deleting entities.\r\n * @param entityName Name of administered registry entity\r\n */\r\nexport const RegistryEntity = ({ entityName }: Props) => {\r\n  const {\r\n    entityConfiguration,\r\n    data,\r\n    request,\r\n    handlePagingUpdate,\r\n    handleFilterUpdate,\r\n    handleAddClick,\r\n    handleEditClick,\r\n    handleSubmitClick,\r\n    formType,\r\n    formData,\r\n    formModalOpen,\r\n    closeFormModal,\r\n    loading,\r\n    remove,\r\n  } = useRegistryEntityAdministration(entityName);\r\n\r\n  return (\r\n    <RegistryEntityContextProvider entityConfiguration={entityConfiguration}>\r\n      <Paper sx={{\r\n        display: \"flex\", flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\",\r\n      }}\r\n      >\r\n        <RegistryFilter onFilterUpdate={handleFilterUpdate} />\r\n        <div>\r\n          {entityConfiguration.creatable && <Button variant=\"contained\" onClick={handleAddClick}>Add</Button>}\r\n        </div>\r\n      </Paper>\r\n      <RegistryTable data={data} request={request} onRequestChange={handlePagingUpdate} onEdit={handleEditClick} onRemove={remove} />\r\n      {\r\n        formModalOpen && (\r\n          <Modal open={formModalOpen} onClose={(_, reason) => reason !== \"backdropClick\" && closeFormModal()}>\r\n            <Box sx={modalStyle}>\r\n              <RegistryForm\r\n                type={formType}\r\n                initialValues={formData}\r\n                onClose={closeFormModal}\r\n                onSubmit={handleSubmitClick}\r\n              />\r\n            </Box>\r\n          </Modal>\r\n        )\r\n      }\r\n      {loading && (\r\n        <Backdrop\r\n          sx={{ color: \"#fff\", zIndex: (theme) => theme.zIndex.drawer + 1 }}\r\n          open\r\n        >\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      )}\r\n    </RegistryEntityContextProvider>\r\n  );\r\n};\r\n","/*\r\n *    Copyright 2023 CROZ d.o.o, the original author or authors.\r\n *\r\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n *    you may not use this file except in compliance with the License.\r\n *    You may obtain a copy of the License at\r\n *\r\n *        http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *    Unless required by applicable law or agreed to in writing, software\r\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n *    See the License for the specific language governing permissions and\r\n *    limitations under the License.\r\n *\r\n */\r\n\r\nimport React, { ChangeEvent } from \"react\";\r\n\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport {\r\n  FormControl, InputAdornment, InputLabel, MenuItem, OutlinedInput, Select,\r\n} from \"@mui/material\";\r\n\r\nimport { SearchParameter, useDebouncedUpdateEffect, useRegistryFilter } from \"@croz/nrich-registry-core\";\r\n\r\n/**\r\n * {@link RegistryFilter} properties\r\n */\r\ninterface Props {\r\n  /**\r\n   * Change handler to be called when filter updates\r\n   * @param searchParameter new search values\r\n   */\r\n  onFilterUpdate: (searchParameter: SearchParameter) => void;\r\n}\r\n\r\n/**\r\n * Component for basic filtering. Has input field for query and dropdown with filterable properties.\r\n * @param onFilterUpdate Change handler to be called when filter updates\r\n */\r\nexport const RegistryFilter = ({ onFilterUpdate }: Props) => {\r\n  const {\r\n    availableFields,\r\n    searchParameter,\r\n    handleFieldsChange,\r\n    handleQueryChange,\r\n  } = useRegistryFilter();\r\n\r\n  useDebouncedUpdateEffect(() => {\r\n    onFilterUpdate(searchParameter);\r\n  }, 300, [searchParameter]);\r\n\r\n  return (\r\n    <div>\r\n      <FormControl sx={{ m: 1, width: 300 }} size=\"small\">\r\n        <InputLabel htmlFor=\"search-query\">Search...</InputLabel>\r\n        <OutlinedInput\r\n          id=\"search-query\"\r\n          value={searchParameter.query}\r\n          onChange={handleQueryChange}\r\n          label=\"Search...\"\r\n          startAdornment={(\r\n            <InputAdornment position=\"start\">\r\n              <SearchIcon />\r\n            </InputAdornment>\r\n          )}\r\n        />\r\n      </FormControl>\r\n      <FormControl sx={{ m: 1, width: 300 }} size=\"small\">\r\n        <InputLabel id=\"demo-multiple-name-label\">Properties</InputLabel>\r\n        <Select\r\n          labelId=\"demo-multiple-name-label\"\r\n          id=\"demo-multiple-name\"\r\n          multiple\r\n          label=\"Properties\"\r\n          value={searchParameter.propertyNameList}\r\n          onChange={(event) => handleFieldsChange(event as ChangeEvent)}\r\n          input={<OutlinedInput />}\r\n        >\r\n          {availableFields.map((field) => (\r\n            <MenuItem key={field.value} value={field.value}>\r\n              {field.label}\r\n            </MenuItem>\r\n          ))}\r\n        </Select>\r\n      </FormControl>\r\n    </div>\r\n  );\r\n};\r\n","/*\r\n *    Copyright 2023 CROZ d.o.o, the original author or authors.\r\n *\r\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n *    you may not use this file except in compliance with the License.\r\n *    You may obtain a copy of the License at\r\n *\r\n *        http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *    Unless required by applicable law or agreed to in writing, software\r\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n *    See the License for the specific language governing permissions and\r\n *    limitations under the License.\r\n *\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport {\r\n  Box, Button, FormControl, FormHelperText, InputLabel, MenuItem, OutlinedInput, Paper, Select, TextField, Typography,\r\n} from \"@mui/material\";\r\n\r\nimport {\r\n  findIdField, formatIdName, FormType, RegistryPropertyConfiguration, useRegistryEntity, useRegistryForm,\r\n} from \"@croz/nrich-registry-core\";\r\n\r\n/**\r\n * Properties for form field\r\n */\r\ninterface FieldProps {\r\n  /**\r\n   * Configuration of the specific property/field\r\n   */\r\n  configuration: RegistryPropertyConfiguration;\r\n\r\n  /**\r\n   * Current value of field\r\n   */\r\n  value: any;\r\n\r\n  /**\r\n   * Change handler for updating value\r\n   * @param newValue new value of the field\r\n   */\r\n  onChange: (newValue: any) => void;\r\n\r\n  /**\r\n   * Error on current field value. Filled on unsuccessful submit, cleared on change\r\n   */\r\n  error: string;\r\n}\r\n\r\n/**\r\n * Field for properties of complex object type. Renders class name and id for options\r\n * @param configuration Configuration of the specific property/field\r\n * @param value Current value of field\r\n * @param onChange Change handler for updating value\r\n * @param error Error on current field value\r\n */\r\nconst SubEntityField = ({\r\n  configuration, value, onChange, error,\r\n}: FieldProps) => {\r\n  const { entityConfiguration, data } = useRegistryEntity(configuration.singularAssociationReferencedClass, { pageNumber: 0, pageSize: 1000 });\r\n\r\n  const idField = findIdField(entityConfiguration);\r\n\r\n  return (\r\n    <FormControl size=\"small\">\r\n      <InputLabel id={`${configuration.name}-picker-label`}>{configuration.formLabel}</InputLabel>\r\n      <Select\r\n        labelId={`${configuration.name}-picker-label`}\r\n        id={`${configuration.name}-picker`}\r\n        label={configuration.formLabel}\r\n        value={value?.[idField.name] ?? \"\"}\r\n        onChange={(event) => onChange({ [idField.name]: event.target.value })}\r\n        error={!!error}\r\n        input={<OutlinedInput />}\r\n      >\r\n        {(data?.content || []).map((option) => (\r\n          <MenuItem key={option[idField.name]} value={option[idField.name]}>\r\n            {formatIdName(entityConfiguration.classFullName, idField.name, option[idField.name])}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n      {!!error && <FormHelperText>{error}</FormHelperText>}\r\n    </FormControl>\r\n  );\r\n};\r\n\r\n/**\r\n * Main component for a single field which renders specific input based on property javascript type\r\n * @param configuration Configuration of the specific property/field\r\n * @param value Current value of field\r\n * @param onChange Change handler for updating value\r\n * @param error Error on current field value\r\n */\r\nconst Field = ({\r\n  configuration, value, onChange, error,\r\n}: FieldProps) => {\r\n  switch (configuration.javascriptType) {\r\n    case \"string\":\r\n      return (\r\n        <TextField\r\n          error={!!error}\r\n          helperText={error}\r\n          label={configuration.formLabel}\r\n          value={value ?? \"\"}\r\n          size=\"small\"\r\n          onChange={(event) => onChange(event.target.value)}\r\n          disabled={!configuration.editable}\r\n        />\r\n      );\r\n    case \"number\":\r\n      if (configuration.decimal) {\r\n        return (\r\n          <TextField\r\n            error={!!error}\r\n            helperText={error}\r\n            label={configuration.formLabel}\r\n            value={value ?? \"\"}\r\n            size=\"small\"\r\n            inputProps={{ inputMode: \"numeric\", pattern: \"[0-9.,]*\" }}\r\n            disabled={!configuration.editable}\r\n            onChange={(event) => onChange(+event.target.value)}\r\n          />\r\n        );\r\n      }\r\n      return (\r\n        <TextField\r\n          error={!!error}\r\n          helperText={error}\r\n          label={configuration.formLabel}\r\n          value={value ?? \"\"}\r\n          size=\"small\"\r\n          inputProps={{ inputMode: \"numeric\", pattern: \"[0-9]*\" }}\r\n          disabled={!configuration.editable}\r\n          onChange={(event) => onChange(+event.target.value)}\r\n        />\r\n      );\r\n    case \"boolean\":\r\n      // use switch or checkbox\r\n      return (\r\n        <TextField\r\n          error={!!error}\r\n          helperText={error}\r\n          label={configuration.formLabel}\r\n          value={value ?? \"\"}\r\n          size=\"small\"\r\n          onChange={(event) => onChange(event.target.value)}\r\n          disabled={!configuration.editable}\r\n        />\r\n      );\r\n    case \"object\":\r\n      return (\r\n        <SubEntityField configuration={configuration} value={value} onChange={onChange} error={error} />\r\n      );\r\n    case \"date\":\r\n      return (\r\n        <TextField\r\n          error={!!error}\r\n          helperText={error}\r\n          label={configuration.formLabel}\r\n          value={value?.split(\"T\")[0] ?? \"\"}\r\n          type=\"date\"\r\n          size=\"small\"\r\n          onChange={(event) => onChange(event.target.value)}\r\n          disabled={!configuration.editable}\r\n          InputLabelProps={{\r\n            shrink: true,\r\n          }}\r\n        />\r\n      );\r\n    default:\r\n      return (\r\n        <TextField\r\n          error={!!error}\r\n          helperText={error}\r\n          label={configuration.formLabel}\r\n          value={value ?? null}\r\n          size=\"small\"\r\n          onChange={(event) => onChange(event.target.value)}\r\n          disabled={!configuration.editable}\r\n        />\r\n      );\r\n  }\r\n};\r\n\r\nconst paperStyle = {\r\n  display: \"flex\",\r\n  flexDirection: \"column\",\r\n  p: 4,\r\n  gap: 2,\r\n};\r\n\r\n/**\r\n * {@link RegistryForm} properties\r\n */\r\ninterface Props {\r\n  /**\r\n   * Initial values of the form. Row data or empty object\r\n   */\r\n  initialValues: any;\r\n\r\n  /**\r\n   * Flag if form is currently in create or update mode\r\n   */\r\n  type: FormType;\r\n\r\n  /**\r\n   * Handler for submitting values. Called after successful validation of input data\r\n   * @param values\r\n   */\r\n  onSubmit: (values: any) => void;\r\n\r\n  /**\r\n   * Handler for closing form, called when user explicitly clicks on cancel button\r\n   */\r\n  onClose: () => void;\r\n\r\n}\r\n\r\n/**\r\n * Component which encapsulates create and update forms for single registry entity\r\n * @param initialValues Initial values of the form. Row data or empty object\r\n * @param type Flag if form is currently in create or update mode\r\n * @param onSubmit Handler for submitting values. Called after successful validation of input data\r\n * @param onClose Handler for closing form, called when user explicitly clicks on cancel button\r\n */\r\nexport const RegistryForm = ({\r\n  initialValues, type, onSubmit, onClose,\r\n}: Props) => {\r\n  const {\r\n    entityConfiguration,\r\n    yupSchema,\r\n    finalInitialValues,\r\n    properties,\r\n  } = useRegistryForm(initialValues, type);\r\n\r\n  // form handlers\r\n\r\n  const [value, setValue] = React.useState<any>(finalInitialValues);\r\n  const [errors, setErrors] = React.useState<any>({});\r\n  const clearError = (fieldName: string) => {\r\n    setErrors((oldErrors) => ({ ...oldErrors, [fieldName]: undefined }));\r\n  };\r\n\r\n  const updateField = (fieldName: string, newValue: any) => {\r\n    setValue((oldValue) => ({ ...oldValue, [fieldName]: newValue }));\r\n    clearError(fieldName);\r\n  };\r\n\r\n  const handleSubmit = async () => {\r\n    try {\r\n      await yupSchema.validate(value, { abortEarly: false });\r\n      onSubmit(value);\r\n    }\r\n    catch (e) {\r\n      setErrors(e.inner.reduce((all, error) => ({ ...all, [error.path]: error.message }), {}));\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Paper sx={paperStyle}>\r\n      <Typography variant=\"h5\">{type === \"update\" ? `Update ${entityConfiguration.name}` : `Create ${entityConfiguration.name}`}</Typography>\r\n      {properties.map((field) => (\r\n        <Field key={field.name} configuration={field} value={value[field.name]} onChange={(newValue) => updateField(field.name, newValue)} error={errors[field.name]} />\r\n      ))}\r\n      <Box sx={{ alignSelf: \"end\" }}>\r\n        <Button variant=\"outlined\" onClick={onClose} sx={{ mr: 2 }}>Cancel</Button>\r\n        <Button variant=\"contained\" onClick={handleSubmit}>{type === \"update\" ? \"Update\" : \"Create\"}</Button>\r\n      </Box>\r\n    </Paper>\r\n  );\r\n};\r\n","/*\r\n *    Copyright 2023 CROZ d.o.o, the original author or authors.\r\n *\r\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n *    you may not use this file except in compliance with the License.\r\n *    You may obtain a copy of the License at\r\n *\r\n *        http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *    Unless required by applicable law or agreed to in writing, software\r\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n *    See the License for the specific language governing permissions and\r\n *    limitations under the License.\r\n *\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport { IconButton, Paper, SortDirection as MuiSortDirection, Table, TableBody, TableCell, TableContainer, TableHead, TablePagination, TableRow, } from \"@mui/material\";\r\nimport TableSortLabel from \"@mui/material/TableSortLabel\";\r\n\r\nimport {\r\n  EntityRegistryRequest,\r\n  findIdField,\r\n  formatIdName,\r\n  RegistryEntityConfiguration,\r\n  RegistryPropertyConfiguration,\r\n  RegistryResponse,\r\n  resolveId,\r\n  resolveValue,\r\n  SortProperty,\r\n  useRegistryEntityContext,\r\n  useRegistrySort,\r\n} from \"@croz/nrich-registry-core\";\r\n\r\n/**\r\n * {@link RegistryTableHeadCell} properties\r\n */\r\ninterface RegistryTableHeadProps {\r\n  /**\r\n   * Configuration of the property\r\n   */\r\n  property: RegistryPropertyConfiguration;\r\n\r\n  /**\r\n   * Current value for sorting configuration\r\n   */\r\n  sortPropertyList: SortProperty[];\r\n\r\n  /**\r\n   * Change handler for sorting configuration\r\n   * @param sortPropertyList new sorting configuration\r\n   */\r\n  onSortChange: (sortPropertyList: SortProperty[]) => void;\r\n}\r\n\r\n/**\r\n * Header cell of a property. Renders sorting button if this property\r\n * @param property configuration of the property\r\n * @param sortPropertyList current value for sorting configuration\r\n * @param onSortChange change handler for sorting configuration\r\n */\r\nconst RegistryTableHeadCell = ({property, sortPropertyList, onSortChange}: RegistryTableHeadProps) => {\r\n  const {\r\n    sortDirection,\r\n    sortChangeHandler,\r\n  } = useRegistrySort(property, sortPropertyList, onSortChange);\r\n\r\n  const muiSortDirection = sortDirection === undefined ? false : sortDirection.toLowerCase() as MuiSortDirection;\r\n\r\n  return (\r\n    <TableCell\r\n      key={property.name}\r\n      sortDirection={muiSortDirection}\r\n    >\r\n      <TableSortLabel\r\n        active={muiSortDirection !== false}\r\n        direction={muiSortDirection !== false ? muiSortDirection : undefined}\r\n        onClick={property.sortable ? () => sortChangeHandler() : () => {\r\n        }}\r\n      >\r\n        {property.columnHeader}\r\n      </TableSortLabel>\r\n    </TableCell>\r\n  );\r\n};\r\n\r\n/**\r\n * {@link PropertyCell} properties\r\n */\r\ninterface PropertyCellProps {\r\n  /**\r\n   * Configuration of specific data property\r\n   */\r\n  propertyConfiguration: RegistryPropertyConfiguration;\r\n\r\n  /**\r\n   * Value of property\r\n   */\r\n  value: any;\r\n\r\n  /**\r\n   * Map with registry entity subentities (on which this entity depends). Used for rendering complex objects\r\n   */\r\n  subEntityMap: Record<string, RegistryEntityConfiguration>;\r\n}\r\n\r\n/**\r\n * Single cell in the registry table. Renders value based on javascript type\r\n * @param propertyConfiguration configuration of specific data property\r\n * @param value value of property\r\n * @param subEntityMap map with registry entity subentities\r\n */\r\nconst PropertyCell = ({propertyConfiguration, value, subEntityMap}: PropertyCellProps) => {\r\n  let stringValue = value;\r\n  if (value === undefined || value === null) {\r\n    stringValue = \"-\";\r\n  } else if (propertyConfiguration.javascriptType === \"object\") {\r\n    const configuration = subEntityMap[propertyConfiguration.singularAssociationReferencedClass];\r\n    const idField = findIdField(configuration);\r\n    stringValue = formatIdName(configuration.classFullName, idField.name, value[idField.name]);\r\n  } else if (propertyConfiguration.javascriptType === \"date\") {\r\n    stringValue = new Date(value).toLocaleDateString();\r\n  } else if (propertyConfiguration.javascriptType === \"number\") {\r\n    if (propertyConfiguration.decimal) {\r\n      stringValue = Number(value).toFixed(2);\r\n    } else {\r\n      stringValue = value;\r\n    }\r\n  } else if (propertyConfiguration.javascriptType === \"boolean\") {\r\n    stringValue = value ? \"Yes\" : \"No\";\r\n  }\r\n\r\n  return <TableCell>{stringValue}</TableCell>;\r\n};\r\n\r\n/**\r\n * {@link RegistryTableRow} properties\r\n */\r\ninterface RegistryTableRowProps {\r\n  /**\r\n   * Data of the row\r\n   */\r\n  row: any;\r\n\r\n  /**\r\n   * Handler for editing specific row\r\n   * @param id id field of the row\r\n   * @param data row data\r\n   */\r\n  onEdit: (id: any, data: any) => void;\r\n\r\n  /**\r\n   * Handler for removing specific row\r\n   * @param id id field of the row\r\n   */\r\n  onRemove: (id: any) => void;\r\n}\r\n\r\n/**\r\n * Single row of the table\r\n * @param row data of the row\r\n * @param onEdit handler for editing specific row\r\n * @param onRemove handler for removing specific row\r\n */\r\nconst RegistryTableRow = ({\r\n                            row, onEdit, onRemove,\r\n                          }: RegistryTableRowProps) => {\r\n  const {entityConfiguration, singularAssociationsMap, finalProperties} = useRegistryEntityContext();\r\n\r\n  return (\r\n    <TableRow\r\n      sx={{\"&:last-child td, &:last-child th\": {border: 0}}}\r\n    >\r\n      {finalProperties.map((property) => (\r\n        <PropertyCell key={property.name} propertyConfiguration={property} value={resolveValue(property, row)} subEntityMap={singularAssociationsMap}/>))}\r\n      {(entityConfiguration.updateable || entityConfiguration.deletable) && (\r\n        <TableCell>\r\n          {entityConfiguration.updateable && <IconButton onClick={() => onEdit(resolveId(entityConfiguration, row), row)}><EditIcon/></IconButton>}\r\n          {entityConfiguration.deletable && <IconButton onClick={() => onRemove(resolveId(entityConfiguration, row))}><DeleteIcon/></IconButton>}\r\n        </TableCell>\r\n      )}\r\n    </TableRow>\r\n  );\r\n};\r\n\r\n/**\r\n * {@link RegistryTable} properties\r\n */\r\ninterface RegistryTableProps {\r\n  /**\r\n   * Row data of entity\r\n   */\r\n  data: RegistryResponse<any>;\r\n\r\n  /**\r\n   * Current request used for latest data fetch\r\n   */\r\n  request: EntityRegistryRequest;\r\n\r\n  /**\r\n   * Change function for pagination fields\r\n   * @param request new request value\r\n   */\r\n  onRequestChange: (request: EntityRegistryRequest) => void;\r\n\r\n  /**\r\n   * Handler for editing specific row\r\n   * @param id id field of the row\r\n   * @param data row data\r\n   */\r\n  onEdit: (id: any, data: any) => void;\r\n\r\n  /**\r\n   * Handler for removing specific row\r\n   * @param id id field of the row\r\n   */\r\n  onRemove: (id: any) => void;\r\n}\r\n\r\n/**\r\n * Component which renders entity data in form of the table. Contains paging and actions for specific rows\r\n * @param data row data of entity\r\n * @param request current request used for latest data fetch\r\n * @param onRequestChange change function for pagination fields\r\n * @param onEdit handler for editing specific row\r\n * @param onRemove handler for removing specific row\r\n */\r\nexport const RegistryTable = ({\r\n                                data, request, onRequestChange, onEdit, onRemove,\r\n                              }: RegistryTableProps) => {\r\n  const {entityConfiguration, finalProperties} = useRegistryEntityContext();\r\n\r\n  const onPageChange = (event: unknown, newPage: number) => {\r\n    onRequestChange({...request, pageNumber: newPage});\r\n  };\r\n  const onPageSizeChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n    onRequestChange({...request, pageSize: +event.target.value, pageNumber: 0});\r\n  };\r\n\r\n  const onSortChange = (sortPropertyList: SortProperty[]) => {\r\n    onRequestChange({...request, sortPropertyList});\r\n  };\r\n\r\n  return (\r\n    <Paper>\r\n      <TableContainer>\r\n        <Table sx={{minWidth: 650}} size=\"small\">\r\n          <TableHead>\r\n            <TableRow>\r\n              {finalProperties.map((property) => (\r\n                <RegistryTableHeadCell key={property.name} property={property} sortPropertyList={request.sortPropertyList ?? []} onSortChange={onSortChange}/>\r\n              ))}\r\n              {(entityConfiguration.updateable || entityConfiguration.deletable) && (<TableCell/>)}\r\n            </TableRow>\r\n          </TableHead>\r\n          <TableBody>\r\n            {/* eslint-disable-next-line react/no-array-index-key */}\r\n            {(data.content ?? []).map((row, index) => <RegistryTableRow key={index} row={row} onEdit={onEdit} onRemove={onRemove}/>)}\r\n          </TableBody>\r\n        </Table>\r\n      </TableContainer>\r\n      <TablePagination\r\n        rowsPerPageOptions={[5, 10, 25]}\r\n        component=\"div\"\r\n        count={data.totalElements}\r\n        rowsPerPage={request.pageSize}\r\n        page={request.pageNumber}\r\n        onPageChange={onPageChange}\r\n        onRowsPerPageChange={onPageSizeChange}\r\n      />\r\n    </Paper>\r\n  );\r\n};\r\n","/*\r\n *    Copyright 2023 CROZ d.o.o, the original author or authors.\r\n *\r\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n *    you may not use this file except in compliance with the License.\r\n *    You may obtain a copy of the License at\r\n *\r\n *        http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *    Unless required by applicable law or agreed to in writing, software\r\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n *    See the License for the specific language governing permissions and\r\n *    limitations under the License.\r\n *\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport {\r\n  FormControl, InputLabel, MenuItem, OutlinedInput, Select,\r\n} from \"@mui/material\";\r\n\r\nimport { useRegistryConfigurationStore } from \"@croz/nrich-registry-core\";\r\n\r\n/**\r\n * {@link RegistryEntityPicker} properties\r\n */\r\ninterface Props {\r\n  /**\r\n   * Currently picked entity name\r\n   */\r\n  value: string;\r\n\r\n  /**\r\n   * Change handler for entity\r\n   * @param newValue\r\n   */\r\n  setValue: (newValue: string) => void;\r\n}\r\n\r\n/**\r\n * Simple dropdown with all entity configurations.\r\n * @param value Currently picked entity name\r\n * @param setValue Change handler for entity\r\n */\r\nexport const RegistryEntityPicker = ({ value, setValue }: Props) => {\r\n  const entityConfigurations = useRegistryConfigurationStore((state) => state.groupConfigurations\r\n    .flatMap((groupConfiguration) => groupConfiguration.entityConfigurationList));\r\n\r\n  return (\r\n    <FormControl sx={{ m: 1, width: 300 }} size=\"small\">\r\n      <InputLabel id=\"registry-entity-picker-label\">Entity</InputLabel>\r\n      <Select\r\n        labelId=\"registry-entity-picker-label\"\r\n        id=\"registry-entity-picker\"\r\n        label=\"Entity\"\r\n        value={value}\r\n        onChange={(event) => setValue(event.target.value)}\r\n        input={<OutlinedInput />}\r\n      >\r\n        {entityConfigurations.map((entity) => (\r\n          <MenuItem key={entity.name} value={entity.name}>\r\n            {entity.name}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n    </FormControl>\r\n  );\r\n};\r\n"],"mappings":"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","names":["React","Box","Button","Paper","React","FormControl","InputLabel","MenuItem","OutlinedInput","Select","React","FormControl","InputLabel","Select","OutlinedInput","MenuItem","React","Paper","findIdField","formatIdName","React","findIdField","formatIdName","Paper","_a","React","Paper","Button","Box","React","FormControl","InputLabel","MenuItem","OutlinedInput","Select"]}