mirror of
https://github.com/facebook/docusaurus.git
synced 2025-07-08 04:17:55 +02:00
feat(v2): Support swizzling TypeScript components (#2671)
* feat(v2): Support swizzling TypeScript components * Add tsc --noEmit to tsc script in theme-classic Now everything can pass the type checker! (although still a lot of any) * Add tsconfig and types.d.ts to website Improve developer experience. As an example, I converted NotFound to tsx * Apply type annotation suggestions * Do not fallback to `getThemePath` if getTypeScriptThemePath is undefined * Fix tsc * Add module declaration for @theme-original/* * Move babel cli to root package.json
This commit is contained in:
parent
20930dc837
commit
5ccd24cc1f
59 changed files with 345 additions and 108 deletions
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import {useState, useEffect} from 'react';
|
||||
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
||||
|
||||
type ScrollPosition = {scrollX: number; scrollY: number};
|
||||
|
||||
const getScrollPosition = (): ScrollPosition => ({
|
||||
scrollX: ExecutionEnvironment.canUseDOM ? window.pageXOffset : 0,
|
||||
scrollY: ExecutionEnvironment.canUseDOM ? window.pageYOffset : 0,
|
||||
});
|
||||
|
||||
const useScrollPosition = (
|
||||
effect: (position: ScrollPosition) => void,
|
||||
deps = [],
|
||||
): ScrollPosition => {
|
||||
const [scrollPosition, setScrollPosition] = useState(getScrollPosition());
|
||||
|
||||
const handleScroll = () => {
|
||||
const currentScrollPosition = getScrollPosition();
|
||||
|
||||
setScrollPosition(currentScrollPosition);
|
||||
|
||||
if (effect) {
|
||||
effect(currentScrollPosition);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener('scroll', handleScroll);
|
||||
|
||||
return () =>
|
||||
window.removeEventListener('scroll', handleScroll, {
|
||||
// @ts-expect-error: See https://github.com/microsoft/TypeScript/issues/32912
|
||||
passive: true,
|
||||
});
|
||||
}, deps);
|
||||
|
||||
return scrollPosition;
|
||||
};
|
||||
|
||||
export default useScrollPosition;
|
Loading…
Add table
Add a link
Reference in a new issue