This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 9de1159151 refactor: Migrate assets to control flow syntax (#3993)
9de1159151 is described below

commit 9de1159151d8f48527b20817c809f8d9a9b7e494
Author: Philipp Zehnder <[email protected]>
AuthorDate: Fri Nov 28 15:27:45 2025 +0100

    refactor: Migrate assets to control flow syntax (#3993)
---
 .../asset-details-basics.component.html            |  74 +-
 .../asset-details-labels.component.html            | 192 ++---
 .../asset-details-site.component.html              |  80 ++-
 .../asset-location/asset-location.component.html   |  64 +-
 .../asset-details-links.component.html             | 106 +--
 .../asset-link-item/asset-link-item.component.html |  71 +-
 .../asset-link-section.component.html              |  71 +-
 .../edit-asset/asset-details.component.html        | 175 ++---
 .../asset-selection-panel.component.html           | 265 +++----
 .../view-asset-basics.component.html               |  87 +--
 .../view-asset/view-asset.component.html           | 132 ++--
 .../asset-overview/asset-overview.component.html   |  99 +--
 .../edit-asset-link-dialog.component.html          | 455 ++++++------
 .../manage-asset-links-dialog.component.html       | 778 +++++++++++----------
 14 files changed, 1375 insertions(+), 1274 deletions(-)

diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
index 6315e08ed2..07f6574559 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-basics.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div class="page-container-padding-inner">
     <sp-basic-header-title-component
@@ -90,12 +90,13 @@
                         [(ngModel)]="asset.assetType.isa95AssetType"
                         aria-label="Asset Type"
                     >
-                        <mat-option
-                            *ngFor="let isaType of isa95Types"
-                            [value]="isaType.type"
-                            [attr.data-cy]="'option-' + isaType.type"
-                            >{{ isaType.label }}
-                        </mat-option>
+                        @for (isaType of isa95Types; track isaType) {
+                            <mat-option
+                                [value]="isaType.type"
+                                [attr.data-cy]="'option-' + isaType.type"
+                                >{{ isaType.label }}
+                            </mat-option>
+                        }
                     </mat-select>
                 </mat-form-field>
             </sp-basic-field-description>
@@ -112,21 +113,22 @@
                 >
                 </sp-asset-details-labels>
             </sp-basic-field-description>
-            <sp-basic-field-description
-                *ngIf="rootNode"
-                fxFlex="100"
-                descriptionPanelWidth="30"
-                label="Sites"
-                description="Assign a location (site and area) to this asset"
-            >
-                <sp-asset-details-site
-                    class="w-100"
-                    [asset]="asset"
-                    [sites]="sites"
-                    [editMode]="editMode"
+            @if (rootNode) {
+                <sp-basic-field-description
+                    fxFlex="100"
+                    descriptionPanelWidth="30"
+                    label="Sites"
+                    description="Assign a location (site and area) to this 
asset"
                 >
-                </sp-asset-details-site>
-            </sp-basic-field-description>
+                    <sp-asset-details-site
+                        class="w-100"
+                        [asset]="asset"
+                        [sites]="sites"
+                        [editMode]="editMode"
+                    >
+                    </sp-asset-details-site>
+                </sp-basic-field-description>
+            }
         </div>
     </div>
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
index 0566e1a7a4..04953ed65b 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-labels/asset-details-labels.component.html
@@ -1,98 +1,108 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
-<div *ngIf="editMode">
-    <div fxLayout="row" fxLayoutGap="15px" fxLayoutAlign="start center">
-        <div fxFlex fxLayoutAlign="start center">
-            <mat-form-field
-                class="w-100"
-                *ngIf="labelsAvailable"
-                color="accent"
-                subscriptSizing="dynamic"
-                [disabled]="allLabels.length === 0"
-            >
-                <mat-chip-grid #chipGrid aria-label="Labels">
-                    <mat-chip-row
-                        (removed)="remove(label)"
-                        *ngFor="let label of labels"
-                        [ngStyle]="{ background: label.color }"
+@if (editMode) {
+    <div>
+        <div fxLayout="row" fxLayoutGap="15px" fxLayoutAlign="start center">
+            <div fxFlex fxLayoutAlign="start center">
+                @if (labelsAvailable) {
+                    <mat-form-field
+                        class="w-100"
+                        color="accent"
+                        subscriptSizing="dynamic"
+                        [disabled]="allLabels.length === 0"
                     >
-                        <span
-                            [ngStyle]="{ color: labelTextColors[label._id] }"
-                            >{{ label.label }}</span
+                        <mat-chip-grid #chipGrid aria-label="Labels">
+                            @for (label of labels; track label) {
+                                <mat-chip-row
+                                    (removed)="remove(label)"
+                                    [ngStyle]="{ background: label.color }"
+                                >
+                                    <span
+                                        [ngStyle]="{
+                                            color: labelTextColors[label._id]
+                                        }"
+                                        >{{ label.label }}</span
+                                    >
+                                    <button
+                                        matChipRemove
+                                        [ngStyle]="{
+                                            color: labelTextColors[label._id]
+                                        }"
+                                    >
+                                        <mat-icon>cancel</mat-icon>
+                                    </button>
+                                </mat-chip-row>
+                            }
+                        </mat-chip-grid>
+                        <input
+                            [placeholder]="
+                                allLabels.length === 0
+                                    ? 'No labels available - Click \'Manage 
Labels\''
+                                    : 'Click to add label'
+                            "
+                            data-cy="asset-label-input"
+                            #labelInput
+                            [formControl]="labelCtrl"
+                            [matChipInputFor]="chipGrid"
+                            [matAutocomplete]="auto"
+                            
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
+                            (matChipInputTokenEnd)="add($event)"
+                            [disabled]="allLabels.length === 0"
+                        />
+                        <mat-autocomplete
+                            #auto="matAutocomplete"
+                            (optionSelected)="selected($event)"
                         >
-                        <button
-                            matChipRemove
-                            [ngStyle]="{ color: labelTextColors[label._id] }"
-                        >
-                            <mat-icon>cancel</mat-icon>
-                        </button>
-                    </mat-chip-row>
-                </mat-chip-grid>
-                <input
-                    [placeholder]="
-                        allLabels.length === 0
-                            ? 'No labels available - Click \'Manage Labels\''
-                            : 'Click to add label'
-                    "
-                    data-cy="asset-label-input"
-                    #labelInput
-                    [formControl]="labelCtrl"
-                    [matChipInputFor]="chipGrid"
-                    [matAutocomplete]="auto"
-                    [matChipInputSeparatorKeyCodes]="separatorKeysCodes"
-                    (matChipInputTokenEnd)="add($event)"
-                    [disabled]="allLabels.length === 0"
-                />
-                <mat-autocomplete
-                    #auto="matAutocomplete"
-                    (optionSelected)="selected($event)"
+                            @for (
+                                label of filteredLabels | async;
+                                track label
+                            ) {
+                                <mat-option
+                                    [value]="label._id"
+                                    [attr.data-cy]="'option-' + label.label"
+                                    >{{ label.label }}</mat-option
+                                >
+                            }
+                        </mat-autocomplete>
+                    </mat-form-field>
+                }
+            </div>
+            <div fxLayoutAlign="start center">
+                <button
+                    mat-flat-button
+                    color="accent"
+                    [routerLink]="['/configuration/labels']"
                 >
-                    @for (label of filteredLabels | async; track label) {
-                        <mat-option
-                            [value]="label._id"
-                            [attr.data-cy]="'option-' + label.label"
-                            >{{ label.label }}</mat-option
-                        >
-                    }
-                </mat-autocomplete>
-            </mat-form-field>
-        </div>
-        <div fxLayoutAlign="start center">
-            <button
-                mat-flat-button
-                color="accent"
-                [routerLink]="['/configuration/labels']"
-            >
-                Manage Labels
-            </button>
+                    Manage Labels
+                </button>
+            </div>
         </div>
     </div>
-</div>
-<div
-    *ngIf="!editMode && labelsAvailable"
-    fxLayout="row wrap"
-    fxLayoutGap="10px"
->
-    <sp-label
-        *ngFor="let label of labels"
-        [labelText]="label.label"
-        [small]="true"
-        [labelBackground]="label.color"
-    ></sp-label>
-</div>
+}
+@if (!editMode && labelsAvailable) {
+    <div fxLayout="row wrap" fxLayoutGap="10px">
+        @for (label of labels; track label) {
+            <sp-label
+                [labelText]="label.label"
+                [small]="true"
+                [labelBackground]="label.color"
+            ></sp-label>
+        }
+    </div>
+}
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
index 5b3f328cc1..dfd9be0f39 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-details-site.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div fxLayout="column">
     <div fxLayout="row" fxLayoutGap="15px" fxLayoutAlign="start center">
