Spaces:
Paused
Paused
| import React, { useState, useEffect } from "react"; | |
| import { | |
| Card, | |
| Title, | |
| Subtitle, | |
| Table, | |
| TableHead, | |
| TableRow, | |
| Badge, | |
| TableHeaderCell, | |
| TableCell, | |
| TableBody, | |
| Metric, | |
| Text, | |
| Grid, | |
| Button, | |
| TextInput, | |
| Select as Select2, | |
| SelectItem, | |
| Col, | |
| Accordion, | |
| AccordionBody, | |
| AccordionHeader, | |
| AccordionList, | |
| } from "@tremor/react"; | |
| import { | |
| TabPanel, | |
| TabPanels, | |
| TabGroup, | |
| TabList, | |
| Tab, | |
| Icon, | |
| } from "@tremor/react"; | |
| import { getBudgetSettings } from "../networking"; | |
| import { | |
| Modal, | |
| Form, | |
| Input, | |
| Select, | |
| Button as Button2, | |
| message, | |
| InputNumber, | |
| } from "antd"; | |
| import { | |
| InformationCircleIcon, | |
| PencilAltIcon, | |
| PencilIcon, | |
| StatusOnlineIcon, | |
| TrashIcon, | |
| RefreshIcon, | |
| CheckCircleIcon, | |
| XCircleIcon, | |
| QuestionMarkCircleIcon, | |
| } from "@heroicons/react/outline"; | |
| import AddFallbacks from "../add_fallbacks"; | |
| import openai from "openai"; | |
| import Paragraph from "antd/es/skeleton/Paragraph"; | |
| interface BudgetSettingsPageProps { | |
| accessToken: string | null; | |
| } | |
| interface budgetSettingsItem { | |
| field_name: string; | |
| field_type: string; | |
| field_value: any; | |
| field_description: string; | |
| } | |
| const BudgetSettings: React.FC<BudgetSettingsPageProps> = ({ accessToken }) => { | |
| const [budgetSettings, setBudgetSettings] = useState<budgetSettingsItem[]>( | |
| [] | |
| ); | |
| useEffect(() => { | |
| if (!accessToken) { | |
| return; | |
| } | |
| getBudgetSettings(accessToken).then((data) => { | |
| console.log("budget settings", data); | |
| let budget_settings = data.budget_settings; | |
| setBudgetSettings(budget_settings); | |
| }); | |
| }, [accessToken]); | |
| const handleInputChange = (fieldName: string, newValue: any) => { | |
| // Update the value in the state | |
| const updatedSettings = budgetSettings.map((setting) => | |
| setting.field_name === fieldName | |
| ? { ...setting, field_value: newValue } | |
| : setting | |
| ); | |
| setBudgetSettings(updatedSettings); | |
| }; | |
| const handleUpdateField = (fieldName: string, idx: number) => { | |
| if (!accessToken) { | |
| return; | |
| } | |
| let fieldValue = budgetSettings[idx].field_value; | |
| if (fieldValue == null || fieldValue == undefined) { | |
| return; | |
| } | |
| try { | |
| const updatedSettings = budgetSettings.map((setting) => | |
| setting.field_name === fieldName | |
| ? { ...setting, stored_in_db: true } | |
| : setting | |
| ); | |
| setBudgetSettings(updatedSettings); | |
| } catch (error) { | |
| // do something | |
| } | |
| }; | |
| const handleResetField = (fieldName: string, idx: number) => { | |
| if (!accessToken) { | |
| return; | |
| } | |
| try { | |
| const updatedSettings = budgetSettings.map((setting) => | |
| setting.field_name === fieldName | |
| ? { ...setting, stored_in_db: null, field_value: null } | |
| : setting | |
| ); | |
| setBudgetSettings(updatedSettings); | |
| } catch (error) { | |
| // do something | |
| } | |
| }; | |
| return ( | |
| <div className="w-full mx-4"> | |
| <Card> | |
| <Table> | |
| <TableHead> | |
| <TableRow> | |
| <TableHeaderCell>Setting</TableHeaderCell> | |
| <TableHeaderCell>Value</TableHeaderCell> | |
| </TableRow> | |
| </TableHead> | |
| <TableBody> | |
| {budgetSettings.map((value, index) => ( | |
| <TableRow key={index}> | |
| <TableCell> | |
| <Text>{value.field_name}</Text> | |
| <p | |
| style={{ | |
| fontSize: "0.65rem", | |
| color: "#808080", | |
| fontStyle: "italic", | |
| }} | |
| className="mt-1" | |
| > | |
| {value.field_description} | |
| </p> | |
| </TableCell> | |
| <TableCell> | |
| {value.field_type == "Integer" ? ( | |
| <InputNumber | |
| step={1} | |
| value={value.field_value} | |
| onChange={(newValue) => | |
| handleInputChange(value.field_name, newValue) | |
| } // Handle value change | |
| /> | |
| ) : null} | |
| </TableCell> | |
| <TableCell> | |
| <Button | |
| onClick={() => handleUpdateField(value.field_name, index)} | |
| > | |
| Update | |
| </Button> | |
| <Icon | |
| icon={TrashIcon} | |
| color="red" | |
| onClick={() => handleResetField(value.field_name, index)} | |
| > | |
| Reset | |
| </Icon> | |
| </TableCell> | |
| </TableRow> | |
| ))} | |
| </TableBody> | |
| </Table> | |
| </Card> | |
| </div> | |
| ); | |
| }; | |
| export default BudgetSettings; | |