react-page-tracker
Version:
A lightweight, zero-dependency library providing accurate navigation tracking, fixed document.referrer value, and complete history support for React frameworks.
2 lines (1 loc) • 831 B
JavaScript
;"use client";import{useSyncExternalStore as s}from"react";const a={pageIndex:0,referrer:"",pageEvent:void 0,isFirstPage:!0,isLastPage:!0,pageHistory:[],pageHistoryLength:0};export const pageTrackerStore={state:{...a},listeners:new Set,getState(){return this.state},getImmutablePageHistory(){return this.state.pageHistory.slice()},setState:e=>{pageTrackerStore.state={...pageTrackerStore.state,...e},requestAnimationFrame(()=>{pageTrackerStore.listeners.forEach(t=>t())})},subscribe:e=>(pageTrackerStore.listeners.add(e),()=>pageTrackerStore.listeners.delete(e))},getPageTrackerStore=()=>pageTrackerStore.getState(),usePageTrackerStore=e=>{let t;return s(pageTrackerStore.subscribe,()=>{const r=e(pageTrackerStore.getState());return JSON.stringify(t)!==JSON.stringify(r)&&(t=r),t},()=>e(pageTrackerStore.getState()))};