gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/nodes/dialogs/settings/use-nodes-settings.ts · v0.5.1
Source
1 6a5c50e Mardin 2y ago import { useEffect, useState } from "react";
2 f5c168d Mardin 2y ago import YAML from "yaml";
3 f5c168d Mardin 2y ago import {
4 f5c168d Mardin 2y ago type NodeType,
5 f5c168d Mardin 2y ago NodeBackendSettingConfigFormat,
6 f5c168d Mardin 2y ago useNodesSettingsMutation,
7 f5c168d Mardin 2y ago useNodesSettingsQuery,
8 f5c168d Mardin 2y ago } from "../..";
9 ff900b8 Mrdn 2y ago
10 f5c168d Mardin 2y ago const parseConfig = (data: {
11 f5c168d Mardin 2y ago config: string;
12 f5c168d Mardin 2y ago format: NodeBackendSettingConfigFormat;
13 f5c168d Mardin 2y ago }) => {
14 f5c168d Mardin 2y ago return {
15 f5c168d Mardin 2y ago [NodeBackendSettingConfigFormat.PLAIN]: () => data.config,
16 f5c168d Mardin 2y ago [NodeBackendSettingConfigFormat.JSON]: () =>
17 6a5c50e Mardin 2y ago JSON.stringify(JSON.parse(data.config), null, " "),
18 f5c168d Mardin 2y ago [NodeBackendSettingConfigFormat.YAML]: () =>
19 6a5c50e Mardin 2y ago YAML.stringify(YAML.parse(data.config), null, " "),
20 f5c168d Mardin 2y ago }[data.format]();
21 f5c168d Mardin 2y ago };
22 ff900b8 Mrdn 2y ago
23 6a5c50e Mardin 2y ago const parseLanguage = (format: NodeBackendSettingConfigFormat) =>
24 6a5c50e Mardin 2y ago ({
25 6a5c50e Mardin 2y ago [NodeBackendSettingConfigFormat.PLAIN]: "text",
26 6a5c50e Mardin 2y ago [NodeBackendSettingConfigFormat.JSON]: "json",
27 6a5c50e Mardin 2y ago [NodeBackendSettingConfigFormat.YAML]: "yaml",
28 6a5c50e Mardin 2y ago })[format];
29 6a5c50e Mardin 2y ago
30 f5c168d Mardin 2y ago export const useNodesSettings = (entity: NodeType, backend: string) => {
31 6a5c50e Mardin 2y ago const { data, isFetching } = useNodesSettingsQuery(entity, backend);
32 f5c168d Mardin 2y ago const [config, setConfig] = useState<string>(data.config);
33 f5c168d Mardin 2y ago const [payloadValidity, setPayloadValidity] = useState<boolean>(true);
34 f5c168d Mardin 2y ago const mutate = useNodesSettingsMutation();
35 6a5c50e Mardin 2y ago const language = parseLanguage(data.format);
36 6a5c50e Mardin 2y ago
37 6a5c50e Mardin 2y ago useEffect(() => {
38 6a5c50e Mardin 2y ago if (!isFetching) setConfig(parseConfig(data));
39 6a5c50e Mardin 2y ago }, [isFetching, data]);
40 ff900b8 Mrdn 2y ago
41 f5c168d Mardin 2y ago const handleEditorValidation = (markers: any[]) => {
42 f5c168d Mardin 2y ago setPayloadValidity(!markers.length);
43 f5c168d Mardin 2y ago };
44 ff900b8 Mrdn 2y ago
45 f5c168d Mardin 2y ago const handleConfigSave = () => {
46 f5c168d Mardin 2y ago mutate.mutate({ node: entity, backend, config, format: data.format });
47 f5c168d Mardin 2y ago };
48 f5c168d Mardin 2y ago
49 f5c168d Mardin 2y ago const handleConfigChange = (newConfig: string | undefined) => {
50 f5c168d Mardin 2y ago if (newConfig) {
51 f5c168d Mardin 2y ago try {
52 f5c168d Mardin 2y ago setConfig(parseConfig({ config: newConfig, format: data.format }));
53 f5c168d Mardin 2y ago setPayloadValidity(true);
54 f5c168d Mardin 2y ago } catch (error) {
55 f5c168d Mardin 2y ago setPayloadValidity(false);
56 f5c168d Mardin 2y ago }
57 f5c168d Mardin 2y ago }
58 f5c168d Mardin 2y ago };
59 ff900b8 Mrdn 2y ago
60 f5c168d Mardin 2y ago return {
61 f5c168d Mardin 2y ago payloadValidity,
62 f5c168d Mardin 2y ago language,
63 6a5c50e Mardin 2y ago isFetching,
64 f5c168d Mardin 2y ago config: parseConfig(data),
65 f5c168d Mardin 2y ago handleConfigSave,
66 f5c168d Mardin 2y ago handleConfigChange,
67 f5c168d Mardin 2y ago handleEditorValidation,
68 f5c168d Mardin 2y ago };
69 f5c168d Mardin 2y ago };