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,
]
);
}