/** * UI for controlling slack alerting settings */ import React, { useState, useEffect } from "react"; import { Table, TableHead, TableRow, TableHeaderCell, TableCell, Button, Icon, Badge, TableBody, Text, } from "@tremor/react"; import { InputNumber, message } from "antd"; import { alertingSettingsCall, updateConfigFieldSetting } from "../networking"; import { TrashIcon, CheckCircleIcon } from "@heroicons/react/outline"; import DynamicForm from "./dynamic_form"; interface alertingSettingsItem { field_name: string; field_type: string; field_value: any; field_default_value: any; field_description: string; stored_in_db: boolean | null; premium_field: boolean; } interface AlertingSettingsProps { accessToken: string | null; premiumUser: boolean; } const AlertingSettings: React.FC = ({ accessToken, premiumUser, }) => { const [alertingSettings, setAlertingSettings] = useState< alertingSettingsItem[] >([]); useEffect(() => { // get values if (!accessToken) { return; } alertingSettingsCall(accessToken).then((data) => { setAlertingSettings(data); }); }, [accessToken]); const handleInputChange = (fieldName: string, newValue: any) => { // Update the value in the state const updatedSettings = alertingSettings.map((setting) => setting.field_name === fieldName ? { ...setting, field_value: newValue } : setting ); console.log(`updatedSettings: ${JSON.stringify(updatedSettings)}`) setAlertingSettings(updatedSettings); }; const handleSubmit = (formValues: Record) => { if (!accessToken) { return; } console.log(`formValues: ${formValues}`) let fieldValue = formValues; if (fieldValue == null || fieldValue == undefined) { return; } const initialFormValues: Record = {}; alertingSettings.forEach((setting) => { initialFormValues[setting.field_name] = setting.field_value; }); // Merge initialFormValues with actual formValues const mergedFormValues = { ...formValues, ...initialFormValues }; console.log(`mergedFormValues: ${JSON.stringify(mergedFormValues)}`) const { slack_alerting, ...alertingArgs } = mergedFormValues; console.log(`slack_alerting: ${slack_alerting}, alertingArgs: ${JSON.stringify(alertingArgs)}`) try { updateConfigFieldSetting(accessToken, "alerting_args", alertingArgs); if (typeof slack_alerting === "boolean") { if (slack_alerting == true) { updateConfigFieldSetting(accessToken, "alerting", ["slack"]); } else { updateConfigFieldSetting(accessToken, "alerting", []); } } // update value in state message.success("Wait 10s for proxy to update."); } catch (error) { // do something } }; const handleResetField = (fieldName: string, idx: number) => { if (!accessToken) { return; } try { // deleteConfigFieldSetting(accessToken, fieldName); // update value in state const updatedSettings = alertingSettings.map((setting) => setting.field_name === fieldName ? { ...setting, stored_in_db: null, field_value: setting.field_default_value, } : setting ); setAlertingSettings(updatedSettings); } catch (error) { // do something console.log("ERROR OCCURRED!"); } }; return ( ); }; export default AlertingSettings;