1.0.1-alpha.203 • Published 2 days ago

@virtualstate/navigation v1.0.1-alpha.203

Weekly downloads
-
License
MIT
Repository
github
Last release
2 days ago

@virtualstate/navigation

Native JavaScript navigation implementation

Support

Node.js supported Deno supported Bun supported Chromium supported Webkit supported Firefox supported

Web Platform Tests 140/277 92.86%25 lines covered 92.86%25 statements covered 83.11%25 functions covered 83.02%25 branches covered

Install

npm i --save @virtualstate/navigation

Or

yarn add @virtualstate/navigation

Then

import { Navigation } from "@virtualstate/navigation";
const { Navigation } = await import("https://cdn.skypack.dev/@virtualstate/navigation");

Or

import { Navigation } from "https://cdn.skypack.dev/@virtualstate/navigation";

importmap documentation

<script type="importmap">
    {  
        "imports": {
            "@virtualstate/navigation": "https://cdn.skypack.dev/@virtualstate/navigation"
        }
    }
</script>
<script type="module">
    import { Navigation } from "@virtualstate/navigation"
</script>

Usage

See the MDN documentation for the Navigation API for in depth information on usage.

Navigation

import { Navigation } from "@virtualstate/navigation";

const navigation = new Navigation();

// Set initial url
navigation.navigate("/");

navigation.navigate("/skipped");

// Use .finished to wait for the transition to complete
await navigation.navigate("/awaited").finished;

Waiting for events

import { Navigation } from "@virtualstate/navigation";

const navigation = new Navigation();

navigation.addEventListener("navigate", async ({ destination, preventDefault }) => {
    if (new URL(destination.url).pathname === "/disallow") {
        preventDefault();
    }
});

await navigation.navigate("/allowed").finished; // Resolves
await navigation.navigate("/disallow").finished; // Rejects

Transitions

import { Navigation } from "@virtualstate/navigation";
import { loadPhotoIntoCache } from "./cache";

const navigation = new Navigation();

navigation.addEventListener("navigate", async ({ destination, intercept }) => {
    intercept(loadPhotoIntoCache(destination.url));
});

URLPattern

You can match destination.url using URLPattern

import {Navigation} from "@virtualstate/navigation";
import {URLPattern} from "urlpattern-polyfill";

const navigation = new Navigation();

navigation.addEventListener("navigate", async ({destination, intercept}) => {
    const pattern = new URLPattern({ pathname: "/books/:id" });
    const match = pattern.exec(destination.url);
    if (match) {
        intercept(transition());
    }

    async function transition() {
        console.log("load book", match.pathname.groups.id)
    }
});

navigation.navigate("/book/1");

State

import { Navigation } from "@virtualstate/navigation";

const navigation = new Navigation();

navigation.addEventListener("currententrychange", () => {
    console.log({ updatedState: navigation.currentEntry?.getState() });
});

await navigation.updateCurrentEntry({
    state: {
        items: [
            "first",
            "second"
        ],
        index: 0
    }
}).finished;

await navigation.updateCurrentEntry({
    state: {
        ...navigation.currentEntry.getState(),
        index: 1
    }
}).finished;

Polyfill

If a global instance of the navigation API is not available, this will provide one, integrated into the History API if available.

import "@virtualstate/navigation/polyfill";

await navigation.navigate("/").finished;
1.0.1-alpha.203

2 days ago

1.0.1-alpha.202

1 month ago

1.0.1-alpha.201

2 months ago

1.0.1-alpha.200

3 months ago

1.0.1-alpha.199

8 months ago

1.0.1-alpha.197

8 months ago

1.0.1-alpha.198

8 months ago

1.0.1-alpha.196

8 months ago

1.0.1-alpha.195

10 months ago

1.0.1-alpha.193

12 months ago

1.0.1-alpha.191

1 year ago

1.0.1-alpha.192

1 year ago

1.0.1-alpha.190

1 year ago

1.0.1-alpha.188

1 year ago

1.0.1-alpha.189

1 year ago

1.0.1-alpha.186

