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 (
{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);