@@ -30,13 +30,14 @@
                     [(ngModel)]="asset.assetSite.siteId"
                     (selectionChange)="handleLocationChange($event)"
                 >
-                    <mat-option
-                        *ngFor="let site of sites"
-                        [attr.data-cy]="'option-' + site.label"
-                        [value]="site._id"
-                    >
-                        {{ site.label }}
-                    </mat-option>
+                    @for (site of sites; track site) {
+                        <mat-option
+                            [attr.data-cy]="'option-' + site.label"
+                            [value]="site._id"
+                        >
+                            {{ site.label }}
+                        </mat-option>
+                    }
                 </mat-select>
             </mat-form-field>
         </div>
@@ -51,18 +52,23 @@
         </div>
     </div>
 
-    <mat-form-field color="accent" class="mt-10 w-100" *ngIf="currentSite">
-        <mat-label>Area</mat-label>
-        <mat-select [disabled]="!editMode" [(ngModel)]="asset.assetSite.area">
-            <mat-option *ngFor="let area of currentSite.areas" [value]="area">
-                {{ area }}
-            </mat-option>
-        </mat-select>
-    </mat-form-field>
-    <sp-asset-location
-        [asset]="asset"
-        [editMode]="editMode"
-        *ngIf="asset.assetSite?.siteId"
-    >
-    </sp-asset-location>
+    @if (currentSite) {
+        <mat-form-field color="accent" class="mt-10 w-100">
+            <mat-label>Area</mat-label>
+            <mat-select
+                [disabled]="!editMode"
+                [(ngModel)]="asset.assetSite.area"
+            >
+                @for (area of currentSite.areas; track area) {
+                    <mat-option [value]="area">
+                        {{ area }}
+                    </mat-option>
+                }
+            </mat-select>
+        </mat-form-field>
+    }
+    @if (asset.assetSite?.siteId) {
+        <sp-asset-location [asset]="asset" [editMode]="editMode">
+        </sp-asset-location>
+    }
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-location/asset-location.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-location/asset-location.component.html
index 64443f8483..277a628790 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-location/asset-location.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-basics/asset-details-site/asset-location/asset-location.component.html
@@ -1,34 +1,38 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
-<div fxFlex="100" *ngIf="locationConfig && locationConfig.locationEnabled">
-    <mat-checkbox
-        [disabled]="!editMode"
-        [(ngModel)]="asset.assetSite.hasExactLocation"
-    >
-        Add exact location
-    </mat-checkbox>
-    <div *ngIf="asset.assetSite.hasExactLocation">
-        <sp-single-marker-map
-            [readonly]="!editMode"
-            [assetLocation]="asset.assetSite.location"
-            [locationConfig]="locationConfig"
+@if (locationConfig && locationConfig.locationEnabled) {
+    <div fxFlex="100">
+        <mat-checkbox
+            [disabled]="!editMode"
+            [(ngModel)]="asset.assetSite.hasExactLocation"
         >
-        </sp-single-marker-map>
+            Add exact location
+        </mat-checkbox>
+        @if (asset.assetSite.hasExactLocation) {
+            <div>
+                <sp-single-marker-map
+                    [readonly]="!editMode"
+                    [assetLocation]="asset.assetSite.location"
+                    [locationConfig]="locationConfig"
+                >
+                </sp-single-marker-map>
+            </div>
+        }
     </div>
-</div>
+}
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-details-links.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-details-links.component.html
index 491fa21b02..2e531ca0dd 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-details-links.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-details-links.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div class="page-container-padding-inner">
     <sp-basic-header-title-component
@@ -28,43 +28,45 @@
             fxFlex="100"
             fxLayoutGap="10px"
         >
-            <button
-                [disabled]="!assetLinksLoaded"
-                mat-flat-button
-                color="accent"
-                *ngIf="editMode"
-                (click)="openManageAssetLinksDialog()"
-                data-cy="assets-manage-links-button"
-            >
-                <i class="material-icons">add</i><span>&nbsp;Manage 
links</span>
-            </button>
-            <button
-                [disabled]="!assetLinksLoaded"
-                mat-flat-button
-                color="accent"
-                *ngIf="editMode"
-                (click)="openCreateAssetLinkDialog()"
-            >
-                <i class="material-icons">add</i><span>&nbsp;Add link</span>
-            </button>
-        </div>
-        <div
-            fxLayout="column"
-            fxFlex="100"
-            *ngIf="assetLinkTypes"
-            class="mt-10"
-        >
-            <div *ngFor="let assetLinkType of assetLinkTypes">
-                <sp-asset-link-section
-                    [assetLinkType]="assetLinkType"
-                    [asset]="asset"
-                    [editMode]="editMode"
-                    (openEditAssetLinkEmitter)="
-                        openEditAssetLinkDialog($event, false)
-                    "
+            @if (editMode) {
+                <button
+                    [disabled]="!assetLinksLoaded"
+                    mat-flat-button
+                    color="accent"
+                    (click)="openManageAssetLinksDialog()"
+                    data-cy="assets-manage-links-button"
                 >
-                </sp-asset-link-section>
-            </div>
+                    <i class="material-icons">add</i
+                    ><span>&nbsp;Manage links</span>
+                </button>
+            }
+            @if (editMode) {
+                <button
+                    [disabled]="!assetLinksLoaded"
+                    mat-flat-button
+                    color="accent"
+                    (click)="openCreateAssetLinkDialog()"
+                >
+                    <i class="material-icons">add</i><span>&nbsp;Add 
link</span>
+                </button>
+            }
         </div>
