Spaces:
Sleeping
Sleeping
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; | |