Skip to content

Commit

Permalink
playground: add a rename button (#669)
Browse files Browse the repository at this point in the history
Signed-off-by: Ookiineko <[email protected]>
  • Loading branch information
ookiineko committed Mar 6, 2024
1 parent 496f420 commit 2c2e2e2
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,18 @@ import { Node } from "./types";
interface FileSystemManagerProps {
path: string;
nodes: Node[];
oldName: string;
newName: string;
renameOpen: boolean;
onNewNameChange: () => (event: ChangeEvent<HTMLInputElement>) => Promise<void>;
onCloseRenameModal: () => () => Promise<void>;
onFileUpload: (
isText: boolean
) => (event: ChangeEvent<HTMLInputElement>) => Promise<void>;
onDirClick: (name: string) => () => Promise<void>;
onFileClick: (name: string) => (option: string) => Promise<void>;
onDirCreate: (name: string) => () => Promise<void>;
onRename: (old_name: string, new_name: string) => () => Promise<void>;
onRefresh: () => Promise<void>;
onLoadSamples: () => Promise<void>;
}
Expand All @@ -46,6 +52,7 @@ const modalStyle = {
};

export const options = [
{ text: "Rename", key: "rename" },
{ text: "Download", key: "download" },
{ text: "Download as Text File", key: "download-text" },
{ text: "Delete", key: "delete" },
Expand All @@ -54,17 +61,23 @@ export const options = [
export default function FileSystemManager({
path = "/",
nodes = [],
oldName = "",
newName = "",
renameOpen = false,
onNewNameChange = () => () => Promise.resolve(),
onCloseRenameModal = () => () => Promise.resolve(),
onFileUpload = () => () => Promise.resolve(),
onFileClick = () => () => Promise.resolve(),
onDirClick = () => () => Promise.resolve(),
onDirCreate = () => () => Promise.resolve(),
onRename = () => () => Promise.resolve(),
onRefresh = () => Promise.resolve(),
onLoadSamples = () => Promise.resolve(),
}: FileSystemManagerProps) {
const [open, setOpen] = useState(false);
const [newFolderOpen, setNewFolderOpen] = useState(false);
const [dirName, setDirName] = useState("");
const handleModalOpen = () => setOpen(true);
const handleModalClose = () => setOpen(false);
const handleNewFolderModalOpen = () => setNewFolderOpen(true);
const handleNewFolderModalClose = () => setNewFolderOpen(false);

return (
<>
Expand Down Expand Up @@ -113,7 +126,7 @@ export default function FileSystemManager({
<IconButton
onClick={() => {
setDirName("");
handleModalOpen();
handleNewFolderModalOpen();
}}
aria-label="create-a-new-folder"
size="small"
Expand Down Expand Up @@ -165,8 +178,8 @@ export default function FileSystemManager({
</Stack>
</Paper>
<Modal
open={open}
onClose={handleModalClose}
open={newFolderOpen}
onClose={handleNewFolderModalClose}
aria-labelledby="new-folder-name"
aria-describedby="new-folder-name-description"
>
Expand All @@ -183,12 +196,12 @@ export default function FileSystemManager({
onChange={(event) => setDirName(event.target.value)}
/>
<Stack direction="row" justifyContent="flex-end">
<Button onClick={handleModalClose}>Cancel</Button>
<Button onClick={handleNewFolderModalClose}>Cancel</Button>
<Button
variant="contained"
onClick={() => {
onDirCreate(dirName);
handleModalClose();
handleNewFolderModalClose();
}}
>
Create
Expand All @@ -197,6 +210,36 @@ export default function FileSystemManager({
</Stack>
</Box>
</Modal>
<Modal
open={renameOpen}
onClose={onCloseRenameModal()}
aria-labelledby="new-name"
aria-describedby="new-name-description"
>
<Box sx={modalStyle}>
<Stack spacing={4}>
<Typography id="modal-modal-title" variant="h6" component="h2">
New Name:
</Typography>
<TextField
id="outlined-basic"
label="my-file"
variant="outlined"
value={newName}
onChange={onNewNameChange()}
/>
<Stack direction="row" justifyContent="flex-end">
<Button onClick={onCloseRenameModal()}>Cancel</Button>
<Button
variant="contained"
onClick={onRename(oldName, newName)}
>
Rename
</Button>
</Stack>
</Stack>
</Box>
</Modal>
</>
);
}
30 changes: 30 additions & 0 deletions apps/website/src/components/Playground/Workspace/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ interface WorkspaceProps {
export default function Workspace({ ffmpeg: _ffmpeg }: WorkspaceProps) {
const [path, setPath] = useState("/");
const [nodes, setNodes] = useState<Node[]>([]);
const [oldName, setOldName] = useState("");
const [newName, setNewName] = useState("");
const [renameOpen, setRenameOpen] = useState(false);
const [args, setArgs] = useState(defaultArgs);
const [progress, setProgress] = useState(0);
const [time, setTime] = useState(0);
Expand All @@ -38,6 +41,14 @@ export default function Workspace({ ffmpeg: _ffmpeg }: WorkspaceProps) {
}
};

const onNewNameChange = () => async (event: ChangeEvent<HTMLInputElement>) => {
setNewName(event.target.value);
};

const onCloseRenameModal = () => async () => {
setRenameOpen(false);
};

const onFileUpload =
(isText: boolean) =>
async ({ target: { files } }: ChangeEvent<HTMLInputElement>) => {
Expand All @@ -53,6 +64,11 @@ export default function Workspace({ ffmpeg: _ffmpeg }: WorkspaceProps) {
const onFileClick = (name: string) => async (option: string) => {
const fullPath = `${path}/${name}`;
switch (option) {
case "rename":
setOldName(name);
setNewName("");
setRenameOpen(true);
break;
case "download":
downloadFile(
name,
Expand Down Expand Up @@ -93,6 +109,14 @@ export default function Workspace({ ffmpeg: _ffmpeg }: WorkspaceProps) {
refreshDir(path);
};

const onRename = (old_name: string, new_name: string) => async () => {
if (old_name !== "" && new_name !== "") {
await ffmpeg.rename(`${path}/${old_name}`, `${path}/${new_name}`);
}
setRenameOpen(false);
refreshDir(path);
};

const onLoadSamples = async () => {
for (const name of Object.keys(SAMPLE_FILES)) {
await ffmpeg.writeFile(name, await fetchFile(SAMPLE_FILES[name]));
Expand Down Expand Up @@ -130,10 +154,16 @@ export default function Workspace({ ffmpeg: _ffmpeg }: WorkspaceProps) {
<FileSystemManager
path={path}
nodes={nodes}
oldName={oldName}
newName={newName}
renameOpen={renameOpen}
onNewNameChange={onNewNameChange}
onCloseRenameModal={onCloseRenameModal}
onFileUpload={onFileUpload}
onFileClick={onFileClick}
onDirClick={onDirClick}
onDirCreate={onDirCreate}
onRename={onRename}
onLoadSamples={onLoadSamples}
onRefresh={() => refreshDir(path)}
/>
Expand Down

0 comments on commit 2c2e2e2

Please sign in to comment.