+        @if (assetLinkTypes) {
+            <div fxLayout="column" fxFlex="100" class="mt-10">
+                @for (assetLinkType of assetLinkTypes; track assetLinkType) {
+                    <div>
+                        <sp-asset-link-section
+                            [assetLinkType]="assetLinkType"
+                            [asset]="asset"
+                            [editMode]="editMode"
+                            (openEditAssetLinkEmitter)="
+                                openEditAssetLinkDialog($event, false)
+                            "
+                        >
+                        </sp-asset-link-section>
+                    </div>
+                }
+            </div>
+        }
     </div>
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-item/asset-link-item.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-item/asset-link-item.component.html
index 5f5249522e..b6e257c5ab 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-item/asset-link-item.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-item/asset-link-item.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div fxFlex="100" fxLayout="column">
     <div fxLayout="row" fxLayoutGap="10px">
@@ -32,30 +32,21 @@
         </div>
         <div fxFlex></div>
         <div fxLayoutAlign="end center">
-            <button
-                mat-icon-button
-                color="accent"
-                (click)="openLink()"
-                *ngIf="assetLink.navigationActive"
-            >
-                <i class="material-icons">link</i>
-            </button>
-            <button
-                mat-icon-button
-                color="accent"
-                (click)="editLink()"
-                *ngIf="editMode"
-            >
-                <i class="material-icons">edit</i>
-            </button>
-            <button
-                mat-icon-button
-                color="accent"
-                (click)="deleteLink()"
-                *ngIf="editMode"
-            >
-                <i class="material-icons">delete</i>
-            </button>
+            @if (assetLink.navigationActive) {
+                <button mat-icon-button color="accent" (click)="openLink()">
+                    <i class="material-icons">link</i>
+                </button>
+            }
+            @if (editMode) {
+                <button mat-icon-button color="accent" (click)="editLink()">
+                    <i class="material-icons">edit</i>
+                </button>
+            }
+            @if (editMode) {
+                <button mat-icon-button color="accent" (click)="deleteLink()">
+                    <i class="material-icons">delete</i>
+                </button>
+            }
         </div>
     </div>
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-section.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-section.component.html
index 8d936f3f62..0c9715cb86 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-section.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details-panel/asset-details-links/asset-link-section/asset-link-section.component.html
@@ -1,40 +1,43 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div class="asset-section">
     <div class="section-header">{{ assetLinkType.linkLabel }}</div>
-    <div
-        fxLayout="column"
-        class="asset-section-entry"
-        data-cy="linked-resources-list"
-        *ngFor="
-            let link of asset.assetLinks
-                | assetTypeFilter: assetLinkType.linkType
-        "
-    >
-        <sp-asset-link-item
-            [assetLink]="link"
-            [assetLinkType]="assetLinkType"
-            [editMode]="editMode"
-            (openEditAssetLinkEmitter)="openEditAssetLinkEmitter.emit($event)"
-            (deleteAssetLinkEmitter)="deleteAssetLink($event)"
-            class="asset-link-item"
+    @for (
+        link of asset.assetLinks | assetTypeFilter: assetLinkType.linkType;
+        track link
+    ) {
+        <div
+            fxLayout="column"
+            class="asset-section-entry"
+            data-cy="linked-resources-list"
         >
-        </sp-asset-link-item>
-    </div>
+            <sp-asset-link-item
+                [assetLink]="link"
+                [assetLinkType]="assetLinkType"
+                [editMode]="editMode"
+                (openEditAssetLinkEmitter)="
+                    openEditAssetLinkEmitter.emit($event)
+                "
+                (deleteAssetLinkEmitter)="deleteAssetLink($event)"
+                class="asset-link-item"
+            >
+            </sp-asset-link-item>
+        </div>
+    }
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
index d78ee9bbf4..b0eac60d26 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-details.component.html
@@ -1,94 +1,99 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
-<sp-asset-selection-panel
-    *ngIf="asset"
-    [editMode]="true"
-    [assetModel]="asset"
-    [selectedAsset]="selectedAsset"
-    (selectedAssetEmitter)="applySelectedAsset($event)"
->
-    <sp-basic-view
-        [showBackLink]="true"
-        [backLinkTarget]="['assets']"
-        [padding]="false"
+@if (asset) {
+    <sp-asset-selection-panel
+        [editMode]="true"
+        [assetModel]="asset"
+        [selectedAsset]="selectedAsset"
+        (selectedAssetEmitter)="applySelectedAsset($event)"
     >
-        <div
-            nav
-            fxFlex="100"
-            fxLayoutAlign="start center"
-            fxLayout="row"
-            class="pl-10"
+        <sp-basic-view
+            [showBackLink]="true"
+            [backLinkTarget]="['assets']"
+            [padding]="false"
         >
-            <div fxLayout="row" fxLayoutAlign="start center">
-                <div fxFlex>
-                    <button
-                        mat-button
-                        mat-flat-button
-                        data-cy="save-asset"
-                        color="accent"
-                        (click)="saveAsset()"
+            <div
+                nav
+                fxFlex="100"
+                fxLayoutAlign="start center"
+                fxLayout="row"
+                class="pl-10"
+            >
+                <div fxLayout="row" fxLayoutAlign="start center">
+                    <div fxFlex>
+                        <button
+                            mat-button
+                            mat-flat-button
+                            data-cy="save-asset"
+                            color="accent"
+                            (click)="saveAsset()"
+                        >
+                            <i class="material-icons">save</i
+                            ><span>&nbsp;Save</span>
+                        </button>
+                    </div>
+                    <div
+                        fxLayout="row"
+                        class="navbar-margin"
+                        fxLayoutAlign="end center"
                     >
-                        <i class="material-icons">save</i
-                        ><span>&nbsp;Save</span>
-                    </button>
+                        <nav mat-tab-nav-bar color="accent">
+                            <a
+                                mat-tab-link
+                                data-cy="basic-tab"
+                                [active]="activeTab === 'basic'"
+                                (click)="activeTab = 'basic'"
+                                >Basics</a
+                            >
+                            <a
+                                mat-tab-link
+                                data-cy="asset-links-tab"
+                                [active]="activeTab === 'asset-links'"
+                                (click)="activeTab = 'asset-links'"
+                                >Asset Links</a
+                            >
+                        </nav>
+                    </div>
                 </div>
-                <div
-                    fxLayout="row"
-                    class="navbar-margin"
-                    fxLayoutAlign="end center"
-                >
-                    <nav mat-tab-nav-bar color="accent">
-                        <a
-                            mat-tab-link
-                            data-cy="basic-tab"
-                            [active]="activeTab === 'basic'"
-                            (click)="activeTab = 'basic'"
-                            >Basics</a
+                <div fxFlex fxLayout="row" fxLayoutAlign="end center"></div>
+            </div>
+            @if (asset) {
+                <div fxFlex="100" fxLayout="column">
+                    @if (activeTab === 'basic') {
+                        <sp-asset-details-basics
+                            [asset]="selectedAsset"
+                            [sites]="sites"
+                            [rootNode]="rootNode"
+                            [editMode]="true"
                         >
-                        <a
-                            mat-tab-link
-                            data-cy="asset-links-tab"
-                            [active]="activeTab === 'asset-links'"
-                            (click)="activeTab = 'asset-links'"
-                            >Asset Links</a
+                        </sp-asset-details-basics>
+                    }
+                    @if (activeTab === 'asset-links') {
+                        <sp-asset-details-links
+                            [asset]="selectedAsset"
+                            [editMode]="true"
+                            (updateAssetEmitter)="updateSelected()"
                         >
-                    </nav>
+                        </sp-asset-details-links>
+                    }
                 </div>
-            </div>
-            <div fxFlex fxLayout="row" fxLayoutAlign="end center"></div>
-        </div>
-        <div fxFlex="100" fxLayout="column" *ngIf="asset">
-            <sp-asset-details-basics
-                *ngIf="activeTab === 'basic'"
-                [asset]="selectedAsset"
-                [sites]="sites"
-                [rootNode]="rootNode"
-                [editMode]="true"
-            >
-            </sp-asset-details-basics>
-            <sp-asset-details-links
-                *ngIf="activeTab === 'asset-links'"
-                [asset]="selectedAsset"
-                [editMode]="true"
-                (updateAssetEmitter)="updateSelected()"
-            >
-            </sp-asset-details-links>
-        </div>
-    </sp-basic-view>
-</sp-asset-selection-panel>
+            }
+        </sp-basic-view>
+    </sp-asset-selection-panel>
+}
diff --git 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-selection-panel/asset-selection-panel.component.html
 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-selection-panel/asset-selection-panel.component.html
