import { Box, IconButton, Stack, Button, styled, Tooltip, Typography, } from '@mui/material'; import { memo, useContext, useState } from 'react'; import { DataContext } from '../context/Context'; import { JsonFormsDispatch, useJsonForms, withJsonFormsControlProps, } from '@jsonforms/react'; import ComponentWrapper from '../common/ComponentWrapper'; import { getFieldName } from '../permissions/getFieldName'; import { inputProps } from '../interface/inputfieldProps'; import { getComponentProps } from '../common/getComponentProps'; import Grid from '@mui/material/Grid2'; import Helpertext from '../common/Helpertext'; import DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline'; import FileUploadIcon from '@mui/icons-material/FileUpload'; import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'; import FileDeleteConformationDialog from '../common/FileDeleteConformationDialog'; import React from 'react'; const VisuallyHiddenInput = styled('input')({ clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', height: 1, overflow: 'hidden', position: 'absolute', bottom: 0, left: 0, whiteSpace: 'nowrap', width: 1, }); const FileInput = memo((props: inputProps) => { const { data, uischema, path, schema, rootSchema, required, errors, enabled, cells, renderers, } = props; const uischemaData = uischema.config.main; const [confirmDialog, setConfirmDialog] = useState(false); const { serviceProvider, permissions, theme, pageName, setLoading } = useContext(DataContext); const ctx = useJsonForms(); const dynamicStyle = React.useMemo(() => { return serviceProvider( ctx, { onClick: uischema.config?.main?.styleFunction || 'getStyle', }, { event: { _reactName: 'onClick' }, path, }, ); }, [data, path]); const componentStyle = { ...uischema.config?.style, ...dynamicStyle }; const fieldName = getFieldName(path); const variant = uischemaData?.variant || 'Outlined'; const isOutlined = variant === 'Outlined'; const callServiceProvider = ( event: any, uploadEvent?: any, eventName?: string, ) => { serviceProvider(ctx, uischemaData, { event: { ...event, _reactName: eventName }, changeEvent: uploadEvent || event, uischemaData, ...uischemaData.additionalData, path, setLoading, paramValue: event?.target?.value, }); }; const computedProps = getComponentProps( `${pageName}:${fieldName}`, permissions, schema, rootSchema, ); const UploadButton = () => ( ); if (isOutlined) { return ( {uischemaData.label || 'File :'} {required ? ( * ) : ( '' )} {data ? data : uischemaData.noFileAvailableMessage || 'No file chosen'} setConfirmDialog(true)} > { const eventName = uischema?.options?.widget === 'DownloadFile' ? 'onClick' : 'onDownload'; callServiceProvider(event, null, eventName); }} > ); } return ( <> ); }); export default withJsonFormsControlProps(FileInput);