32 lines
669 B
JavaScript
32 lines
669 B
JavaScript
import { writable, get } from "svelte/store"
|
|
|
|
const createEventStore = () => {
|
|
const initialState = {
|
|
eventResolvers: {},
|
|
}
|
|
const store = writable(initialState)
|
|
|
|
const actions = {
|
|
dispatchEvent: (type, data) => {
|
|
const id = Math.random()
|
|
return new Promise(resolve => {
|
|
window.parent.postMessage({ type, data, id })
|
|
store.update(state => {
|
|
state.eventResolvers[id] = resolve
|
|
return state
|
|
})
|
|
})
|
|
},
|
|
resolveEvent: data => {
|
|
get(store).eventResolvers[data]?.()
|
|
},
|
|
}
|
|
|
|
return {
|
|
subscribe: store.subscribe,
|
|
actions,
|
|
}
|
|
}
|
|
|
|
export const eventStore = createEventStore()
|