index 781b430c60..4d6058e7ca 100644
--- 
a/ui/src/app/assets/components/asset-details/edit-asset/asset-selection-panel/asset-selection-panel.component.html
+++ 
b/ui/src/app/assets/components/asset-details/edit-asset/asset-selection-panel/asset-selection-panel.component.html
@@ -1,150 +1,161 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div fxLayout="row">
-    <div
-        fxFlex="20"
-        fxLayout="column"
-        class="designer-panel-content"
-        *ngIf="assetModel"
-    >
-        <sp-basic-view [showBackLink]="false">
-            <div nav fxLayout="row">
-                <h4 class="ml-5">Asset Hierarchy</h4>
-            </div>
-            <div fxFlex="100" fxLayout="column">
-                <div fxFlex fxLayout="column" class="designer-panel-config">
-                    <mat-tree
-                        [dataSource]="dataSource"
-                        [treeControl]="treeControl"
-                        class="sp-tree"
-                        #tree
-                    >
-                        <mat-tree-node
-                            *matTreeNodeDef="let node"
-                            matTreeNodeToggle
+    @if (assetModel) {
+        <div fxFlex="20" fxLayout="column" class="designer-panel-content">
+            <sp-basic-view [showBackLink]="false">
+                <div nav fxLayout="row">
+                    <h4 class="ml-5">Asset Hierarchy</h4>
+                </div>
+                <div fxFlex="100" fxLayout="column">
+                    <div fxFlex fxLayout="column" 
class="designer-panel-config">
+                        <mat-tree
+                            [dataSource]="dataSource"
+                            [treeControl]="treeControl"
+                            class="sp-tree"
+                            #tree
                         >
-                            <div
-                                [ngClass]="
-                                    node.assetId === selectedAsset.assetId
-                                        ? 'asset-node selected-node'
-                                        : 'asset-node'
-                                "
-                                fxLayout="row"
-                                fxFlex="100"
-                                [attr.data-cy]="
-                                    'select-asset-' + node.assetName
-                                "
-                                (click)="selectNode(node, false)"
+                            <mat-tree-node
+                                *matTreeNodeDef="let node"
+                                matTreeNodeToggle
                             >
-                                <span fxLayoutAlign="end center" 
class="ml-5">{{
-                                    node.assetName
-                                }}</span>
                                 <div
-                                    fxLayoutAlign="end center"
-                                    fxFlex
-                                    *ngIf="editMode"
+                                    [ngClass]="
+                                        node.assetId === selectedAsset.assetId
+                                            ? 'asset-node selected-node'
+                                            : 'asset-node'
+                                    "
+                                    fxLayout="row"
+                                    fxFlex="100"
+                                    [attr.data-cy]="
+                                        'select-asset-' + node.assetName
+                                    "
+                                    (click)="selectNode(node, false)"
                                 >
+                                    <span
+                                        fxLayoutAlign="end center"
+                                        class="ml-5"
+                                        >{{ node.assetName }}</span
+                                    >
+                                    @if (editMode) {
+                                        <div fxLayoutAlign="end center" fxFlex>
+                                            <button
+                                                mat-icon-button
+                                                [attr.data-cy]="
+                                                    'add-asset-' +
+                                                    node.assetName
+                                                "
+                                                (click)="addAsset(node)"
+                                                color="accent"
+                                            >
+                                                <i class="material-icons"
+                                                    >add</i
+                                                >
+                                            </button>
+                                            <button
+                                                mat-icon-button
+                                                (click)="deleteAsset(node)"
+                                                color="accent"
+                                            >
+                                                <i class="material-icons"
+                                                    >delete</i
+                                                >
+                                            </button>
+                                        </div>
+                                    }
+                                </div>
+                            </mat-tree-node>
+                            <mat-nested-tree-node
+                                *matTreeNodeDef="let node; when: hasChild"
+                            >
+                                <div class="mat-tree-node">
                                     <button
                                         mat-icon-button
+                                        matTreeNodeToggle
                                         [attr.data-cy]="
-                                            'add-asset-' + node.assetName
+                                            'button-' + node.nodeName
+                                        "
+                                        [attr.aria-label]="
+                                            'Toggle ' + node.nodeName
                                         "
-                                        (click)="addAsset(node)"
-                                        color="accent"
                                     >
-                                        <i class="material-icons">add</i>
+                                        <mat-icon class="mat-icon-rtl-mirror">
+                                            {{
+                                                treeControl.isExpanded(node)
+                                                    ? 'expand_more'
+                                                    : 'chevron_right'
+                                            }}
+                                        </mat-icon>
                                     </button>
-                                    <button
-                                        mat-icon-button
-                                        (click)="deleteAsset(node)"
-                                        color="accent"
+                                    <div
+                                        [ngClass]="
+                                            node.assetId ===
+                                            selectedAsset.assetId
+                                                ? 'asset-node selected-node'
+                                                : 'asset-node'
+                                        "
+                                        fxLayout="row"
+                                        fxFlex="100"
+                                        (click)="selectNode(node, true)"
                                     >
-                                        <i class="material-icons">delete</i>
-                                    </button>
+                                        <span fxLayoutAlign="start center">{{
+                                            node.assetName
+                                        }}</span>
+                                        @if (editMode) {
+                                            <div
+                                                fxLayoutAlign="end center"
+                                                fxFlex
+                                            >
+                                                <button
+                                                    mat-icon-button
+                                                    (click)="addAsset(node)"
+                                                    [attr.data-cy]="
+                                                        'add-asset-' +
+                                                        node.assetName
+                                                    "
+                                                    color="accent"
+                                                >
+                                                    <i class="material-icons"
+                                                        >add</i
+                                                    >
+                                                </button>
+                                            </div>
+                                        }
+                                    </div>
                                 </div>
-                            </div>
-                        </mat-tree-node>
-                        <mat-nested-tree-node
-                            *matTreeNodeDef="let node; when: hasChild"
-                        >
-                            <div class="mat-tree-node">
-                                <button
-                                    mat-icon-button
-                                    matTreeNodeToggle
-                                    [attr.data-cy]="'button-' + node.nodeName"
-                                    [attr.aria-label]="
-                                        'Toggle ' + node.nodeName
-                                    "
-                                >
-                                    <mat-icon class="mat-icon-rtl-mirror">
-                                        {{
-                                            treeControl.isExpanded(node)
-                                                ? 'expand_more'
-                                                : 'chevron_right'
-                                        }}
-                                    </mat-icon>
-                                </button>
                                 <div
-                                    [ngClass]="
-                                        node.assetId === selectedAsset.assetId
-                                            ? 'asset-node selected-node'
-                                            : 'asset-node'
+                                    [class.sp-tree-invisible]="
+                                        !treeControl.isExpanded(node)
                                     "
-                                    fxLayout="row"
-                                    fxFlex="100"
-                                    (click)="selectNode(node, true)"
+                                    role="group"
                                 >
-                                    <span fxLayoutAlign="start center">{{
-                                        node.assetName
-                                    }}</span>
-                                    <div
-                                        fxLayoutAlign="end center"
-                                        fxFlex
-                                        *ngIf="editMode"
-                                    >
-                                        <button
-                                            mat-icon-button
-                                            (click)="addAsset(node)"
-                                            [attr.data-cy]="
-                                                'add-asset-' + node.assetName
-                                            "
-                                            color="accent"
-                                        >
-                                            <i class="material-icons">add</i>
-                                        </button>
-                                    </div>
+                                    <ng-container
+                                        matTreeNodeOutlet
+                                    ></ng-container>
                                 </div>
-                            </div>
-                            <div
-                                [class.sp-tree-invisible]="
-                                    !treeControl.isExpanded(node)
-                                "
-                                role="group"
-                            >
-                                <ng-container matTreeNodeOutlet></ng-container>
-                            </div>
-                        </mat-nested-tree-node>
-                    </mat-tree>
+                            </mat-nested-tree-node>
+                        </mat-tree>
+                    </div>
                 </div>
-            </div>
-        </sp-basic-view>
-    </div>
+            </sp-basic-view>
+        </div>
+    }
     <div fxFlex>
         <ng-content></ng-content>
     </div>
