import { useCallback, useMemo, useState } from "react"; import { Text, View } from "react-native"; import { useSettings, type PluginSurfaceProps } from "@getpaseo/plugin/client"; import type { SettingsState } from "@getpaseo/plugin/client"; import { SettingsAction, SettingsCard, SettingsInput, SettingsRow, SettingsSection, SettingsSelect, SettingsSwitch, } from "@getpaseo/plugin/client/ui"; import { preferences } from "../shared/preferences"; const grouping = [ { label: "Project", value: "project" }, { label: "Workspace", value: "workspace" }, { label: "None", value: "none" }, ] as const; type Preferences = Extract, { status: "ready" }>; function TitleEditor({ settings, onClose }: { settings: Preferences; onClose(): void }) { // Keep the draft's revision so another client's save produces a conflict. const [draft, setDraft] = useState(() => ({ values: settings.values, revision: settings.revision, })); const changeTitle = useCallback( (title: string) => setDraft((current) => ({ ...current, values: { ...current.values, title } })), [], ); const saveTitle = useCallback(async () => { if (await settings.save(draft.values, draft.revision)) onClose(); }, [settings, draft, onClose]); return ( ); } function DisplayControls({ settings, theme, }: { settings: Preferences; theme: PluginSurfaceProps["theme"]; }) { const style = useMemo(() => ({ color: theme.colors.foreground }), [theme]); const [editingTitle, setEditingTitle] = useState(false); const closeTitle = useCallback(() => { setEditingTitle(false); void settings.reload(); }, [settings]); const toggleTitle = useCallback(() => setEditingTitle((value) => !value), []); const changeGrouping = useCallback( (groupBy: Preferences["values"]["groupBy"]) => { void settings.save({ ...settings.values, groupBy }, settings.revision); }, [settings], ); const changeMetadata = useCallback( (showMetadata: boolean) => { void settings.save({ ...settings.values, showMetadata }, settings.revision); }, [settings], ); return ( {editingTitle ? : null} {settings.saveError && !editingTitle ? ( {settings.saveError} ) : null} {settings.values.title} Grouped by {settings.values.groupBy} {settings.values.showMetadata ? "Metadata visible" : "Metadata hidden"} ); } export function DisplaySettings({ theme }: PluginSurfaceProps) { const settings = useSettings(preferences); const style = useMemo(() => ({ color: theme.colors.foreground }), [theme]); if (settings.status === "loading") return Loading settings…; if (settings.status !== "ready") return ( {settings.error} {settings.status === "invalid" ? ( ) : null} ); return ; }