arch: move web folder into api & move api to top level

This commit is contained in:
Jordan Knott
2020-07-04 18:08:37 -05:00
parent eaffaa70df
commit e5d5e6da01
354 changed files with 20 additions and 1557 deletions

View File

@ -0,0 +1,13 @@
import { useRef } from 'react';
import { isEqual } from 'lodash';
const useDeepCompareMemoize = (value: any) => {
const valueRef = useRef();
if (!isEqual(value, valueRef.current)) {
valueRef.current = value;
}
return valueRef.current;
};
export default useDeepCompareMemoize;

View File

@ -0,0 +1,19 @@
import { useEffect } from 'react';
import KeyCodes from 'shared/constants/keyCodes';
const useOnEscapeKeyDown = (isListening: boolean, onEscapeKeyDown: () => void) => {
useEffect(() => {
const handleKeyDown = (event: any) => {
if (event.keyCode === KeyCodes.ESCAPE) {
onEscapeKeyDown();
}
};
if (isListening) {
document.addEventListener('keydown', handleKeyDown);
}
return () => {
document.removeEventListener('keydown', handleKeyDown);
};
}, [isListening, onEscapeKeyDown]);
};
export default useOnEscapeKeyDown;

View File

@ -0,0 +1,42 @@
import { useEffect, useRef } from 'react';
const useOnOutsideClick = (
$ignoredElementRefs: any,
isListening: boolean,
onOutsideClick: () => void,
$listeningElementRef: any,
) => {
const $mouseDownTargetRef = useRef();
const $ignoredElementRefsMemoized = [$ignoredElementRefs].flat();
useEffect(() => {
const handleMouseDown = (event: any) => {
$mouseDownTargetRef.current = event.target;
};
const handleMouseUp = (event: any) => {
if (typeof $ignoredElementRefsMemoized !== 'undefined') {
const isAnyIgnoredElementAncestorOfTarget = $ignoredElementRefsMemoized.some(
($elementRef: any) =>
$elementRef.current.contains($mouseDownTargetRef.current) || $elementRef.current.contains(event.target),
);
if (event.button === 0 && !isAnyIgnoredElementAncestorOfTarget) {
onOutsideClick();
}
}
};
const $listeningElement = ($listeningElementRef || {}).current || document;
if (isListening) {
$listeningElement.addEventListener('mousedown', handleMouseDown);
$listeningElement.addEventListener('mouseup', handleMouseUp);
}
return () => {
$listeningElement.removeEventListener('mousedown', handleMouseDown);
$listeningElement.removeEventListener('mouseup', handleMouseUp);
};
}, [$ignoredElementRefsMemoized, $listeningElementRef, isListening, onOutsideClick]);
};
export default useOnOutsideClick;