From 9e165f2c71237126c9cc10397c7b503c888878dc Mon Sep 17 00:00:00 2001 From: mantikoros Date: Fri, 16 Sep 2022 11:56:03 -0500 Subject: [PATCH] cache groups to prevent ui jumping --- .../onboarding/group-selector-dialog.tsx | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/web/components/onboarding/group-selector-dialog.tsx b/web/components/onboarding/group-selector-dialog.tsx index f453bcf0..d18d850e 100644 --- a/web/components/onboarding/group-selector-dialog.tsx +++ b/web/components/onboarding/group-selector-dialog.tsx @@ -1,5 +1,5 @@ import { sortBy } from 'lodash' -import React from 'react' +import React, { useRef } from 'react' import { Col } from 'web/components/layout/col' import { Title } from 'web/components/title' @@ -9,6 +9,7 @@ import { useUser } from 'web/hooks/use-user' import { Modal } from 'web/components/layout/modal' import { PillButton } from 'web/components/buttons/pill-button' import { Button } from 'web/components/button' +import { Group } from 'common/group' export default function GroupSelectorDialog(props: { open: boolean @@ -19,11 +20,18 @@ export default function GroupSelectorDialog(props: { const groups = useGroups() const user = useUser() const memberGroupIds = useMemberGroupIds(user) || [] + const cachedGroups = useRef() - const displayedGroups = sortBy(groups, [ + if (groups && !cachedGroups.current) { + cachedGroups.current = groups + } + + const displayedGroups = sortBy(cachedGroups.current ?? [], [ (group) => -1 * group.totalMembers, (group) => -1 * group.totalContracts, - ]).slice(0, 100) + ]) + .filter((group) => group.anyoneCanJoin) + .slice(0, 100) return ( @@ -36,22 +44,19 @@ export default function GroupSelectorDialog(props: {
{user && - displayedGroups.map( - (group) => - group.anyoneCanJoin && ( - - memberGroupIds.includes(group.id) - ? leaveGroup(group, user.id) - : joinGroup(group, user.id) - } - className="mr-1 mb-2 max-w-[12rem] truncate" - > - {group.name} - - ) - )} + displayedGroups.map((group) => ( + + memberGroupIds.includes(group.id) + ? leaveGroup(group, user.id) + : joinGroup(group, user.id) + } + className="mr-1 mb-2 max-w-[12rem] truncate" + > + {group.name} + + ))}