From 240e6d66a3830cd9c43adff6ef06a14e8f14c7ae Mon Sep 17 00:00:00 2001 From: Matthew Tancik Date: Tue, 13 Sep 2022 13:20:17 -0700 Subject: [PATCH] Fix viewer textfield crash (#422) --- .../SidePanel/CameraPanel/CameraPanel.jsx | 96 ++++++++++++++----- 1 file changed, 72 insertions(+), 24 deletions(-) diff --git a/nerfactory/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx b/nerfactory/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx index 13e3f14eb..c47cf2fd4 100644 --- a/nerfactory/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx +++ b/nerfactory/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx @@ -97,9 +97,6 @@ export default function CameraPanel(props) { const [seconds, setSeconds] = React.useState(4); const [fps, setFps] = React.useState(24); - // const [render_height, setRenderHeight] = React.useState(1080); - // const [render_width, setRenderWidth] = React.useState(1920); - const dispatch = useDispatch(); const render_height = useSelector( (state) => state.renderingState.render_height, @@ -127,6 +124,13 @@ export default function CameraPanel(props) { }); }; + // ui state + const [ui_render_height, setUIRenderHeight] = React.useState(render_height); + const [ui_render_width, setUIRenderWidth] = React.useState(render_width); + const [ui_field_of_view, setUIFieldOfView] = React.useState(field_of_view); + const [ui_seconds, setUISeconds] = React.useState(seconds); + const [ui_fps, setUIfps] = React.useState(fps); + const total_num_steps = seconds * fps; const step_size = (cameras.length - 1) / total_num_steps; const slider_min = 0; @@ -428,12 +432,21 @@ export default function CameraPanel(props) { size="small" onChange={(e) => { if (e.target.validity.valid) { - setRenderHeight(parseInt(e.target.value, 10)); + setUIRenderHeight(e.target.value); } }} - value={render_height} - error={render_height <= 0} - helperText={render_height <= 0 ? 'Required' : ''} + onBlur={(e) => { + if (e.target.validity.valid) { + if (e.target.value !== '') { + setRenderHeight(parseInt(e.target.value, 10)); + } else { + setUIRenderHeight(render_height); + } + } + }} + value={ui_render_height} + error={ui_render_height <= 0} + helperText={ui_render_height <= 0 ? 'Required' : ''} variant="standard" /> { if (e.target.validity.valid) { - setRenderWidth(parseInt(e.target.value, 10)); + setUIRenderWidth(e.target.value); } }} - value={render_width} - error={render_width <= 0} - helperText={render_width <= 0 ? 'Required' : ''} + onBlur={(e) => { + if (e.target.validity.valid) { + if (e.target.value !== '') { + setRenderWidth(parseInt(e.target.value, 10)); + } else { + setUIRenderWidth(render_width); + } + } + }} + value={ui_render_width} + error={ui_render_width <= 0} + helperText={ui_render_width <= 0 ? 'Required' : ''} variant="standard" /> { if (e.target.validity.valid) { - setFOV(parseInt(e.target.value, 10)); + setUIFieldOfView(e.target.value); } }} - value={field_of_view} - error={field_of_view <= 0} - helperText={field_of_view <= 0 ? 'Required' : ''} + onBlur={(e) => { + if (e.target.validity.valid) { + if (e.target.value !== '') { + setFOV(parseInt(e.target.value, 10)); + } else { + setUIFieldOfView(field_of_view); + } + } + }} + value={ui_field_of_view} + error={ui_field_of_view <= 0} + helperText={ui_field_of_view <= 0 ? 'Required' : ''} variant="standard" /> @@ -481,12 +511,21 @@ export default function CameraPanel(props) { size="small" onChange={(e) => { if (e.target.validity.valid) { - setSeconds(parseInt(e.target.value, 10)); + setUISeconds(e.target.value); } }} - value={seconds} - error={seconds <= 0} - helperText={seconds <= 0 ? 'Required' : ''} + onBlur={(e) => { + if (e.target.validity.valid) { + if (e.target.value !== '') { + setSeconds(e.target.value); + } else { + setUISeconds(seconds); + } + } + }} + value={ui_seconds} + error={ui_seconds <= 0} + helperText={ui_seconds <= 0 ? 'Required' : ''} variant="standard" /> { if (e.target.validity.valid) { - setFps(parseInt(e.target.value, 10)); + setUIfps(e.target.value); } }} - value={fps} - error={fps <= 0} - helperText={fps <= 0 ? 'Required' : ''} + onBlur={(e) => { + if (e.target.validity.valid) { + if (e.target.value !== '') { + setFps(e.target.value); + } else { + setUIfps(fps); + } + } + }} + value={ui_fps} + error={ui_fps <= 0} + helperText={ui_fps <= 0 ? 'Required' : ''} variant="standard" />