feat: Create a dynamic action

This commit is contained in:
Blu-J
2023-05-31 10:21:53 -06:00
parent a98ccb4590
commit 7454f9a42a
4 changed files with 63 additions and 18 deletions

View File

@@ -1,24 +1,34 @@
import { Effects, ExpectedExports } from "../types"
import { createUtils } from "../util"
import { once } from "../util/once"
import { Utils } from "../util/utils"
import { CreatedAction } from "./createAction"
export function setupActions<Store>(
...createdActions: CreatedAction<Store, any>[]
) {
const myActions = once(() => {
const myActions = async (options: {
effects: Effects
utils: Utils<Store>
}) => {
const actions: Record<string, CreatedAction<Store, any>> = {}
for (const action of createdActions) {
actions[action.myMetaData.id] = action
const actionMetadata = await action.metaData(options)
actions[actionMetadata.id] = action
}
return actions
})
}
const answer: {
actions: ExpectedExports.actions
actionsMetadata: ExpectedExports.actionsMetadata
} = {
get actions() {
return myActions()
actions(options: { effects: Effects }) {
const utils = createUtils<Store>(options.effects)
return myActions({
...options,
utils,
})
},
async actionsMetadata({ effects }: { effects: Effects }) {
const utils = createUtils<Store>(effects)