diff --git a/src/components/RemoteCreateDrawer.tsx b/src/components/RemoteCreateDrawer.tsx index 924103a..c31c817 100644 --- a/src/components/RemoteCreateDrawer.tsx +++ b/src/components/RemoteCreateDrawer.tsx @@ -11,7 +11,7 @@ import { } from '@heroui/react' import { message } from '@tauri-apps/plugin-dialog' import { openUrl } from '@tauri-apps/plugin-opener' -import { ChevronDown, ChevronUp, RefreshCcwIcon } from 'lucide-react' +import { ChevronDown, ChevronUp, ExternalLinkIcon, RefreshCcwIcon } from 'lucide-react' import { useEffect, useState } from 'react' import { createRemote } from '../../lib/rclone/api' import { getBackends } from '../../lib/rclone/api' @@ -32,11 +32,14 @@ export default function RemoteCreateDrawer({ const currentBackend = config.type ? backends.find((b) => b.Name === config.type) : null const currentBackendFields = currentBackend - ? (currentBackend.Options as BackendOption[]).filter( - (opt) => - !opt.Provider || - (opt.Provider.includes(config.provider) && !opt.Provider.startsWith('!')) - ) || [] + ? (currentBackend.Options as BackendOption[]).filter((opt) => { + if (!opt.Provider) return true + if (opt.Provider.includes(config.provider) && !opt.Provider.startsWith('!')) + return true + if (config.type === 's3' && config.provider === 'Other' && opt.Provider.includes('!')) + return true + return false + }) || [] : [] function handleTypeChange(e: React.ChangeEvent) { @@ -51,9 +54,9 @@ export default function RemoteCreateDrawer({ if (option.Hide !== 0) return null // For S3 type, only show fields that match the current provider or have no provider specified - if (config.type === 's3' && option.Provider && option.Provider !== config.provider) { - return null - } + // if (config.type === 's3' && option.Provider && option.Provider !== config.provider) { + // return null + // } const fieldId = `field-${option.Name}` const fieldValue = config[option.Name] || option.DefaultStr @@ -111,7 +114,7 @@ export default function RemoteCreateDrawer({ ) } > - {item.Help || item.Value} + {item.Value || 'No Value'} {item.Help && `— ${item.Help}`} )} @@ -130,7 +133,8 @@ export default function RemoteCreateDrawer({ classNames={ config.type === 'drive' && option.Name === 'client_id' ? { - description: 'text-danger', + description: 'text-warning', + 'inputWrapper': 'pr-0', } : undefined } @@ -139,14 +143,18 @@ export default function RemoteCreateDrawer({ option.Name === 'client_id' && ( ) } @@ -239,7 +247,7 @@ export default function RemoteCreateDrawer({ Reset - +
- {config.type === 's3' && ( - <> - { - // console.log(value) - setConfig({ ...config, region: value }) - }} - /> - { - // console.log(value) - setConfig({ ...config, endpoint: value }) - }} - /> - - )} + {showMoreOptions && (
{currentBackendFields diff --git a/src/components/RemoteEditDrawer.tsx b/src/components/RemoteEditDrawer.tsx index 0f9a2b4..2fa3d63 100644 --- a/src/components/RemoteEditDrawer.tsx +++ b/src/components/RemoteEditDrawer.tsx @@ -2,7 +2,8 @@ import { Checkbox } from '@heroui/react' import { Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader } from '@heroui/react' import { Autocomplete, AutocompleteItem, Button, Input, Select, SelectItem } from '@heroui/react' import { message } from '@tauri-apps/plugin-dialog' -import { ChevronDown, ChevronUp } from 'lucide-react' +import { openUrl } from '@tauri-apps/plugin-opener' +import { ChevronDown, ChevronUp, ExternalLinkIcon } from 'lucide-react' import { useEffect, useState } from 'react' import { getBackends, getRemote, updateRemote } from '../../lib/rclone/api' import type { Backend, BackendOption } from '../../types/rclone' @@ -19,10 +20,21 @@ export default function RemoteEditDrawer({ const [config, setConfig] = useState({}) const [isSaving, setIsSaving] = useState(false) const [currentBackend, setCurrentBackend] = useState(null) - const [showAdvanced, setShowAdvanced] = useState(false) + const [showMoreOptions, setShowMoreOptions] = useState(false) const [backends, setBackends] = useState([]) + const currentBackendFields = currentBackend + ? (currentBackend.Options as BackendOption[]).filter((opt) => { + if (!opt.Provider) return true + if (opt.Provider.includes(config.provider) && !opt.Provider.startsWith('!')) + return true + if (config.type === 's3' && config.provider === 'Other' && opt.Provider.includes('!')) + return true + return false + }) || [] + : [] + useEffect(() => { getBackends().then((b) => { setBackends(b) @@ -53,9 +65,9 @@ export default function RemoteEditDrawer({ if (option.Hide !== 0) return null // For S3 type, only show fields that match the current provider or have no provider specified - if (config.type === 's3' && option.Provider && option.Provider !== config.provider) { - return null - } + // if (config.type === 's3' && option.Provider && option.Provider !== config.provider) { + // return null + // } const fieldId = `field-${option.Name}` const fieldValue = config[option.Name] || option.DefaultStr @@ -90,6 +102,7 @@ export default function RemoteEditDrawer({ labelPlacement="outside" placeholder={option.Help.split('\n')[0]} description={option.Help.split('\n').slice(1).join('\n')} + isDisabled={option.Name === 'provider'} > {(item) => ( - {item.Help || item.Value} + {item.Value || 'No Value'} {item.Help && `— ${item.Help}`} )} @@ -120,6 +133,34 @@ export default function RemoteEditDrawer({ labelPlacement="outside" placeholder={option.Help.split('\n')[0]} type={option.IsPassword ? 'password' : 'text'} + classNames={ + config.type === 'drive' && option.Name === 'client_id' + ? { + description: 'text-warning', + 'inputWrapper': 'pr-0', + } + : undefined + } + endContent={ + config.type === 'drive' && + option.Name === 'client_id' && ( + + ) + } defaultValue={fieldValue} autoComplete="off" autoCapitalize="off" @@ -236,75 +277,32 @@ export default function RemoteEditDrawer({ ))} - {/* Basic Options */} - {currentBackend?.Options.filter((opt) => !opt.Advanced).map( - renderField - )} + {/* Normal Fields */} + {currentBackendFields + .filter((opt) => !opt.Advanced) + .map(renderField)} - {/* Advanced Options */} - {currentBackend?.Options.some((opt) => opt.Advanced) && ( + {/* Advanced Fields */} + {currentBackendFields.some((opt) => opt.Advanced) && (
- {config.type === 's3' && ( - <> - { - // console.log(value) - setConfig({ ...config, region: value }) - }} - /> - { - // console.log(value) - setConfig({ ...config, endpoint: value }) - }} - /> - - )} - {showAdvanced && ( + + {showMoreOptions && (
- {currentBackend.Options.filter( - (opt) => opt.Advanced - ).map(renderField)} + {currentBackendFields + .filter((opt) => opt.Advanced) + .map(renderField)}
)}