mirror of
https://github.com/Sped0n/bridget.git
synced 2026-04-14 10:09:31 -07:00
* refactor: change hires loader function name * feat: add loading transition animation and improve performance * refactor: refactor mutation handling in desktop codebase - Modify the `initStage` function in `assets/ts/desktop/stage.ts`: - Change the `onMutation` callback to accept a single mutation instead of an array of mutations. - Update the conditions inside the callback to use `hold` instead of `skip`. - Modify the `onMutation` function in `assets/ts/desktop/utils.ts`: - Change the `callback` parameter to `trigger`. - Update the implementation of the function to iterate over each mutation and check if it triggers the `trigger` function. If it does, disconnect the observer and break the loop. * style: refactor state section and remove unnecessary code - Remove the declaration of `lastIndex` on line 21 - Add a comment block for the state section - Add a declaration of `lastIndex` for the state section * refactor: refactor mobile collection and intersection functions - Modify the `initCollection` function in `assets/ts/mobile/collection.ts` - Remove the nested loop in the `initCollection` function - Modify the `onIntersection` function in `assets/ts/mobile/utils.ts` - Replace the callback parameter with a trigger parameter in the `onIntersection` function - Remove the nested loop in the `onIntersection` function * refactor: refactor Watchable class constructor to include lazy parameter - Add a second parameter `lazy` in the constructor of the `Watchable` class in `globalUtils.ts` - Set the default value of `lazy` to `true` in the constructor - Add a condition to check if `e` is equal to `this.obj` and `this.lazy` is `true` to return in `watch` - Delete the previous constructor definition in the `Watchable` class in `globalUtils.ts` * fix: set state's lazy param to false * refactor: refactor third party lib import
92 lines
1.9 KiB
TypeScript
92 lines
1.9 KiB
TypeScript
import {
|
|
Watchable,
|
|
decrement,
|
|
getThresholdSessionIndex,
|
|
increment
|
|
} from './globalUtils'
|
|
|
|
/**
|
|
* types
|
|
*/
|
|
|
|
export type State = typeof defaultState
|
|
export type NavVec = 'next' | 'none' | 'prev'
|
|
|
|
/**
|
|
* variables
|
|
*/
|
|
|
|
const thresholds = [
|
|
{ threshold: 20, trailLength: 20 },
|
|
{ threshold: 40, trailLength: 10 },
|
|
{ threshold: 80, trailLength: 5 },
|
|
{ threshold: 140, trailLength: 5 },
|
|
{ threshold: 200, trailLength: 5 }
|
|
]
|
|
|
|
const defaultState = {
|
|
index: -1,
|
|
length: 0,
|
|
threshold: thresholds[getThresholdSessionIndex()].threshold,
|
|
trailLength: thresholds[getThresholdSessionIndex()].trailLength
|
|
}
|
|
|
|
export const state = new Watchable<State>(defaultState, false)
|
|
export const isAnimating = new Watchable<boolean>(false)
|
|
export const navigateVector = new Watchable<NavVec>('none')
|
|
|
|
/**
|
|
* main functions
|
|
*/
|
|
|
|
export function initState(length: number): void {
|
|
const s = state.get()
|
|
s.length = length
|
|
updateThreshold(s, 0)
|
|
state.set(s)
|
|
}
|
|
|
|
export function setIndex(index: number): void {
|
|
const s = state.get()
|
|
s.index = index
|
|
state.set(s)
|
|
}
|
|
|
|
export function incIndex(): void {
|
|
const s = state.get()
|
|
s.index = increment(s.index, s.length)
|
|
state.set(s)
|
|
}
|
|
|
|
export function decIndex(): void {
|
|
const s = state.get()
|
|
s.index = decrement(s.index, s.length)
|
|
state.set(s)
|
|
}
|
|
|
|
export function incThreshold(): void {
|
|
let s = state.get()
|
|
s = updateThreshold(s, 1)
|
|
state.set(s)
|
|
}
|
|
|
|
export function decThreshold(): void {
|
|
let s = state.get()
|
|
s = updateThreshold(s, -1)
|
|
state.set(s)
|
|
}
|
|
|
|
/**
|
|
* helper
|
|
*/
|
|
|
|
function updateThreshold(state: State, inc: number): State {
|
|
const i = thresholds.findIndex((t) => state.threshold === t.threshold) + inc
|
|
// out of bounds
|
|
if (i < 0 || i >= thresholds.length) return state
|
|
// storage the index so we can restore it even if we go to another page
|
|
sessionStorage.setItem('thresholdsIndex', i.toString())
|
|
const newItems = thresholds[i]
|
|
return { ...state, ...newItems }
|
|
}
|