43 lines
1.1 KiB
Svelte
43 lines
1.1 KiB
Svelte
<script lang="ts">
|
|
import { browser } from '$app/environment';
|
|
import { goto, afterNavigate } from '$app/navigation';
|
|
import { setContext } from 'svelte';
|
|
import { page } from '$app/stores';
|
|
import { base } from '$app/paths';
|
|
|
|
let previous: string | null = base;
|
|
let first = true;
|
|
const navigate = (
|
|
url: string | number,
|
|
params: object | undefined,
|
|
options:
|
|
| {
|
|
replaceState?: boolean | undefined;
|
|
noScroll?: boolean | undefined;
|
|
keepFocus?: boolean | undefined;
|
|
state?: any;
|
|
invalidateAll?: boolean | undefined;
|
|
}
|
|
| undefined
|
|
) => {
|
|
if (browser) {
|
|
console.log('PREVIOUS', previous, typeof url == 'number', previous);
|
|
if (typeof url == 'number' && previous != null) {
|
|
goto(previous);
|
|
} else {
|
|
const parsedParams = new URLSearchParams(params as Record<string, string>);
|
|
goto(`${url}?${parsedParams.toString()}`, { ...options });
|
|
|
|
}
|
|
first = false;
|
|
}
|
|
};
|
|
afterNavigate(({ from }) => {
|
|
previous = from?.url.toString() || previous;
|
|
});
|
|
|
|
setContext('navigation', { navigate });
|
|
</script>
|
|
|
|
<slot />
|