* feat: 🎸 Load spinner when selecting gcloud store. Add key on td * feat: 🎸 Code review. Translate loading study status * feat: 🎸 Code review. Minor code refactoring * fix: add missing study and index declerations * Newer version of react-dates (calendar input component) * Add useMedia hook * Add useDebounce hook * Export hooks for consumption * Pull search filter into own component * StudyListWithData to StudyListRoute * Rename pagination component * Rename Toolbar * CustomeDateRangePicker to plain ol' css * Remove unused styles * Misc * Magic to make our "OR" filters work * Play w/ Mobile styles * Fix pagination pushing out max width for viewport * Tidy up small and medium templates * Remove unecessary nesting * Better mobile header and logo styles * Fix studyList font size * Remove unused code * hookup on click * Fix table search selectors * Cypress uses medium width * Remove irrelevant test * Fix primary sort * Fix sort for our smaller displays * fix study list sometimes longer than specified rowsPerPage * Simplify date picker styles * restore study date filters * Fix about table styling * fix take value for search * Fix header sizing for viewer and list route * Remove dead code * Restore isLoading * Update platform/ui/src/components/studyList/StudyList.styl Co-Authored-By: Rodrigo Antinarelli <rodrigoantinarelli@gmail.com> * Attempt first usage of translations w/ hooks * Pull from react-i18n library * Fit presets on to a single line * add no results message * Show error message in studyList table * Update input selectors for e2e tests * Make sure messages span all columns * fix test selector for table results * Skip hover for result rows * fix imports * Date filtering w/ config * Default export * Pushed to PageComponent * Remove DropZone This previously only worked for null/undefined studies. I'm unable to trigger the state by testing the data. This "might" have happened when using a fresh/empty PACS; but even an empty array of studies would not show
42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
|
|
/**
|
|
* A hook to set a value
|
|
*
|
|
* @param {*} value - A value to "set"
|
|
* @param {number} delay - The debounce delay for setting the value
|
|
* @returns
|
|
*/
|
|
export default function useDebounce(value, delay) {
|
|
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
|
|
useEffect(
|
|
() => {
|
|
// Set debouncedValue to value (passed in) after the specified delay
|
|
const handler = setTimeout(() => {
|
|
setDebouncedValue(value);
|
|
}, delay);
|
|
|
|
// Return a cleanup function that will be called every time useEffect is
|
|
// re-called. useEffect will only be re-called if value changes (see the
|
|
// inputs array below).
|
|
//
|
|
// This is how we prevent debouncedValue from changing if value is changed
|
|
// within the delay period. Timeout gets cleared and restarted.
|
|
//
|
|
// To put it in context, if the user is typing within our app's search
|
|
// box, we don't want the debouncedValue to update until they've stopped
|
|
// typing for more than 500ms.
|
|
return () => {
|
|
clearTimeout(handler);
|
|
};
|
|
},
|
|
// Only re-call effect if value changes
|
|
// You could also add the "delay" var to inputs array if you need to be
|
|
// able to change that dynamically.
|
|
[value]
|
|
);
|
|
|
|
return debouncedValue;
|
|
}
|