• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

alkem-io / client-web / #9048

11 Oct 2024 01:42PM UTC coverage: 5.943%. First build
#9048

Pull #7022

travis-ci

Pull Request #7022: [v0.74.0] Roles API + Unauthenticated Explore page

202 of 10241 branches covered (1.97%)

Branch coverage included in aggregate %.

63 of 431 new or added lines in 60 files covered. (14.62%)

1468 of 17861 relevant lines covered (8.22%)

0.19 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/domain/community/contributor/Account/AccountResourcesView.tsx
1
import { useState } from 'react';
2
import PageContentBlock from '@/core/ui/content/PageContentBlock';
3
import PageContentBlockHeader from '@/core/ui/content/PageContentBlockHeader';
4
import PageContentBlockGrid from '@/core/ui/content/PageContentBlockGrid';
5
import ScrollableCardsLayoutContainer from '@/core/ui/card/cardsLayout/ScrollableCardsLayoutContainer';
6
import SpaceCard from '@/domain/space/components/cards/SpaceCard';
7
import { SpaceLevel } from '@/core/apollo/generated/graphql-schema';
8
import { BlockTitle } from '@/core/ui/typography';
9
import Gutters from '@/core/ui/grid/Gutters';
10
import { useTranslation } from 'react-i18next';
11
import ContributorCardHorizontal from '@/core/ui/card/ContributorCardHorizontal';
12
import InnovationPackCardHorizontal from '@/domain/InnovationPack/InnovationPackCardHorizontal/InnovationPackCardHorizontal';
13
import InnovationHubCardHorizontal from '@/domain/innovationHub/InnovationHubCardHorizontal/InnovationHubCardHorizontal';
14
import GridItem from '@/core/ui/grid/GridItem';
15
import { useColumns } from '@/core/ui/grid/GridContext';
16
import { Button } from '@mui/material';
17
import { Actions } from '@/core/ui/actions/Actions';
18
import { ExpandMore } from '@mui/icons-material';
19
import { SpaceAboutLightModel } from '@/domain/space/about/model/spaceAboutLight.model';
20
import { useScreenSize } from '@/core/ui/grid/constants';
NEW
21
import { collectSubspaceAvatars } from '@/domain/space/components/cards/utils/useSubspaceCardData';
×
22

23
const VISIBLE_SPACE_LIMIT = 6;
24

25
type AccountProfile = {
26
  id: string;
27
  displayName: string;
28
  description?: string;
29
  avatar?: { uri: string };
30
  cardBanner?: { uri: string };
31
  url: string;
32
  tagline?: string;
33
};
34

35
export interface AccountResourcesProps {
36
  id: string;
37
  spaces: {
38
    id: string;
39
    about: SpaceAboutLightModel;
40
  }[];
41
  virtualContributors: {
42
    id: string;
43
    profile: AccountProfile;
44
  }[];
45
  innovationPacks: {
46
    id: string;
47
    profile: AccountProfile;
48
    templates?: {
49
      calloutTemplatesCount: number;
50
      spaceTemplatesCount: number;
51
      communityGuidelinesTemplatesCount: number;
52
      postTemplatesCount: number;
53
      whiteboardTemplatesCount: number;
54
    };
55
  }[];
56
  innovationHubs: {
57
    id: string;
58
    profile: AccountProfile & {
59
      banner?: { uri: string };
60
    };
61
    subdomain: string;
62
  }[];
63
}
64

65
interface AccountResourcesViewProps {
66
  accountResources: AccountResourcesProps;
67
  title: string;
68
}
69

