Skip to content

Commit ba28ada

Browse files
authored
Merge pull request #8 from bdbch/2-repository-hooks
2 repository hooks
2 parents 299c9bf + 5fb1f65 commit ba28ada

File tree

13 files changed

+319
-8
lines changed

13 files changed

+319
-8
lines changed

README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,43 @@ function MyComponent() {
6161
// your component
6262
}
6363
```
64+
65+
### Get latest release from repo
66+
67+
```js
68+
import { useLatestRelease } from "@d2k/react-github";
69+
70+
function MyComponent() {
71+
const { release, loading, error } = useLatestRelease("facebook", "react");
72+
73+
// your component
74+
}
75+
```
76+
77+
### Get release by tag from repo
78+
79+
```js
80+
import { useTaggedRelease } from "@d2k/react-github";
81+
82+
function MyComponent() {
83+
const { release, loading, error } = useTaggedRelease(
84+
"facebook",
85+
"react",
86+
"v16.8.4"
87+
);
88+
89+
// your component
90+
}
91+
```
92+
93+
### List forks from repo
94+
95+
```js
96+
import { useForks } from "@d2k/react-github";
97+
98+
function MyComponent() {
99+
const { forks, loading, error } = useForks("facebook", "react");
100+
101+
// your component
102+
}
103+
```

docs/components/Collaborators.jsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from "react";
2+
import { useCollaborators } from "../../src";
3+
4+
const Forks = () => {
5+
const { collaborators, loading, error } = useCollaborators(
6+
"facebook",
7+
"react"
8+
);
9+
10+
return (
11+
<div>
12+
<h1>Collaborators by repo</h1>
13+
{loading && <div>Loading collaborators from Github</div>}
14+
{error && <div>{error}</div>}
15+
{collaborators &&
16+
collaborators.length > 0 &&
17+
collaborators.map(collaborator => (
18+
<div key={collaborator.id}>
19+
<h4>{collaborator.login}</h4>
20+
</div>
21+
))}
22+
</div>
23+
);
24+
};
25+
26+
export default Forks;

docs/components/Forks.jsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from "react";
2+
import { useForks } from "../../src";
3+
4+
const Forks = () => {
5+
const { forks, loading, error } = useForks("facebook", "react");
6+
7+
return (
8+
<div>
9+
<h1>Forks by repo</h1>
10+
{loading && <div>Loading forks from Github</div>}
11+
{error && <div>{error}</div>}
12+
{forks &&
13+
forks.length > 0 &&
14+
forks.map(fork => (
15+
<div key={fork.id}>
16+
<h4>{fork.full_name}</h4>
17+
</div>
18+
))}
19+
</div>
20+
);
21+
};
22+
23+
export default Forks;

docs/components/LatestRelease.jsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from "react";
2+
import { useLatestRelease } from "../../src";
3+
4+
const LatestRelease = () => {
5+
const { release, loading, error } = useLatestRelease("facebook", "react");
6+
7+
return (
8+
<div>
9+
<h1>Latest release by repo</h1>
10+
{loading && <div>Loading release from Github</div>}
11+
{error && <div>{error}</div>}
12+
{release && (
13+
<div>
14+
<h4>
15+
<a
16+
href={release.html_url}
17+
target="_blank"
18+
rel="nofollow noreferrer"
19+
>
20+
{release.name}
21+
</a>
22+
</h4>
23+
<div>{release.body}</div>
24+
</div>
25+
)}
26+
</div>
27+
);
28+
};
29+
30+
export default LatestRelease;

docs/components/TaggedRelease.jsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import React from "react";
2+
import { useTaggedRelease } from "../../src";
3+
4+
const TaggedRelease = () => {
5+
const { release, loading, error } = useTaggedRelease(
6+
"facebook",
7+
"react",
8+
"v16.8.4"
9+
);
10+
11+
return (
12+
<div>
13+
<h1>Tagged release by repo</h1>
14+
{loading && <div>Loading release from Github</div>}
15+
{error && <div>{error}</div>}
16+
{release && (
17+
<div>
18+
<h4>
19+
<a
20+
href={release.html_url}
21+
target="_blank"
22+
rel="nofollow noreferrer"
23+
>
24+
{release.tag_name}
25+
</a>
26+
</h4>
27+
<div>{release.body}</div>
28+
</div>
29+
)}
30+
</div>
31+
);
32+
};
33+
34+
export default TaggedRelease;

docs/example.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import Repos from "./components/Repos";
44
import User from "./components/User";
55
import Branches from "./components/Branches";
66
import Branch from "./components/Branch";
7+
import LatestRelease from "./components/LatestRelease";
8+
import TaggedRelease from "./components/TaggedRelease";
9+
import Forks from "./components/Forks";
10+
import Collaborators from "./components/Collaborators";
711

812
function App() {
913
return (
@@ -16,6 +20,12 @@ function App() {
1620
<hr />
1721
<Branch />
1822
<hr />
23+
<LatestRelease />
24+
<hr />
25+
<TaggedRelease />
26+
<hr />
27+
<Forks />
28+
<hr />
1929
</div>
2030
);
2131
}

src/index.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
import useRepos from './lib/useRepos'
22
import useUser from './lib/useUser'
3-
import {
4-
useBranches,
5-
} from './lib/branch/useBranches'
6-
import {
7-
useBranch
8-
} from './lib/branch/useBranch'
3+
import useBranches from './lib/branch/useBranches'
4+
import useBranch from './lib/branch/useBranch'
5+
import useLatestRelease from './lib/release/useLatestRelease'
6+
import useTaggedRelease from './lib/release/useTaggedRelease'
7+
import useForks from './lib/repository/useForks'
8+
import useCollaborators from './lib/repository/useCollaborators'
99

1010
export {
1111
useRepos,
1212
useUser,
1313
useBranches,
1414
useBranch,
15+
useLatestRelease,
16+
useTaggedRelease,
17+
useForks,
18+
useCollaborators,
1519
}
1620

1721
export default {
1822
useRepos,
1923
useUser,
2024
useBranches,
2125
useBranch,
26+
useLatestRelease,
27+
useTaggedRelease,
28+
useForks,
29+
useCollaborators,
2230
}

src/lib/branch/useBranch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
useEffect
44
} from 'react'
55

6-
export const useBranch = (owner, repo, branchName) => {
6+
export default function useBranch(owner, repo, branchName) {
77
const [branch, setBranch] = useState(null)
88
const [loading, setLoading] = useState(false)
99
const [error, setError] = useState(null)

src/lib/branch/useBranches.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
useEffect
44
} from 'react'
55

6-
export const useBranches = (owner, repo) => {
6+
export default function useBranches(owner, repo) {
77
const [branches, setBranches] = useState([])
88
const [loading, setLoading] = useState(false)
99
const [error, setError] = useState(null)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {
2+
useState,
3+
useEffect
4+
} from 'react'
5+
6+
export default function useLatestRelease(owner, repo) {
7+
const [release, setRelease] = useState(null)
8+
const [loading, setLoading] = useState(false)
9+
const [error, setError] = useState(null)
10+
11+
useEffect(() => {
12+
if (owner && owner.length > 0 && repo && repo.length > 0) {
13+
setError(null)
14+
setLoading(true)
15+
16+
fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`)
17+
.then(res => res.json())
18+
.then(data => {
19+
setLoading(false)
20+
setRelease(data)
21+
})
22+
.catch(e => {
23+
setLoading(false)
24+
setRelease(null)
25+
setError(e)
26+
})
27+
}
28+
}, [owner, repo])
29+
30+
return {
31+
release,
32+
loading,
33+
error
34+
}
35+
}

0 commit comments

Comments
 (0)