import React, { PureComponent } from 'react'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import DialogActions from '@mui/material/DialogActions'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import CreateNewFolderRoundedIcon from '@mui/icons-material/CreateNewFolderRounded'; import SingleLineTextEdit from 'dashgui/SingleLineTextEdit'; export default class VfsNewFolderDialog extends PureComponent { constructor(props) { super(props); this.state = { folderName: '', error: '', }; } componentDidUpdate(prevProps) { if (!prevProps.open && this.props.open) { this.setState({ folderName: '', error: '' }); } } handleSubmit = (e) => { e?.preventDefault(); const raw = this.state.folderName.trim(); if (!raw) { this.setState({ error: 'Bitte gib einen Ordnernamen ein.' }); return; } if (raw.includes('..') || raw.includes('\\')) { this.setState({ error: 'Ungültige Zeichen im Ordnernamen.' }); return; } const clean = raw.replace(/^[/\\]+/, '').replace(/[/\\]+$/, ''); const parent = String(this.props.parentFolder || '').trim().replace(/^[/\\]+/, '').replace(/[/\\]+$/, ''); const fullPath = parent ? `${parent}/${clean}` : clean; this.props.onCreate?.(fullPath); }; render() { const { open, onClose, isCreating, parentFolder } = this.props; const { folderName, error } = this.state; const cleanParent = String(parentFolder || '').trim().replace(/^[/\\]+/, '').replace(/[/\\]+$/, ''); return ( theme.zIndex.modal + 20 }} slotProps={{ paper: { sx: { borderRadius: 3, p: 1 } }, }} > Neuen Ordner erstellen
{cleanParent && ( In: {cleanParent}/ )} this.setState({ folderName: nextVal, error: '' })} error={Boolean(error)} helperText={error} disabled={isCreating} />
); } }