@@ -99,12 +99,65 @@ function handleRestoreTriggerError(query: Query) {
99
99
error ,
100
100
fetchMeta: {
101
101
... query .state .fetchMeta ,
102
- ... __previousQueryOptions ,
103
- },
102
+ __previousQueryOptions ,
103
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
+ } as any ,
104
105
})
105
106
}
106
107
else {
107
108
query .reset ()
109
+ // reset() does NOT seem to refetch, even when the query IS active (has observers)
110
+ // maybe a bug?
111
+ // do it manually
112
+ query .fetch ()
113
+ }
114
+ }
115
+
116
+ function restoreQueryAfterLoadingOrError(query : Query ) {
117
+ const previousState = query .state
118
+ const previousOptions = query .state .fetchMeta
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ ? (query .state .fetchMeta as any ).__previousQueryOptions
121
+ : null
122
+
123
+ query .cancel ({ silent: true })
124
+ query .setState ({
125
+ ... previousState ,
126
+ fetchStatus: ' idle' ,
127
+ fetchMeta: null ,
128
+ })
129
+
130
+ if (previousOptions ) {
131
+ query .fetch (previousOptions )
132
+ }
133
+ }
134
+
135
+ function handleRestoreTriggerLoading(query : Query ) {
136
+ if (query .state .data === undefined ) {
137
+ restoreQueryAfterLoadingOrError (query )
138
+ }
139
+ else {
140
+ if (! query ) return
141
+ const __previousQueryOptions = query .options
142
+ // Trigger a fetch in order to trigger suspense as well.
143
+ query .fetch ({
144
+ ... __previousQueryOptions ,
145
+ queryFn : () => {
146
+ return new Promise (() => {
147
+ // Never resolve
148
+ })
149
+ },
150
+ gcTime: - 1 ,
151
+ })
152
+ query .setState ({
153
+ data: undefined ,
154
+ status: ' pending' ,
155
+ fetchMeta: {
156
+ ... query .state .fetchMeta ,
157
+ __previousQueryOptions ,
158
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
159
+ } as any ,
160
+ })
108
161
}
109
162
}
110
163
</script >
@@ -169,6 +222,13 @@ function handleRestoreTriggerError(query: Query) {
169
222
:disabled =" selectedQuery.state.status === 'pending'"
170
223
@click =" toRaw(selectedQuery)?.reset()"
171
224
/>
225
+ <NButton
226
+ v-tooltip =" selectedQuery.state.status === 'pending' ? 'Restore Loading' : 'Trigger Loading'"
227
+ :title =" selectedQuery.state.status === 'pending' ? 'Restore Loading' : 'Trigger Loading'"
228
+ class =" text-primary self-start"
229
+ icon =" i-carbon-hourglass"
230
+ @click =" handleRestoreTriggerLoading(toRaw(selectedQuery) as Query)"
231
+ />
172
232
<NButton
173
233
v-tooltip =" selectedQuery.state.status === 'error' ? 'Restore Error' : 'Trigger Error'"
174
234
:title =" selectedQuery.state.status === 'error' ? 'Restore Error' : 'Trigger Error'"
0 commit comments