Fix create_prompt is_public bug, conditional version bump, and add Jotai prompts atoms

- Pass is_public from request body in create_prompt route
- Only bump version on content field changes (name, prompt, mode),
  not on is_public toggle
- Add prompts query and mutation atoms (atomWithQuery/atomWithMutation)
  with TanStack Query caching, replacing manual useEffect fetches
- Update PromptPicker, PromptsContent, and CommunityPromptsContent
  to consume shared atoms instead of local state
This commit is contained in:
CREDO23 2026-03-31 18:34:10 +02:00
parent 95620a4331
commit 5f4f7780d1
7 changed files with 184 additions and 88 deletions

View file

@ -1,6 +1,6 @@
"use client";
import { useSetAtom } from "jotai";
import { useAtomValue, useSetAtom } from "jotai";
import { Plus, Zap } from "lucide-react";
import {
forwardRef,
@ -12,9 +12,8 @@ import {
useState,
} from "react";
import { promptsAtom } from "@/atoms/prompts/prompts-query.atoms";
import { userSettingsDialogAtom } from "@/atoms/settings/settings-dialog.atoms";
import type { PromptRead } from "@/contracts/types/prompts.types";
import { promptsApiService } from "@/lib/apis/prompts-api.service";
import { cn } from "@/lib/utils";
export interface PromptPickerRef {
@ -35,22 +34,16 @@ export const PromptPicker = forwardRef<PromptPickerRef, PromptPickerProps>(funct
ref
) {
const setUserSettingsDialog = useSetAtom(userSettingsDialogAtom);
const { data: prompts } = useAtomValue(promptsAtom);
const [highlightedIndex, setHighlightedIndex] = useState(0);
const [prompts, setPrompts] = useState<PromptRead[]>([]);
const scrollContainerRef = useRef<HTMLDivElement>(null);
const shouldScrollRef = useRef(false);
const itemRefs = useRef<Map<number, HTMLButtonElement>>(new Map());
useEffect(() => {
promptsApiService
.list()
.then(setPrompts)
.catch(() => {});
}, []);
const filtered = useMemo(() => {
if (!externalSearch) return prompts;
return prompts.filter((a) => a.name.toLowerCase().includes(externalSearch.toLowerCase()));
const list = prompts ?? [];
if (!externalSearch) return list;
return list.filter((a) => a.name.toLowerCase().includes(externalSearch.toLowerCase()));
}, [prompts, externalSearch]);
const prevSearchRef = useRef(externalSearch);