Remove uses of path

This commit is contained in:
Manav Rathi 2024-04-30 13:01:29 +05:30
parent 2099663a93
commit f5754eb2e1
No known key found for this signature in database
2 changed files with 15 additions and 30 deletions

View file

@ -324,8 +324,8 @@ export default function Uploader({
// Trigger an upload when any of the dependencies change.
useEffect(() => {
const allItemAndPaths = [
/* TODO(MR): ElectronFile | use webkitRelativePath || name here */
webFiles.map((f) => [f, f["path"] ?? f.name]),
// See: [Note: webkitRelativePath]
webFiles.map((f) => [f, f.webkitRelativePath ?? f.name]),
desktopFiles.map((fp) => [fp, fp.path]),
desktopFilePaths.map((p) => [p, p]),
desktopZipItems.map((ze) => [ze, ze[1]]),

View file

@ -72,19 +72,27 @@ export default function useFileInput({
event,
) => {
if (!!event.target && !!event.target.files) {
const files = [...event.target.files].map((file) =>
toFileWithPath(file),
);
setSelectedFiles(files);
setSelectedFiles([...event.target.files]);
}
};
// [Note: webkitRelativePath]
//
// If the webkitdirectory attribute of an <input> HTML element is set then
// the File objects that we get will have `webkitRelativePath` property
// containing the relative path to the selected directory.
//
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory
const directoryOpts = directory
? { directory: "", webkitdirectory: "" }
: {};
const getInputProps = useCallback(
() => ({
type: "file",
multiple: true,
style: { display: "none" },
...(directory ? { directory: "", webkitdirectory: "" } : {}),
...directoryOpts,
ref: inputRef,
onChange: handleChange,
...(accept ? { accept } : {}),
@ -98,26 +106,3 @@ export default function useFileInput({
selectedFiles: selectedFiles,
};
}
// https://github.com/react-dropzone/file-selector/blob/master/src/file.ts#L88
export function toFileWithPath(file: File, path?: string): FileWithPath {
if (typeof (file as any).path !== "string") {
// on electron, path is already set to the absolute path
const { webkitRelativePath } = file;
Object.defineProperty(file, "path", {
value:
typeof path === "string"
? path
: typeof webkitRelativePath === "string" && // If <input webkitdirectory> is set,
// the File will have a {webkitRelativePath} property
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory
webkitRelativePath.length > 0
? webkitRelativePath
: file.name,
writable: false,
configurable: false,
enumerable: true,
});
}
return file;
}