Convert portal temporal store to TS
This commit is contained in:
parent
4acb8fae99
commit
085617a522
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
const processModals = () => {
|
const processModals = () => {
|
||||||
const defaultCacheFn = key => {
|
const defaultCacheFn = key => {
|
||||||
temporalStore.actions.setExpiring(key, {}, oneDayInSeconds)
|
temporalStore.setExpiring(key, {}, oneDayInSeconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
const dismissableModals = [
|
const dismissableModals = [
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
return dismissableModals.filter(modal => {
|
return dismissableModals.filter(modal => {
|
||||||
return !temporalStore.actions.getExpiring(modal.key) && modal.criteria()
|
return !temporalStore.getExpiring(modal.key) && modal.criteria()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { BANNER_TYPES } from "@budibase/bbui"
|
||||||
const oneDayInSeconds = 86400
|
const oneDayInSeconds = 86400
|
||||||
|
|
||||||
const defaultCacheFn = key => {
|
const defaultCacheFn = key => {
|
||||||
temporalStore.actions.setExpiring(key, {}, oneDayInSeconds)
|
temporalStore.setExpiring(key, {}, oneDayInSeconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
const upgradeAction = key => {
|
const upgradeAction = key => {
|
||||||
|
@ -148,7 +148,7 @@ export const getBanners = () => {
|
||||||
buildUsersAboveLimitBanner(ExpiringKeys.LICENSING_USERS_ABOVE_LIMIT_BANNER),
|
buildUsersAboveLimitBanner(ExpiringKeys.LICENSING_USERS_ABOVE_LIMIT_BANNER),
|
||||||
].filter(licensingBanner => {
|
].filter(licensingBanner => {
|
||||||
return (
|
return (
|
||||||
!temporalStore.actions.getExpiring(licensingBanner.key) &&
|
!temporalStore.getExpiring(licensingBanner.key) &&
|
||||||
licensingBanner.criteria()
|
licensingBanner.criteria()
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
import { createLocalStorageStore } from "@budibase/frontend-core"
|
|
||||||
import { get } from "svelte/store"
|
|
||||||
|
|
||||||
export const createTemporalStore = () => {
|
|
||||||
const initialValue = {}
|
|
||||||
|
|
||||||
const localStorageKey = `bb-temporal`
|
|
||||||
const store = createLocalStorageStore(localStorageKey, initialValue)
|
|
||||||
|
|
||||||
const setExpiring = (key, data, duration) => {
|
|
||||||
const updated = {
|
|
||||||
...data,
|
|
||||||
expiry: Date.now() + duration * 1000,
|
|
||||||
}
|
|
||||||
|
|
||||||
store.update(state => ({
|
|
||||||
...state,
|
|
||||||
[key]: updated,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
const getExpiring = key => {
|
|
||||||
const entry = get(store)[key]
|
|
||||||
if (!entry) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const currentExpiry = entry.expiry
|
|
||||||
if (currentExpiry < Date.now()) {
|
|
||||||
store.update(state => {
|
|
||||||
delete state[key]
|
|
||||||
return state
|
|
||||||
})
|
|
||||||
return null
|
|
||||||
} else {
|
|
||||||
return entry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
subscribe: store.subscribe,
|
|
||||||
actions: { setExpiring, getExpiring },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const temporalStore = createTemporalStore()
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
import { get } from "svelte/store"
|
||||||
|
import { BudiStore, PersistenceType } from "../BudiStore"
|
||||||
|
|
||||||
|
type TemporalItem = Record<string, any> & { expiry: number }
|
||||||
|
type TemporalState = Record<string, TemporalItem>
|
||||||
|
|
||||||
|
class TemporalStore extends BudiStore<TemporalState> {
|
||||||
|
constructor() {
|
||||||
|
super(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
persistence: {
|
||||||
|
key: "bb-temporal",
|
||||||
|
type: PersistenceType.LOCAL,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
setExpiring = (
|
||||||
|
key: string,
|
||||||
|
data: Record<string, any>,
|
||||||
|
durationSeconds: number
|
||||||
|
) => {
|
||||||
|
const updated: TemporalItem = {
|
||||||
|
...data,
|
||||||
|
expiry: Date.now() + durationSeconds * 1000,
|
||||||
|
}
|
||||||
|
this.update(state => ({
|
||||||
|
...state,
|
||||||
|
[key]: updated,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
getExpiring(key: string) {
|
||||||
|
const entry = get(this.store)[key]
|
||||||
|
if (!entry) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
const currentExpiry = entry.expiry
|
||||||
|
if (currentExpiry < Date.now()) {
|
||||||
|
this.update(state => {
|
||||||
|
delete state[key]
|
||||||
|
return state
|
||||||
|
})
|
||||||
|
return null
|
||||||
|
} else {
|
||||||
|
return entry
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const temporalStore = new TemporalStore()
|
Loading…
Reference in New Issue