Cast plugin config values in frontend

This commit is contained in:
grimsi
2025-06-05 22:53:41 +02:00
parent 748a75b675
commit 2717c4deda
@@ -8,7 +8,7 @@ import {PluginEndpoint} from "Frontend/generated/endpoints";
import PluginDto from "Frontend/generated/de/grimsi/gameyfin/core/plugins/dto/PluginDto";
import {ArrowClockwise} from "@phosphor-icons/react";
import PluginConfigMetadataDto from "Frontend/generated/de/grimsi/gameyfin/core/plugins/dto/PluginConfigMetadataDto";
import PluginConfigFormField from "Frontend/components/general/input/PluginConfigFormField";
import PluginConfigFormField from "Frontend/components/general/plugin/PluginConfigFormField";
interface PluginDetailsModalProps {
plugin: PluginDto;
@@ -35,18 +35,26 @@ export default function PluginDetailsModal({plugin, isOpen, onOpenChange}: Plugi
});
}
function getEffectiveConfig(): Record<string, string> {
const effectiveConfig: Record<string, string> = {};
function getEffectiveConfig(): Record<string, any> {
const effectiveConfig: Record<string, any> = {};
if (!plugin.configMetadata) return effectiveConfig;
for (const meta of plugin.configMetadata) {
const key = meta.key;
let value = plugin.config?.[key]?.toString();
if (value == null && meta.default != null) {
value = meta.default.toString();
let value = plugin.config?.[key] ?? meta.default;
if (value != null) {
switch (meta.type.toLowerCase()) {
case "float":
case "int":
effectiveConfig[key] = Number(value);
break;
case "boolean":
effectiveConfig[key] = value === true || value === "true";
break;
default:
effectiveConfig[key] = value.toString();
}
if (value) {
effectiveConfig[key] = value;
}
}
return effectiveConfig;
@@ -55,14 +63,18 @@ export default function PluginDetailsModal({plugin, isOpen, onOpenChange}: Plugi
return (
<Modal isOpen={isOpen} onOpenChange={onOpenChange} backdrop="opaque" size="lg">
<ModalContent>
{(onClose) => (
{(onClose) => {
async function handleSubmit(values: Record<string, string>): Promise<void> {
await saveConfig(values);
onClose();
}
return (
<Formik initialValues={getEffectiveConfig()}
initialErrors={plugin.configValidation?.errors}
enableReinitialize={true}
onSubmit={async (values: any) => {
await saveConfig(values);
onClose();
}}
onSubmit={handleSubmit}
>
{(formik: any) => (
<Form>
@@ -178,9 +190,11 @@ export default function PluginDetailsModal({plugin, isOpen, onOpenChange}: Plugi
</Button> : ""}
</ModalFooter>
</Form>
)}
)
}
</Formik>
)}
)
}}
</ModalContent>
</Modal>
);