@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 1.66 kB
Source Map (JSON)
{"version":3,"file":"use-hash.cjs","names":[],"sources":["../../src/use-hash/use-hash.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport interface UseHashInput {\n getInitialValueInEffect?: boolean;\n}\n\nexport type UseHashReturnValue = [string, (value: string) => void];\n\nexport function useHash({ getInitialValueInEffect = true }: UseHashInput = {}): UseHashReturnValue {\n const [hash, setHash] = useState<string>(\n getInitialValueInEffect ? '' : window.location.hash || ''\n );\n\n const setHashHandler = (value: string) => {\n const valueWithHash = value.startsWith('#') ? value : `#${value}`;\n window.location.hash = valueWithHash;\n setHash(valueWithHash);\n };\n\n useWindowEvent('hashchange', () => {\n const newHash = window.location.hash;\n if (hash !== newHash) {\n setHash(newHash);\n }\n });\n\n useEffect(() => {\n if (getInitialValueInEffect) {\n setHash(window.location.hash);\n }\n }, []);\n\n return [hash, setHashHandler];\n}\n\nexport namespace useHash {\n export type Options = UseHashInput;\n export type ReturnValue = UseHashReturnValue;\n}\n"],"mappings":";;;;AASA,SAAgB,QAAQ,EAAE,0BAA0B,SAAuB,EAAE,EAAsB;CACjG,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,UACX,0BAA0B,KAAK,OAAO,SAAS,QAAQ,GACxD;CAED,MAAM,kBAAkB,UAAkB;EACxC,MAAM,gBAAgB,MAAM,WAAW,IAAI,GAAG,QAAQ,IAAI;AAC1D,SAAO,SAAS,OAAO;AACvB,UAAQ,cAAc;;AAGxB,0BAAA,eAAe,oBAAoB;EACjC,MAAM,UAAU,OAAO,SAAS;AAChC,MAAI,SAAS,QACX,SAAQ,QAAQ;GAElB;AAEF,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,wBACF,SAAQ,OAAO,SAAS,KAAK;IAE9B,EAAE,CAAC;AAEN,QAAO,CAAC,MAAM,eAAe"}