From a7d6cc117b17596a662664fe9d417e0a08b577ee Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:35:08 +0100 Subject: [PATCH] TASK: simplify workspace tree node fusion integration --- .../Controller/WorkspaceController.php | 34 ++++++++++--------- .../Components/WorkspaceTable.fusion | 1 + .../Components/WorkspaceTreeNode.fusion | 9 +++-- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Neos.Workspace.Ui/Classes/Controller/WorkspaceController.php b/Neos.Workspace.Ui/Classes/Controller/WorkspaceController.php index c5c8023b60..daed6f3ac2 100644 --- a/Neos.Workspace.Ui/Classes/Controller/WorkspaceController.php +++ b/Neos.Workspace.Ui/Classes/Controller/WorkspaceController.php @@ -219,7 +219,7 @@ public function newAction(): void $contentRepositoryId = SiteDetectionResult::fromRequest($this->request->getHttpRequest())->contentRepositoryId; $contentRepository = $this->contentRepositoryRegistry->get($contentRepositoryId); - $this->view->assign('baseWorkspaceOptions', $this->prepareBaseWorkspaceOptions($contentRepository)); + $this->view->assign('baseWorkspaceOptions', $this->prepareBaseWorkspaceOptions($contentRepository, null)); } public function createAction( @@ -1104,39 +1104,41 @@ protected function postProcessDiffArray(array &$diffArray): void } /** - * Creates an array of workspace names and their respective titles which are possible base workspaces for other - * workspaces. - * If $excludedWorkspace is set, this workspace and all its base workspaces will be excluded from the list of returned workspaces + * Creates an array of workspace names and their respective titles which are possible base workspaces + * + * If $editedWorkspace is set, this workspace and all its nested workspaces will be excluded from the list of returned workspaces * * @return array */ protected function prepareBaseWorkspaceOptions( ContentRepository $contentRepository, - WorkspaceName $excludedWorkspace = null, + WorkspaceName|null $editedWorkspaceName ): array { $user = $this->userService->getCurrentUser(); $baseWorkspaceOptions = []; $workspaces = $contentRepository->findWorkspaces(); foreach ($workspaces as $workspace) { - if ( - $excludedWorkspace !== null) { - if ($workspace->workspaceName->equals($excludedWorkspace)) { + if ($editedWorkspaceName !== null) { + if ($workspace->workspaceName->equals($editedWorkspaceName)) { continue; } - if ( $workspaces->getBaseWorkspaces($workspace->workspaceName)->get( - $excludedWorkspace - ) !== null) { + if ($workspaces->getBaseWorkspaces($workspace->workspaceName)->get($editedWorkspaceName) !== null) { continue; } } - $workspaceMetadata = $this->workspaceService->getWorkspaceMetadata($contentRepository->id, $workspace->workspaceName); + $workspaceMetadata = $this->workspaceService->getWorkspaceMetadata( + $contentRepository->id, + $workspace->workspaceName + ); if (!in_array($workspaceMetadata->classification, [WorkspaceClassification::SHARED, WorkspaceClassification::ROOT], true)) { continue; } - if ($user === null) { - continue; - } - $permissions = $this->authorizationService->getWorkspacePermissions($contentRepository->id, $workspace->workspaceName, $this->securityContext->getRoles(), $user->getId()); + $permissions = $this->authorizationService->getWorkspacePermissions( + $contentRepository->id, + $workspace->workspaceName, + $this->securityContext->getRoles(), + $user?->getId() + ); if (!$permissions->read) { continue; } diff --git a/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTable.fusion b/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTable.fusion index 44c7bf6fff..d6314f39be 100644 --- a/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTable.fusion +++ b/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTable.fusion @@ -46,6 +46,7 @@ prototype(Neos.Workspace.Ui:Component.WorkspaceTable) < prototype(Neos.Fusion:Co entryWorkspace.baseWorkspaceName == 'live')} /> diff --git a/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTreeNode.fusion b/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTreeNode.fusion index 076cb303e5..78a5c2cccc 100644 --- a/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTreeNode.fusion +++ b/Neos.Workspace.Ui/Resources/Private/Fusion/Features/Workspace/Components/WorkspaceTreeNode.fusion @@ -6,23 +6,22 @@ prototype(Neos.Workspace.Ui:Component.WorkspaceTreeNode) < prototype(Neos.Fusion workspaceListItem = null /// Neos\Workspace\Ui\ViewModel\WorkspaceListItems workspaceListItems = null + // array + baseWorkspaceListItems = null /// int level = 0 - @private { - baseWorkspaceListItems = ${Array.filter(props.workspaceListItems, (workspaceListItem) => workspaceListItem.baseWorkspaceName == (props.workspaceListItem.name || 'live'))} - } - renderer = afx` - + workspace.baseWorkspaceName == workspaceListItem.name)} level={props.level + 1} />