2025-07-20 23:06:56 +07:00
|
|
|
import { Storage } from '@revenge-mod/storage'
|
|
|
|
|
import { useReRender } from '@revenge-mod/utils/react'
|
2025-09-17 16:53:08 +07:00
|
|
|
import { useLayoutEffect } from 'react'
|
2025-07-20 23:06:56 +07:00
|
|
|
import type { StorageSubscription } from '@revenge-mod/storage'
|
|
|
|
|
|
2025-09-17 16:53:08 +07:00
|
|
|
const proto = Storage.prototype as Storage<any>
|
2025-07-20 23:06:56 +07:00
|
|
|
// Actual implementation of Storage#use
|
2025-09-17 16:53:08 +07:00
|
|
|
proto.use = function (filter) {
|
2025-07-20 23:06:56 +07:00
|
|
|
if (!this.cache) this.get()
|
|
|
|
|
|
|
|
|
|
const reRender = useReRender()
|
|
|
|
|
|
2025-09-17 16:53:08 +07:00
|
|
|
useLayoutEffect(() => {
|
2025-07-20 23:06:56 +07:00
|
|
|
const sub: StorageSubscription = filter
|
2025-09-17 16:53:08 +07:00
|
|
|
? (update, mode) => {
|
|
|
|
|
if (filter(update, mode)) reRender()
|
2025-07-20 23:06:56 +07:00
|
|
|
}
|
|
|
|
|
: reRender
|
|
|
|
|
|
2025-08-11 16:39:23 +07:00
|
|
|
return this.subscribe(sub)
|
|
|
|
|
}, [filter, reRender])
|
2025-07-20 23:06:56 +07:00
|
|
|
|
|
|
|
|
return this.cache
|
|
|
|
|
}
|