Skip to content

Commit 8d75f18

Browse files
committed
implements useLatestRelease hook
1 parent 299c9bf commit 8d75f18

6 files changed

Lines changed: 75 additions & 8 deletions

File tree

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/example.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ 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";
78

89
function App() {
910
return (
@@ -16,6 +17,8 @@ function App() {
1617
<hr />
1718
<Branch />
1819
<hr />
20+
<LatestRelease />
21+
<hr />
1922
</div>
2023
);
2124
}

src/index.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
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/repository/useLatestRelease'
96

107
export {
118
useRepos,
129
useUser,
1310
useBranches,
1411
useBranch,
12+
useLatestRelease,
1513
}
1614

1715
export default {
1816
useRepos,
1917
useUser,
2018
useBranches,
2119
useBranch,
20+
useLatestRelease,
2221
}

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)