import { useLocalStorage } from '@mantine/hooks'; import { appTheme } from 'contexts'; import { useAtom } from 'jotai'; import { useState } from 'react'; import type { Location, Theme, User } from 'types'; import { useMutationAPI } from './useAPI'; export function useCommonHooks() { const { mutateAsync } = useMutationAPI(); const isMobile = window.matchMedia('(max-width: 600px)').matches; const [theme, setTheme] = useAtom(appTheme); const [themeName, setThemeName] = useLocalStorage({ key: 'theme', defaultValue: 'random', }); const [appFilter, setAppFilter] = useLocalStorage({ key: 'appFilter', defaultValue: ['All'], }); const [appSort, setAppSort] = useLocalStorage({ key: 'appSort', defaultValue: 'A>Z', }); const [appDensity, setAppDensity] = useLocalStorage({ key: 'appDensity', defaultValue: 6, }); const [appScale, setAppScale] = useLocalStorage({ key: 'appScale', defaultValue: 1, }); const [bookmarkSort, setBookmarkSort] = useLocalStorage({ key: 'bookmarkSort', defaultValue: 'A>Z', }); const [bookmarkFilter, setBookmarkFilter] = useLocalStorage({ key: 'bookmarkFilter', defaultValue: ['All'], }); const [bookmarkDensity, setBookmarkDensity] = useLocalStorage({ key: 'bookmarkDensity', defaultValue: 6, }); const [bookmarkScale, setBookmarkScale] = useLocalStorage({ key: 'bookmarkScale', defaultValue: 1, }); const [currentTheme, setCurrentTheme] = useLocalStorage({ key: 'theme', defaultValue: 'random', }); const [currentThemePlaylist, setCurrentThemePlaylist] = useLocalStorage({ key: 'themePlaylist', defaultValue: 'All', }); const [searchValue, setSearchValue] = useState(''); const [providerLabel, setProviderLabel] = useState('Google Search'); const [providerURL, setProviderURL] = useState('https://www.google.com/search?q='); const [providerPrefix, setProviderPrefix] = useState('/g'); const [currentUser, setCurrentUser] = useLocalStorage({ key: 'user', defaultValue: { firstName: 'First', lastName: 'Last', email: 'triggerUser@default.com', physicalAddress: '1510 Polk St, Houston, TX 77002', }, }); const [currentLocation, setCurrentLocation] = useLocalStorage({ key: 'location', defaultValue: { office: 'HGX', station: 'KHOU', x: 65, y: 96, lat: 29.750950134386066, lon: -95.36220654860034, }, }); const urlPattern = new RegExp( '^(https?:\\/\\/)?' + // protocol '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string '(\\#[-a-z\\d_]*)?$', 'i', ); const reorder = (list: any, startIndex: number, endIndex: number) => { const result = Array.from(list); const [removed]: any = result.splice(startIndex, 1); result.splice(endIndex, 0, removed); return result; }; const handleThemeChange = (themes: Theme[], save: boolean) => { const enabled = themes .filter((t: Theme) => t.randomEnabled === 1) .filter((t: Theme) => t.name !== theme.name); if (enabled.length === 0 && currentThemePlaylist === 'All') { setTheme(themes[0]); save && setThemeName(themes[0].name); } else if (currentThemePlaylist === 'All') { const index = Math.floor(Math.random() * enabled.length); setTheme(enabled[index]); save && setThemeName(enabled[index].name); } else { const index = Math.floor(Math.random() * themes.length); setTheme(themes[index]); save && setThemeName(themes[index].name); } }; const handleDelete = (item: any, endpoint: string) => { mutateAsync({ method: 'DELETE', endpoint: endpoint, body: item }); }; function fixDigits(k: number) { if (k < 10) { return `0${k}`; } return k; } return { isMobile, theme, setTheme, urlPattern, fixDigits, reorder, handleThemeChange, handleDelete, themeName, setThemeName, appFilter, setAppFilter, appSort, setAppSort, appDensity, setAppDensity, appScale, setAppScale, bookmarkSort, setBookmarkSort, bookmarkFilter, setBookmarkFilter, bookmarkDensity, setBookmarkDensity, bookmarkScale, setBookmarkScale, currentTheme, setCurrentTheme, currentThemePlaylist, setCurrentThemePlaylist, searchValue, setSearchValue, providerLabel, setProviderLabel, providerURL, setProviderURL, providerPrefix, setProviderPrefix, currentUser, setCurrentUser, currentLocation, setCurrentLocation, }; }