Files
archived-linsa/web/app/lib/utils/jazz.ts
2024-11-04 16:45:29 +07:00

40 lines
718 B
TypeScript

import {
Account,
CoValue,
CoValueClass,
DepthsIn,
ID,
subscribeToCoValue,
} from "jazz-tools"
export function waitForCoValue<T extends CoValue>(
coMap: CoValueClass<T>,
valueId: ID<T>,
account: Account,
predicate: (value: T) => boolean,
depth: DepthsIn<T>,
) {
return new Promise<T>((resolve) => {
function subscribe() {
const unsubscribe = subscribeToCoValue(
coMap,
valueId,
account,
depth,
(value) => {
if (predicate(value)) {
resolve(value)
unsubscribe()
}
},
() => {
unsubscribe()
setTimeout(subscribe, 100)
},
)
}
subscribe()
})
}