1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-19 17:52:45 +02:00

fix: handle loading states for project details for a single project

This commit is contained in:
Thomas Heartman 2024-10-21 12:10:07 +02:00
parent 9fecc02462
commit 3bc9c9ae8a
No known key found for this signature in database
GPG Key ID: BD1F880DAED1EE78
4 changed files with 24 additions and 18 deletions

View File

@ -122,7 +122,10 @@ const ProjectListItem: FC<{
); );
}; };
type MyProjectsState = 'no projects' | 'projects' | 'projects with error'; type MyProjectsState =
| 'no projects'
| 'projects'
| 'projects with error or loading';
export const MyProjects = forwardRef< export const MyProjects = forwardRef<
HTMLDivElement, HTMLDivElement,
@ -149,7 +152,7 @@ export const MyProjects = forwardRef<
const state: MyProjectsState = projects.length const state: MyProjectsState = projects.length
? personalDashboardProjectDetails ? personalDashboardProjectDetails
? 'projects' ? 'projects'
: 'projects with error' : 'projects with error or loading'
: 'no projects'; : 'no projects';
const activeProjectStage = const activeProjectStage =
@ -190,7 +193,7 @@ export const MyProjects = forwardRef<
), ),
}; };
case 'projects with error': case 'projects with error or loading':
return { return {
list: ( list: (
<StyledList> <StyledList>
@ -206,8 +209,19 @@ export const MyProjects = forwardRef<
))} ))}
</StyledList> </StyledList>
), ),
box1: <DataError project={activeProject} />, box1: (
box2: <ContactAdmins admins={admins} />, <div data-loading>
<DataError
data-loading
project={activeProject}
/>
</div>
),
box2: (
<div data-loading>
<ContactAdmins admins={admins} />
</div>
),
}; };
case 'projects': { case 'projects': {

View File

@ -130,15 +130,10 @@ export const PersonalDashboard = () => {
splash?.personalDashboardKeyConcepts ? 'closed' : 'open', splash?.personalDashboardKeyConcepts ? 'closed' : 'open',
); );
const { personalDashboardProjectDetails, error: detailsError } = const { personalDashboardProjectDetails, loading: detailsLoading } =
usePersonalDashboardProjectDetails(activeProject); usePersonalDashboardProjectDetails(activeProject);
const activeProjectStage = const loadingProjectDetailsRef = useLoading(detailsLoading);
personalDashboardProjectDetails?.onboardingStatus.status ?? 'loading';
const projectStageRef = useLoading(
!detailsError && activeProjectStage === 'loading',
);
return ( return (
<MainContent> <MainContent>
@ -192,7 +187,7 @@ export const PersonalDashboard = () => {
<MyProjects <MyProjects
owners={personalDashboard?.projectOwners ?? []} owners={personalDashboard?.projectOwners ?? []}
admins={personalDashboard?.admins ?? []} admins={personalDashboard?.admins ?? []}
ref={projectStageRef} ref={loadingProjectDetailsRef}
projects={projects} projects={projects}
activeProject={activeProject || ''} activeProject={activeProject || ''}
setActiveProject={setActiveProject} setActiveProject={setActiveProject}

View File

@ -5,10 +5,7 @@ import { ActionBox } from './ActionBox';
export const DataError: FC<{ project: string }> = ({ project }) => { export const DataError: FC<{ project: string }> = ({ project }) => {
return ( return (
<ActionBox <ActionBox title={`Couldn't fetch data for project "${project}".`}>
data-loading
title={`Couldn't fetch data for project "${project}".`}
>
<p> <p>
The API request to get data for this project returned with an The API request to get data for this project returned with an
error. error.

View File

@ -51,7 +51,7 @@ export const RoleAndOwnerInfo = ({ roles, owners }: Props) => {
const firstRoles = roles.slice(0, 3); const firstRoles = roles.slice(0, 3);
const extraRoles = roles.slice(3); const extraRoles = roles.slice(3);
return ( return (
<Wrapper> <Wrapper data-loading>
<InfoSection> <InfoSection>
{roles.length > 0 ? ( {roles.length > 0 ? (
<> <>