From 478bd5357ca0d2e0b27d46f95e5e41f8c5cb4aeb Mon Sep 17 00:00:00 2001 From: Dominic Lee Date: Tue, 23 Jun 2020 09:54:28 +0100 Subject: [PATCH] revert: "Filter out missing elements (#2)" This reverts commit 5954c78eb61c3cc84d782cb67039a654bcc03c76. --- examples/App.tsx | 5 ++-- src/Tourguide.tsx | 64 +++++++-------------------------------------- src/useTourguide.ts | 46 +++++++------------------------- 3 files changed, 21 insertions(+), 94 deletions(-) diff --git a/examples/App.tsx b/examples/App.tsx index cf3fbe6..1f12ce8 100644 --- a/examples/App.tsx +++ b/examples/App.tsx @@ -11,7 +11,7 @@ const Card = styled.div({ padding: '1rem', }); -const messages = ['hello1', 'world2', 'hidden', 'hello3']; +const messages = ['hello1', 'world2', 'hello3']; const node = document.getElementById('tourguide-root'); @@ -37,9 +37,8 @@ function App() { >

Some cool subtitle 2

- {false &&

Some hidden feature

} Some random card with content -

Some cool content 3

+

Some cool content 3

diff --git a/src/Tourguide.tsx b/src/Tourguide.tsx index 59f501a..e69b933 100644 --- a/src/Tourguide.tsx +++ b/src/Tourguide.tsx @@ -41,10 +41,10 @@ const TooltipContainer = styled.div({ const Tourguide = (props: TourguideProps) => { const { - tooltip: TooltipComponent, + tooltip: Component, animated = true, precondition = true, - content: allContent, + content, node, leftControl, rightControl, @@ -55,21 +55,8 @@ const Tourguide = (props: TourguideProps) => { const [stepIndicatorWidth, setStepIndicatorWidth] = useState(0); const [isAnimIdle, setIsAnimIdle] = useState(true); - const [content, setContent] = useState(); - const [Component, setComponent] = useState< - TourguideProps['tooltip'] | undefined - >(TooltipComponent); - const { - anchorEls, - curPos, - show, - close, - setStatus, - prev, - next, - allAnchorEls, - } = useGuide(); + const { anchorEls, curPos, show, close, setStatus, prev, next } = useGuide(); const measuredStepIndicatorRef = useCallback((node) => { if (node !== null) { @@ -110,22 +97,6 @@ const Tourguide = (props: TourguideProps) => { } }; - const filterOutUnused = useCallback( - (value?: any) => { - return Array.isArray(value) - ? value - .map((item, index: number) => { - if (!!allAnchorEls[index]) { - return item; - } - return undefined; - }) - .filter((item) => !!item) - : value; - }, - [allAnchorEls] - ); - useEffect(() => { if (show) { document.addEventListener('keydown', handleKeyDown); @@ -142,16 +113,6 @@ const Tourguide = (props: TourguideProps) => { } }, [anchorEls.length, precondition, setStatus]); - useEffect(() => { - setComponent( - filterOutUnused(TooltipComponent) as TourguideProps['tooltip'] - ); - }, [TooltipComponent, filterOutUnused]); - - useEffect(() => { - setContent(filterOutUnused(allContent)); - }, [allContent, filterOutUnused]); - const opacityAnim = useSpring({ opacity: show ? 1 : 0, onStart: handleAnimStart, @@ -166,7 +127,7 @@ const Tourguide = (props: TourguideProps) => { return ReactDOM.createPortal( <> { styles={styles && styles.spotlight} /> {Component && ( - + {Component} )} @@ -238,9 +194,9 @@ const Tourguide = (props: TourguideProps) => { {anchorEls.map((el) => ( { {Component && ( ; type TourGuideStatus = 'idle' | 'initializing' | 'ready'; -type TourGuideAnchor = { - position: number; - node: HTMLElement; -}; - export default function useTourguide() { - const [allAnchorEls, setAllAnchorEls] = useState([]); - const [anchorEls, setAnchorEls] = useState([]); + const [anchorEls, setAnchorEls] = useState([]); const [show, setShow] = useState(false); const [curPos, setCurPos] = useState(0); const [status, setStatus] = useState('idle'); const handleRef = useCallback( - (position: number) => (node: HTMLElement | null) => { - if ( - node !== null && - typeof position === 'number' && - !node.isEqualNode(allAnchorEls[position]?.node) - ) { - setAllAnchorEls((prevEls) => { + (node: HTMLElement | null) => { + if (node !== null && node.dataset.tourguidePosition) { + setAnchorEls((prevEls) => { const anchors = [...prevEls]; - anchors[position] = { - node, - position, - }; + anchors[Number(node.dataset.tourguidePosition)] = node; return anchors; }); if (status === 'idle') { @@ -36,12 +23,13 @@ export default function useTourguide() { } } }, - [status, allAnchorEls] + [status] ); const getAnchorElProps = useCallback( (position: number) => ({ - ref: handleRef(position), + ref: handleRef, + 'data-tourguide-position': position, }), [handleRef] ); @@ -76,20 +64,6 @@ export default function useTourguide() { setStatus('idle'); }, []); - const filterMissingAnchors = () => { - // removes missing anchors and reassigns positions - const newAnchors = allAnchorEls - .filter((item) => !!item) - .map((item, index) => ({ - node: item.node, - position: index, - })); - - setAnchorEls(newAnchors); - }; - - useEffect(filterMissingAnchors, [allAnchorEls.length]); - return useMemo( () => ({ show, @@ -106,7 +80,6 @@ export default function useTourguide() { close, setStatus, status, - allAnchorEls, }), [ anchorEls, @@ -120,7 +93,6 @@ export default function useTourguide() { toggle, close, status, - allAnchorEls, ] ); }