| 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 |
}; |