diff --git a/ui/src/preferences/StoragePrefs.tsx b/ui/src/preferences/StoragePrefs.tsx index a6affa4f..154803f3 100644 --- a/ui/src/preferences/StoragePrefs.tsx +++ b/ui/src/preferences/StoragePrefs.tsx @@ -1,8 +1,5 @@ -import React, { useCallback, useState, FormEvent, useEffect } from 'react'; +import React, { useState, useEffect, FormEvent } from 'react'; import api from '../api'; -import { useForm } from 'react-hook-form'; -import cn from 'classnames'; -import { useAsyncCall } from '../logic/useAsyncCall'; import { useStorage } from '../state/storage'; import { Button } from '../components/Button'; import { Spinner } from '../components/Spinner'; @@ -14,15 +11,8 @@ import { } from '@/gear'; import { isHosted } from '@/logic/utils'; import { Toggle } from '@/components/Toggle'; - -interface CredentialsSubmit { - endpoint: string; - accessId: string; - accessSecret: string; - region: string; - publicUrlBase: string; - bucket: string; -} +import { useAsyncCall } from '../logic/useAsyncCall'; +import { useCallback } from 'react'; type S3Update = | { 'set-region': string } @@ -34,7 +24,7 @@ type S3Update = | { 'add-bucket': string } | { 'remove-bucket': string }; -function storagePoke(data: S3Update | { 'set-region': string }) { +function storagePoke(data: S3Update) { return { app: 'storage', mark: 'storage-action', @@ -46,25 +36,14 @@ export const StoragePrefs = () => { const { s3, loaded } = useStorage(); const hostedStorage = s3.configuration.service === 'presigned-url'; - const { - register, - handleSubmit, - reset, - formState: { isSubmitting, isDirty, isValid, isSubmitSuccessful }, - } = useForm({ - mode: 'onChange', - }); - - const { call: addS3Credentials, status } = useAsyncCall( - useCallback(async (data: CredentialsSubmit) => { - api.poke(storagePoke({ 'set-endpoint': data.endpoint })); - api.poke(storagePoke({ 'set-access-key-id': data.accessId })); - api.poke(storagePoke({ 'set-secret-access-key': data.accessSecret })); - api.poke(storagePoke({ 'set-current-bucket': data.bucket })); - api.poke(storagePoke({ 'set-region': data.region })); - api.poke(storagePoke({ 'set-public-url-base': data.publicUrlBase })); - }, []) - ); + const [endpoint, setEndpoint] = useState(''); + const [accessId, setAccessId] = useState(''); + const [accessSecret, setAccessSecret] = useState(''); + const [region, setRegion] = useState(''); + const [publicUrlBase, setPublicUrlBase] = useState(''); + const [bucket, setBucket] = useState(''); + const [submitting, setSubmitting] = useState(false); + const [saved, setSaved] = useState(false); const { call: toggleS3, status: toggleStatus } = useAsyncCall( useCallback(() => { @@ -86,10 +65,32 @@ export const StoragePrefs = () => { }, []); useEffect(() => { - loaded && reset(); - }, [loaded, reset]); + if (loaded) { + setEndpoint(s3.credentials?.endpoint ?? ''); + setAccessId(s3.credentials?.accessKeyId ?? ''); + setAccessSecret(s3.credentials?.secretAccessKey ?? ''); + setRegion(s3.configuration?.region ?? ''); + setPublicUrlBase(s3.configuration?.publicUrlBase ?? ''); + setBucket(s3.configuration?.currentBucket ?? ''); + } + }, [loaded]); - console.log(s3.configuration, toggleStatus); + async function onSubmit(e: FormEvent) { + e.preventDefault(); + setSubmitting(true); + setSaved(false); + try { + await api.poke(storagePoke({ 'set-endpoint': endpoint })); + await api.poke(storagePoke({ 'set-access-key-id': accessId })); + await api.poke(storagePoke({ 'set-secret-access-key': accessSecret })); + await api.poke(storagePoke({ 'set-current-bucket': bucket })); + await api.poke(storagePoke({ 'set-region': region })); + await api.poke(storagePoke({ 'set-public-url-base': publicUrlBase })); + setSaved(true); + } finally { + setSubmitting(false); + } + } return (
@@ -135,20 +136,19 @@ export const StoragePrefs = () => { .

-
+
setEndpoint(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && } @@ -156,18 +156,17 @@ export const StoragePrefs = () => {
setAccessId(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && } @@ -175,18 +174,17 @@ export const StoragePrefs = () => {
setAccessSecret(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && } @@ -194,17 +192,16 @@ export const StoragePrefs = () => {
setRegion(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && } @@ -220,8 +217,8 @@ export const StoragePrefs = () => { id="publicUrlBase" type="text" autoCorrect="off" - defaultValue={s3.configuration?.publicUrlBase} - {...register('publicUrlBase')} + value={publicUrlBase} + onChange={(e) => setPublicUrlBase(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && } @@ -229,33 +226,23 @@ export const StoragePrefs = () => {
setBucket(e.target.value)} className="input default-ring bg-gray-50" /> {!loaded && }
-