1 year ago

1.0.1-alpha.187

1 year ago

1.0.1-alpha.184

1 year ago

1.0.1-alpha.185

1 year ago

1.0.1-alpha.182

1 year ago

1.0.1-alpha.183

1 year ago

1.0.1-alpha.180

1 year ago

1.0.1-alpha.181

1 year ago

1.0.1-alpha.179

1 year ago

1.0.1-alpha.178

1 year ago

1.0.1-alpha.137

2 years ago

1.0.1-alpha.138

2 years ago

1.0.1-alpha.135

2 years ago

1.0.1-alpha.136

2 years ago

1.0.1-alpha.177

2 years ago

1.0.1-alpha.133

2 years ago

1.0.1-alpha.175

2 years ago

1.0.1-alpha.131

2 years ago

1.0.1-alpha.176

2 years ago

1.0.1-alpha.132

2 years ago

1.0.1-alpha.173

2 years ago

1.0.1-alpha.174

2 years ago

1.0.1-alpha.130

2 years ago

1.0.1-alpha.171

2 years ago

1.0.1-alpha.172

2 years ago

1.0.1-alpha.170

2 years ago

1.0.1-alpha.139

2 years ago

1.0.1-alpha.126

2 years ago

1.0.1-alpha.127

2 years ago

1.0.1-alpha.168

2 years ago

1.0.1-alpha.124

2 years ago

1.0.1-alpha.169

2 years ago

1.0.1-alpha.125

2 years ago

1.0.1-alpha.166

2 years ago

1.0.1-alpha.122

2 years ago

1.0.1-alpha.123

2 years ago

1.0.1-alpha.164

2 years ago

1.0.1-alpha.120

2 years ago

1.0.1-alpha.165

2 years ago

1.0.1-alpha.121

2 years ago

1.0.1-alpha.162

2 years ago

1.0.1-alpha.163

2 years ago

1.0.1-alpha.160

2 years ago

1.0.1-alpha.161

2 years ago

1.0.1-alpha.128

2 years ago

1.0.1-alpha.129

2 years ago

1.0.1-alpha.159

2 years ago

1.0.1-alpha.115

2 years ago

1.0.1-alpha.116

2 years ago

1.0.1-alpha.157

2 years ago

1.0.1-alpha.113

2 years ago

1.0.1-alpha.158

2 years ago

1.0.1-alpha.155

2 years ago

1.0.1-alpha.111

2 years ago

1.0.1-alpha.156

2 years ago

1.0.1-alpha.112

2 years ago

1.0.1-alpha.153

2 years ago

1.0.1-alpha.154

2 years ago

1.0.1-alpha.110

2 years ago

1.0.1-alpha.151

2 years ago

1.0.1-alpha.152

2 years ago

1.0.1-alpha.150

2 years ago

1.0.1-alpha.119

2 years ago

1.0.1-alpha.117

2 years ago

1.0.1-alpha.118

2 years ago

1.0.1-alpha.148

2 years ago

1.0.1-alpha.149

2 years ago

1.0.1-alpha.146

2 years ago

1.0.1-alpha.147

2 years ago

1.0.1-alpha.144

2 years ago

1.0.1-alpha.145

2 years ago

1.0.1-alpha.142

2 years ago

1.0.1-alpha.143

2 years ago

1.0.1-alpha.140

2 years ago

1.0.1-alpha.141

2 years ago

1.0.1-alpha.104

2 years ago

1.0.1-alpha.105

2 years ago

1.0.1-alpha.102

2 years ago

1.0.1-alpha.103

2 years ago

1.0.1-alpha.100

2 years ago

1.0.1-alpha.101

2 years ago

1.0.1-alpha.97

2 years ago

1.0.1-alpha.96

2 years ago

1.0.1-alpha.108

2 years ago

1.0.1-alpha.109

2 years ago

1.0.1-alpha.106

2 years ago

1.0.1-alpha.107

2 years ago

1.0.1-alpha.95

2 years ago

1.0.1-alpha.94

2 years ago

1.0.1-alpha.93

2 years ago