Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Routing between default layout and persistent layout doesn't slot in the page #1733

Closed
kobe-ra opened this issue Nov 21, 2023 · 4 comments · Fixed by #1763
Closed

Routing between default layout and persistent layout doesn't slot in the page #1733

kobe-ra opened this issue Nov 21, 2023 · 4 comments · Fixed by #1763
Assignees
Labels
svelte Related to the svelte adapter

Comments

@kobe-ra
Copy link

kobe-ra commented Nov 21, 2023

Version:

  • "@inertiajs/svelte": "^1.0.14",

Describe the problem:

I have MasterLayout that is for logged in users. Then there is GuestLayout for guests. When user logs out and is redirected to Login page, GuestLayout loads, but the Login page doesn't. I then manually refresh the browser window, everything loads normally on the Login page. After submitting login form with useForm helper, user is redirected to Home page, but again - MasterLayout is loaded and works properly, while Page itself is not present at all.
Video

Steps to reproduce:

app.js

import "./bootstrap";
import MasterLayout from "./Layouts/MasterLayout.svelte";

import { createInertiaApp } from "@inertiajs/svelte";

createInertiaApp({
    resolve: (name) => {
        const pages = import.meta.glob("./Pages/**/*.svelte", { eager: true });
        let page = pages[`./Pages/${name}.svelte`];
        console.log(page)
        // return { ...page, layout: typeof page.layout === 'undefined' ? MasterLayout : page.layout }
        return {
            default: page.default,
            // layout: (_) => page.layout || MasterLayout,
            layout: page.layout || MasterLayout,
        };
    },
    setup({ el, App, props }) {
        // new App({ target: el });
        new App({ target: el, props });
    },
});

GuestLayout.svelte

<script>
    console.log('guest layout')
</script>

<slot />

Login.svelte

<script context="module">
    export { default as layout } from "@/Layouts/GuestLayout.svelte";
</script>

<script>
    import { useForm } from "@inertiajs/svelte";
    import Input from "@/Components/Forms/Input.svelte";

    let form = useForm({
        login: "",
        password: "",
    });

    const submit = () => {
        $form.post(route("login"));
    };

    console.log("login page");
</script>

<div class="container h-screen">
    ...
</div>

MasterLayout.svelte

<script>
    import Navigation from "@/Layouts/Navigation.svelte";

    console.log('master layout')
</script>

<div id="app">
    <Navigation>
        <slot />
    </Navigation>
</div>

Home.svelte

<script>
    console.log('home page')
</script>

<svelte:head>
    <title>{import.meta.env.VITE_APP_NAME}</title>
</svelte:head>

data data
@kobe-ra kobe-ra added the svelte Related to the svelte adapter label Nov 21, 2023
@Josefikos
Copy link

i'm facing same issue for a while

@Josefikos
Copy link

related to this: #1621

Forcing svelte to the version of 4.0.0 solved problem

@driesvints
Copy link
Contributor

Seems the following PR will solve this so let's see how it goes: #1763. Thanks all.

@reinink
Copy link
Member

reinink commented Apr 16, 2024

This has been fixed in #1763 has been released as part of v1.0.16 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
svelte Related to the svelte adapter
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants