Migrate to a monorepo structure (#2909)
This commit is contained in:
14
packages/twenty-front/src/hooks/useCombinedRefs.ts
Normal file
14
packages/twenty-front/src/hooks/useCombinedRefs.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import React, { Ref, RefCallback } from 'react';
|
||||
import { isFunction } from '@sniptt/guards';
|
||||
|
||||
export const useCombinedRefs =
|
||||
<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T> =>
|
||||
(node: T) => {
|
||||
for (const ref of refs) {
|
||||
if (isFunction(ref)) {
|
||||
ref(node);
|
||||
} else if (ref !== null && ref !== undefined) {
|
||||
(ref as React.MutableRefObject<T | null>).current = node;
|
||||
}
|
||||
}
|
||||
};
|
||||
14
packages/twenty-front/src/hooks/useFirstMountState.ts
Normal file
14
packages/twenty-front/src/hooks/useFirstMountState.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { useRef } from 'react';
|
||||
|
||||
export const useFirstMountState = (): boolean => {
|
||||
// eslint-disable-next-line twenty/no-state-useref
|
||||
const isFirst = useRef(true);
|
||||
|
||||
if (isFirst.current) {
|
||||
isFirst.current = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return isFirst.current;
|
||||
};
|
||||
19
packages/twenty-front/src/hooks/useIsMatchingLocation.ts
Normal file
19
packages/twenty-front/src/hooks/useIsMatchingLocation.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { useCallback } from 'react';
|
||||
import { matchPath, useLocation } from 'react-router-dom';
|
||||
|
||||
import { AppBasePath } from '@/types/AppBasePath';
|
||||
|
||||
export const useIsMatchingLocation = () => {
|
||||
const location = useLocation();
|
||||
|
||||
return useCallback(
|
||||
(path: string, basePath?: AppBasePath) => {
|
||||
const constructedPath = basePath
|
||||
? new URL(basePath + path, document.location.origin).pathname ?? ''
|
||||
: path;
|
||||
|
||||
return !!matchPath(constructedPath, location.pathname);
|
||||
},
|
||||
[location.pathname],
|
||||
);
|
||||
};
|
||||
17
packages/twenty-front/src/hooks/useUpdateEffect.ts
Normal file
17
packages/twenty-front/src/hooks/useUpdateEffect.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { DependencyList, EffectCallback, useEffect } from 'react';
|
||||
|
||||
import { useFirstMountState } from './useFirstMountState';
|
||||
|
||||
export const 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