Skip to content

Commit 310c06c

Browse files
authored
Merge pull request #56 from viamrobotics/add-pause-queries-hook
Add pause queries hook
2 parents a646b39 + 8f9b6d5 commit 310c06c

8 files changed

+85
-7
lines changed

.changeset/small-cases-greet.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@viamrobotics/svelte-sdk': minor
3+
---
4+
5+
Add enable queries hook

src/lib/hooks/create-resource-query.svelte.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type { Resource } from '@viamrobotics/sdk';
77
import { toStore, fromStore } from 'svelte/store';
88
import { usePolling } from './use-polling.svelte';
99
import { useQueryLogger } from '../query-logger';
10+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1011

1112
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1213
export type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
@@ -36,6 +37,7 @@ export const createResourceQuery = <T extends Resource, K extends keyof T>(
3637
| [options?: (() => QueryOptions) | QueryOptions]
3738
): { current: QueryObserverResult<ResolvedReturnType<T[K]>> } => {
3839
const debug = useQueryLogger();
40+
const enabledQueries = useEnabledQueries();
3941

4042
let [args, options] = additional;
4143

@@ -62,7 +64,10 @@ export const createResourceQuery = <T extends Resource, K extends keyof T>(
6264
methodName,
6365
...(_args ? [_args] : []),
6466
],
65-
enabled: client.current !== undefined && _options?.enabled !== false,
67+
enabled:
68+
client.current !== undefined &&
69+
_options?.enabled !== false &&
70+
enabledQueries.resourceQueries,
6671
retry: false,
6772
queryFn: async () => {
6873
const clientFunc = client.current?.[method];

src/lib/hooks/create-resource-stream.svelte.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
import type { Resource } from '@viamrobotics/sdk';
88
import { toStore, fromStore } from 'svelte/store';
99
import { useQueryLogger } from '../query-logger';
10+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1011

1112
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1213
export type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
@@ -54,6 +55,7 @@ export const createResourceStream = <T extends Resource, K extends keyof T>(
5455
| [options?: (() => QueryOptions) | QueryOptions]
5556
): { current: QueryResult<StreamItemType<T[K]>> } => {
5657
const debug = useQueryLogger();
58+
const enabledQueries = useEnabledQueries();
5759

5860
let [args, options] = additional;
5961

@@ -103,7 +105,10 @@ export const createResourceStream = <T extends Resource, K extends keyof T>(
103105
const queryOptions = $derived(
104106
createQueryOptions({
105107
queryKey,
106-
enabled: client.current !== undefined && _options?.enabled !== false,
108+
enabled:
109+
client.current !== undefined &&
110+
_options?.enabled !== false &&
111+
enabledQueries.resourceQueries,
107112
queryFn: streamedQuery<StreamItemType<T[K]>>({
108113
streamFn: processStream,
109114
refetchMode,

src/lib/hooks/create-robot-query.svelte.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type { RobotClient } from '@viamrobotics/sdk';
88
import { toStore, fromStore } from 'svelte/store';
99
import { usePolling } from './use-polling.svelte';
1010
import { useQueryLogger } from '$lib/query-logger';
11+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1112

1213
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1314
export type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
@@ -37,6 +38,7 @@ export const createRobotQuery = <T extends RobotClient, K extends keyof T>(
3738
| [options?: (() => QueryOptions) | QueryOptions]
3839
): { current: QueryObserverResult<ResolvedReturnType<T[K]>> } => {
3940
const debug = useQueryLogger();
41+
const enabledQueries = useEnabledQueries();
4042
let [args, options] = additional;
4143

4244
if (options === undefined && args !== undefined) {
@@ -60,7 +62,10 @@ export const createRobotQuery = <T extends RobotClient, K extends keyof T>(
6062
methodName,
6163
...(_args ? [_args] : []),
6264
],
63-
enabled: client.current !== undefined && _options?.enabled !== false,
65+
enabled:
66+
client.current !== undefined &&
67+
_options?.enabled !== false &&
68+
enabledQueries.robotQueries,
6469
retry: false,
6570
queryFn: async () => {
6671
const clientFunc = client.current?.[method];

src/lib/hooks/create-stream-client.svelte.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import {
88
} from '@tanstack/svelte-query';
99
import { fromStore, toStore } from 'svelte/store';
1010
import { useQueryLogger } from '../query-logger';
11+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1112

1213
export const createStreamClient = (
1314
partID: () => string,
1415
resourceName: () => string
1516
) => {
1617
const debug = useQueryLogger();
18+
const enabledQueries = useEnabledQueries();
1719
let mediaStream = $state.raw<MediaStream | null>(null);
1820

1921
const client = useRobotClient(partID);
@@ -55,7 +57,7 @@ export const createStreamClient = (
5557
'stream',
5658
'getOptions',
5759
],
58-
enabled: streamClient !== undefined,
60+
enabled: streamClient !== undefined && enabledQueries.streams,
5961
retry: false,
6062
refetchOnWindowFocus: false,
6163
queryFn: async () => {

src/lib/hooks/machine-status.svelte.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type { PartID } from '$lib/part';
1010
import type { RobotClient } from '@viamrobotics/sdk';
1111
import { usePolling } from './use-polling.svelte';
1212
import { useQueryLogger } from '$lib/query-logger';
13+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1314

1415
const key = Symbol('machine-status-context');
1516

@@ -23,11 +24,12 @@ interface Context {
2324
export const provideMachineStatusContext = (refetchInterval: () => number) => {
2425
const clients = useRobotClients();
2526
const debug = useQueryLogger();
27+
const enabledQueries = useEnabledQueries();
2628

2729
const options = $derived(
2830
Object.entries(clients.current).map(([partID, client]) => {
2931
return queryOptions({
30-
enabled: client !== undefined,
32+
enabled: client !== undefined && enabledQueries.machineStatus,
3133
queryKey: [
3234
'viam-svelte-sdk',
3335
'partID',

src/lib/hooks/resource-names.svelte.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { PartID } from '../part';
1111
import { useMachineStatuses } from './machine-status.svelte';
1212
import { useQueryLogger } from '$lib/query-logger';
1313
import { useDebounce } from 'runed';
14+
import { useEnabledQueries } from './use-enabled-queries.svelte';
1415

1516
const key = Symbol('resources-context');
1617

@@ -85,7 +86,7 @@ export const provideResourceNamesContext = () => {
8586
const machineStatuses = useMachineStatuses();
8687
const clients = useRobotClients();
8788
const debug = useQueryLogger();
88-
89+
const enabledQueries = useEnabledQueries();
8990
const partIDs = $derived(Object.keys(clients.current));
9091
const options = $derived.by(() => {
9192
const results = [];
@@ -96,7 +97,9 @@ export const provideResourceNamesContext = () => {
9697
const options = queryOptions({
9798
refetchOnMount: false,
9899
enabled:
99-
client !== undefined && machineStatus?.state === MachineState.Running,
100+
client !== undefined &&
101+
machineStatus?.state === MachineState.Running &&
102+
enabledQueries.resourceNames,
100103
queryKey: [
101104
'viam-svelte-sdk',
102105
'partID',
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
export const useEnabledQueries = () => {
2+
let machineStatus = $state(true);
3+
let resourceNames = $state(true);
4+
let resourceQueries = $state(true);
5+
let robotQueries = $state(true);
6+
let streams = $state(true);
7+
8+
const enableResourceQueries = () => (resourceQueries = true);
9+
const disableResourceQueries = () => (resourceQueries = false);
10+
11+
const enableMachineStatus = () => (machineStatus = true);
12+
const disableMachineStatus = () => (machineStatus = false);
13+
14+
const enableResourceNames = () => (resourceNames = true);
15+
const disableResourceNames = () => (resourceNames = false);
16+
17+
const enableRobotQueries = () => (robotQueries = true);
18+
const disableRobotQueries = () => (robotQueries = false);
19+
20+
const enableStreams = () => (streams = true);
21+
const disableStreams = () => (streams = false);
22+
23+
return {
24+
get resourceQueries() {
25+
return resourceQueries;
26+
},
27+
get machineStatus() {
28+
return machineStatus;
29+
},
30+
get resourceNames() {
31+
return resourceNames;
32+
},
33+
get robotQueries() {
34+
return robotQueries;
35+
},
36+
get streams() {
37+
return streams;
38+
},
39+
40+
enableResourceQueries,
41+
disableResourceQueries,
42+
enableMachineStatus,
43+
disableMachineStatus,
44+
enableResourceNames,
45+
disableResourceNames,
46+
enableRobotQueries,
47+
disableRobotQueries,
48+
enableStreams,
49+
disableStreams,
50+
};
51+
};

0 commit comments

Comments
 (0)