@empoleon/nprogress
Version:
Navigation progress bar
1 lines • 11.2 kB
Source Map (JSON)
{"version":3,"file":"nprogress.store.mjs","sources":["../src/nprogress.store.ts"],"sourcesContent":["import { clamp } from '@empoleon/hooks';\nimport { createStore, EmpoleonStore, useStore } from '@empoleon/store';\n\nfunction getIntervalProgressValue(currentProgress: number) {\n let next = 0.5;\n\n if (currentProgress >= 0 && currentProgress <= 20) {\n next = 10;\n } else if (currentProgress >= 20 && currentProgress <= 50) {\n next = 4;\n } else if (currentProgress >= 50 && currentProgress <= 80) {\n next = 2;\n } else if (currentProgress >= 80 && currentProgress <= 99) {\n next = 1;\n } else if (currentProgress >= 99 && currentProgress <= 100) {\n next = 0;\n }\n\n return currentProgress + next;\n}\n\nexport interface NprogressState {\n mounted: boolean;\n progress: number;\n interval: number;\n step: number;\n stepInterval: number;\n timeouts: number[];\n}\n\nexport type NprogressStore = EmpoleonStore<NprogressState>;\n\nexport const createNprogressStore = () =>\n createStore<NprogressState>({\n mounted: false,\n progress: 0,\n interval: 0,\n step: 1,\n stepInterval: 100,\n timeouts: [],\n });\n\nexport const useNprogress = (store: NprogressStore) => useStore(store);\n\nexport function updateNavigationProgressStateAction(\n update: (state: NprogressState) => Partial<NprogressState>,\n store: NprogressStore\n) {\n const state = store.getState();\n store.setState({ ...state, ...update(store.getState()) });\n}\n\nexport function decrementNavigationProgressAction(store: NprogressStore) {\n updateNavigationProgressStateAction(\n (state) => ({ progress: Math.max(state.progress - state.step, 0) }),\n store\n );\n}\n\nexport function setNavigationProgressAction(value: number, store: NprogressStore) {\n updateNavigationProgressStateAction(\n () => ({ progress: clamp(value, 0, 100), mounted: true }),\n store\n );\n}\n\nexport function cleanupNavigationProgressAction(store: NprogressStore) {\n updateNavigationProgressStateAction((state) => {\n window.clearInterval(state.interval);\n state.timeouts.forEach((timeout) => window.clearTimeout(timeout));\n return { timeouts: [] };\n }, store);\n}\n\nexport function completeNavigationProgressAction(store: NprogressStore) {\n cleanupNavigationProgressAction(store);\n\n updateNavigationProgressStateAction((state) => {\n const mountedTimeout = window.setTimeout(() => {\n updateNavigationProgressStateAction(() => ({ mounted: false }), store);\n }, 50);\n\n const resetTimeout = window.setTimeout(() => {\n updateNavigationProgressStateAction(() => ({ progress: 0 }), store);\n }, state.stepInterval + 50);\n\n return { progress: 100, timeouts: [mountedTimeout, resetTimeout] };\n }, store);\n}\n\nexport function startNavigationProgressAction(store: NprogressStore) {\n updateNavigationProgressStateAction(\n (s) => ({ progress: getIntervalProgressValue(s.progress), mounted: true }),\n store\n );\n\n updateNavigationProgressStateAction((state) => {\n window.clearInterval(state.interval);\n\n const interval = window.setInterval(() => {\n updateNavigationProgressStateAction(\n (s) => ({ progress: getIntervalProgressValue(s.progress), mounted: true }),\n store\n );\n }, state.stepInterval);\n\n return { interval, mounted: true };\n }, store);\n}\n\nexport function stopNavigationProgressAction(store: NprogressStore) {\n updateNavigationProgressStateAction((state) => {\n window.clearInterval(state.interval);\n return { interval: -1 };\n }, store);\n}\n\nexport function resetNavigationProgressAction(store: NprogressStore) {\n cleanupNavigationProgressAction(store);\n stopNavigationProgressAction(store);\n updateNavigationProgressStateAction(() => ({ progress: 0, mounted: false }), store);\n}\n\nexport function incrementNavigationProgressAction(store: NprogressStore) {\n updateNavigationProgressStateAction((state) => {\n const nextValue = Math.min(state.progress + state.step, 100);\n const nextMounted = nextValue !== 100 && nextValue !== 0;\n\n if (!nextMounted) {\n const timeout = window.setTimeout(\n () => resetNavigationProgressAction(store),\n state.stepInterval + 50\n );\n\n return {\n progress: nextValue,\n mounted: nextMounted,\n timeouts: [...state.timeouts, timeout],\n };\n }\n\n return {\n progress: nextValue,\n mounted: nextMounted,\n };\n }, store);\n}\n\nexport function createNprogress() {\n const store = createNprogressStore();\n const actions = {\n start: () => startNavigationProgressAction(store),\n stop: () => stopNavigationProgressAction(store),\n reset: () => resetNavigationProgressAction(store),\n set: (value: number) => setNavigationProgressAction(value, store),\n increment: () => incrementNavigationProgressAction(store),\n decrement: () => decrementNavigationProgressAction(store),\n complete: () => completeNavigationProgressAction(store),\n cleanup: () => cleanupNavigationProgressAction(store),\n };\n\n return [store, actions] as const;\n}\n\nexport const [nprogressStore, nprogress] = createNprogress();\nexport const {\n start: startNavigationProgress,\n stop: stopNavigationProgress,\n reset: resetNavigationProgress,\n set: setNavigationProgress,\n increment: incrementNavigationProgress,\n decrement: decrementNavigationProgress,\n complete: completeNavigationProgress,\n cleanup: cleanupNavigationProgress,\n} = nprogress;\n"],"names":["getIntervalProgressValue","currentProgress","next","createNprogressStore","createStore","mounted","progress","interval","step","stepInterval","timeouts","useNprogress","store","useStore","updateNavigationProgressStateAction","update","state","getState","setState","decrementNavigationProgressAction","Math","max","setNavigationProgressAction","value","clamp","cleanupNavigationProgressAction","window","clearInterval","forEach","timeout","clearTimeout","completeNavigationProgressAction","mountedTimeout","setTimeout","resetTimeout","startNavigationProgressAction","s","setInterval","stopNavigationProgressAction","resetNavigationProgressAction","incrementNavigationProgressAction","nextValue","min","nextMounted","createNprogress","actions","start","stop","reset","set","increment","decrement","complete","cleanup","nprogressStore","nprogress","startNavigationProgress","stopNavigationProgress","resetNavigationProgress","setNavigationProgress","incrementNavigationProgress","decrementNavigationProgress","completeNavigationProgress","cleanupNavigationProgress"],"mappings":"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"}