77import type { Resource } from '@viamrobotics/sdk' ;
88import { toStore , fromStore } from 'svelte/store' ;
99import { useQueryLogger } from '../query-logger' ;
10+ import { useEnabledQueries } from './use-enabled-queries.svelte' ;
1011
1112// eslint-disable-next-line @typescript-eslint/no-explicit-any
1213export type ArgumentsType < T > = T extends ( ...args : infer U ) => any ? U : never ;
@@ -22,12 +23,27 @@ export type StreamItemType<T> = T extends (
2223interface QueryOptions {
2324 // enabled defaults to true if unspecified
2425 enabled ?: boolean ;
26+ // refetchMode defaults to 'reset' if unspecified
2527 refetchMode ?: 'append' | 'reset' | 'replace' ;
26- maxChunks ?: number ;
2728}
2829
2930type QueryResult < U > = QueryObserverResult < U [ ] , Error > ;
3031
32+ export const streamQueryKey = (
33+ partID : string ,
34+ name : string | undefined ,
35+ methodName : string ,
36+ args ?: QueryOptions | unknown
37+ ) => [
38+ 'viam-svelte-sdk' ,
39+ 'partID' ,
40+ partID ,
41+ 'resource' ,
42+ name ,
43+ methodName ,
44+ ...( args ? [ args ] : [ ] ) ,
45+ ] ;
46+
3147export const createResourceStream = < T extends Resource , K extends keyof T > (
3248 client : { current : T | undefined } ,
3349 method : K ,
@@ -39,6 +55,7 @@ export const createResourceStream = <T extends Resource, K extends keyof T>(
3955 | [ options ?: ( ( ) => QueryOptions ) | QueryOptions ]
4056) : { current : QueryResult < StreamItemType < T [ K ] > > } => {
4157 const debug = useQueryLogger ( ) ;
58+ const enabledQueries = useEnabledQueries ( ) ;
4259
4360 let [ args , options ] = additional ;
4461
@@ -54,15 +71,9 @@ export const createResourceStream = <T extends Resource, K extends keyof T>(
5471 const _args = $derived ( typeof args === 'function' ? args ( ) : args ) ;
5572 const name = $derived ( client . current ?. name ) ;
5673 const methodName = $derived ( String ( method ) ) ;
57- const queryKey = $derived ( [
58- 'viam-svelte-sdk' ,
59- 'partID' ,
60- ( client . current as T & { partID : string } ) ?. partID ,
61- 'resource' ,
62- name ,
63- methodName ,
64- ...( _args ? [ _args ] : [ ] ) ,
65- ] ) ;
74+ const refetchMode = $derived ( _options ?. refetchMode ?? 'reset' ) ;
75+ const partID = $derived ( ( client . current as T & { partID : string } ) ?. partID ) ;
76+ const queryKey = $derived ( streamQueryKey ( partID , name , methodName , _args ) ) ;
6677
6778 function processStream ( ) {
6879 const clientFunc = client . current ?. [ method ] ;
@@ -94,10 +105,13 @@ export const createResourceStream = <T extends Resource, K extends keyof T>(
94105 const queryOptions = $derived (
95106 createQueryOptions ( {
96107 queryKey,
97- enabled : client . current !== undefined && _options ?. enabled !== false ,
108+ enabled :
109+ client . current !== undefined &&
110+ _options ?. enabled !== false &&
111+ enabledQueries . resourceQueries ,
98112 queryFn : streamedQuery < StreamItemType < T [ K ] > > ( {
99113 streamFn : processStream ,
100- ... _options ,
114+ refetchMode ,
101115 } ) ,
102116 } )
103117 ) ;
0 commit comments