Skip to content

Commit fac1198

Browse files
authored
Fix tab close activating first tab instead of next tab (#3362)
1 parent 27775e7 commit fac1198

747 files changed

Lines changed: 30030 additions & 33 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

assets/js/src/core/modules/widget-manager/widget-manager-slice.ts

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* @license Pimcore Open Core License (POCL)
99
*/
1010

11+
import { isUndefined } from 'lodash'
1112
import { injectSliceWithState } from '@sdk/app'
1213
import { type PayloadAction, createSlice } from '@reduxjs/toolkit'
1314
import { type IJsonModel, type IJsonTabNode, Model, Actions, DockLocation, type Node, BorderNode } from 'flexlayout-react'
@@ -47,6 +48,24 @@ export const initialState: WidgetManagerState = {
4748
mainWidgetContext: null
4849
}
4950

51+
const getNextTabId = (node: Node): string | undefined => {
52+
const parent = node.getParent()
53+
54+
if (isUndefined(parent)) {
55+
return undefined
56+
}
57+
58+
const siblings = parent.getChildren()
59+
const closedIndex = siblings.findIndex((child) => child.getId() === node.getId())
60+
61+
if (siblings.length <= 1) {
62+
return undefined
63+
}
64+
65+
const nextIndex = closedIndex < siblings.length - 1 ? closedIndex + 1 : closedIndex - 1
66+
return siblings[nextIndex].getId()
67+
}
68+
5069
const slice = createSlice({
5170
name: 'widget-manager',
5271

@@ -223,45 +242,18 @@ const slice = createSlice({
223242
}
224243

225244
if (node !== undefined) {
245+
const nextTabId = isOuterModelNode ? undefined : getNextTabId(node)
246+
226247
model.doAction(Actions.deleteTab(node.getId()))
248+
249+
if (!isUndefined(nextTabId) && !isUndefined(model.getNodeById(nextTabId))) {
250+
model.doAction(Actions.selectTab(nextTabId))
251+
}
227252
}
228253

229254
if (isOuterModelNode) {
230255
state.outerModel = { ...model.toJson() }
231256
} else {
232-
const currentTabset = model.getActiveTabset()
233-
let hasValidNode = false
234-
235-
if (currentTabset !== undefined) {
236-
const currentNode = currentTabset.getChildren()?.[0]
237-
238-
if (currentNode !== undefined) {
239-
model.doAction(Actions.selectTab(currentNode.getId()))
240-
hasValidNode = true
241-
}
242-
}
243-
244-
if (!hasValidNode) {
245-
const firstTabset = model.getFirstTabSet()
246-
const parent = firstTabset.getParent()
247-
248-
const tabsets = parent!.getChildren()
249-
let validChildNode: Node | undefined
250-
251-
for (const tabset of tabsets) {
252-
const childNodes = tabset.getChildren()
253-
254-
if (childNodes.length > 0) {
255-
validChildNode = childNodes[0]
256-
break
257-
};
258-
}
259-
260-
if (validChildNode !== undefined) {
261-
model.doAction(Actions.selectTab(validChildNode.getId()))
262-
}
263-
}
264-
265257
state.innerModel = { ...model.toJson() }
266258
}
267259
}

public/build/843902c1-cb44-424c-899b-a3e57eebc643/documentEditorIframe.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/entrypoints.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/exposeRemote.js

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/main.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/manifest.json

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/mf-manifest.json

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/843902c1-cb44-424c-899b-a3e57eebc643/mf-stats.json

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)