From 22151f4595fa9a4038bb1d9e59036302dab3aec0 Mon Sep 17 00:00:00 2001 From: Michele Alberti <michele.alberti@cea.fr> Date: Thu, 4 Jun 2020 10:58:58 +0200 Subject: [PATCH] [ivette] Reset useRequest response state on falsy values for project, rq, or params. When either the current projet, or rq, or params takes a falsy value, the request is considered off-line. --- ivette/src/frama-c/states.ts | 11 ++++++----- ivette/src/renderer/ASTinfo.tsx | 8 ++++++-- ivette/src/renderer/ASTview.tsx | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts index b846dee4fa4..94ccba06ede 100644 --- a/ivette/src/frama-c/states.ts +++ b/ivette/src/frama-c/states.ts @@ -161,6 +161,9 @@ export function useState(id: string) { * The request is send asynchronously and cached until any change in * `rq`, `params`, current project or server activity. * + * The request is considered off-line as soon as either `rq` or `params` or + * current project takes a falsy value. + * * Default values for various situations can be defined in the options * parameter, which is `undefined` unless specified, or `null` to keep the * current value. @@ -175,12 +178,10 @@ export function useRequest(rq: string, params: any, options: any = {}) { const footprint = project ? JSON.stringify([project, rq, params]) : undefined; async function trigger() { - if (project) { + if (project && rq && params) { try { - if (rq && params) { - const r = await Server.GET({ endpoint: rq, params }); - setResponse(r); - } + const r = await Server.GET({ endpoint: rq, params }); + setResponse(r); } catch (error) { PP.error(`Fail in useRequest '${rq}'. ${error.toString()}`); const err = options.error; diff --git a/ivette/src/renderer/ASTinfo.tsx b/ivette/src/renderer/ASTinfo.tsx index e4754c98f10..4e21ed0a246 100644 --- a/ivette/src/renderer/ASTinfo.tsx +++ b/ivette/src/renderer/ASTinfo.tsx @@ -19,7 +19,11 @@ const ASTinfo = () => { const buffer = React.useMemo(() => new RichTextBuffer(), []); const [select, setSelect] = States.useSelection(); const marker = select && select.marker; - const data = States.useRequest('kernel.ast.info', marker); + const data = States.useRequest( + 'kernel.ast.info', + marker, + { offline: undefined }, + ); React.useEffect(() => { buffer.clear(); @@ -31,7 +35,7 @@ const ASTinfo = () => { // Callbacks function onSelection(name: string) { // For now, the only markers are functions. - setSelect({ function: name, marker: null }); + setSelect({ function: name, marker: undefined }); } // Component diff --git a/ivette/src/renderer/ASTview.tsx b/ivette/src/renderer/ASTview.tsx index 4879b2fd17c..4b85a415ae2 100644 --- a/ivette/src/renderer/ASTview.tsx +++ b/ivette/src/renderer/ASTview.tsx @@ -105,7 +105,7 @@ const ASTview = () => { if (marker && marker.kind === 'function') { const item1 = { label: `Go to definition of ${marker.name}`, - onClick: () => setSelect({ function: marker.name, marker: null }), + onClick: () => setSelect({ function: marker.name, marker: undefined }), }; Dome.popupMenu([item1]); } -- GitLab