70
export const AccountResourcesView = ({ accountResources, title }: AccountResourcesViewProps) => {
71
  const { t } = useTranslation();
72

73
  const [visibleSpacesCount, setVisibleSpacesCount] = useState(VISIBLE_SPACE_LIMIT);
74

75
  const { isSmallScreen } = useScreenSize();
76

NEW
77
  const columns = useColumns();
×
NEW
78

×
79
  const resourceColumns = isSmallScreen ? columns : columns / 3;
NEW
80

×
81
  const showSpaceMoreButton =
NEW
82
    accountResources.spaces.length > VISIBLE_SPACE_LIMIT && visibleSpacesCount === VISIBLE_SPACE_LIMIT;
×
83

NEW
84
  return (
×
85
    <PageContentBlock>
NEW
86
      <PageContentBlockHeader title={title} />
×
87
      {accountResources?.spaces && accountResources?.spaces.length > 0 && (
88
        <PageContentBlockGrid disablePadding>
NEW
89
          <ScrollableCardsLayoutContainer containerProps={{ flex: 1 }}>
×
90
            {accountResources.spaces?.slice(0, visibleSpacesCount).map(contributionItem => {
NEW
91
              const avatarUris = collectSubspaceAvatars(
×
92
                {
93
                  id: contributionItem.id,
94
                  about: {
×
95
                    profile: {
96
                      displayName: contributionItem.about.profile.displayName,
97
                      avatar: contributionItem.about.profile.avatar,
NEW
98
                      cardBanner: contributionItem.about.profile.cardBanner,
×
99
                    },
100
                  },
101
                },
102
                undefined, // no parent for L0 spaces
103
                undefined
104
              );
105

106
              return (
107
                <SpaceCard
108
                  key={contributionItem.id}
109
                  spaceId={contributionItem.id}
110
                  displayName={contributionItem.about.profile.displayName}
111
                  banner={contributionItem.about.profile.cardBanner}
112
                  spaceUri={contributionItem.about.profile.url}
113
                  isPrivate={!contributionItem.about.isContentPublic}
×
114
                  level={SpaceLevel.L0}
115
                  avatarUris={avatarUris}
116
                  tags={contributionItem.about.profile.tagset?.tags}
NEW
117
                  compact
×
118
                />
119
              );
120
            })}
121
          </ScrollableCardsLayoutContainer>
122
        </PageContentBlockGrid>
123
      )}
124
      {showSpaceMoreButton && (
125
        <Actions padding={0} justifyContent="end">
×
126
          <Button
127
            startIcon={<ExpandMore />}
128
            onClick={() => setVisibleSpacesCount(accountResources.spaces.length)}
129
            sx={{ textTransform: 'none', minWidth: 0, padding: 0.8 }}
130
          >
NEW
131
            {t('components.dashboardNavigation.showAll')}
×
132
          </Button>
133
        </Actions>
134
      )}
135
      <PageContentBlockGrid disablePadding>
136
        {accountResources?.virtualContributors && accountResources?.virtualContributors.length > 0 && (
137
          <GridItem columns={resourceColumns}>
×
138
            <Gutters>
139
              <BlockTitle>{t('pages.admin.generic.sections.account.virtualContributors')}</BlockTitle>
140
              <Gutters disablePadding>
141
                {accountResources?.virtualContributors?.map(vc => (
142
                  <ContributorCardHorizontal key={vc.id} profile={vc.profile} withUnifiedTitle seamless />
NEW
143
                ))}
×
144
              </Gutters>
145
            </Gutters>
146
          </GridItem>
147
        )}
148
        {accountResources?.innovationPacks && accountResources?.innovationPacks.length > 0 && (
149
          <GridItem columns={resourceColumns}>
×
150
            <Gutters>
151
              <BlockTitle>{t('pages.admin.generic.sections.account.innovationPacks')}</BlockTitle>
152
              <Gutters disablePadding>
153
                {accountResources?.innovationPacks?.map(pack => (
154
                  <InnovationPackCardHorizontal key={pack.id} {...pack} />
NEW
155
                ))}
×
156
              </Gutters>
157
            </Gutters>
158
          </GridItem>
159
        )}
160
        {accountResources?.innovationHubs && accountResources?.innovationHubs.length > 0 && (
161
          <GridItem columns={resourceColumns}>
162
            <Gutters>
163
              <BlockTitle>{t('pages.admin.generic.sections.account.customHomepages')}</BlockTitle>
164
              <Gutters disablePadding>
165
                {accountResources?.innovationHubs?.map(hub => (
166
                  <InnovationHubCardHorizontal key={hub.id} {...hub} />
167
                ))}
168
              </Gutters>
169
            </Gutters>
170
          </GridItem>
171
        )}
172
      </PageContentBlockGrid>
173
    </PageContentBlock>
174
  );
175
};
176

177
export default AccountResourcesView;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc