Merge pull request #1063 from Safelite/feature/jzimmerman/PiniaStoreIssueFix

Changing pinia persisted state to use session storage instead of local storage. Added appropriate store reset logic.
This commit is contained in:
Jeremy-Z 2026-02-11 13:04:20 -05:00 committed by GitHub
commit 29998788c1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 8 deletions

View file

@ -22,8 +22,7 @@ export default {
mixins: [], mixins: [],
setup() { setup() {
const mainStore = useMainStore(); const mainStore = useMainStore();
mainStore.resetISSConfigState(); mainStore.populateInitialState(true);
mainStore.resetPageFields();
return { mainStore }; return { mainStore };
}, },
data() { data() {

View file

@ -29,7 +29,7 @@ vueApp.config.compilerOptions.isCustomElement = (tag) =>
const pinia = createPinia(); const pinia = createPinia();
vueApp.use(pinia); vueApp.use(pinia);
pinia.use(piniaPluginPersistedstate); pinia.use(piniaPluginPersistedstate);
useMainStore().populateInitialState(); useMainStore().populateInitialState(false);
// Additional Vue items to setup // Additional Vue items to setup
vueApp.use(router); vueApp.use(router);

View file

@ -2449,8 +2449,8 @@ export const useMainStore = defineStore({
}, },
// populate initial state // populate initial state
populateInitialState() { populateInitialState(forceReset) {
if (!localStorage.getItem(storeId)) { if (!sessionStorage.getItem(storeId) || forceReset ) {
this.$state = state; this.$state = state;
} }
}, },
@ -2904,7 +2904,7 @@ export const useMainStore = defineStore({
submittedOrder.submitType = submitType; submittedOrder.submitType = submitType;
submittedOrder.payment.isPayInAdvance = this.isPayInAdvance; submittedOrder.payment.isPayInAdvance = this.isPayInAdvance;
// set to local storage // set to sessionStorage
window.sessionStorage.setItem(webStorageConstants.SUBMITTED_ORDER, JSON.stringify(submittedOrder)); window.sessionStorage.setItem(webStorageConstants.SUBMITTED_ORDER, JSON.stringify(submittedOrder));
// clear vuex // clear vuex
@ -2920,11 +2920,14 @@ export const useMainStore = defineStore({
}, },
resetSubmittedOrder() { resetSubmittedOrder() {
// clear from local storage // clear from sessionStorage
window.sessionStorage.removeItem(webStorageConstants.SUBMITTED_ORDER); window.sessionStorage.removeItem(webStorageConstants.SUBMITTED_ORDER);
} }
}, },
persist: true persist: {
// Default is localStorage, but sessionStorage is used here to ensure state is cleared when the browser tab is closed, preventing potential issues with stale data on return visits.
storage: sessionStorage
}
}); });
// Private Functions // Private Functions