2026-03-17 23:33:22 +05:30
|
|
|
import { atom } from "jotai";
|
|
|
|
|
import { rightPanelCollapsedAtom, rightPanelTabAtom } from "@/atoms/layout/right-panel.atom";
|
|
|
|
|
|
2026-03-20 18:47:06 +05:30
|
|
|
export interface ExtraField {
|
|
|
|
|
label: string;
|
|
|
|
|
key: string;
|
|
|
|
|
value: string;
|
2026-03-20 22:46:49 +05:30
|
|
|
type: "text" | "email" | "emails" | "datetime-local" | "textarea";
|
2026-03-20 18:47:06 +05:30
|
|
|
}
|
|
|
|
|
|
2026-03-17 23:33:22 +05:30
|
|
|
interface HitlEditPanelState {
|
|
|
|
|
isOpen: boolean;
|
|
|
|
|
title: string;
|
|
|
|
|
content: string;
|
|
|
|
|
toolName: string;
|
2026-03-22 02:42:51 +05:30
|
|
|
contentFormat?: "markdown" | "html";
|
2026-03-20 18:47:06 +05:30
|
|
|
extraFields?: ExtraField[];
|
2026-03-21 13:20:13 +05:30
|
|
|
onSave:
|
|
|
|
|
| ((title: string, content: string, extraFieldValues?: Record<string, string>) => void)
|
|
|
|
|
| null;
|
2026-03-20 23:50:50 +05:30
|
|
|
onClose: (() => void) | null;
|
2026-03-17 23:33:22 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initialState: HitlEditPanelState = {
|
|
|
|
|
isOpen: false,
|
|
|
|
|
title: "",
|
|
|
|
|
content: "",
|
|
|
|
|
toolName: "",
|
2026-03-22 02:42:51 +05:30
|
|
|
contentFormat: undefined,
|
2026-03-20 18:47:06 +05:30
|
|
|
extraFields: undefined,
|
2026-03-17 23:33:22 +05:30
|
|
|
onSave: null,
|
2026-03-20 23:50:50 +05:30
|
|
|
onClose: null,
|
2026-03-17 23:33:22 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const hitlEditPanelAtom = atom<HitlEditPanelState>(initialState);
|
|
|
|
|
|
|
|
|
|
const preHitlCollapsedAtom = atom<boolean | null>(null);
|
|
|
|
|
|
|
|
|
|
export const openHitlEditPanelAtom = atom(
|
|
|
|
|
null,
|
|
|
|
|
(
|
|
|
|
|
get,
|
|
|
|
|
set,
|
|
|
|
|
payload: {
|
|
|
|
|
title: string;
|
|
|
|
|
content: string;
|
|
|
|
|
toolName: string;
|
2026-03-22 02:42:51 +05:30
|
|
|
contentFormat?: "markdown" | "html";
|
2026-03-20 18:47:06 +05:30
|
|
|
extraFields?: ExtraField[];
|
|
|
|
|
onSave: (title: string, content: string, extraFieldValues?: Record<string, string>) => void;
|
2026-03-20 23:50:50 +05:30
|
|
|
onClose?: () => void;
|
2026-03-17 23:33:22 +05:30
|
|
|
}
|
|
|
|
|
) => {
|
|
|
|
|
if (!get(hitlEditPanelAtom).isOpen) {
|
|
|
|
|
set(preHitlCollapsedAtom, get(rightPanelCollapsedAtom));
|
|
|
|
|
}
|
|
|
|
|
set(hitlEditPanelAtom, {
|
|
|
|
|
isOpen: true,
|
|
|
|
|
title: payload.title,
|
|
|
|
|
content: payload.content,
|
|
|
|
|
toolName: payload.toolName,
|
2026-03-22 02:42:51 +05:30
|
|
|
contentFormat: payload.contentFormat,
|
2026-03-20 18:47:06 +05:30
|
|
|
extraFields: payload.extraFields,
|
2026-03-17 23:33:22 +05:30
|
|
|
onSave: payload.onSave,
|
2026-03-20 23:50:50 +05:30
|
|
|
onClose: payload.onClose ?? null,
|
2026-03-17 23:33:22 +05:30
|
|
|
});
|
|
|
|
|
set(rightPanelTabAtom, "hitl-edit");
|
|
|
|
|
set(rightPanelCollapsedAtom, false);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
export const closeHitlEditPanelAtom = atom(null, (get, set) => {
|
2026-03-20 23:50:50 +05:30
|
|
|
const current = get(hitlEditPanelAtom);
|
|
|
|
|
current.onClose?.();
|
2026-03-17 23:33:22 +05:30
|
|
|
set(hitlEditPanelAtom, initialState);
|
|
|
|
|
set(rightPanelTabAtom, "sources");
|
|
|
|
|
const prev = get(preHitlCollapsedAtom);
|
|
|
|
|
if (prev !== null) {
|
|
|
|
|
set(rightPanelCollapsedAtom, prev);
|
|
|
|
|
set(preHitlCollapsedAtom, null);
|
|
|
|
|
}
|
|
|
|
|
});
|