Skip to content

Commit fedbb39

Browse files
committed
implement handling incorrect slugs
1 parent 9ea0f6f commit fedbb39

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

src/Resolver.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
import React, {useEffect} from "react";
2-
import {withRouter} from "react-router-dom";
1+
import React, {useEffect, useState} from "react";
32
import * as ResolverService from "./services/resolver";
43

54
function Resolver(props) {
65
const slug = props.match.params.slug;
6+
const [status, setStatus] = useState('Redirecting...');
77

88
// look up url
99
useEffect(() => {
10-
// TODO: error handling
1110
ResolverService.resolve(slug, (originalUrl) => {
1211
console.debug(`original url: ${originalUrl}.`)
1312

1413
window.location.replace(originalUrl);
15-
})
16-
});
14+
}, (error) => {
15+
setStatus('Incorrect URL.')
16+
console.error(error);
17+
});
18+
}, [slug]);
1719

1820
return (
19-
<div>
20-
<p>Redirecting...</p>
21+
<div className="resolver">
22+
<p>{status}</p>
2123
</div>
2224
);
2325
}
2426

25-
export default withRouter(Resolver);
27+
export default Resolver;

src/services/resolver.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@ import * as FirestoreService from "./firestore";
44
* resolves slug to original url
55
*
66
* @param slug
7-
* @param observer
7+
* @param resolve
8+
* @param reject
89
*/
9-
export const resolve = (slug, observer) => {
10+
export const resolve = (slug, resolve, reject) => {
1011
FirestoreService.get('urls', slug).then((snapshot) => {
11-
observer(snapshot.get('original'));
12+
if (!snapshot.exists) {
13+
reject(`URL ${slug} not found in db.`);
14+
return;
15+
}
16+
17+
resolve(snapshot.get('original'));
1218
}).catch((error) => {
13-
console.error(error);
19+
reject(error);
1420
});
1521
}
1622

0 commit comments

Comments
 (0)