/** * Copyright 2021 Design Barn Inc. */ import React, { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useMutation, useQuery } from 'urql'; import { ChevronDown, ChevronUp, TriangleDown } from '../../../../../assets/Icons'; import { useWorkspace } from '../../../../../context/workspace-provider'; import { queries, mutation } from '../../../../../helpers/query-strings'; import { DotLoading } from './dot-loading'; import { Empty } from './empty'; import { Loading } from './loading'; import { ProjectCard } from './project-card'; export interface WorkspaceSectionProps { icon?: string; id: string; name: string; } export const WorkspaceSection: React.FC = ({ icon, id, name }: WorkspaceSectionProps) => { const { project, setProject, setWorkspace, setWorkspacesList, workspace } = useWorkspace(); const navigate = useNavigate(); const [{ data, fetching: loading }] = useQuery({ query: queries.workspaceProjects, variables: { workspaceId: id }, }); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [_currentWorkspaceResponse, executeCurrentWorkspaceQuery] = useQuery({ query: queries.currentWorkspace, }); const [{ data: workspacesData }, executeWorkspacesQuery] = useQuery({ query: queries.myWorkspaces, }); const [{ data: currentWorkspaceData, fetching: updating }, updateCurrentWorkspace] = useMutation( mutation.updateCurrentWorkspace, ); const projects = (data && data.workspaceProjects.edges) || []; const goToProjectDetails = () => { let _project = project; if (projects.length > 0 && projects[0].node) { _project = projects[0].node; const projectId = _project.id; setProject(_project); navigate(`/workspaces/project/${projectId}`); } }; const switchWorkspace = async () => { const variables = { workspaceId: id }; await updateCurrentWorkspace(variables); executeWorkspacesQuery(); executeCurrentWorkspaceQuery(); goToProjectDetails(); }; // When currentWorkspace is updated useEffect(() => { if (currentWorkspaceData) { setWorkspace(currentWorkspaceData.updateCurrentWorkspace); } }, [currentWorkspaceData]); // Loaded immediately useEffect(() => { if (workspacesData) { setWorkspacesList(workspacesData.workspaces); } }, [workspacesData]); const renderProjects = () => { if (loading) { return ; } return projects.map((item: unknown) => (
  • )); }; const isActiveWorkspace = workspace.id === id; // Redirect to default project useEffect(() => { if (data && isActiveWorkspace && !project) { goToProjectDetails(); } }, [data]); const renderSwitchWorkspace = () => { if (isActiveWorkspace) { // @ts-ignore return ; } return updating ? ( ) : ( ); }; return (
    {/*
  • navigate('/my-animations/downloads')}> My Downloads
  • */}
    {icon ? ( ) : (
    {name[0] || ''} {(name.split(' ')[1] && name.split(' ')[1][0]) || ''}
    )}
    {name}
    {renderSwitchWorkspace()}
    {isActiveWorkspace && (
    Projects
    {!loading && projects.length === 0 ? ( ) : (
      {renderProjects()}
    )}
    )}
    ); };