From b371a0a1d53b7e0a28f406335d659a486dde3dd3 Mon Sep 17 00:00:00 2001 From: Marcus Oskarsson Date: Fri, 1 Sep 2023 14:51:47 +0200 Subject: [PATCH] Better way of recalling parameters and making sure the local storage is cleared between samples --- ui/src/actions/queue.js | 2 ++ ui/src/components/SampleView/ContextMenu.js | 6 ++++- ui/src/components/SampleView/shapes.js | 2 +- ui/src/components/Tasks/Characterisation.js | 4 +--- ui/src/components/Tasks/DataCollection.js | 4 +--- ui/src/components/Tasks/Helical.js | 4 +--- ui/src/components/Tasks/Mesh.js | 4 +--- ui/src/components/Tasks/fields.js | 26 +++++++++++++++------ 8 files changed, 31 insertions(+), 21 deletions(-) diff --git a/ui/src/actions/queue.js b/ui/src/actions/queue.js index 5c997c8c3..a356eca7b 100644 --- a/ui/src/actions/queue.js +++ b/ui/src/actions/queue.js @@ -4,6 +4,7 @@ import { loadSample } from './sampleChanger'; import { sendAbortCentring, sendUpdateShapes } from './sampleview'; import { selectSamplesAction, clearSampleGrid } from './sampleGrid'; import { TASK_UNCOLLECTED } from '../constants'; +import { clearAllLastUserParameters } from '../components/Tasks/fields'; export function queueLoading(loading) { return { type: 'QUEUE_LOADING', loading }; @@ -22,6 +23,7 @@ export function setQueueAction(queue) { } export function setCurrentSample(sampleID) { + clearAllLastUserParameters(); return { type: 'SET_CURRENT_SAMPLE', sampleID, diff --git a/ui/src/components/SampleView/ContextMenu.js b/ui/src/components/SampleView/ContextMenu.js index 591e98337..0cddff168 100644 --- a/ui/src/components/SampleView/ContextMenu.js +++ b/ui/src/components/SampleView/ContextMenu.js @@ -1,5 +1,6 @@ import React from 'react'; import { Dropdown } from 'react-bootstrap'; +import { getLastUsedParameters } from '../Tasks/fields'; export default class ContextMenu extends React.Component { constructor(props) { @@ -324,8 +325,11 @@ export default class ContextMenu extends React.Component { modalName === 'Generic' ? defaultParameters[type].name : modalName.toLowerCase(); - const params = + let params = type in defaultParameters ? defaultParameters[type].acq_parameters : {}; + + params = getLastUsedParameters(type, params); + this.props.showForm( modalName, [sampleID], diff --git a/ui/src/components/SampleView/shapes.js b/ui/src/components/SampleView/shapes.js index f803dd43a..3332993ea 100644 --- a/ui/src/components/SampleView/shapes.js +++ b/ui/src/components/SampleView/shapes.js @@ -262,7 +262,7 @@ export function makeDistanceLine(p1, p2, iR, ppMm, color, width) { const length = Number.parseInt(Math.sqrt(a * a + b * b) * 1000, 10); return [ makeLine(p1.x * iR, p1.y * iR, p2.x * iR, p2.y * iR, color, width, false), - makeText(p2.x * iR, p2.y * iR, 12, color, `${length} µm`), + makeText(p2.x * iR, p2.y * iR, 14, color, `${length} µm`), ]; } diff --git a/ui/src/components/Tasks/Characterisation.js b/ui/src/components/Tasks/Characterisation.js index 9b6217550..7f17b3bb7 100644 --- a/ui/src/components/Tasks/Characterisation.js +++ b/ui/src/components/Tasks/Characterisation.js @@ -15,7 +15,6 @@ import { FieldsRow, CollapsableRows, toFixed, - getLastUsedParameters, saveToLastUsedParameters, resetLastUsedParameters, } from './fields'; @@ -491,7 +490,6 @@ Characterisation = connect((state) => { const { type } = state.taskForm.taskData; const { limits } = state.taskForm.defaultParameters[type.toLowerCase()]; - const parameters = getLastUsedParameters(type, state); return { path: `${state.login.rootPath}/${subdir}`, @@ -506,7 +504,7 @@ Characterisation = connect((state) => { use_min_dose: selector(state, 'use_min_dose'), use_min_time: selector(state, 'use_min_time'), initialValues: { - ...parameters, + ...state.taskForm.taskData.parameters, beam_size: state.sampleview.currentAperture, resolution: state.taskForm.sampleIds.constructor !== Array diff --git a/ui/src/components/Tasks/DataCollection.js b/ui/src/components/Tasks/DataCollection.js index efbf685f1..9ea5c0ea5 100644 --- a/ui/src/components/Tasks/DataCollection.js +++ b/ui/src/components/Tasks/DataCollection.js @@ -14,7 +14,6 @@ import { FieldsRow, CollapsableRows, toFixed, - getLastUsedParameters, saveToLastUsedParameters, resetLastUsedParameters, } from './fields'; @@ -366,7 +365,6 @@ DataCollection = connect((state) => { const { type } = state.taskForm.taskData; const { limits } = state.taskForm.defaultParameters[type.toLowerCase()]; - const parameters = getLastUsedParameters(type, state); return { path: `${state.login.rootPath}/${subdir}`, @@ -374,7 +372,7 @@ DataCollection = connect((state) => { acqParametersLimits: limits, beamline: state.beamline, initialValues: { - ...parameters, + ...state.taskForm.taskData.parameters, beam_size: state.sampleview.currentAperture, resolution: state.taskForm.sampleIds.constructor !== Array diff --git a/ui/src/components/Tasks/Helical.js b/ui/src/components/Tasks/Helical.js index 110886913..f6ac0ded3 100644 --- a/ui/src/components/Tasks/Helical.js +++ b/ui/src/components/Tasks/Helical.js @@ -15,7 +15,6 @@ import { FieldsRow, CollapsableRows, toFixed, - getLastUsedParameters, saveToLastUsedParameters, resetLastUsedParameters, } from './fields'; @@ -240,7 +239,6 @@ Helical = connect((state) => { const { type } = state.taskForm.taskData; const { limits } = state.taskForm.defaultParameters[type.toLowerCase()]; - const parameters = getLastUsedParameters(type, state); return { path: `${state.login.rootPath}/${subdir}`, @@ -248,7 +246,7 @@ Helical = connect((state) => { acqParametersLimits: limits, beamline: state.beamline, initialValues: { - ...parameters, + ...state.taskForm.taskData.parameters, beam_size: state.sampleview.currentAperture, resolution: state.taskForm.sampleIds.constructor !== Array diff --git a/ui/src/components/Tasks/Mesh.js b/ui/src/components/Tasks/Mesh.js index 98e92b7fc..54bbebe37 100644 --- a/ui/src/components/Tasks/Mesh.js +++ b/ui/src/components/Tasks/Mesh.js @@ -15,7 +15,6 @@ import { FieldsRow, CollapsableRows, DisplayField, - getLastUsedParameters, saveToLastUsedParameters, resetLastUsedParameters, } from './fields'; @@ -261,7 +260,6 @@ Mesh = connect((state) => { const { type } = state.taskForm.taskData; const { limits } = state.taskForm.defaultParameters[type.toLowerCase()]; - const parameters = getLastUsedParameters(type, state); return { path: `${state.login.rootPath}/${subdir}`, @@ -269,7 +267,7 @@ Mesh = connect((state) => { acqParametersLimits: limits, beamline: state.beamline, initialValues: { - ...parameters, + ...state.taskForm.taskData.parameters, beam_size: state.sampleview.currentAperture, resolution: state.taskForm.taskData.sampleID ? state.taskForm.taskData.parameters.resolution diff --git a/ui/src/components/Tasks/fields.js b/ui/src/components/Tasks/fields.js index 6b0e2160f..df47102c9 100644 --- a/ui/src/components/Tasks/fields.js +++ b/ui/src/components/Tasks/fields.js @@ -5,9 +5,8 @@ import { TiWarning, TiTimes } from 'react-icons/ti'; import './style.css'; -export function getLastUsedParameters(formName, state) { - const lastParameters = localStorage.getItem(`last${formName}Parameters`); - let parameters = state.taskForm.taskData.parameters; +export function getLastUsedParameters(type, parameters) { + const lastParameters = localStorage.getItem(`last${type}Parameters`); if (lastParameters !== null) { parameters = JSON.parse(lastParameters); @@ -16,7 +15,7 @@ export function getLastUsedParameters(formName, state) { if (parseFloat(parameters.osc_range) === 0) { parameters.osc_range = state.taskForm.defaultParameters[ - formName.toLowerCase() + type.toLowerCase() ].acq_parameters.osc_range; } @@ -27,6 +26,19 @@ export function saveToLastUsedParameters(formName, parameters) { localStorage.setItem(`last${formName}Parameters`, JSON.stringify(parameters)); } +export function clearAllLastUserParameters() { + const collectionNames = [ + 'datacollection', + 'characterisation', + 'mesh', + 'helical', + ]; + + collectionNames.forEach((type) => { + localStorage.removeItem(`last${type}Parameters`); + }); +} + export function resetLastUsedParameters(formObj) { const { type } = formObj.props.taskData; localStorage.removeItem(`last${type}Parameters`); @@ -36,16 +48,16 @@ export function resetLastUsedParameters(formObj) { formObj.props.defaultParameters[type.toLowerCase()].acq_parameters, ); - const ignore = [ + const ignore = new Set([ 'osc_start', 'resolution', 'energy', 'transmission', 'beam_size', - ]; + ]); fieldNames.forEach((field) => { - if (!ignore.includes(field)) { + if (!ignore.has(field)) { formObj.props.autofill( field, formObj.props.defaultParameters[type.toLowerCase()].acq_parameters[