diff --git a/src/components/converter/converter-steps/upload-step/upload-step.tsx b/src/components/converter/converter-steps/upload-step/upload-step.tsx index 6e557e8..e9eb3b3 100644 --- a/src/components/converter/converter-steps/upload-step/upload-step.tsx +++ b/src/components/converter/converter-steps/upload-step/upload-step.tsx @@ -1,4 +1,5 @@ -import { Alert, Button, Select, UploadFile } from 'antd' +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Alert, Button, Cascader, UploadFile } from 'antd' import DraggerUpload from '../../../dragger-upload' import './upload-step.css' import { memo, useCallback, useMemo, useState } from 'react' @@ -17,6 +18,12 @@ type ErrorMessage = { message: string } +type Option = { + value: string + label: string + children?: Option[] +} + const hideErrorMessage: ErrorMessage = { isVisible: false, message: '', @@ -65,9 +72,16 @@ const UploadStep = memo(function UploadStepComponent( }, [props.allowedUploadingFormats]) const onSelectedFormatChange = useCallback( - (value: string) => { - setFormat(value) - props.updateSelectedExtension(value) + (value: (string | number)[]) => { + const result = value[1] as string + + if (!result) { + console.warn('Could not read selected format.') + return + } + + setFormat(result) + props.updateSelectedExtension(result) }, [props], ) @@ -87,22 +101,39 @@ const UploadStep = memo(function UploadStepComponent( }, [files.length, format, props]) const options = useMemo(() => { - return props.extensionOptions.map((item) => { - return { value: item.extension, label: item.name } + const opts: Option[] = [] + + props.extensionOptions.forEach((item) => { + if (opts.some((x) => x.label === item.category)) { + return + } + + const children = props.extensionOptions.filter( + (value) => value.category === item.category, + ) + + opts.push({ + label: item.category, + value: item.category, + children: children.map((cItem) => { + return { value: cItem.extension, label: cItem.name, children: [] } + }), + }) }) + + return opts }, [props.extensionOptions]) return (
- + onChange={onSelectedFormatChange} + />