import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; // hooks // components import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; import { ProjectCard } from "components/project"; import { ProjectsLoader } from "components/ui"; // constants import { WORKSPACE_EMPTY_STATE_DETAILS } from "constants/empty-state"; import { EUserWorkspaceRoles } from "constants/workspace"; import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; export const ProjectCardList = observer(() => { // theme const { resolvedTheme } = useTheme(); // store hooks const { commandPalette: commandPaletteStore } = useApplication(); const { setTrackElement } = useEventTracker(); const { membership: { currentWorkspaceRole }, currentUser, } = useUser(); const { workspaceProjectIds, searchedProjects, getProjectById } = useProject(); const isLightMode = resolvedTheme ? resolvedTheme === "light" : currentUser?.theme.theme === "light"; const emptyStateImage = getEmptyStateImagePath("onboarding", "projects", isLightMode); const isEditingAllowed = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; if (!workspaceProjectIds) return ; return ( <> {workspaceProjectIds.length > 0 ? (
{searchedProjects.length == 0 ? (
No matching projects
) : (
{searchedProjects.map((projectId) => { const projectDetails = getProjectById(projectId); if (!projectDetails) return; return ; })}
)}
) : ( { setTrackElement("Project empty state"); commandPaletteStore.toggleCreateProjectModal(true); }, }} comicBox={{ title: WORKSPACE_EMPTY_STATE_DETAILS["projects"].comicBox.title, description: WORKSPACE_EMPTY_STATE_DETAILS["projects"].comicBox.description, }} size="lg" disabled={!isEditingAllowed} /> )} ); });