Files
kandev/apps/web/components/github/my-github/use-saved-preset-actions.ts
T
José Almeida db26f2107e feat(web): add repository defaults to saved GitHub queries (#1758)
* feat(web): add repository defaults to saved GitHub queries

* fix(web): commit saved query draft after saving
2026-07-17 14:56:29 +01:00

70 lines
2.0 KiB
TypeScript

"use client";
import type { PresetOption } from "./search-bar";
import type { SidebarSelection } from "./presets-sidebar";
import { useSavedPresets } from "./use-saved-presets";
type SavedPresetActionsOptions = {
workspaceId: string | null;
selection: SidebarSelection;
customQuery: string;
resolvedPrPresets: PresetOption[];
resolvedIssuePresets: PresetOption[];
setProgrammaticSelection: (selection: SidebarSelection) => void;
setQueryImmediate: (query: string) => void;
setRepoFilter: (repo: string) => void;
};
function firstPresetSelection(
kind: SidebarSelection["kind"],
pr: PresetOption[],
issue: PresetOption[],
) {
const preset = (kind === "pr" ? pr : issue)[0];
return {
selection: { kind, source: "preset", id: preset?.value ?? "" } as SidebarSelection,
filter: preset?.filter ?? "",
};
}
export function useSavedPresetActions({
workspaceId,
selection,
customQuery,
resolvedPrPresets,
resolvedIssuePresets,
setProgrammaticSelection,
setQueryImmediate,
setRepoFilter,
}: SavedPresetActionsOptions) {
const {
presets: savedPresets,
save: saveSavedPreset,
remove: removeSavedPreset,
} = useSavedPresets(workspaceId);
const onConfirmSave = (label: string, defaultRepoFilter: string) => {
const created = saveSavedPreset({
kind: selection.kind,
label,
customQuery,
repoFilter: defaultRepoFilter,
});
if (!created) return;
setProgrammaticSelection({ kind: selection.kind, source: "saved", id: created.id });
setQueryImmediate(customQuery);
setRepoFilter(defaultRepoFilter);
};
const onDeleteSaved = (id: string) => {
removeSavedPreset(id);
if (selection.source !== "saved" || selection.id !== id) return;
const fallback = firstPresetSelection(selection.kind, resolvedPrPresets, resolvedIssuePresets);
setProgrammaticSelection(fallback.selection);
setQueryImmediate(fallback.filter);
setRepoFilter("");
};
return { savedPresets, onConfirmSave, onDeleteSaved };
}