History

Use promiseExit in 1Password settings

Rhys Sullivan committed 6 months ago

Commit 2445ee51 parent b039b6e1 file · +24 −25Browse files

Unified · Split

packages/plugins/onepassword/src/react/OnePasswordSettings.tsx+24−25
@@ -1,5 +1,6 @@
11 import { useState } from "react";
22 import { useAtomSet, useAtomValue } from "@effect/atom-react";
3+import * as Exit from "effect/Exit";
34 import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
45 import { ReactivityKey } from "@executor-js/react/api/reactivity-keys";
56 import { useScope } from "@executor-js/react/api/scope-context";
@@ -62,15 +63,15 @@ function VaultPicker(props: { · 56 unmodified lines
6263 isLoading: true,
6364 error: null,
6465 }),
65− onError: (error) => ({
66+ onError: () => ({
6667 vaults: [] as { id: string; name: string }[],
6768 isLoading: false,
68− error: error.message,
69+ error: "Failed to list vaults",
6970 }),
70− onDefect: (defect) => ({
71+ onDefect: () => ({
7172 vaults: [] as { id: string; name: string }[],
7273 isLoading: false,
73− error: defect instanceof Error ? defect.message : "Failed to list vaults",
74+ error: "Failed to list vaults",
7475 }),
7576 onSuccess: ({ value }) => {
7677 const v = value.vaults;
@@ -142,7 +143,7 @@ function ConfigDialog(props: { · 65 unmodified lines
142143 const [error, setError] = useState<string | null>(null);
143144
144145 const scopeId = useScope();
145− const doConfigure = useAtomSet(configureOnePassword, { mode: "promise" });
146+ const doConfigure = useAtomSet(configureOnePassword, { mode: "promiseExit" });
146147
147148 const reset = () => {
148149 if (!isEdit) {
@@ -159,23 +160,25 @@ function ConfigDialog(props: { · 10 unmodified lines
159160 if (!accountName.trim() || !vaultId.trim()) return;
160161 setSaving(true);
161162 setError(null);
162− try {
163− const auth =
164− authKind === "desktop-app"
165− ? { kind: "desktop-app" as const, accountName: accountName.trim() }
166− : { kind: "service-account" as const, tokenSecretId: accountName.trim() };
167163
168− await doConfigure({
169− params: { scopeId },
170− payload: { auth, vaultId: vaultId.trim(), name: vaultName.trim() || "1Password" },
171− reactivityKeys: [ReactivityKey.secrets],
172− });
173− props.onOpenChange(false);
174− reset();
175− } catch (e) {
176− setError(e instanceof Error ? e.message : "Failed to save configuration");
164+ const auth =
165+ authKind === "desktop-app"
166+ ? { kind: "desktop-app" as const, accountName: accountName.trim() }
167+ : { kind: "service-account" as const, tokenSecretId: accountName.trim() };
168+
169+ const exit = await doConfigure({
170+ params: { scopeId },
171+ payload: { auth, vaultId: vaultId.trim(), name: vaultName.trim() || "1Password" },
172+ reactivityKeys: [ReactivityKey.secrets],
173+ });
174+ if (Exit.isFailure(exit)) {
175+ setError("Failed to save configuration");
177176 setSaving(false);
177+ return;
178178 }
179+
180+ props.onOpenChange(false);
181+ reset();
179182 };
180183
181184 return (
@@ -298,14 +301,10 @@ export default function OnePasswordSettings() { · 116 unmodified lines
298301 const [configOpen, setConfigOpen] = useState(false);
299302 const scopeId = useScope();
300303 const configResult = useAtomValue(onepasswordConfigAtom(scopeId));
301− const doRemove = useAtomSet(removeOnePasswordConfig, { mode: "promise" });
304+ const doRemove = useAtomSet(removeOnePasswordConfig, { mode: "promiseExit" });
302305
303306 const handleRemove = async () => {
304− try {
305− await doRemove({ params: { scopeId }, reactivityKeys: [ReactivityKey.secrets] });
306− } catch {
307− /* TODO: toast */
308− }
307+ await doRemove({ params: { scopeId }, reactivityKeys: [ReactivityKey.secrets] });
309308 };
310309
311310 const config: OnePasswordConfig | null = AsyncResult.match(