diff --git a/webapp/packages/core-blocks/src/ObjectPropertyInfo/ObjectPropertyInfoForm/RenderField.tsx b/webapp/packages/core-blocks/src/ObjectPropertyInfo/ObjectPropertyInfoForm/RenderField.tsx index 44abc5dd6b0..1ac0a137a4f 100644 --- a/webapp/packages/core-blocks/src/ObjectPropertyInfo/ObjectPropertyInfoForm/RenderField.tsx +++ b/webapp/packages/core-blocks/src/ObjectPropertyInfo/ObjectPropertyInfoForm/RenderField.tsx @@ -17,7 +17,8 @@ import { getObjectPropertyValueType, type IObjectPropertyInfo, } from '@cloudbeaver/core-sdk'; -import { EMPTY_ARRAY, removeMetadataFromDataURL } from '@cloudbeaver/core-utils'; +import { EMPTY_ARRAY, getTextFileReadingProcess, removeMetadataFromDataURL } from '@cloudbeaver/core-utils'; +import { clsx } from '@dbeaver/ui-kit'; import { FieldCheckbox } from '../../FormControls/Checkboxes/FieldCheckbox.js'; import { Select } from '../../FormControls/Select.js'; @@ -30,6 +31,8 @@ import { Link } from '../../Link.js'; import { useTranslate } from '../../localization/useTranslate.js'; import { evaluate } from '../evaluate.js'; import { SAVED_VALUE_INDICATOR } from '../../SAVED_VALUE_INDICATOR.js'; +import { UploadArea } from '../../UploadArea.js'; +import { Button } from '../../Button.js'; interface RenderFieldProps { property: IObjectPropertyInfo; @@ -204,6 +207,46 @@ export const RenderField = observer(function RenderField({ ); } + if (controlType === 'uploadable-textarea' && state && property.id) { + async function handleFileUpload(event: React.ChangeEvent) { + const file = event.target.files?.[0]; + + if (!file) { + throw new Error('File is not found'); + } + + const process = getTextFileReadingProcess(file); + const result = await process.promise; + + if (state && property.id) { + state[property.id] = result; + } + } + + return ( +
+ + + + +
+ ); + } + if (controlType === 'file' && state) { return (