import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { ActionAttribute, ActionMetadata, ActionStatus, ActionType, } from './types' export interface ActionState { id: string name: string type: ActionType metadata: ActionMetadata lAttributes: ActionAttribute[] pAttributes: ActionAttribute[] rAttributes: ActionAttribute[] } const defaultActionState: ActionState = { id: 'src=form_manual', name: 'src=form_manual', type: ActionType.SOURCE, metadata: { icon: 'heroicon:clipboard', label: 'Form / Manual', description: 'Manually enter data into a form.', status: ActionStatus.PUBLISHED, cost: 0, time: 0, }, lAttributes: [], pAttributes: [], rAttributes: [], } const initialState: ActionState[] = [] export const actionsSlice = createSlice({ name: 'actions', initialState, reducers: { addAction: (state, action: PayloadAction) => { state.push({ ...defaultActionState, ...action.payload }) }, addActionAsUnique: (state, action: PayloadAction) => { const noDuplicates = !state.filter(({ id }) => id === action.payload.id) .length if (noDuplicates) { state.push({ ...action.payload }) } return state }, removeAction: (state, action: PayloadAction>) => { const id = action.payload.id state = state.filter(action => action.id !== id) return state }, updateAction: (state, action: PayloadAction>) => { const id = action.payload.id const index = state.findIndex(action => action.id === id) state[index] = { ...state[index], ...action.payload } return state }, }, }) export const { addAction, addActionAsUnique, removeAction, updateAction, } = actionsSlice.actions export default actionsSlice.reducer