From 1740ffd4a3ac9cd0099fdc24daae8a7a9825d4cb Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Fri, 3 Nov 2023 19:24:39 +0530 Subject: [PATCH 1/2] chore: project card avatar rendering fix --- web/components/project/card.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/components/project/card.tsx b/web/components/project/card.tsx index 0a684ac7f9c..3993a74e950 100644 --- a/web/components/project/card.tsx +++ b/web/components/project/card.tsx @@ -181,7 +181,7 @@ export const ProjectCard: React.FC = observer((props) => {
{projectMembersIds.map((memberId) => { - const member = project.members?.find((m) => m.id === memberId); + const member = project.members?.find((m) => m.member_id === memberId); if (!member) return null; From ae8203122324c95c974d7cef85924cc52b1cac6d Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Fri, 3 Nov 2023 19:25:10 +0530 Subject: [PATCH 2/2] chore: state, assignee and label dropdown loading state added --- .../issue-layouts/properties/assignee.tsx | 62 +++++++++-------- .../issue-layouts/properties/labels.tsx | 68 ++++++++++--------- .../issues/issue-layouts/properties/state.tsx | 62 +++++++++-------- 3 files changed, 101 insertions(+), 91 deletions(-) diff --git a/web/components/issues/issue-layouts/properties/assignee.tsx b/web/components/issues/issue-layouts/properties/assignee.tsx index ee545f3a55c..b436e274f9b 100644 --- a/web/components/issues/issue-layouts/properties/assignee.tsx +++ b/web/components/issues/issue-layouts/properties/assignee.tsx @@ -47,11 +47,17 @@ export const IssuePropertyAssignee: React.FC = observer( const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); + const [isLoading, setIsLoading] = useState(false); const projectMembers = projectId ? projectStore?.members?.[projectId] : undefined; - const fetchProjectMembers = () => - workspaceSlug && projectId && projectStore.fetchProjectMembers(workspaceSlug, projectId); + const fetchProjectMembers = () => { + setIsLoading(true); + if (workspaceSlug && projectId) + workspaceSlug && + projectId && + projectStore.fetchProjectMembers(workspaceSlug, projectId).then(() => setIsLoading(false)); + }; const options = (projectMembers ?? [])?.map((member) => ({ value: member.member.id, @@ -128,7 +134,7 @@ export const IssuePropertyAssignee: React.FC = observer( className={`flex items-center justify-between gap-1 w-full text-xs ${ disabled ? "cursor-not-allowed text-custom-text-200" : "cursor-pointer hover:bg-custom-background-80" } ${buttonClassName}`} - onClick={() => fetchProjectMembers()} + onClick={() => !projectMembers && fetchProjectMembers()} > {label} {!hideDropdownArrow && !disabled &&
- {filteredOptions ? ( - filteredOptions.length > 0 ? ( - filteredOptions.map((option) => ( - - `flex items-center justify-between gap-2 cursor-pointer select-none truncate rounded px-1 py-1.5 ${ - active && !selected ? "bg-custom-background-80" : "" - } ${selected ? "text-custom-text-100" : "text-custom-text-200"}` - } - > - {({ selected }) => ( - <> - {option.content} - {selected && } - - )} - - )) - ) : ( - -

No matching results

-
- ) - ) : ( + {isLoading ? (

Loading...

+ ) : filteredOptions.length > 0 ? ( + filteredOptions.map((option) => ( + + `flex items-center justify-between gap-2 cursor-pointer select-none truncate rounded px-1 py-1.5 ${ + active && !selected ? "bg-custom-background-80" : "" + } ${selected ? "text-custom-text-100" : "text-custom-text-200"}` + } + > + {({ selected }) => ( + <> + {option.content} + {selected && } + + )} + + )) + ) : ( + +

No matching results

+
)}
diff --git a/web/components/issues/issue-layouts/properties/labels.tsx b/web/components/issues/issue-layouts/properties/labels.tsx index d54b67a9c51..596237ef468 100644 --- a/web/components/issues/issue-layouts/properties/labels.tsx +++ b/web/components/issues/issue-layouts/properties/labels.tsx @@ -51,11 +51,15 @@ export const IssuePropertyLabels: React.FC = observer((pro const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); + const [isLoading, setIsLoading] = useState(false); const projectLabels = projectId && projectStore?.labels?.[projectId]; - const fetchProjectLabels = () => - workspaceSlug && projectId && projectStore.fetchProjectLabels(workspaceSlug, projectId); + const fetchProjectLabels = () => { + setIsLoading(true); + if (workspaceSlug && projectId) + projectStore.fetchProjectLabels(workspaceSlug, projectId).then(() => setIsLoading(false)); + }; const options = (projectLabels ? projectLabels : []).map((label) => ({ value: label.id, @@ -131,10 +135,10 @@ export const IssuePropertyLabels: React.FC = observer((pro ) ) : (
+ className={`h-full flex items-center justify-center text-xs rounded px-2.5 py-1 hover:bg-custom-background-80 ${ + noLabelBorder ? "" : "border-[0.5px] border-custom-border-300" + }`} + > Select labels
)} @@ -161,7 +165,7 @@ export const IssuePropertyLabels: React.FC = observer((pro ? "cursor-pointer" : "cursor-pointer hover:bg-custom-background-80" } ${buttonClassName}`} - onClick={() => fetchProjectLabels()} + onClick={() => !projectLabels && fetchProjectLabels()} > {label} {!hideDropdownArrow && !disabled &&