@@ -22,7 +22,7 @@ const filteredQueries = computed(() => {
2222function onQueryNotification(event : QueryCacheNotifyEvent ) {
2323 switch (event .type ) {
2424 case ' observerResultsUpdated' :
25- // TODO: when data becomes stale/invalidate etc, the query is updated
25+ // When data becomes stale/invalidate etc, the query is updated
2626 // fall through
2727 case ' updated' : {
2828 const query = queries .value .find (q => q .queryHash === event .query .queryHash )
@@ -70,6 +70,42 @@ watchEffect(() => {
7070function selectQuery(query : Query ) {
7171 selectedQuery .value = toRaw (query )
7272}
73+
74+ function getQueryOptions(query : Query ) {
75+ // return all query.options except for the functions
76+
77+ return Object .entries (query .options ).reduce ((acc , [key , value ]) => {
78+ if (typeof value === ' function' ) {
79+ return acc
80+ }
81+ // exclude queryKey and QueryHash
82+ if (key === ' queryKey' || key === ' queryHash' ) {
83+ return acc
84+ }
85+ acc [key ] = value
86+ return acc
87+ }, {} as Record <string , unknown >)
88+ }
89+
90+ function handleRestoreTriggerError(query : Query ) {
91+ if (! query .state .error ) {
92+ const error = new Error (' Unknown error from devtools' )
93+
94+ const __previousQueryOptions = query .options
95+
96+ query .setState ({
97+ status: ' error' ,
98+ error ,
99+ fetchMeta: {
100+ ... query .state .fetchMeta ,
101+ ... __previousQueryOptions ,
102+ },
103+ })
104+ }
105+ else {
106+ query .reset ()
107+ }
108+ }
73109 </script >
74110
75111<template >
@@ -131,6 +167,14 @@ function selectQuery(query: Query) {
131167 :disabled =" selectedQuery.state.status === 'pending'"
132168 @click =" toRaw(selectedQuery)?.reset()"
133169 />
170+ <NButton
171+ v-tooltip =" selectedQuery.state.status === 'error' ? 'Restore Error' : 'Trigger Error'"
172+ :title =" selectedQuery.state.status === 'error' ? 'Restore Error' : 'Trigger Error'"
173+ class =" text-primary self-start"
174+ icon =" i-carbon-warning"
175+ :disabled =" selectedQuery.state.status === 'pending'"
176+ @click =" handleRestoreTriggerError(toRaw(selectedQuery) as Query)"
177+ />
134178 </template >
135179 <div class =" grid grid-cols-[auto_1fr] gap-1 px-2 py-2 b-1 b-solid b-gray-200" >
136180 <div >
@@ -174,9 +218,9 @@ function selectQuery(query: Query) {
174218 >
175219 <VueJsonPretty
176220 :data =" selectedQuery.state.data"
177- deep =" 2"
178- virtual =" true"
179- height =" 150"
221+ : deep =" 2"
222+ : virtual =" true"
223+ : height =" 150"
180224 />
181225 </NSectionBlock >
182226 <NSectionBlock
@@ -217,12 +261,19 @@ function selectQuery(query: Query) {
217261 <div >
218262 {{ selectedQuery.gcTime }}
219263 </div >
264+ <div ><strong >Options:</strong ></div >
265+ <VueJsonPretty
266+ :data =" getQueryOptions(selectedQuery as Query)"
267+ :deep =" 2"
268+ :virtual =" true"
269+ :height =" 150"
270+ />
220271 <div ><strong >Meta:</strong ></div >
221272 <VueJsonPretty
222273 :data =" toRaw(selectedQuery)?.meta"
223- deep =" 2"
224- virtual =" true"
225- height =" 150"
274+ : deep =" 2"
275+ : virtual =" true"
276+ : height =" 150"
226277 />
227278 </div >
228279 </NSectionBlock >
0 commit comments