Skip to content

Commit 33b5e64

Browse files
committed
make state of lite ai config better
1 parent 7085f85 commit 33b5e64

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/packages/frontend/account/lite-ai-settings.tsx

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { useEffect, useState } from "react";
1+
import { useEffect, useMemo, useState } from "react";
22
import { Alert, Button, Col, Input, Row, Space } from "antd";
33
import { getLogger } from "@cocalc/frontend/logger";
44
import { query } from "@cocalc/frontend/frame-editors/generic/client";
55
import { Gap, Loading } from "@cocalc/frontend/components";
6+
import { redux } from "@cocalc/frontend/app-framework";
67

78
const log = getLogger("account:lite-ai-settings");
89

@@ -42,6 +43,7 @@ type State = "load" | "ready" | "save" | "error";
4243

4344
export default function LiteAISettings() {
4445
const [values, setValues] = useState<Record<string, string>>({});
46+
const [savedValues, setSavedValues] = useState<Record<string, string>>({});
4547
const [state, setState] = useState<State>("load");
4648
const [error, setError] = useState<string>("");
4749

@@ -62,6 +64,7 @@ export default function LiteAISettings() {
6264
next[row.name] = row.value;
6365
}
6466
setValues(next);
67+
setSavedValues(next);
6568
setError("");
6669
setState("ready");
6770
} catch (err) {
@@ -75,13 +78,24 @@ export default function LiteAISettings() {
7578
setValues((cur) => ({ ...cur, [key]: val }));
7679
}
7780

81+
const saving = state === "save";
82+
const dirty = useMemo(() => {
83+
for (const { keyField } of PROVIDERS) {
84+
if ((values[keyField] ?? "") !== (savedValues[keyField] ?? "")) {
85+
return true;
86+
}
87+
}
88+
return false;
89+
}, [values, savedValues]);
90+
7891
async function save(): Promise<void> {
92+
if (saving || !dirty) return;
7993
setState("save");
8094
try {
8195
for (const { keyField, enableField } of PROVIDERS) {
8296
const val = values[keyField] ?? "";
8397
await query({
84-
query: { server_settings: { name: keyField, value: val } },
98+
query: { site_settings: { name: keyField, value: val } },
8599
});
86100
await query({
87101
query: {
@@ -92,6 +106,10 @@ export default function LiteAISettings() {
92106
},
93107
});
94108
}
109+
redux.getStore("projects").clearOpenAICache();
110+
// @ts-ignore
111+
await redux.getActions("customize")?.reload();
112+
setSavedValues(values);
95113
setState("ready");
96114
} catch (err) {
97115
log.info("failed to save llm settings", err);
@@ -126,8 +144,13 @@ export default function LiteAISettings() {
126144
))}
127145
</Space>
128146
<Gap />
129-
<Button type="primary" onClick={save} disabled={state === "save"}>
130-
{state === "save" ? <Loading text="Saving" /> : "Save"}
147+
<Button
148+
type="primary"
149+
onClick={save}
150+
disabled={saving || !dirty}
151+
style={{ marginTop: 8 }}
152+
>
153+
{saving ? <Loading text="Saving" /> : "Save"}
131154
</Button>
132155
</div>
133156
);

0 commit comments

Comments
 (0)