Skip to content

Commit 54f7fc3

Browse files
committed
move fetching to match hook
1 parent 2c6ea8a commit 54f7fc3

File tree

1 file changed

+9
-55
lines changed

1 file changed

+9
-55
lines changed

src/index.tsx

+9-55
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,30 @@ export function hookFetcher(options: Options = {}) {
4646
values: null
4747
});
4848
},
49-
resolve: async ({ path, location, route, status, params, redirect, result, ctx }) => {
50-
// check if fetcher instance
51-
if (!result.isFetcher) {
52-
// TODO: show name of component
53-
console.warn('Component not wrapped with Fetcher');
49+
match: async ({ path, location, route, status, params, redirect, ctx }) => {
50+
// check if fetcher exists
51+
if (!Array.isArray(route.fetcher)) {
52+
// console.warn('No fetcher items');
5453
return;
5554
}
5655
// set init values
57-
result.items.forEach(({ data }) => {
56+
route.fetcher.forEach(({ data }) => {
5857
if (data && data.key && data.value) {
5958
if (ctx.get('fetcher').values === null) ctx.get('fetcher').values = {};
6059
ctx.get('fetcher').values[data.key] = data.value;
6160
}
6261
});
6362
// filter deferred items
64-
ctx.get('fetcher').deferred = result.items.filter(item => item.deferred);
63+
ctx.get('fetcher').deferred = route.fetcher.filter(item => item.deferred);
6564
if (server) {
66-
ctx.get('fetcher').items = result.items.filter(item => !item.deferred);
65+
ctx.get('fetcher').items = route.fetcher.filter(item => !item.deferred);
6766
} else {
68-
ctx.get('fetcher').items = result.items.filter(item => !item.deferred && !item.server);
67+
ctx.get('fetcher').items = route.fetcher.filter(item => !item.deferred && !item.server);
6968
}
7069
if (counter === 1 && noFirstFetch) return;
7170
// execute promises and return result
7271
try {
73-
const values = await runPromises(ctx.get('fetcher').items, { path, location, route, status, params, redirect, result, ctx, noFirstFetch, helpers });
72+
const values = await runPromises(ctx.get('fetcher').items, { path, location, route, status, params, redirect, ctx, noFirstFetch, helpers });
7473
if (ctx.get('fetcher').values !== null) Object.assign(ctx.get('fetcher').values, values);
7574
} catch (error) {
7675
if (error instanceof RouterError) {
@@ -98,48 +97,3 @@ export function hookFetcher(options: Options = {}) {
9897
}
9998
}
10099
}
101-
102-
export interface ComponentProps {
103-
router: Object,
104-
data?: Object
105-
}
106-
export interface Props {
107-
router: Object
108-
}
109-
export interface State {
110-
data?: Object
111-
}
112-
// Helps track hot reloading.
113-
// let nextVersion = 0;
114-
export function fetcher(items) {
115-
// Helps track hot reloading.
116-
// const version = nextVersion++;
117-
return function wrapWithFetcherConnect(WrappedComponent) {
118-
return class FetcherConnect extends React.Component<Props, State> {
119-
// private version: number;
120-
static isFetcher = true;
121-
static items = items;
122-
constructor(props) {
123-
super(props);
124-
// this.version = version;
125-
if (props.router.ctx.get('fetcher') && props.router.ctx.get('fetcher').values !== null) {
126-
this.state = {
127-
data: props.router.ctx.get('fetcher').values
128-
}
129-
}
130-
props.router.ctx.get('fetcher') && (props.router.ctx.get('fetcher').callback = values => {
131-
this.setState({
132-
data: values
133-
})
134-
})
135-
}
136-
render() {
137-
let props: ComponentProps = {
138-
router: this.props.router
139-
};
140-
if (this.state && this.state.data !== null) props.data = this.state.data;
141-
return <WrappedComponent {...props} />
142-
}
143-
}
144-
}
145-
}

0 commit comments

Comments
 (0)