diff --git 
a/ui/src/app/assets/components/asset-details/view-asset/view-asset-basics/view-asset-basics.component.html
 
b/ui/src/app/assets/components/asset-details/view-asset/view-asset-basics/view-asset-basics.component.html
index d61f3112f8..916c7139bc 100644
--- 
a/ui/src/app/assets/components/asset-details/view-asset/view-asset-basics/view-asset-basics.component.html
+++ 
b/ui/src/app/assets/components/asset-details/view-asset/view-asset-basics/view-asset-basics.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
 <div fxLayout="column">
     <div class="asset-title">{{ rootAsset.assetName }}</div>
@@ -37,32 +37,37 @@
         </div>
     </div>
 
-    <div
-        fxLayout="column"
-        *ngIf="selectedAsset.assetId !== rootAsset.assetId"
-        class="selected-asset-metadata mt-20"
-    >
-        <div class="selected-asset-title">{{ selectedAsset.assetName }}</div>
-        <div class="selected-asset-description">
-            {{ selectedAsset.assetDescription }}
-        </div>
-        <div fxLayout="column" class="asset-metadata mt-20">
-            <div fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="start 
center">
-                <mat-icon color="primary">precision_manufacturing</mat-icon>
-                <div class="asset-description">{{ selectedAssetType }}</div>
+    @if (selectedAsset.assetId !== rootAsset.assetId) {
+        <div fxLayout="column" class="selected-asset-metadata mt-20">
+            <div class="selected-asset-title">
+                {{ selectedAsset.assetName }}
+            </div>
+            <div class="selected-asset-description">
+                {{ selectedAsset.assetDescription }}
             </div>
-            <div
-                fxLayout="row"
-                fxLayoutGap="10px"
-                fxLayoutAlign="start center"
-                *ngIf="selectedAsset.labelIds?.length > 0"
-            >
-                <mat-icon color="primary">sell</mat-icon>
-                <sp-view-asset-labels
-                    [asset]="selectedAsset"
-                    size="small"
-                ></sp-view-asset-labels>
+            <div fxLayout="column" class="asset-metadata mt-20">
+                <div
+                    fxLayout="row"
+                    fxLayoutGap="10px"
+                    fxLayoutAlign="start center"
+                >
+                    <mat-icon 
color="primary">precision_manufacturing</mat-icon>
+                    <div class="asset-description">{{ selectedAssetType 
}}</div>
+                </div>
+                @if (selectedAsset.labelIds?.length > 0) {
+                    <div
+                        fxLayout="row"
+                        fxLayoutGap="10px"
+                        fxLayoutAlign="start center"
+                    >
+                        <mat-icon color="primary">sell</mat-icon>
+                        <sp-view-asset-labels
+                            [asset]="selectedAsset"
+                            size="small"
+                        ></sp-view-asset-labels>
+                    </div>
+                }
             </div>
         </div>
-    </div>
+    }
 </div>
diff --git 
a/ui/src/app/assets/components/asset-details/view-asset/view-asset.component.html
 
b/ui/src/app/assets/components/asset-details/view-asset/view-asset.component.html
index 1379adc92c..35474eca7f 100644
--- 
a/ui/src/app/assets/components/asset-details/view-asset/view-asset.component.html
+++ 
b/ui/src/app/assets/components/asset-details/view-asset/view-asset.component.html
@@ -1,71 +1,75 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 
-<sp-asset-selection-panel
-    *ngIf="asset"
-    [editMode]="false"
-    [assetModel]="asset"
-    [selectedAsset]="selectedAsset"
-    (selectedAssetEmitter)="applySelectedAsset($event)"
->
-    <sp-basic-view
-        [showBackLink]="true"
-        [backLinkTarget]="['assets']"
-        [padding]="false"
-        fxFlex="100"
+@if (asset) {
+    <sp-asset-selection-panel
+        [editMode]="false"
+        [assetModel]="asset"
+        [selectedAsset]="selectedAsset"
+        (selectedAssetEmitter)="applySelectedAsset($event)"
     >
-        @if (selectedAsset) {
-            <div fxLayout="row" fxFlex="100">
-                <div fxFlex="66" fxLayoutAlign="start start" 
class="asset-info">
-                    <div fxLayout="column" class="w-100 ml-20">
-                        <div fxLayout="row" fxFlex="100">
-                            <sp-view-asset-basics
-                                [rootAsset]="asset"
-                                [sites]="sites"
+        <sp-basic-view
+            [showBackLink]="true"
+            [backLinkTarget]="['assets']"
+            [padding]="false"
+            fxFlex="100"
+        >
+            @if (selectedAsset) {
+                <div fxLayout="row" fxFlex="100">
+                    <div
+                        fxFlex="66"
+                        fxLayoutAlign="start start"
+                        class="asset-info"
+                    >
+                        <div fxLayout="column" class="w-100 ml-20">
+                            <div fxLayout="row" fxFlex="100">
+                                <sp-view-asset-basics
+                                    [rootAsset]="asset"
+                                    [sites]="sites"
+                                    [selectedAsset]="selectedAsset"
+                                    fxFlex="100"
+                                ></sp-view-asset-basics>
+                                @if (asset.labelIds?.length > 0) {
+                                    <sp-view-asset-labels
+                                        [asset]="asset"
+                                        fxFlex
+                                    ></sp-view-asset-labels>
+                                }
+                            </div>
+                            <sp-view-asset-links
                                 [selectedAsset]="selectedAsset"
-                                fxFlex="100"
-                            ></sp-view-asset-basics>
-
-                            @if (asset.labelIds?.length > 0) {
-                                <sp-view-asset-labels
-                                    [asset]="asset"
-                                    fxFlex
-                                ></sp-view-asset-labels>
-                            }
+                                class="mt-20"
+                            >
+                            </sp-view-asset-links>
                         </div>
-                        <sp-view-asset-links
-                            [selectedAsset]="selectedAsset"
-                            class="mt-20"
-                        >
-                        </sp-view-asset-links>
+                    </div>
+                    <div fxFlex="33">
+                        @if (locationConfig && asset.assetSite?.location) {
+                            <sp-single-marker-map
+                                [mapHeight]="'100%'"
+                                [locationConfig]="locationConfig"
+                                [readonly]="true"
+                                [assetLocation]="asset.assetSite.location"
+                            ></sp-single-marker-map>
+                        }
                     </div>
                 </div>
-                <div fxFlex="33">
-                    @if (locationConfig && asset.assetSite?.location) {
-                        <sp-single-marker-map
-                            [mapHeight]="'100%'"
-                            [locationConfig]="locationConfig"
-                            [readonly]="true"
-                            [assetLocation]="asset.assetSite.location"
-                        ></sp-single-marker-map>
-                    }
-                </div>
-            </div>
-        }
-    </sp-basic-view>
-</sp-asset-selection-panel>
+            }
+        </sp-basic-view>
+    </sp-asset-selection-panel>
+}
diff --git 
a/ui/src/app/assets/components/asset-overview/asset-overview.component.html 
b/ui/src/app/assets/components/asset-overview/asset-overview.component.html
index 06711cff8e..e335f02302 100644
--- a/ui/src/app/assets/components/asset-overview/asset-overview.component.html
+++ b/ui/src/app/assets/components/asset-overview/asset-overview.component.html
@@ -1,20 +1,20 @@
 <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  ~
