Skip to content

Commit 8585f99

Browse files
authored
Merge pull request #954 from mairas/fix/clear-token-button
Fix Clear Token button not clearing the auth token
2 parents ceab216 + 44f3d20 commit 8585f99

1 file changed

Lines changed: 46 additions & 24 deletions

File tree

frontend/src/pages/SignalK/SignalKSettingsPanel.tsx

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@ export function SignalKSettingsPanel(): JSX.Element {
1212
const [config, setConfig] = useState({});
1313
const [errorText, setErrorText] = useState("");
1414

15-
async function handleSave(): Promise<void> {
15+
async function handleSave(configOverride?: JsonObject): Promise<void> {
1616
try {
17-
await saveConfigData(CONFIG_PATH, JSON.stringify(config), (e: Error) => {
18-
setErrorText(e.message);
19-
});
17+
const configToSave = configOverride ?? config;
18+
await saveConfigData(
19+
CONFIG_PATH,
20+
JSON.stringify(configToSave),
21+
(e: Error) => {
22+
setErrorText(e.message);
23+
},
24+
);
2025
} catch (e) {
2126
setErrorText(e.message);
2227
}
@@ -51,18 +56,18 @@ export function SignalKSettingsPanel(): JSX.Element {
5156
<SKConnectionSettings
5257
config={config}
5358
setConfig={setConfig}
54-
setRequestSave={handleSave}
59+
onSave={handleSave}
5560
/>
5661
<SKSSLSettings
5762
config={config}
5863
setConfig={setConfig}
59-
setRequestSave={handleSave}
64+
onSave={handleSave}
6065
onConfigUpdate={updateConfig}
6166
/>
6267
<SKAuthToken
6368
config={config}
6469
setConfig={setConfig}
65-
setRequestSave={handleSave}
70+
onSave={handleSave}
6671
/>
6772
</div>
6873
</>
@@ -72,14 +77,15 @@ export function SignalKSettingsPanel(): JSX.Element {
7277
interface SKConnectionSettingsProps {
7378
config: JsonObject;
7479
setConfig: (cfg: JsonObject) => void;
75-
setRequestSave: (b: boolean) => void;
80+
onSave: (configOverride?: JsonObject) => Promise<void>;
7681
}
7782

7883
function SKConnectionSettings({
7984
config,
8085
setConfig,
81-
setRequestSave,
86+
onSave,
8287
}: SKConnectionSettingsProps): JSX.Element {
88+
const [saving, setSaving] = useState(false);
8389
const id = useId();
8490

8591
const mdns = config.use_mdns === true;
@@ -151,12 +157,15 @@ function SKConnectionSettings({
151157
<button
152158
type="submit"
153159
className="btn btn-primary"
154-
onClick={(e) => {
160+
disabled={saving}
161+
onClick={async (e) => {
155162
e.preventDefault();
156-
setRequestSave(true);
163+
setSaving(true);
164+
await onSave();
165+
setSaving(false);
157166
}}
158167
>
159-
Save
168+
{saving ? "Saving..." : "Save"}
160169
</button>
161170
</form>
162171
</div>
@@ -168,17 +177,22 @@ function SKConnectionSettings({
168177
interface SKAuthTokenProps {
169178
config: JsonObject;
170179
setConfig: (cfg: JsonObject) => void;
171-
setRequestSave: (b: boolean) => void;
180+
onSave: (configOverride?: JsonObject) => Promise<void>;
172181
}
173182

174183
function SKAuthToken({
175184
config,
176185
setConfig,
177-
setRequestSave,
186+
onSave,
178187
}: SKAuthTokenProps): JSX.Element {
179-
function handleClearToken(): void {
180-
setConfig({ ...config, token: "" });
181-
setRequestSave(true);
188+
const [clearing, setClearing] = useState(false);
189+
190+
async function handleClearToken(): Promise<void> {
191+
const newConfig = { ...config, token: "" };
192+
setConfig(newConfig);
193+
setClearing(true);
194+
await onSave(newConfig);
195+
setClearing(false);
182196
}
183197

184198
return (
@@ -187,8 +201,12 @@ function SKAuthToken({
187201
Click the button to clear the Signal K authentication token. This causes
188202
the device to request re-authorization from the Signal K server.
189203
</p>
190-
<button className="btn btn-primary" onClick={handleClearToken}>
191-
Clear Token
204+
<button
205+
className="btn btn-primary"
206+
disabled={clearing}
207+
onClick={handleClearToken}
208+
>
209+
{clearing ? "Clearing..." : "Clear Token"}
192210
</button>
193211
</Card>
194212
);
@@ -197,16 +215,17 @@ function SKAuthToken({
197215
interface SKSSLSettingsProps {
198216
config: JsonObject;
199217
setConfig: (cfg: JsonObject) => void;
200-
setRequestSave: (b: boolean) => void;
218+
onSave: (configOverride?: JsonObject) => Promise<void>;
201219
onConfigUpdate: () => Promise<void>;
202220
}
203221

204222
function SKSSLSettings({
205223
config,
206224
setConfig,
207-
setRequestSave,
225+
onSave,
208226
onConfigUpdate,
209227
}: SKSSLSettingsProps): JSX.Element {
228+
const [saving, setSaving] = useState(false);
210229
const [resetting, setResetting] = useState(false);
211230
const id = useId();
212231

@@ -313,12 +332,15 @@ function SKSSLSettings({
313332
<button
314333
type="submit"
315334
className="btn btn-primary"
316-
onClick={(e) => {
335+
disabled={saving}
336+
onClick={async (e) => {
317337
e.preventDefault();
318-
setRequestSave(true);
338+
setSaving(true);
339+
await onSave();
340+
setSaving(false);
319341
}}
320342
>
321-
Save
343+
{saving ? "Saving..." : "Save"}
322344
</button>
323345
</form>
324346
</div>

0 commit comments

Comments
 (0)