Files
start-sdk/lib/actions/setupActions.ts
2023-05-30 17:36:30 -06:00

32 lines
896 B
TypeScript

import { Effects, ExpectedExports } from "../types"
import { createUtils } from "../util"
import { once } from "../util/once"
import { CreatedAction } from "./createAction"
export function setupActions<Store>(
...createdActions: CreatedAction<Store, any>[]
) {
const myActions = once(() => {
const actions: Record<string, CreatedAction<Store, any>> = {}
for (const action of createdActions) {
actions[action.myMetaData.id] = action
}
return actions
})
const answer: {
actions: ExpectedExports.actions
actionsMetadata: ExpectedExports.actionsMetadata
} = {
get actions() {
return myActions()
},
async actionsMetadata({ effects }: { effects: Effects }) {
const utils = createUtils<Store>(effects)
return Promise.all(
createdActions.map((x) => x.ActionMetadata({ effects, utils })),
)
},
}
return answer
}