-  -->
+~ Licensed to the Apache Software Foundation (ASF) under one or more
+~ contributor license agreements.  See the NOTICE file distributed with
+~ this work for additional information regarding copyright ownership.
+~ The ASF licenses this file to You under the Apache License, Version 2.0
+~ (the "License"); you may not use this file except in compliance with
+~ the License.  You may obtain a copy of the License at
+~
+~    http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+~
+-->
 <sp-basic-view [showBackLink]="false" [padding]="true">
     <div
         nav
@@ -23,16 +23,17 @@
         fxLayout="row"
         class="pl-10"
     >
-        <button
-            *ngIf="hasWritePrivilege"
-            mat-button
-            mat-flat-button
-            color="accent"
-            data-cy="create-new-asset-button"
-            (click)="createNewAsset()"
-        >
-            <i class="material-icons">add</i>&nbsp;New asset
-        </button>
+        @if (hasWritePrivilege) {
+            <button
+                mat-button
+                mat-flat-button
+                color="accent"
+                data-cy="create-new-asset-button"
+                (click)="createNewAsset()"
+            >
+                <i class="material-icons">add</i>&nbsp;New asset
+            </button>
+        }
         <div fxFlex fxLayout="row" fxLayoutAlign="end center">
             <button
                 mat-icon-button
@@ -95,16 +96,19 @@
                             <mat-icon>visibility</mat-icon>
                             <span>{{ 'Show' | translate }}</span>
                         </button>
-                        <button
-                            *ngIf="hasWritePrivilege"
-                            mat-menu-item
-                            data-cy="edit-asset-button"
-                            [attr.data-cy]="'edit-asset-' + element.assetName"
-                            (click)="goToDetailsView(element, true)"
-                        >
-                            <mat-icon>edit</mat-icon>
-                            <span>{{ 'Edit' | translate }}</span>
-                        </button>
+                        @if (hasWritePrivilege) {
+                            <button
+                                mat-menu-item
+                                data-cy="edit-asset-button"
+                                [attr.data-cy]="
+                                    'edit-asset-' + element.assetName
+                                "
+                                (click)="goToDetailsView(element, true)"
+                            >
+                                <mat-icon>edit</mat-icon>
+                                <span>{{ 'Edit' | translate }}</span>
+                            </button>
+                        }
                         <button
                             mat-menu-item
                             data-cy="open-manage-permissions"
@@ -114,16 +118,19 @@
                             <span>{{ 'Manage permissions' | translate }}</span>
                         </button>
 
-                        <button
-                            *ngIf="hasWritePrivilege"
-                            mat-menu-item
-                            data-cy="delete"
-                            [attr.data-cy]="'delete-asset-' + 
element.assetName"
-                            (click)="deleteAsset(element)"
-                        >
-                            <mat-icon>delete</mat-icon>
-                            <span>{{ 'Delete' | translate }}</span>
-                        </button>
+                        @if (hasWritePrivilege) {
+                            <button
+                                mat-menu-item
+                                data-cy="delete"
+                                [attr.data-cy]="
+                                    'delete-asset-' + element.assetName
+                                "
+                                (click)="deleteAsset(element)"
+                            >
+                                <mat-icon>delete</mat-icon>
+                                <span>{{ 'Delete' | translate }}</span>
+                            </button>
+                        }
                     </ng-template>
                 </sp-table>
             </div>
diff --git 
a/ui/src/app/assets/dialog/edit-asset-link/edit-asset-link-dialog.component.html
 
b/ui/src/app/assets/dialog/edit-asset-link/edit-asset-link-dialog.component.html
index ddad39ce6e..520090df3f 100644
--- 
a/ui/src/app/assets/dialog/edit-asset-link/edit-asset-link-dialog.component.html
+++ 
b/ui/src/app/assets/dialog/edit-asset-link/edit-asset-link-dialog.component.html
@@ -18,237 +18,234 @@
 
 <div class="sp-dialog-container">
     <div class="sp-dialog-content p-15 mt-10">
