import { Button } from "@/components/ui/button"; import { setSelectedPlugin, useAppDispatch, useAppSelector, useGetPluginsQuery } from "@/lib/store"; import { cn } from "@/lib/utils"; import { RbacOperation, RbacResource, useRbac } from "@enterprise/lib"; import { ListOrdered, PlusIcon, Puzzle } from "lucide-react"; import { useQueryState } from "nuqs"; import { useEffect, useMemo, useState } from "react"; import AddNewPluginSheet from "./sheets/addNewPluginSheet"; import PluginSequenceSheet from "./sheets/pluginSequenceSheet"; import { PluginsEmptyState } from "./views/pluginsEmptyState"; import PluginsView from "./views/pluginsView"; export default function PluginsPage() { const dispatch = useAppDispatch(); const hasCreatePluginAccess = useRbac(RbacResource.Plugins, RbacOperation.Create); const hasUpdatePluginAccess = useRbac(RbacResource.Plugins, RbacOperation.Update); const { data: plugins, isLoading } = useGetPluginsQuery(); const selectedPlugin = useAppSelector((state) => state.plugin.selectedPlugin); const [selectedPluginId, setSelectedPluginId] = useQueryState("plugin"); const customPlugins = useMemo(() => plugins?.filter((plugin) => plugin.isCustom), [plugins]); const [isSheetOpen, setIsSheetOpen] = useState(false); const [isSequenceSheetOpen, setIsSequenceSheetOpen] = useState(false); const handleAddNew = () => { setIsSheetOpen(true); }; const handleCloseSheet = () => { setIsSheetOpen(false); }; useEffect(() => { if (!selectedPluginId) return; const plugin = customPlugins?.find((plugin) => plugin.name === selectedPluginId); if (plugin) { dispatch(setSelectedPlugin(plugin)); } }, [selectedPluginId, customPlugins]); useEffect(() => { if (selectedPluginId) return; if (!selectedPlugin) { setSelectedPluginId(customPlugins?.[0]?.name ?? ""); return; } setSelectedPluginId(selectedPlugin?.name ?? ""); }, [customPlugins]); if (customPlugins?.length === 0 && !isLoading) { return (