@coriolis/coriolis-svelte
Version:
Coriolis wrapper for Svelte
42 lines (33 loc) • 989 B
JavaScript
// eslint-disable-next-line import/no-unresolved
import { getContext, setContext } from 'svelte'
const KEY_GET_SOURCE = 'Coriolis store reference withProjection'
const KEY_DISPATCH = 'Coriolis store reference dispatch'
export const withProjection = (...args) => getContext(KEY_GET_SOURCE)(...args)
export const createDispatch = (builder) => {
const dispatch = getContext(KEY_DISPATCH)
return (...args) => {
const event = builder(...args)
if (!event) {
return
}
dispatch(event)
}
}
export const createStoreAPIProvider = () => {
let receivedStoreAPI
const setStoreAPI = (storeAPI) => {
receivedStoreAPI = storeAPI
}
const shareStoreAPI = () => {
if (!receivedStoreAPI) {
throw new Error('Store API to share has not been set')
}
const { dispatch, withProjection } = receivedStoreAPI
setContext(KEY_GET_SOURCE, withProjection)
setContext(KEY_DISPATCH, dispatch)
}
return {
setStoreAPI,
shareStoreAPI,
}
}