import { commands } from "@/commands.gen"; import { useRect } from "@/system"; import type { LumeColumn } from "@/types"; import { CaretDown, Check } from "@phosphor-icons/react"; import { Menu, MenuItem, PredefinedMenuItem } from "@tauri-apps/api/menu"; import { getCurrentWindow } from "@tauri-apps/api/window"; import { useCallback, useEffect, useState } from "react"; import { User } from "./user"; export function Column({ column }: { column: LumeColumn }) { const [rect, ref] = useRect(); const [error, setError] = useState(""); useEffect(() => { (async () => { if (rect) { const res = await commands.createColumn({ label: column.label, x: rect.x, y: rect.y, width: rect.width, height: rect.height, url: `${column.url}?label=${column.label}&name=${column.name}&account=${column.account}`, }); if (res.status === "error") { setError(res.error); } } })(); }, [rect]); return (
{error?.length ? error : null}
); } function Header({ label, name, account, }: { label: string; name: string; account?: string }) { const [title, setTitle] = useState(""); const [isChanged, setIsChanged] = useState(false); const showContextMenu = useCallback(async (e: React.MouseEvent) => { e.preventDefault(); const window = getCurrentWindow(); const menuItems = await Promise.all([ MenuItem.new({ text: "Reload", action: async () => { await commands.reloadColumn(label); }, }), PredefinedMenuItem.new({ item: "Separator" }), MenuItem.new({ text: "Move left", action: async () => { await window.emit("columns", { type: "move", label, direction: "left", }); }, }), MenuItem.new({ text: "Move right", action: async () => { await window.emit("columns", { type: "move", label, direction: "right", }); }, }), PredefinedMenuItem.new({ item: "Separator" }), MenuItem.new({ text: "Close", action: async () => { await window.emit("columns", { type: "remove", label, }); }, }), ]); const menu = await Menu.new({ items: menuItems, }); await menu.popup().catch((e) => console.error(e)); }, []); const saveNewTitle = async () => { await getCurrentWindow().emit("columns", { type: "set_title", label, title, }); setIsChanged(false); }; useEffect(() => { if (title.length > 0) setIsChanged(true); }, [title.length]); return (
{account?.length ? ( ) : null}
{ if (e.currentTarget.textContent) { setTitle(e.currentTarget.textContent); } }} className="text-[12px] font-semibold focus:outline-none" > {name}
{isChanged ? ( ) : null}
); }