UNPKG

@scrolia/react-native

Version:
1 lines 4.17 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/hooks/content/index.ts"],"sourcesContent":["import type {\n LayoutChangeEvent,\n NativeScrollEvent,\n NativeSyntheticEvent,\n} from \"react-native\";\n\nimport type { Axis } from \"#/@types/options\";\n\nimport { useScrollCore } from \"#/contexts/scrollcore\";\nimport { setLengthFn } from \"#/hooks/content/functions/length\";\nimport { handleScrollFn } from \"#/hooks/content/functions/scroll\";\n\n/** Options for the `useContentHandler` hook. */\ntype UseContentHandlerOptions = {\n props?: any;\n};\n\n/** Content handler. */\nconst createContentHandler = (\n axis: Axis,\n options?: UseContentHandlerOptions,\n) => {\n const { props } = options ?? {};\n\n const {\n options: { disabled, animated, plugins },\n [axis]: {\n hvTrack,\n hvThumb,\n total,\n view,\n viewOffset,\n scrollbarLength,\n setScrollbarLength,\n scrollbarOffset,\n setScrollbarOffset,\n },\n } = useScrollCore();\n\n const setLength = setLengthFn({\n axis,\n disabled,\n animated,\n plugins,\n hvTrack,\n hvThumb,\n total,\n view,\n viewOffset,\n scrollbarLength,\n setScrollbarLength,\n });\n\n const onLayout = (event: LayoutChangeEvent): void => {\n if (!disabled) {\n if (axis === \"x\") {\n view.current = event.nativeEvent.layout.width;\n } else {\n view.current = event.nativeEvent.layout.height;\n }\n\n setLength();\n }\n\n props?.onLayout?.(event);\n };\n\n const onContentSizeChange = (width: number, height: number): void => {\n if (!disabled) {\n if (axis === \"x\") {\n total.current = width;\n } else {\n total.current = height;\n }\n\n setLength();\n }\n\n props?.onContentSizeChange?.(width, height);\n };\n\n const onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>): void => {\n if (!disabled)\n handleScrollFn({\n axis,\n event,\n disabled,\n animated,\n plugins,\n hvTrack,\n hvThumb,\n total,\n view,\n viewOffset,\n scrollbarOffset,\n setScrollbarOffset,\n });\n\n props?.onScroll?.(event);\n };\n\n return {\n onLayout,\n onContentSizeChange,\n onScroll,\n };\n};\n\nconst useContentXHandler = (options?: UseContentHandlerOptions) => {\n return createContentHandler(\"x\", options);\n};\n\nconst useContentYHandler = (options?: UseContentHandlerOptions) => {\n return createContentHandler(\"y\", options);\n};\n\n/** Result of the `useContentXHandler` hook. */\ntype ContentXHandler = ReturnType<typeof useContentXHandler>;\n\n/** Result of the `useContentYHandler` hook. */\ntype ContentYHandler = ReturnType<typeof useContentYHandler>;\n\nexport type { ContentXHandler, ContentYHandler, UseContentHandlerOptions };\nexport { useContentXHandler, useContentYHandler };\n"],"mappings":";;;;;AAkBA,MAAM,wBACF,MACA,YACC;CACD,MAAM,EAAE,UAAU,WAAW,EAAE;CAE/B,MAAM,EACF,SAAS,EAAE,UAAU,UAAU,YAC9B,OAAO,EACJ,SACA,SACA,OACA,MACA,YACA,iBACA,oBACA,iBACA,yBAEJ,eAAe;CAEnB,MAAM,YAAY,YAAY;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACH,CAAC;CAEF,MAAM,YAAY,UAAmC;AACjD,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,IACT,MAAK,UAAU,MAAM,YAAY,OAAO;OAExC,MAAK,UAAU,MAAM,YAAY,OAAO;AAG5C,cAAW;;AAGf,SAAO,WAAW,MAAM;;CAG5B,MAAM,uBAAuB,OAAe,WAAyB;AACjE,MAAI,CAAC,UAAU;AACX,OAAI,SAAS,IACT,OAAM,UAAU;OAEhB,OAAM,UAAU;AAGpB,cAAW;;AAGf,SAAO,sBAAsB,OAAO,OAAO;;CAG/C,MAAM,YAAY,UAAyD;AACvE,MAAI,CAAC,SACD,gBAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC;AAEN,SAAO,WAAW,MAAM;;AAG5B,QAAO;EACH;EACA;EACA;EACH;;AAGL,MAAM,sBAAsB,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ;;AAG7C,MAAM,sBAAsB,YAAuC;AAC/D,QAAO,qBAAqB,KAAK,QAAQ"}