Skip to content

Commit dfff371

Browse files
authored
chore: repo filter for org Page (#1929)
1 parent 3599b5f commit dfff371

6 files changed

Lines changed: 37 additions & 12 deletions

File tree

cra-rxjs-styled-components/src/components/repo-filter/RepoFilter.styles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@ export const RepoBtn = styled.button`
5353
border: none;
5454
`;
5555

56-
export const RepoBtnText = styled.span`
56+
export const RepoBtnText = styled.a`
5757
color: #fff;
5858
font-size: 14px;
5959
font-weight: 700;
60+
text-decoration: none;
6061
`;
6162

6263
export const FilterTextContainer = styled.div`

cra-rxjs-styled-components/src/components/repo-filter/Repofilter.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ export default function RepoFilter({
8181
</FiltersWrapper>
8282
<RepoBtn>
8383
<RepoBookIcon color="#fff" />
84-
<RepoBtnText>{repoBtnText || 'New'}</RepoBtnText>
84+
<RepoBtnText href="https://github.com/new" target="_blank">
85+
{repoBtnText || 'New'}
86+
</RepoBtnText>
8587
</RepoBtn>
8688
</RepoFilterWrapper>
8789
{!isOnlySorted && <FilterText filteredRepoCount={filteredRepoCount} />}

cra-rxjs-styled-components/src/components/user-repos/UserRepos.styles.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@ export const NetlifyBadgeContainer = styled.div`
1919
`;
2020

2121
export const OrgHeader = styled.div`
22-
border-bottom: 1px solid var(--gray-500);
23-
background-color: var(--gray-200);
22+
border-bottom: 1px solid var(--gray-300);
23+
background-color: var(--gray-100);
2424
position: sticky;
2525
top: 0px;
2626
z-index: 40;
2727
`;
2828

2929
export const OrgTopHeader = styled.div`
30-
padding: 0 8px;
30+
padding: 0 32px;
3131
`;
3232

3333
export const OrgAbout = styled.div`
3434
display: flex;
3535
align-items: center;
36-
margin-top: 0.5rem;
37-
margin-bottom: 0.5rem;
36+
padding-top: 1rem;
37+
margin-bottom: 2rem;
3838
`;
3939

4040
export const OrgImage = styled.img`

cra-rxjs-styled-components/src/components/user-repos/UserRepos.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
import { NetlifyBadgeContainer, RepoListWrapper } from './UserRepos.styles';
22
import { useUserRepositories } from '../../hooks/user-repositories/use-user-repositories';
33
import RepoCard from '../repo-card/RepoCard';
4+
import useRepoSortFilter from '../../hooks/repositories/use-repo-sort-filter';
5+
import RepoFilter from '../repo-filter/Repofilter';
46

57
function UserRepos({ isOrg = false }) {
6-
const { loading, repos } = useUserRepositories(isOrg);
8+
const { loading, repos, languages } = useUserRepositories(isOrg);
9+
10+
const sortAndFilteredRepositories = useRepoSortFilter(repos);
711

812
if (loading) {
913
return <p>Loading...</p>;
1014
}
1115

1216
return (
1317
<RepoListWrapper>
14-
{repos && repos.map((repo) => <RepoCard repo={repo} star />)}
18+
<RepoFilter
19+
languages={languages}
20+
filteredRepoCount={sortAndFilteredRepositories.length}
21+
/>
22+
{sortAndFilteredRepositories &&
23+
sortAndFilteredRepositories.map((repo) => <RepoCard repo={repo} star />)}
1524

1625
<NetlifyBadgeContainer>
1726
<a target="_blank" rel="noreferrer noopener" href="https://www.netlify.com">

cra-rxjs-styled-components/src/hooks/user-repositories/use-user-repositories.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import { fromFetchWithAuth } from '../auth/from-fetch-with-auth';
66
import { Repository } from '../../interfaces/repositories.interfaces';
77

88
export function useUserRepositories(isOrg = false) {
9-
const [repos, setRepos] = useState<Repository[]>();
9+
const [repos, setRepos] = useState<Repository[]>([]);
1010
const [loading, setLoading] = useState(true);
11+
const [languages, setLanguages] = useState<string[]>([]);
1112
const { username } = useParams();
1213

1314
const request = (url: string) =>
@@ -24,9 +25,14 @@ export function useUserRepositories(isOrg = false) {
2425
const GITHUB_URL = isOrg ? ORG_REPO_LIST(username) : USER_REPO_LIST(username);
2526
const subscription = request(GITHUB_URL)
2627
.pipe(
27-
tap((data) => {
28+
tap((data: Repository[]) => {
2829
if (data) {
2930
setRepos(data);
31+
const reposLaguages = data
32+
.map((res) => res.language)
33+
.filter((res) => res)
34+
.sort((a, b) => a.localeCompare(b));
35+
setLanguages([...new Set(reposLaguages)]);
3036
setLoading(false);
3137
}
3238
})
@@ -40,5 +46,6 @@ export function useUserRepositories(isOrg = false) {
4046
return {
4147
loading,
4248
repos,
49+
languages,
4350
};
4451
}

cra-rxjs-styled-components/src/routes/orgs.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import { useParams } from 'react-router-dom';
1414
import { tap } from 'rxjs';
1515
import { IOrg } from '../interfaces/org.interface';
1616
import { LoadingBulletList } from '../components/Loading';
17+
import { tabs } from '../constants/data';
18+
import TabNavigation from '../components/tab-nav/TabNav';
19+
import { RepoFilterProvider } from '../context/RepoFilterContext';
1720

1821
export default function OrgPage() {
1922
const [loading, setLoading] = useState(true);
@@ -63,9 +66,12 @@ export default function OrgPage() {
6366
<OrgName data-testid="org about name">{orgInfo.name}</OrgName>
6467
</OrgAbout>
6568
)}
69+
<TabNavigation tabs={tabs} activeTab={tabs[0].title} />
6670
</OrgTopHeader>
6771
</OrgHeader>
68-
<UserRepos isOrg />
72+
<RepoFilterProvider>
73+
<UserRepos isOrg />
74+
</RepoFilterProvider>
6975
</>
7076
);
7177
}

0 commit comments

Comments
 (0)