/** * Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved. */ import {useState, useEffect, useRef, Dispatch, SetStateAction, RefObject} from 'react'; import {DirectionType, ITableSort} from 'interfaces/tableProps'; import AuthService from 'services/Authentication.service'; const getWidth = () => window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; export const useCurrentWidth = (): number => { const [width, setWidth] = useState(getWidth()); useEffect(() => { const resizeListener = () => setWidth(getWidth()); window.addEventListener('resize', resizeListener); return () => window.removeEventListener('resize', resizeListener); }, []); return width; }; export const useComponentVisible = ( initialIsVisible: boolean ): { ref: RefObject; isComponentVisible: boolean; setIsComponentVisible: Dispatch>; } => { const [isComponentVisible, setIsComponentVisible] = useState(initialIsVisible); const ref = useRef(null); const handleClickOutside = () => { setIsComponentVisible(false); }; useEffect(() => { document.addEventListener('click', handleClickOutside, true); return () => { document.removeEventListener('click', handleClickOutside, true); }; }, []); return { ref, isComponentVisible, setIsComponentVisible }; }; export const useHeightResize = (heightOffset: number): [number] => { const [height, setHeight] = useState(window.innerHeight - heightOffset); useEffect(() => { const handleResize = () => { setHeight(window.innerHeight - heightOffset); }; window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); // eslint-disable-next-line }, []); return [height]; }; export const useSearch = (propsSearchValue?: string): [string, Dispatch>] => { const [searchValue, setSearchValue] = useState(propsSearchValue); useEffect(() => { setSearchValue(propsSearchValue); }, [propsSearchValue, setSearchValue]); return [searchValue, setSearchValue]; }; export const useSort = ({sortColumn, sortDirection}: Partial): [ITableSort, Dispatch>] => { const [sortData, setSortData] = useState(null); useEffect(() => { if ((sortColumn && !sortData) || sortColumn !== sortData?.sortColumn || sortDirection !== sortData?.sortDirection) { const newSortDirection = sortDirection || sortData?.sortDirection || DirectionType.Asc; const newSortColumn = sortColumn || sortData?.sortColumn; setSortData({ sortDirection: newSortDirection, sortColumn: newSortColumn ?? '' }); } }, [sortColumn, sortDirection, sortData, setSortData]); return [sortData, setSortData]; }; export const useLoginStatus = (applicationId: string): [boolean] => { const [isLoggedIn, setLoginStatus] = useState(false); useEffect(() => { AuthService.hasLoginToken().then((response: boolean) => setLoginStatus(response)); }, [applicationId]); return [isLoggedIn]; };