Skip to content
This repository was archived by the owner on Jun 2, 2024. It is now read-only.

Commit d604412

Browse files
committed
Add Resolve component to main index
1 parent 38c2f0a commit d604412

File tree

4 files changed

+41
-39
lines changed

4 files changed

+41
-39
lines changed

src/components/Resolve/Resolve.tsx

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,18 @@ const initialState = {
2525
type IResolveState = Readonly<typeof initialState>;
2626

2727
/**
28-
* A component to render based on a promise
28+
* Returns content based on specified promise.
2929
*
3030
* @example
31+
*
3132
* <Resolve
32-
* promise = {aPromise}
33-
* resolved = {
34-
* value => <p>{`Resolved value is ${value}`}</p>
35-
* } />
33+
* promise={aPromise}
34+
* resolved={value => (
35+
* <p>{`Resolved value ${value}`}</p>
36+
* )}
37+
* />
3638
*/
3739
class Resolve extends React.Component<IResolveProps, IResolveState> {
38-
// PropTypes
3940
public static propTypes = {
4041
pending: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
4142
promise: isPromise,
@@ -51,24 +52,53 @@ class Resolve extends React.Component<IResolveProps, IResolveState> {
5152

5253
public componentDidMount() {
5354
// Start handling the promise, must happen after mount as setState is called when promise is handled
54-
this._handlePromise(this.props.promise);
55+
this.handlePromise(this.props.promise);
5556
}
5657

5758
public componentDidUpdate(prevProps) {
5859
if (this.props.promise !== prevProps.promise) {
5960
this.setState({
6061
status: statusTypes.none,
6162
});
62-
this._handlePromise(this.props.promise);
63+
this.handlePromise(this.props.promise);
6364
}
6465
}
6566

6667
public componentWillUnmount() {
6768
this.unmounted = true;
6869
}
6970

71+
public render() {
72+
const { pending, resolved, rejected } = this.props;
73+
const { status, value } = this.state;
74+
75+
switch (status) {
76+
case statusTypes.none:
77+
break;
78+
case statusTypes.pending:
79+
if (pending) {
80+
return pending;
81+
}
82+
break;
83+
case statusTypes.resolved:
84+
if (resolved) {
85+
return resolved(value);
86+
}
87+
break;
88+
case statusTypes.rejected:
89+
if (rejected) {
90+
return rejected(value);
91+
}
92+
break;
93+
default:
94+
break;
95+
}
96+
97+
return null;
98+
}
99+
70100
// Promise resolver function
71-
public _handlePromise(promise) {
101+
private handlePromise(promise) {
72102
// Store the current promise to fast exit if promise is change during handling
73103
const currentPromise = promise;
74104
this.setState({
@@ -100,35 +130,6 @@ class Resolve extends React.Component<IResolveProps, IResolveState> {
100130
}
101131
});
102132
}
103-
104-
public render() {
105-
const { pending, resolved, rejected } = this.props;
106-
const { status, value } = this.state;
107-
108-
switch (status) {
109-
case statusTypes.none:
110-
break;
111-
case statusTypes.pending:
112-
if (pending) {
113-
return pending;
114-
}
115-
break;
116-
case statusTypes.resolved:
117-
if (resolved) {
118-
return resolved(value);
119-
}
120-
break;
121-
case statusTypes.rejected:
122-
if (rejected) {
123-
return rejected(value);
124-
}
125-
break;
126-
default:
127-
break;
128-
}
129-
130-
return null;
131-
}
132133
}
133134

134135
export default Resolve;

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { default as Map } from './components/Map';
22
export { default as Show } from './components/Show';
33
export { default as Switch } from './components/Switch';
4+
export { default as Resolve } from './components/Resolve';

src/utils/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export * from './isEmptyChildren';
1+
export * from './isEmptyChildren/isEmptyChildren';
22
export * from './isPromise/isPromise';
File renamed without changes.

0 commit comments

Comments
 (0)