aboutsummaryrefslogtreecommitdiffstats
path: root/renderer/src/components/settings/GitSettings.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'renderer/src/components/settings/GitSettings.tsx')
-rw-r--r--renderer/src/components/settings/GitSettings.tsx78
1 files changed, 78 insertions, 0 deletions
diff --git a/renderer/src/components/settings/GitSettings.tsx b/renderer/src/components/settings/GitSettings.tsx
new file mode 100644
index 0000000..0ec9875
--- /dev/null
+++ b/renderer/src/components/settings/GitSettings.tsx
@@ -0,0 +1,78 @@
1import React, { useState, useEffect } from "react";
2
3const api = window.api;
4
5export function GitSettings() {
6 // null = setting not yet loaded; true/false = loaded value
7 const [branchingEnabled, setBranchingEnabled] = useState<boolean | null>(null);
8 const [saveStatus, setSaveStatus] = useState<"idle" | "saved">("idle");
9
10 useEffect(() => {
11 api.getSettings(["git.branchingEnabled"]).then((settings) => {
12 // Key absent or any value other than "true" → false (opt-in default)
13 setBranchingEnabled(settings["git.branchingEnabled"] === "true");
14 });
15 }, []);
16
17 const handleToggle = async (enabled: boolean) => {
18 setBranchingEnabled(enabled);
19 if (enabled) {
20 await api.setSetting("git.branchingEnabled", "true");
21 } else {
22 await api.deleteSetting("git.branchingEnabled");
23 }
24 setSaveStatus("saved");
25 setTimeout(() => setSaveStatus("idle"), 1500);
26 };
27
28 if (branchingEnabled === null) {
29 return (
30 <div style={{ color: "var(--text-secondary)", fontSize: 12 }}>
31 Loading...
32 </div>
33 );
34 }
35
36 return (
37 <div>
38 <div className="settings-section-title">Git</div>
39 <div className="settings-section-desc">
40 Configure how Claude Flow interacts with your project's git repository
41 during the implement phase.
42 </div>
43
44 <div className="settings-toggle-row">
45 <label className="settings-toggle-label" htmlFor="git-branching-toggle">
46 <span className="settings-toggle-text">
47 <strong>Create a branch per session</strong>
48 <span className="settings-toggle-hint">
49 When enabled, Claude Flow checks out a new{" "}
50 <code>claude-flow/&lt;name&gt;-&lt;id&gt;</code> branch when
51 entering the implement phase. When disabled, commits land on
52 your current branch.
53 </span>
54 </span>
55 <span
56 className={`settings-toggle${branchingEnabled ? " on" : ""}`}
57 role="switch"
58 aria-checked={branchingEnabled}
59 id="git-branching-toggle"
60 tabIndex={0}
61 onClick={() => handleToggle(!branchingEnabled)}
62 onKeyDown={(e) => {
63 if (e.key === " " || e.key === "Enter") {
64 e.preventDefault();
65 handleToggle(!branchingEnabled);
66 }
67 }}
68 />
69 </label>
70 {saveStatus === "saved" && (
71 <span className="settings-custom-badge" style={{ color: "var(--accent)" }}>
72 saved ✓
73 </span>
74 )}
75 </div>
76 </div>
77 );
78}