-        <div fxFlex="100" fxLayout="column" *ngIf="clonedAssetLink">
-            <div fxLayout="column" class="link-configuration">
-                <mat-form-field color="accent">
-                    <mat-label>Link Type</mat-label>
-                    <mat-select
-                        fxFlex
-                        [(value)]="selectedLinkType"
-                        required
-                        (selectionChange)="onLinkTypeChanged($event)"
-                    >
-                        <mat-option
-                            *ngFor="let assetLinkType of assetLinkTypes"
-                            [value]="assetLinkType"
-                            >{{ assetLinkType.linkLabel }}</mat-option
+        @if (clonedAssetLink) {
+            <div fxFlex="100" fxLayout="column">
+                <div fxLayout="column" class="link-configuration">
+                    <mat-form-field color="accent">
+                        <mat-label>Link Type</mat-label>
+                        <mat-select
+                            fxFlex
+                            [(value)]="selectedLinkType"
+                            required
+                            (selectionChange)="onLinkTypeChanged($event)"
                         >
-                    </mat-select>
-                </mat-form-field>
+                            @for (
+                                assetLinkType of assetLinkTypes;
+                                track assetLinkType
+                            ) {
+                                <mat-option [value]="assetLinkType">{{
+                                    assetLinkType.linkLabel
+                                }}</mat-option>
+                            }
+                        </mat-select>
+                    </mat-form-field>
+                </div>
+                @if (selectedLinkType.linkQueryHint === 'pipeline') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Pipelines</mat-label>
+                            <mat-select
+                                [(ngModel)]="currentResource"
+                                fxFlex
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.name,
+                                        $event.value
+                                    )
+                                "
+                                required
+                            >
+                                @for (pipeline of pipelines; track pipeline) {
+                                    <mat-option [value]="pipeline">{{
+                                        pipeline.name
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'data-source') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Data Stream</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.name,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (source of dataSources; track source) {
+                                    <mat-option [value]="source">{{
+                                        source.name
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'dashboard') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Dashboards</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.name,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (
+                                    dashboard of dashboards;
+                                    track dashboard
+                                ) {
+                                    <mat-option [value]="dashboard">{{
+                                        dashboard.name
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'chart') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Chart</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.name,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (chart of charts; track chart) {
+                                    <mat-option [value]="chart">{{
+                                        chart.baseAppearanceConfig.widgetTitle
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'adapter') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Adapter</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.name,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (adapter of adapters; track adapter) {
+                                    <mat-option [value]="adapter">{{
+                                        adapter.name
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'measurement') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Data Lake Storage</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.elementId,
+                                        $event.value.measureName,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (
+                                    measure of dataLakeMeasures;
+                                    track measure
+                                ) {
+                                    <mat-option [value]="measure">{{
+                                        measure.measureName
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                @if (selectedLinkType.linkQueryHint === 'file') {
+                    <div fxLayout="column" class="link-configuration">
+                        <mat-form-field color="accent" fxFlex="100">
+                            <mat-label>Files</mat-label>
+                            <mat-select
+                                (selectionChange)="
+                                    changeLabel(
+                                        $event.value.fileId,
+                                        $event.value.originalFilename,
+                                        $event.value
+                                    )
+                                "
+                                [(value)]="currentResource"
+                                fxFlex
+                                required
+                            >
+                                @for (file of files; track file) {
+                                    <mat-option [value]="file">{{
+                                        file.filename
+                                    }}</mat-option>
+                                }
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
+                <div fxLayout="column" class="link-configuration">
+                    <mat-form-field color="accent">
+                        <mat-label>Label</mat-label>
+                        <input
+                            matInput
+                            [(ngModel)]="clonedAssetLink.linkLabel"
+                            [disabled]="true"
+                            required
+                        />
+                    </mat-form-field>
+                </div>
+                <div fxLayout="column" class="link-configuration">
+                    <mat-form-field color="accent">
+                        <mat-label>Resource ID</mat-label>
+                        <input
+                            matInput
+                            [(ngModel)]="clonedAssetLink.resourceId"
+                            required
+                            [disabled]="true"
+                        />
+                    </mat-form-field>
+                </div>
+                <div fxFlex="100"></div>
             </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'pipeline'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Pipelines</mat-label>
-                    <mat-select
-                        [(ngModel)]="currentResource"
-                        fxFlex
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.name,
-                                $event.value
-                            )
-                        "
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let pipeline of pipelines"
-                            [value]="pipeline"
-                            >{{ pipeline.name }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'data-source'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Data Stream</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.name,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let source of dataSources"
-                            [value]="source"
-                            >{{ source.name }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'dashboard'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Dashboards</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.name,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let dashboard of dashboards"
-                            [value]="dashboard"
-                            >{{ dashboard.name }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'chart'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Chart</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.name,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let chart of charts"
-                            [value]="chart"
-                            >{{
-                                chart.baseAppearanceConfig.widgetTitle
-                            }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'adapter'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Adapter</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.name,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let adapter of adapters"
-                            [value]="adapter"
-                            >{{ adapter.name }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'measurement'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Data Lake Storage</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.elementId,
-                                $event.value.measureName,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option
-                            *ngFor="let measure of dataLakeMeasures"
-                            [value]="measure"
-                            >{{ measure.measureName }}</mat-option
-                        >
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div
-                *ngIf="selectedLinkType.linkQueryHint === 'file'"
-                fxLayout="column"
-                class="link-configuration"
-            >
-                <mat-form-field color="accent" fxFlex="100">
-                    <mat-label>Files</mat-label>
-                    <mat-select
-                        (selectionChange)="
-                            changeLabel(
-                                $event.value.fileId,
-                                $event.value.originalFilename,
-                                $event.value
-                            )
-                        "
-                        [(value)]="currentResource"
-                        fxFlex
-                        required
-                    >
-                        <mat-option *ngFor="let file of files" 
[value]="file">{{
-                            file.filename
-                        }}</mat-option>
-                    </mat-select>
-                </mat-form-field>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <mat-form-field color="accent">
-                    <mat-label>Label</mat-label>
-                    <input
-                        matInput
-                        [(ngModel)]="clonedAssetLink.linkLabel"
-                        [disabled]="true"
-                        required
-                    />
-                </mat-form-field>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <mat-form-field color="accent">
-                    <mat-label>Resource ID</mat-label>
-                    <input
-                        matInput
-                        [(ngModel)]="clonedAssetLink.resourceId"
-                        required
-                        [disabled]="true"
-                    />
-                </mat-form-field>
-            </div>
-            <div fxFlex="100"></div>
-        </div>
+        }
     </div>
     <mat-divider></mat-divider>
     <div class="sp-dialog-actions">
diff --git 
a/ui/src/app/assets/dialog/manage-asset-links/manage-asset-links-dialog.component.html
 
b/ui/src/app/assets/dialog/manage-asset-links/manage-asset-links-dialog.component.html
index 0bb63f260c..b5730d1ebd 100644
--- 
a/ui/src/app/assets/dialog/manage-asset-links/manage-asset-links-dialog.component.html
+++ 
b/ui/src/app/assets/dialog/manage-asset-links/manage-asset-links-dialog.component.html
@@ -18,389 +18,443 @@
 
 <div class="sp-dialog-container">
     <div class="sp-dialog-content p-15">
-        <div fxFlex="100" fxLayout="column" *ngIf="clonedAssetLinks">
-            <div fxLayout="column" class="link-configuration">
-                <div
-                    fxLayout="row"
-                    fxLayoutAlign="start center"
-                    class="mb-10"
-                    fxFlex="100"
-                >
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0"
-                            >Adapters</span
-                        >
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    adapters,
-                                    elementIdFunction,
-                                    nameFunction,
-                                    'adapter'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="deselectAll(adapters, elementIdFunction)"
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+        @if (clonedAssetLinks) {
+            <div fxFlex="100" fxLayout="column">
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
+                        fxFlex="100"
+                    >
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Adapters</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        adapters,
+                                        elementIdFunction,
+                                        nameFunction,
+                                        'adapter'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="
+                                    deselectAll(adapters, elementIdFunction)
+                                "
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (element of adapters; track element) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(element.elementId)"
+                                [attr.data-cy]="
+                                    'select-adapters-checkbox-' + element.name
+                                "
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        element.elementId,
+                                        element.name,
+                                        'adapter'
+                                    )
+                                "
+                            >
+                                {{ element.name }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let element of adapters" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(element.elementId)"
-                        [attr.data-cy]="
-                            'select-adapters-checkbox-' + element.name
-                        "
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                element.elementId,
-                                element.name,
-                                'adapter'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ element.name }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0">Charts</span>
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    charts,
-                                    elementIdFunction,
-                                    widgetNameFunction,
-                                    'chart'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="deselectAll(charts, elementIdFunction)"
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Charts</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        charts,
+                                        elementIdFunction,
+                                        widgetNameFunction,
+                                        'chart'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="deselectAll(charts, 
elementIdFunction)"
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (element of charts; track element) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(element.elementId)"
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        element.elementId,
+                                        element.baseAppearanceConfig
+                                            .widgetTitle,
+                                        'chart'
+                                    )
+                                "
+                            >
+                                {{ element.baseAppearanceConfig.widgetTitle }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let element of charts" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(element.elementId)"
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                element.elementId,
-                                element.baseAppearanceConfig.widgetTitle,
-                                'chart'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ element.baseAppearanceConfig.widgetTitle }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0"
-                            >Dashboards</span
-                        >
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    dashboards,
-                                    elementIdFunction,
-                                    nameFunction,
-                                    'dashboard'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="deselectAll(dashboards, 
elementIdFunction)"
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Dashboards</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        dashboards,
+                                        elementIdFunction,
+                                        nameFunction,
+                                        'dashboard'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="
+                                    deselectAll(dashboards, elementIdFunction)
+                                "
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (element of dashboards; track element) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(element.elementId)"
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        element.elementId,
+                                        element.name,
+                                        'dashboard'
+                                    )
+                                "
+                            >
+                                {{ element.name }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let element of dashboards" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(element.elementId)"
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                element.elementId,
-                                element.name,
-                                'dashboard'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ element.name }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0"
-                            >Data Lake Storage</span
-                        >
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    dataLakeMeasures,
-                                    elementIdFunction,
-                                    measureNameFunction,
-                                    'measurement'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="
-                                deselectAll(dataLakeMeasures, 
elementIdFunction)
-                            "
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Data Lake Storage</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        dataLakeMeasures,
+                                        elementIdFunction,
+                                        measureNameFunction,
+                                        'measurement'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="
+                                    deselectAll(
+                                        dataLakeMeasures,
+                                        elementIdFunction
+                                    )
+                                "
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (element of dataLakeMeasures; track element) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(element.elementId)"
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        element.elementId,
+                                        element.measureName,
+                                        'measurement'
+                                    )
+                                "
+                            >
+                                {{ element.measureName }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let element of dataLakeMeasures" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(element.elementId)"
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                element.elementId,
-                                element.measureName,
-                                'measurement'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ element.measureName }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0"
-                            >Data Streams</span
-                        >
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    dataSources,
-                                    elementIdFunction,
-                                    nameFunction,
-                                    'data-source'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="
-                                deselectAll(dataSources, elementIdFunction)
-                            "
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Data Streams</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        dataSources,
+                                        elementIdFunction,
+                                        nameFunction,
+                                        'data-source'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="
+                                    deselectAll(dataSources, elementIdFunction)
+                                "
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (source of dataSources; track source) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(source.elementId)"
+                                [attr.data-cy]="
+                                    'select-data-stream-checkbox-' + 
source.name
+                                "
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        source.elementId,
+                                        source.name,
+                                        'data-source'
+                                    )
+                                "
+                            >
+                                {{ source.name }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let source of dataSources" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(source.elementId)"
-                        [attr.data-cy]="
-                            'select-data-stream-checkbox-' + source.name
-                        "
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                source.elementId,
-                                source.name,
-                                'data-source'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ source.name }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0">Files</span>
-                    </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    files,
-                                    fileIdFunction,
-                                    filenameFunction,
-                                    'file'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="deselectAll(files, fileIdFunction)"
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Files</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        files,
+                                        fileIdFunction,
+                                        filenameFunction,
+                                        'file'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="deselectAll(files, fileIdFunction)"
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
+                    @for (element of files; track element) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(element.fileId)"
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        element.fileId,
+                                        element.filename,
+                                        'file'
+                                    )
+                                "
+                            >
+                                {{ element.filename }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
-                <div *ngFor="let element of files" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(element.fileId)"
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                element.fileId,
-                                element.filename,
-                                'file'
-                            )
-                        "
+                <div fxLayout="column" class="link-configuration">
+                    <div
+                        fxLayout="row"
+                        fxLayoutAlign="start center"
+                        class="mb-10"
                     >
-                        {{ element.filename }}
-                    </mat-checkbox>
-                </div>
-            </div>
-            <div fxLayout="column" class="link-configuration">
-                <div fxLayout="row" fxLayoutAlign="start center" class="mb-10">
-                    <div fxLayout="row" fxLayoutAlign="start center">
-                        <span class="general-options-header mb-0"
-                            >Pipelines</span
-                        >
+                        <div fxLayout="row" fxLayoutAlign="start center">
+                            <span class="general-options-header mb-0"
+                                >Pipelines</span
+                            >
+                        </div>
+                        <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                color="accent"
+                                class="small-button"
+                                (click)="
+                                    selectAll(
+                                        pipelines,
+                                        elementIdFunction,
+                                        nameFunction,
+                                        'pipeline'
+                                    )
+                                "
+                                style="margin-right: 5px; margin-left: 15px"
+                            >
+                                <span>Select All</span>
+                            </button>
+                            <button
+                                mat-button
+                                mat-flat-button
+                                class="mat-basic small-button"
+                                (click)="
+                                    deselectAll(pipelines, elementIdFunction)
+                                "
+                                style="margin-right: 10px; margin-left: 5px"
+                            >
+                                <span>Deselect All</span>
+                            </button>
+                        </div>
                     </div>
-                    <div fxLayout="row" fxLayoutAlign="end center" fxFlex>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            color="accent"
-                            class="small-button"
-                            (click)="
-                                selectAll(
-                                    pipelines,
-                                    elementIdFunction,
-                                    nameFunction,
-                                    'pipeline'
-                                )
-                            "
-                            style="margin-right: 5px; margin-left: 15px"
-                        >
-                            <span>Select All</span>
-                        </button>
-                        <button
-                            mat-button
-                            mat-flat-button
-                            class="mat-basic small-button"
-                            (click)="deselectAll(pipelines, elementIdFunction)"
-                            style="margin-right: 10px; margin-left: 5px"
-                        >
-                            <span>Deselect All</span>
-                        </button>
-                    </div>
-                </div>
-                <div *ngFor="let pipeline of pipelines" fxLayout="row">
-                    <mat-checkbox
-                        color="accent"
-                        [checked]="linkSelected(pipeline.elementId)"
-                        (change)="
-                            selectLink(
-                                $event.checked,
-                                pipeline.elementId,
-                                pipeline.name,
-                                'pipeline'
-                            )
-                        "
-                        >{{ pipeline.name }}
-                    </mat-checkbox>
+                    @for (pipeline of pipelines; track pipeline) {
+                        <div fxLayout="row">
+                            <mat-checkbox
+                                color="accent"
+                                [checked]="linkSelected(pipeline.elementId)"
+                                (change)="
+                                    selectLink(
+                                        $event.checked,
+                                        pipeline.elementId,
+                                        pipeline.name,
+                                        'pipeline'
+                                    )
+                                "
+                                >{{ pipeline.name }}
+                            </mat-checkbox>
+                        </div>
+                    }
                 </div>
             </div>
-        </div>
+        }
     </div>
     <mat-divider></mat-divider>
     <div class="sp-dialog-actions">

Reply via email to