src/standalone/topbar-insert/index.js
import { OrderedMap, List } from "immutable"
import TopbarInsert from "./topbar-insert"
import TopbarModal from "./modal/Modal"
import InsertDropdown from "./dropdown/Dropdown"
import InsertDropdownItem from "./dropdown/DropdownItem"
import AddForm from "./forms/components/AddForm"
import FormChild from "./forms/components/FormChild"
import FormDropdown from "./forms/components/FormDropdown"
import FormInput from "./forms/components/FormInput"
import FormInputWrapper from "./forms/components/FormInputWrapper"
import FormMap from "./forms/components/FormMap"
import InsertForm from "./forms/components/InsertForm"
import InsertFormInput from "./forms/components/InsertFormInput"
import InsertFormList from "./forms/components/InsertFormList"
export default function () {
const ADD_TO_SPEC = "add_to_spec"
return {
components: {
TopbarInsert,
TopbarModal,
InsertDropdown,
InsertDropdownItem,
AddForm,
FormChild,
FormDropdown,
FormInput,
FormInputWrapper,
FormMap,
InsertForm,
InsertFormInput,
InsertFormList
},
statePlugins: {
spec: {
actions: {
addToSpec: (path, item, key) => ({
type: ADD_TO_SPEC,
payload: { path, item, key }
})
},
reducers: {
[ADD_TO_SPEC]: (state, { payload }) => {
const { path, item, key } = payload
let currentItem = state.getIn(["json", ...path])
if (!currentItem) {
currentItem = key ? new OrderedMap({ [key]: item }) : new List()
}
currentItem = key ? currentItem.set(key, item) : currentItem.concat(item)
return state.setIn(["json", ...path], currentItem)
}
}
}
}
}
}