refactor: rework async ToolSettings

This commit is contained in:
axolotle 2024-08-13 00:31:47 +02:00
parent ab506a5727
commit 09e9c272b7

View file

@ -1,32 +1,20 @@
<script setup lang="ts"> <script setup lang="ts">
import { shallowRef } from 'vue'
import api, { objectToParams } from '@/api' import api, { objectToParams } from '@/api'
import ConfigPanelsComponent from '@/components/ConfigPanels.vue' import ConfigPanelsComponent from '@/components/ConfigPanels.vue'
import type {
ConfigPanelsProps,
OnPanelApply,
} from '@/composables/configPanels'
import { formatConfigPanels, useConfigPanels } from '@/composables/configPanels' import { formatConfigPanels, useConfigPanels } from '@/composables/configPanels'
import { useInitialQueries } from '@/composables/useInitialQueries'
import type { CoreConfigPanels } from '@/types/core/options' import type { CoreConfigPanels } from '@/types/core/options'
const props = defineProps<{ tabId?: string }>() const props = defineProps<{ tabId?: string }>()
const { loading, refetch } = useInitialQueries([{ uri: 'settings?full' }], { const coreConfig = await api.get<CoreConfigPanels>({
onQueriesResponse, uri: 'settings?full',
initial: true,
}) })
const config = shallowRef<ConfigPanelsProps | undefined>()
function onQueriesResponse(config_: CoreConfigPanels) { const { form, panel, v, routes, onPanelApply } = useConfigPanels(
config.value = useConfigPanels( formatConfigPanels(coreConfig),
formatConfigPanels(config_),
() => props.tabId, () => props.tabId,
onPanelApply, ({ panelId, data }, onError) => {
)
}
const onPanelApply: OnPanelApply = ({ panelId, data }, onError) => {
// FIXME no route for potential action // FIXME no route for potential action
api api
.put({ .put({
@ -34,20 +22,18 @@ const onPanelApply: OnPanelApply = ({ panelId, data }, onError) => {
data: { args: objectToParams(data) }, data: { args: objectToParams(data) },
humanKey: { key: 'settings.update', panel: panelId }, humanKey: { key: 'settings.update', panel: panelId },
}) })
.then(() => refetch()) .then(() => api.refetch())
.catch(onError) .catch(onError)
} },
)
</script> </script>
<template> <template>
<ViewBase :loading="loading" skeleton="CardFormSkeleton">
<ConfigPanelsComponent <ConfigPanelsComponent
v-if="config" v-model="form"
v-model="config.form" :panel="panel"
:panel="config.panel.value" :validations="v"
:validations="config.v.value" :routes="routes"
:routes="config.routes" @apply="onPanelApply"
@apply="config.onPanelApply"
/> />
</ViewBase>
</template> </template>