Git Product home page Git Product logo

pinia-plugin-capacitor-persist's Introduction

Pinia Persist Plugin for Capacitor

Pinia plugin that syncs with Capacitor's Preferences plugin's storage.

Installation

npm i pinia-plugin-capacitor-persist

Usage

First, install the plugin as part of your Pinia initialisation

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import { piniaCapacitorPersist } from 'pinia-plugin-capacitor-persist';
import App from './App.vue';

const pinia = createPinia();
pinia.use(piniaCapacitorPersist);

createApp(App)
    .use(pinia)
    .mount('#app');

Then you can enable persist as part of your store declarations:

import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', {
	state() {
		return {
			name: '',
			address: '',
			address_2: '',
			city: '',
			country: '',
		};
	},
	persist: {
		enabled: true,
        // See below for additional options that go here
	},
});

Persist options

Option Type Example Description
include Array ['address'] Only persist these properties
exclude Array ['name'] Don't persist these properties
onRestored Function (store) => { // do stuff } Callback function for after restoration

Async Restoration

Because CapacitorJS uses async functions to read/write its storage, there may be times when you need to await your store being hydrated from local storage before doing an action.

Fortunately, there's a property, restored, that's added to each of your persist enabled stores that can be awaited.

import { createRouter, createWebHashHistory } from "vue-router";
import routes from "@/router/routes";
import { useUserStore } from "@/stores/user";
import { axiosInstance } from "@/plugins/axios";

const router = createRouter({
  history: createWebHashHistory(),
  routes,
});

router.beforeEach(async () => {
    const userStore = useUserStore();
    await userStore.restored;

    axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${userStore.token}`;
})

export default router;

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.