Uniformize folder structure (#693)
* Uniformize folder structure * Fix icons * Fix icons * Fix tests * Fix tests
This commit is contained in:
13
front/src/hooks/useFirstMountState.ts
Normal file
13
front/src/hooks/useFirstMountState.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { useRef } from 'react';
|
||||
|
||||
export function useFirstMountState(): boolean {
|
||||
const isFirst = useRef(true);
|
||||
|
||||
if (isFirst.current) {
|
||||
isFirst.current = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return isFirst.current;
|
||||
}
|
||||
16
front/src/hooks/useIsMatchingLocation.ts
Normal file
16
front/src/hooks/useIsMatchingLocation.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { matchPath, useLocation } from 'react-router-dom';
|
||||
import { parse } from 'url';
|
||||
|
||||
import { AppBasePath } from '@/types/AppBasePath';
|
||||
|
||||
export function useIsMatchingLocation() {
|
||||
const location = useLocation();
|
||||
|
||||
return function isMatchingLocation(basePath: AppBasePath, path: string) {
|
||||
const constructedPath = basePath
|
||||
? parse(`${basePath}/${path}`).pathname ?? ''
|
||||
: path;
|
||||
|
||||
return !!matchPath(constructedPath, location.pathname);
|
||||
};
|
||||
}
|
||||
11
front/src/hooks/usePrevious.ts
Normal file
11
front/src/hooks/usePrevious.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { useEffect, useRef } from 'react';
|
||||
|
||||
export default function usePrevious<T>(state: T): T | undefined {
|
||||
const ref = useRef<T>();
|
||||
|
||||
useEffect(() => {
|
||||
ref.current = state;
|
||||
});
|
||||
|
||||
return ref.current;
|
||||
}
|
||||
14
front/src/hooks/useUpdateEffect.ts
Normal file
14
front/src/hooks/useUpdateEffect.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { DependencyList, EffectCallback, useEffect } from 'react';
|
||||
|
||||
import { useFirstMountState } from './useFirstMountState';
|
||||
|
||||
export function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {
|
||||
const isFirst = useFirstMountState();
|
||||
|
||||
useEffect(() => {
|
||||
if (!isFirst) {
|
||||
return effect();
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, deps);
|
||||
}
|
||||
Reference in New Issue
Block a user