mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-04 09:13:24 +00:00
Migrate the Weather app to the Sky UI primitives with richer condition effects, updated WebP icons, and pull-to-refresh feedback.\n\nAdd a shared reload cooldown for weather, banking, and housing actions, including localized status feedback and test-server coverage.
41 lines
920 B
TypeScript
41 lines
920 B
TypeScript
export const RELOAD_COOLDOWN_ERROR = 'reload_cooldown'
|
|
|
|
const RELOAD_LIMIT = 3
|
|
const RELOAD_WINDOW_MS = 10_000
|
|
const RELOAD_COOLDOWN_MS = 10_000
|
|
|
|
export interface ReloadCooldownState {
|
|
cooldownUntil: number
|
|
reloadAttempts: number[]
|
|
}
|
|
|
|
export function isReloadCooldownActive(
|
|
state: ReloadCooldownState,
|
|
now = Date.now(),
|
|
): boolean {
|
|
if (state.cooldownUntil <= now) {
|
|
state.cooldownUntil = 0
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
export function allowManualReload(
|
|
state: ReloadCooldownState,
|
|
now = Date.now(),
|
|
): boolean {
|
|
if (isReloadCooldownActive(state, now)) return false
|
|
|
|
state.reloadAttempts = state.reloadAttempts.filter(
|
|
(attemptedAt) => now - attemptedAt < RELOAD_WINDOW_MS,
|
|
)
|
|
if (state.reloadAttempts.length >= RELOAD_LIMIT) {
|
|
state.cooldownUntil = now + RELOAD_COOLDOWN_MS
|
|
state.reloadAttempts = []
|
|
return false
|
|
}
|
|
|
|
state.reloadAttempts.push(now)
|
|
return true
|
|
}
|