Skip to main content

Custom hooks

There are many custom hooks in mimir, this serves only as an overview.

Custom Hooks Documentation​

Below is the documentation for the custom hooks available in the src/client/src/hooks directory of the Mimir repository.

useCompanySelector​

  • Purpose: To get a company based on its domain.

  • Usage:

    import { useCompanySelector } from 'hooks/useCompanySelector';

    const MyComponent = () => {
    const company = useCompanySelector('example.com', 'id_123');
    return <div>{company ? company.name : 'No company found'}</div>;
    };

useDebounce​

  • Purpose: To debounce the update of a state variable.

  • Usage:

    import { useDebounce } from 'hooks/useDebounce';

    const SearchComponent = () => {
    const [query, setQuery] = useState('');
    const debouncedQuery = useDebounce(query, 300);

    useEffect(() => {
    // Perform API call with debouncedQuery
    }, [debouncedQuery]);

    return <input value={query} onChange={(e) => setQuery(e.target.value)} />;
    };

useDebounceState​

  • Purpose: Combines useState and useDebounce.

  • Usage:

    import { useDebounceState } from 'hooks/useDebounceState';

    const SearchComponent = () => {
    const [searchInput, setSearchInput, debouncedSearchInput] = useDebounceState('', 300);

    useEffect(() => {
    // Perform API call with debouncedSearchInput
    }, [debouncedSearchInput]);

    return <input value={searchInput} onChange={(e) => setSearchInput(e.target.value)} />;
    };

useEffectOnce​

  • Purpose: To run an effect only once. This can probably be deleted as useEffect with an empty dependency array will do the same thing.

  • Usage:

    import { useEffectOnce } from 'hooks/useEffectOnce';

    const MyComponent = () => {
    useEffectOnce(() => {
    // Code to run only once
    });

    return <div>Content</div>;
    };

useGetSelectedFlowNodes​

  • Purpose: To get selected nodes in a flow.

  • Usage:

    import { useGetSelectedFlowNodes } from 'hooks/useGetSelectedFlowNodes';

    const FlowComponent = () => {
    const selectedNodes = useGetSelectedFlowNodes();

    return <div>{`Selected Nodes: ${selectedNodes.length}`}</div>;
    };

useIsOverflowing​

  • Purpose: To check if an element is overflowing its boundary.

  • Usage:

    import { useIsOverflowing } from 'hooks/useIsOverflowing';

    const TextComponent = () => {
    const { overflowRef, isOverflowing } = useIsOverflowing();

    return (
    <div ref={overflowRef}>
    {isOverflowing ? 'Text is overflowing' : 'Text fits'}
    </div>
    );
    };

useLocalStorage​

  • Purpose: To read and write data to local storage.

  • Usage:

    import { useLocalStorage } from 'hooks/useLocalStorage';

    const StorageComponent = () => {
    const [storedValue, setValue] = useLocalStorage('myKey', 'initialValue');

    return (
    <button onClick={() => setValue('newValue')}>
    Update Local Storage
    </button>
    );
    };

useOutsideClick​

  • Purpose: To detect clicks outside a given element.

  • Usage:

    import { useOutsideClick } from 'hooks/useOutsideClick';

    const DropdownComponent = () => {
    const ref = useRef(null);
    const [isOpen, setIsOpen] = useState(false);

    useOutsideClick(ref, () => setIsOpen(false));

    return (
    <div ref={ref}>
    <button onClick={() => setIsOpen(!isOpen)}>Toggle Dropdown</button>
    {isOpen && <div>Dropdown Content</div>}
    </div>
    );
    };