mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
fix(editor): Correctly show Workflow Breadcrumbs in MainHeader on Registered Community (#15457)
This commit is contained in:
@@ -330,7 +330,7 @@ export class WorkflowsController {
|
|||||||
workflowId,
|
workflowId,
|
||||||
req.user,
|
req.user,
|
||||||
['workflow:read'],
|
['workflow:read'],
|
||||||
{ includeTags: !this.globalConfig.tags.disabled },
|
{ includeTags: !this.globalConfig.tags.disabled, includeParentFolder: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!workflow) {
|
if (!workflow) {
|
||||||
|
|||||||
@@ -123,4 +123,19 @@ describe('FolderBreadcrumbs', () => {
|
|||||||
expect(queryAllByTestId('breadcrumbs-item')).toHaveLength(2);
|
expect(queryAllByTestId('breadcrumbs-item')).toHaveLength(2);
|
||||||
expect(queryByTestId('ellipsis')).not.toBeInTheDocument();
|
expect(queryByTestId('ellipsis')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render personal project as fallback', () => {
|
||||||
|
foldersStore.getCachedFolder.mockReturnValue(TEST_FOLDER);
|
||||||
|
projectsStore.currentProject = null;
|
||||||
|
projectsStore.personalProject = TEST_PROJECT;
|
||||||
|
|
||||||
|
const { getByTestId } = renderComponent({
|
||||||
|
props: {
|
||||||
|
currentFolder: TEST_FOLDER_CHILD,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// Now, parent folder should also be visible
|
||||||
|
expect(getByTestId('folder-breadcrumbs')).toBeVisible();
|
||||||
|
expect(getByTestId('home-project')).toBeVisible();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ const hiddenBreadcrumbsItemsAsync = ref<Promise<PathItem[]>>(new Promise(() => {
|
|||||||
// This will be used to filter out items that are already visible in the breadcrumbs
|
// This will be used to filter out items that are already visible in the breadcrumbs
|
||||||
const visibleIds = ref<Set<string>>(new Set());
|
const visibleIds = ref<Set<string>>(new Set());
|
||||||
|
|
||||||
const currentProject = computed(() => projectsStore.currentProject);
|
const currentProject = computed(
|
||||||
|
() => projectsStore.currentProject ?? projectsStore.personalProject,
|
||||||
|
);
|
||||||
|
|
||||||
const projectName = computed(() => {
|
const projectName = computed(() => {
|
||||||
if (currentProject.value?.type === ProjectTypes.Personal) {
|
if (currentProject.value?.type === ProjectTypes.Personal) {
|
||||||
@@ -74,7 +76,7 @@ const visibleBreadcrumbsItems = computed<FolderPathItem[]>(() => {
|
|||||||
items.push({
|
items.push({
|
||||||
id: parent.id,
|
id: parent.id,
|
||||||
label: parent.name,
|
label: parent.name,
|
||||||
href: `/projects/${projectsStore.currentProjectId}/folders/${parent.id}/workflows`,
|
href: `/projects/${currentProject.value?.id}/folders/${parent.id}/workflows`,
|
||||||
parentFolder: parent.parentFolder,
|
parentFolder: parent.parentFolder,
|
||||||
});
|
});
|
||||||
visibleIds.value.add(parent.id);
|
visibleIds.value.add(parent.id);
|
||||||
@@ -84,11 +86,11 @@ const visibleBreadcrumbsItems = computed<FolderPathItem[]>(() => {
|
|||||||
label: props.currentFolder.name,
|
label: props.currentFolder.name,
|
||||||
parentFolder: props.currentFolder.parentFolder,
|
parentFolder: props.currentFolder.parentFolder,
|
||||||
href: props.currentFolderAsLink
|
href: props.currentFolderAsLink
|
||||||
? `/projects/${projectsStore.currentProjectId}/folders/${props.currentFolder.id}/workflows`
|
? `/projects/${currentProject.value?.id}/folders/${props.currentFolder.id}/workflows`
|
||||||
: undefined,
|
: undefined,
|
||||||
});
|
});
|
||||||
if (projectsStore.currentProjectId) {
|
if (currentProject.value) {
|
||||||
visibleIds.value.add(projectsStore.currentProjectId);
|
visibleIds.value.add(currentProject.value.id);
|
||||||
}
|
}
|
||||||
visibleIds.value.add(props.currentFolder.id);
|
visibleIds.value.add(props.currentFolder.id);
|
||||||
|
|
||||||
@@ -96,12 +98,12 @@ const visibleBreadcrumbsItems = computed<FolderPathItem[]>(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const fetchHiddenBreadCrumbsItems = async () => {
|
const fetchHiddenBreadCrumbsItems = async () => {
|
||||||
if (!projectName.value || !props.currentFolder?.parentFolder || !projectsStore.currentProjectId) {
|
if (!projectName.value || !props.currentFolder?.parentFolder || !currentProject.value) {
|
||||||
hiddenBreadcrumbsItemsAsync.value = Promise.resolve([]);
|
hiddenBreadcrumbsItemsAsync.value = Promise.resolve([]);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const loadedItems = foldersStore.getHiddenBreadcrumbsItems(
|
const loadedItems = foldersStore.getHiddenBreadcrumbsItems(
|
||||||
{ id: projectsStore.currentProjectId, name: projectName.value },
|
{ id: currentProject.value.id, name: projectName.value },
|
||||||
props.currentFolder.parentFolder,
|
props.currentFolder.parentFolder,
|
||||||
{ addLinks: true },
|
{ addLinks: true },
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -679,7 +679,11 @@ const onBreadcrumbsItemSelected = (item: PathItem) => {
|
|||||||
@item-selected="onBreadcrumbsItemSelected"
|
@item-selected="onBreadcrumbsItemSelected"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<span v-if="projectsStore.currentProject" :class="$style['path-separator']">/</span>
|
<span
|
||||||
|
v-if="projectsStore.currentProject ?? projectsStore.personalProject"
|
||||||
|
:class="$style['path-separator']"
|
||||||
|
>/</span
|
||||||
|
>
|
||||||
<ShortenName :name="name" :limit="value" :custom="true" test-id="workflow-name-input">
|
<ShortenName :name="name" :limit="value" :custom="true" test-id="workflow-name-input">
|
||||||
<template #default="{ shortenedName }">
|
<template #default="{ shortenedName }">
|
||||||
<InlineTextEdit
|
<InlineTextEdit
|
||||||
|
|||||||
Reference in New Issue
Block a user