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:
Sam Zhou 2020-06-25 10:07:30 -04:00 committed by GitHub
parent 20930dc837
commit 5ccd24cc1f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
59 changed files with 345 additions and 108 deletions

View file

@ -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;