Coder Social home page Coder Social logo

Comments (6)

Paratron avatar Paratron commented on May 24, 2024 1

Fixed with the released version 1.1.7

from hookrouter.

bvalyou avatar bvalyou commented on May 24, 2024 1

I hadn't had a chance to look at this again until just now, but thanks for the quick fix! I pulled down 1.1.7 and confirmed that it is fixed.

This functionality makes animated transitions between pages almost effortless! This is the full code (besides the CSS) to animate in and out.

const PageRoot = (props) => {
	const {
		title, children, classes, theme,
	} = props;
	const [className, setClassName] = useState(classes.incoming);
	const [nextPath, confirmNavigation] = useControlledInterceptor();

	useEffect(() => {
		if (!nextPath) {
			return;
		}

		setClassName(classes.out);
		setTimeout(confirmNavigation, theme.transitions.duration.short);
	}, [nextPath, classes, confirmNavigation, theme]);

	useEffect(() => {
		setTimeout(() => setClassName(classNames(classes.incoming, classes.in), 1));
	}, []);

	return (
		<main className={classes.root}>
			<Header Icon={props.headerIcon}>{props.headerContent || title}</Header>

			<div className={classNames(classes.mainContent, className)}>
				{children}
			</div>
		</main>
	);
};

This is a huge win for this library, and the good work here is much appreciated! Feel free to lift that code and add to the docs, or if there's a spot you'd like to see them I can put in a PR as well.

from hookrouter.

Paratron avatar Paratron commented on May 24, 2024

Do you happen to have a codesandbox or something to demonstrate the behavior? Otherwise I would need to recreate the bug, first to find the cause.

from hookrouter.

Paratron avatar Paratron commented on May 24, 2024

Nevermind, I was able to recreate it. I will investigate.

from hookrouter.

Paratron avatar Paratron commented on May 24, 2024

Thats a very creative use of the controlled interceptor :D
You could even make that functionality a new hook like useTransition() and pass the in- and out-classnames as well as the duration as arguments!

from hookrouter.

bvalyou avatar bvalyou commented on May 24, 2024

That's a great idea! I've done that, just passed in my classes hash and kept the names the same. Makes the PageRoot component much simpler and I can reuse the logic in other places and test in isolation.

One note for anyone who wants to try this - the one issue I ran into is on pages that have parameters and can be loaded twice consecutively, it transitions away, but then the transition back in doesn't happen because the transition in effect only runs on mount. My fix was to add a key of window.location.pathname to the transitioning component where it's rendered by components with parameters. I also tested adding window.location.pathname to the effect that causes it to transition in, but that causes the animation to run in reverse (from out state back to in state rather than from initial to in).

Thanks again for your help @Paratron. I did notice one thing that might wind up being a bug for someone later - nextPath doesn't reset after calling confirmNavigation which means you can't explicitly run logic post-confirm in hook world (besides tracking confirm in a separate state field in the consumer). Changing that might require some extra code to gate intercepting the empty nextPath so not sure if you'd want that or not.

🥂

from hookrouter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.