import { Button, Classes, Dialog, InputGroup, Spinner, FormGroup, } from "@blueprintjs/core"; import React, { FunctionComponent, useEffect, useState } from "react"; import { StashService } from "../../../core/StashService"; interface IProps { directories: string[]; onDirectoriesChanged: (directories: string[]) => void; } export const FolderSelect: FunctionComponent = (props: IProps) => { const [currentDirectory, setCurrentDirectory] = useState(""); const [isDisplayingDialog, setIsDisplayingDialog] = useState(false); const [selectableDirectories, setSelectableDirectories] = useState([]); const [selectedDirectories, setSelectedDirectories] = useState([]); const { data, error, loading } = StashService.useDirectories(currentDirectory); useEffect(() => { setSelectedDirectories(props.directories); }, [props.directories]); useEffect(() => { if (!data || !data.directories || !!error) { return; } setSelectableDirectories(StashService.nullToUndefined(data.directories)); }, [data, error]); function onSelectDirectory() { selectedDirectories.push(currentDirectory); setSelectedDirectories(selectedDirectories); setCurrentDirectory(""); setIsDisplayingDialog(false); props.onDirectoriesChanged(selectedDirectories); } function onRemoveDirectory(directory: string) { const newSelectedDirectories = selectedDirectories.filter((dir) => dir !== directory); setSelectedDirectories(newSelectedDirectories); props.onDirectoriesChanged(newSelectedDirectories); } function renderDialog() { return ( setIsDisplayingDialog(false)} title="Select Directory" >
setCurrentDirectory(e.target.value)} value={currentDirectory} rightElement={(!data || !data.directories || loading) ? : undefined} /> {selectableDirectories.map((path) => { return
setCurrentDirectory(path)}>{path}
; })}
); } return ( <> {!!error ?

{error.message}

: undefined} {renderDialog()} {selectedDirectories.map((path) => { return
{path}
; })}
); };