MCPcopy Create free account
hub / github.com/Microck/opencode-studio / PresetsManager

Function PresetsManager

client-next/src/components/presets-manager.tsx:30–356  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

28import type { Preset } from "@/types";
29
30export function PresetsManager() {
31 const { config, skills, plugins, refreshData } = useApp();
32 const [presets, setPresets] = useState<Preset[]>([]);
33 const [open, setOpen] = useState(false);
34 const [createOpen, setCreateOpen] = useState(false);
35 const [newName, setNewName] = useState("");
36 const [newDesc, setNewDesc] = useState("");
37
38 const [selectedSkills, setSelectedSkills] = useState<string[]>([]);
39 const [selectedPlugins, setSelectedPlugins] = useState<string[]>([]);
40 const [selectedMcps, setSelectedMcps] = useState<string[]>([]);
41
42 const [includeSkills, setIncludeSkills] = useState(true);
43 const [includePlugins, setIncludePlugins] = useState(true);
44 const [includeMcps, setIncludeMcps] = useState(true);
45
46 useEffect(() => {
47 if (createOpen) {
48 // Initialize with currently enabled items
49 setSelectedSkills(skills.filter(s => s.enabled).map(s => s.name));
50 setSelectedPlugins(plugins.filter(p => p.enabled).map(p => p.name));
51 setSelectedMcps(config?.mcp ? Object.entries(config.mcp).filter(([_, c]) => c.enabled).map(([k]) => k) : []);
52
53 setIncludeSkills(true);
54 setIncludePlugins(true);
55 setIncludeMcps(true);
56 }
57 }, [createOpen, skills, plugins, config]);
58
59 const loadPresets = async () => {
60 try {
61 const data = await getPresets();
62 setPresets(data);
63 } catch {
64 toast.error("Failed to load presets");
65 }
66 };
67
68 useEffect(() => {
69 if (open) loadPresets();
70 }, [open]);
71
72 const handleCreate = async () => {
73 if (!newName.trim()) return toast.error("Name is required");
74
75 try {
76 await savePreset(newName, newDesc, {
77 skills: includeSkills ? selectedSkills : undefined,
78 plugins: includePlugins ? selectedPlugins : undefined,
79 mcps: includeMcps ? selectedMcps : undefined,
80 commands: []
81 });
82 toast.success("Preset created");
83 setCreateOpen(false);
84 setNewName("");
85 setNewDesc("");
86 loadPresets();
87 } catch (err: any) {

Callers

nothing calls this directly

Calls 4

useAppFunction · 0.90
loadPresetsFunction · 0.85
handleApplyFunction · 0.85
handleDeleteFunction · 0.70

Tested by

no test coverage detected