// SPDX-License-Identifier: MIT // Copyright (c) 2022 The Pybricks Authors import { Button, Classes, Dialog, FormGroup } from '@blueprintjs/core'; import React, { useCallback, useRef, useState } from 'react'; import { useId } from 'react-aria'; import { useDispatch } from 'react-redux'; import { HubPicker } from '../../components/hubPicker/HubPicker'; import { useHubPickerSelectedHub } from '../../components/hubPicker/hooks'; import { useFileStorageMetadata } from '../../fileStorage/hooks'; import { FileNameValidationResult, pythonFileExtension, validateFileName, } from '../../pybricksMicropython/lib'; import { useSelector } from '../../reducers'; import FileNameFormGroup from '../fileNameFormGroup/FileNameFormGroup'; import { newFileWizardDidAccept, newFileWizardDidCancel } from './actions'; import { useI18n } from './i18n'; const NewFileWizard: React.VoidFunctionComponent = () => { const i18n = useI18n(); const dispatch = useDispatch(); const isOpen = useSelector((s) => s.explorer.newFileWizard.isOpen); const [fileName, setFileName] = useState(''); const files = useFileStorageMetadata() ?? []; const fileNameValidation = validateFileName( fileName, pythonFileExtension, files.map((f) => f.path), ); const [hubType] = useHubPickerSelectedHub(); const fileNameInputRef = useRef(null); const handleSubmit = useCallback( (e) => { e.preventDefault(); dispatch(newFileWizardDidAccept(fileName, pythonFileExtension, hubType)); }, [dispatch, fileName, pythonFileExtension, hubType], ); const handleClose = useCallback(() => { dispatch(newFileWizardDidCancel()); }, [dispatch]); const acceptButtonLabelId = useId(); return ( setFileName('')} onOpened={() => fileNameInputRef.current?.focus()} onClose={handleClose} >
); }; export default NewFileWizard;