@@ -46,31 +46,30 @@ export function hookFetcher(options: Options = {}) {
46
46
values : null
47
47
} ) ;
48
48
} ,
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');
54
53
return ;
55
54
}
56
55
// set init values
57
- result . items . forEach ( ( { data } ) => {
56
+ route . fetcher . forEach ( ( { data } ) => {
58
57
if ( data && data . key && data . value ) {
59
58
if ( ctx . get ( 'fetcher' ) . values === null ) ctx . get ( 'fetcher' ) . values = { } ;
60
59
ctx . get ( 'fetcher' ) . values [ data . key ] = data . value ;
61
60
}
62
61
} ) ;
63
62
// 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 ) ;
65
64
if ( server ) {
66
- ctx . get ( 'fetcher' ) . items = result . items . filter ( item => ! item . deferred ) ;
65
+ ctx . get ( 'fetcher' ) . items = route . fetcher . filter ( item => ! item . deferred ) ;
67
66
} 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 ) ;
69
68
}
70
69
if ( counter === 1 && noFirstFetch ) return ;
71
70
// execute promises and return result
72
71
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 } ) ;
74
73
if ( ctx . get ( 'fetcher' ) . values !== null ) Object . assign ( ctx . get ( 'fetcher' ) . values , values ) ;
75
74
} catch ( error ) {
76
75
if ( error instanceof RouterError ) {
@@ -98,48 +97,3 @@ export function hookFetcher(options: Options = {}) {
98
97
}
99
98
}
100
99
}
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