// SPDX-License-Identifier: MIT // Copyright (c) 2022 The Pybricks Authors import { Button, Classes, Dialog, FormGroup, Radio, RadioGroup, } from '@blueprintjs/core'; import React, { useCallback, useRef, useState } from 'react'; import { useId } from 'react-aria'; import { useDispatch } from 'react-redux'; import { useFileStorageMetadata } from '../../fileStorage/hooks'; import { FileNameValidationResult, pythonFileExtension, validateFileName, } from '../../pybricksMicropython/lib'; import { useSelector } from '../../reducers'; import FileNameFormGroup from '../fileNameFormGroup/FileNameFormGroup'; import { Hub, newFileWizardDidAccept, newFileWizardDidCancel } from './actions'; import { I18nId, useI18n } from './i18n'; // This should be set to the most commonly used hub. const defaultHub = Hub.Technic; 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, setHubType] = useState(defaultHub); 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} >
setHubType(e.currentTarget.value as Hub)} > BOOST Move Hub City Hub Technic Hub SPIKE Prime SPIKE Essential MINDSTORMS Robot Inventor
); }; export default NewFileWizard;