Commit d5ed4f85 authored by tom goriunov's avatar tom goriunov Committed by GitHub

UML diagram caching (#2157)

Fixes #2124
parent 05ca4fb4
import type { UseQueryOptions } from '@tanstack/react-query'; import type { QueryKey, UseQueryOptions } from '@tanstack/react-query';
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import type { ResourceError, ResourceName, ResourcePayload } from './resources'; import type { ResourceError, ResourceName, ResourcePayload } from './resources';
...@@ -7,6 +7,7 @@ import useApiFetch from './useApiFetch'; ...@@ -7,6 +7,7 @@ import useApiFetch from './useApiFetch';
export interface Params<R extends ResourceName, E = unknown, D = ResourcePayload<R>> extends ApiFetchParams<R> { export interface Params<R extends ResourceName, E = unknown, D = ResourcePayload<R>> extends ApiFetchParams<R> {
queryOptions?: Omit<UseQueryOptions<ResourcePayload<R>, ResourceError<E>, D>, 'queryKey' | 'queryFn'>; queryOptions?: Omit<UseQueryOptions<ResourcePayload<R>, ResourceError<E>, D>, 'queryKey' | 'queryFn'>;
queryKey?: QueryKey;
} }
export function getResourceKey<R extends ResourceName>(resource: R, { pathParams, queryParams }: Params<R> = {}) { export function getResourceKey<R extends ResourceName>(resource: R, { pathParams, queryParams }: Params<R> = {}) {
...@@ -19,13 +20,13 @@ export function getResourceKey<R extends ResourceName>(resource: R, { pathParams ...@@ -19,13 +20,13 @@ export function getResourceKey<R extends ResourceName>(resource: R, { pathParams
export default function useApiQuery<R extends ResourceName, E = unknown, D = ResourcePayload<R>>( export default function useApiQuery<R extends ResourceName, E = unknown, D = ResourcePayload<R>>(
resource: R, resource: R,
{ queryOptions, pathParams, queryParams, fetchParams }: Params<R, E, D> = {}, { queryOptions, pathParams, queryParams, queryKey, fetchParams }: Params<R, E, D> = {},
) { ) {
const apiFetch = useApiFetch(); const apiFetch = useApiFetch();
return useQuery<ResourcePayload<R>, ResourceError<E>, D>({ return useQuery<ResourcePayload<R>, ResourceError<E>, D>({
// eslint-disable-next-line @tanstack/query/exhaustive-deps // eslint-disable-next-line @tanstack/query/exhaustive-deps
queryKey: getResourceKey(resource, { pathParams, queryParams }), queryKey: queryKey || getResourceKey(resource, { pathParams, queryParams }),
queryFn: async() => { queryFn: async() => {
// all errors and error typing is handled by react-query // all errors and error typing is handled by react-query
// so error response will never go to the data // so error response will never go to the data
......
...@@ -45,6 +45,7 @@ const Sol2UmlDiagram = ({ addressHash }: Props) => { ...@@ -45,6 +45,7 @@ const Sol2UmlDiagram = ({ addressHash }: Props) => {
sources: composeSources(contractQuery.data), sources: composeSources(contractQuery.data),
}, },
}, },
queryKey: [ 'visualize_sol2uml', addressHash ],
queryOptions: { queryOptions: {
enabled: Boolean(contractQuery.data), enabled: Boolean(contractQuery.data),
refetchOnMount: false, refetchOnMount: false,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment