mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 12:24:38 +03:00
Fix path filtering when directory has whitespace in it (#3600)
* Add quotes for path with space in path filter * Hide directory errors in path filter
This commit is contained in:
@@ -39,6 +39,8 @@ export const PathFilter: React.FC<IInputFilterProps> = ({
|
|||||||
currentDirectory={criterion.value ? criterion.value.toString() : ""}
|
currentDirectory={criterion.value ? criterion.value.toString() : ""}
|
||||||
setCurrentDirectory={(v) => onValueChanged(v)}
|
setCurrentDirectory={(v) => onValueChanged(v)}
|
||||||
collapsible
|
collapsible
|
||||||
|
quoteSpaced
|
||||||
|
hideError
|
||||||
defaultDirectories={libraryPaths}
|
defaultDirectories={libraryPaths}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ interface IProps {
|
|||||||
defaultDirectories?: string[];
|
defaultDirectories?: string[];
|
||||||
appendButton?: JSX.Element;
|
appendButton?: JSX.Element;
|
||||||
collapsible?: boolean;
|
collapsible?: boolean;
|
||||||
|
quoteSpaced?: boolean;
|
||||||
|
hideError?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FolderSelect: React.FC<IProps> = ({
|
export const FolderSelect: React.FC<IProps> = ({
|
||||||
@@ -21,15 +23,26 @@ export const FolderSelect: React.FC<IProps> = ({
|
|||||||
defaultDirectories,
|
defaultDirectories,
|
||||||
appendButton,
|
appendButton,
|
||||||
collapsible = false,
|
collapsible = false,
|
||||||
|
quoteSpaced = false,
|
||||||
|
hideError = false,
|
||||||
}) => {
|
}) => {
|
||||||
const [showBrowser, setShowBrowser] = React.useState(false);
|
const [showBrowser, setShowBrowser] = React.useState(false);
|
||||||
const [directory, setDirectory] = useState(currentDirectory);
|
const [directory, setDirectory] = useState(currentDirectory);
|
||||||
const { data, error, loading } = useDirectory(directory);
|
|
||||||
|
const isQuoted =
|
||||||
|
quoteSpaced && directory.startsWith('"') && directory.endsWith('"');
|
||||||
|
const { data, error, loading } = useDirectory(
|
||||||
|
isQuoted ? directory.slice(1, -1) : directory
|
||||||
|
);
|
||||||
|
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
|
const defaultDirectoriesOrEmpty = defaultDirectories ?? [];
|
||||||
|
|
||||||
const selectableDirectories: string[] = currentDirectory
|
const selectableDirectories: string[] = currentDirectory
|
||||||
? data?.directory.directories ?? defaultDirectories ?? []
|
? data?.directory.directories ??
|
||||||
: defaultDirectories ?? [];
|
(error && hideError ? [] : defaultDirectoriesOrEmpty)
|
||||||
|
: defaultDirectoriesOrEmpty;
|
||||||
|
|
||||||
const debouncedSetDirectory = useDebouncedSetState(setDirectory, 250);
|
const debouncedSetDirectory = useDebouncedSetState(setDirectory, 250);
|
||||||
|
|
||||||
@@ -40,6 +53,10 @@ export const FolderSelect: React.FC<IProps> = ({
|
|||||||
}, [currentDirectory, directory, debouncedSetDirectory]);
|
}, [currentDirectory, directory, debouncedSetDirectory]);
|
||||||
|
|
||||||
function setInstant(value: string) {
|
function setInstant(value: string) {
|
||||||
|
if (quoteSpaced && value.includes(" ")) {
|
||||||
|
value = `"${value}"`;
|
||||||
|
}
|
||||||
|
|
||||||
setCurrentDirectory(value);
|
setCurrentDirectory(value);
|
||||||
setDirectory(value);
|
setDirectory(value);
|
||||||
}
|
}
|
||||||
@@ -95,13 +112,13 @@ export const FolderSelect: React.FC<IProps> = ({
|
|||||||
<InputGroup.Append className="align-self-center">
|
<InputGroup.Append className="align-self-center">
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<LoadingIndicator inline small message="" />
|
<LoadingIndicator inline small message="" />
|
||||||
) : (
|
) : !hideError ? (
|
||||||
<Icon icon={faTimes} color="red" className="ml-3" />
|
<Icon icon={faTimes} color="red" className="ml-3" />
|
||||||
)}
|
) : undefined}
|
||||||
</InputGroup.Append>
|
</InputGroup.Append>
|
||||||
) : undefined}
|
) : undefined}
|
||||||
</InputGroup>
|
</InputGroup>
|
||||||
{error !== undefined && (
|
{!hideError && error !== undefined && (
|
||||||
<h5 className="mt-4 text-break">Error: {error.message}</h5>
|
<h5 className="mt-4 text-break">Error: {error.message}</h5>
|
||||||
)}
|
)}
|
||||||
<Collapse in={!collapsible || showBrowser}>
|
<Collapse in={!collapsible || showBrowser}>
|
||||||
|
|||||||
Reference in New Issue
Block a user