bugfix: views duplicated

This commit is contained in:
Michael Shanks 2020-03-24 10:57:54 +00:00
parent 6ab3003106
commit 9ee1132185
2 changed files with 38 additions and 14 deletions

View File

@ -12,6 +12,7 @@ import {
validate,
constructHierarchy,
templateApi,
isIndex,
} from "../../common/core"
export const getBackendUiStore = () => {
@ -81,6 +82,20 @@ export const saveBackend = async state => {
},
accessLevels: state.accessLevels,
})
const instances_currentFirst = state.selectedDatabase
? [
state.appInstances.find(i => i.id === state.selectedDatabase.id),
...state.appInstances.filter(i => i.id !== state.selectedDatabase.id),
]
: state.appInstances
for (let instance of instances_currentFirst) {
await api.post(
`/_builder/instance/${state.appname}/${instance.id}/api/upgradeData`,
{ newHierarchy: state.hierarchy }
)
}
}
export const newRecord = (store, useRoot) => () => {
@ -111,14 +126,16 @@ export const selectExistingNode = store => nodeId => {
export const newIndex = (store, useRoot) => () => {
store.update(state => {
const shadowHierarchy = createShadowHierarchy(state.hierarchy)
state.shadowHierarchy = createShadowHierarchy(state.hierarchy)
state.currentNodeIsNew = true
state.errors = []
const parent = useRoot
? state.hierarchy
: getNode(state.hierarchy, state.currentNode.nodeId)
? state.shadowHierarchy
: getNode(state.shadowHierarchy, state.currentNode.nodeId)
state.currentNode = templateApi(shadowHierarchy).getNewIndexTemplate(parent)
state.currentNode = templateApi(state.shadowHierarchy).getNewIndexTemplate(
parent
)
return state
})
}
@ -130,7 +147,10 @@ export const saveCurrentNode = store => () => {
if (errors.length > 0) {
return state
}
const parentNode = getNode(state.hierarchy, state.currentNode.parent().nodeId)
const parentNode = getNode(
state.hierarchy,
state.currentNode.parent().nodeId
)
const existingNode = getNode(state.hierarchy, state.currentNode.nodeId)
@ -138,21 +158,27 @@ export const saveCurrentNode = store => () => {
if (existingNode) {
// remove existing
index = existingNode.parent().children.indexOf(existingNode)
existingNode.parent().children = existingNode.parent().children.filter(node => node.nodeId !== existingNode.nodeId);
if (isIndex(existingNode)) {
parentNode.indexes = parentNode.indexes.filter(
node => node.nodeId !== existingNode.nodeId
)
} else {
parentNode.children = parentNode.children.filter(
node => node.nodeId !== existingNode.nodeId
)
}
}
// should add node into existing hierarchy
const cloned = cloneDeep(state.currentNode)
templateApi(state.hierarchy).constructNode(parentNode, cloned)
const newIndexOfChild = child => {
if (child === cloned) return index
const currentIndex = parentNode.children.indexOf(child)
return currentIndex >= index ? currentIndex + 1 : currentIndex
if (isIndex(existingNode)) {
parentNode.children = sortBy("name", parentNode.children)
} else {
parentNode.indexes = sortBy("name", parentNode.indexes)
}
parentNode.children = sortBy(newIndexOfChild, parentNode.children)
if (!existingNode && state.currentNode.type === "record") {
const defaultIndex = templateApi(state.hierarchy).getNewIndexTemplate(
cloned.parent()

View File

@ -192,7 +192,6 @@ const useAnalytics = store => () => {
})
}
const importAppDefinition = store => appDefinition => {
store.update(s => {
s.hierarchy = appDefinition.hierarchy
@ -207,7 +206,6 @@ const importAppDefinition = store => appDefinition => {
})
}
const createShadowHierarchy = hierarchy =>
constructHierarchy(JSON.parse(JSON.stringify(hierarchy)))