Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@
<div *ngIf="shouldShowFolder(folder)"
class="folder-item"
[class.expanded]="folder.expanded"
[class.drag-over]="dragOverFolder !== 'all-tables-kitten' && dragOverFolder === folder.id"
(dragover)="onFolderDragOver($event, folder.id)"
(dragleave)="onFolderDragLeave($event, folder.id)"
(drop)="onFolderDrop($event, folder)">
[class.drag-over]="accessLevel === 'edit' && dragOverFolder !== 'all-tables-kitten' && dragOverFolder === folder.id"
(dragover)="accessLevel === 'edit' && onFolderDragOver($event, folder.id)"
(dragleave)="accessLevel === 'edit' && onFolderDragLeave($event, folder.id)"
(drop)="accessLevel === 'edit' && onFolderDrop($event, folder)">
Comment on lines +98 to +101
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Drag/drop is now gated in the template via accessLevel === 'edit', but the underlying handlers (e.g., drop/dragover) still mutate folder state and call saveFolders() without checking permissions. Add an early return in the component methods when accessLevel !== 'edit' so the permission rule is enforced even if these handlers are invoked from another template change, a test harness, or programmatically.

Copilot uses AI. Check for mistakes.
<div class="folder-header"
[class.expanded]="folder.expanded"
(click)="toggleFolder(folder.id)">
Expand All @@ -124,7 +124,8 @@
</button>

<!-- Expand/collapse icon on the right -->
<mat-icon class="folder-expand-icon" [class.expanded]="folder.expanded">
<mat-icon *ngIf="folder.id !== 'all-tables-kitten' || hasCustomFolders()"
class="folder-expand-icon" [class.expanded]="folder.expanded">
chevron_right
</mat-icon>
<mat-menu #folderMenu="matMenu">
Expand Down Expand Up @@ -156,9 +157,9 @@
routerLink="/dashboard/{{connectionID}}/{{table.table}}"
[queryParams]="{page_index: 0, page_size: 30}"
[ngClass]="{'table-link_active': selectedTable === table.table}"
[draggable]="true"
(dragstart)="onTableDragStart($event, table)"
(dragend)="onTableDragEnd($event)"
[draggable]="accessLevel === 'edit'"
(dragstart)="accessLevel === 'edit' && onTableDragStart($event, table)"
(dragend)="accessLevel === 'edit' && onTableDragEnd($event)"
(click)="closeSidebar()">
<span class="table-name">{{getTableName(table)}}</span>
</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,14 @@ export class DbTablesListComponent implements OnInit, OnChanges {
});
}

// If no custom folders exist, always keep "All tables" expanded
if (!this.hasCustomFolders()) {
const allTablesFolder = this.folders.find(folder => folder.id === 'all-tables-kitten');
if (allTablesFolder) {
allTablesFolder.expanded = true;
}
Comment on lines +146 to +151
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The special folder id 'all-tables-kitten' is now referenced in several places (ngOnInit, toggleFolder, hasCustomFolders, preserve/restore). Consider extracting it into a single constant (e.g., readonly field) to avoid accidental mismatches and make future refactors safer.

Copilot uses AI. Check for mistakes.
}

console.log('ngOnInit - showCollapsedTableList initialized to:', this.showCollapsedTableList);
}

Expand Down Expand Up @@ -234,6 +242,10 @@ export class DbTablesListComponent implements OnInit, OnChanges {
toggleFolder(folderId: string) {
const folder = this.folders.find (f => f.id === folderId);
if (folder) {
// Prevent collapsing "All tables" when no custom folders exist
if (folder.id === 'all-tables-kitten' && folder.expanded && !this.hasCustomFolders()) {
return;
}
folder.expanded = !folder.expanded;
Comment on lines +245 to 249
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change introduces new behavior around folder expansion (forcing “All tables” expanded when it’s the only folder, and preventing collapse in toggleFolder). Please add/update unit tests to cover these cases so regressions in sidebar state preservation and custom-folder detection are caught.

Copilot uses AI. Check for mistakes.
const expandedFolders = this.folders.filter(f => f.expanded).map(f => f.id);
this._uiSettingsService.updateConnectionSetting(this.connectionID, 'tableFoldersExpanded', expandedFolders);
Expand Down Expand Up @@ -443,8 +455,8 @@ export class DbTablesListComponent implements OnInit, OnChanges {
}

hasCustomFolders(): boolean {
// Check if there are folders other than "All Tables"
return this.folders.some(folder => folder.name !== 'All Tables');
// Check if there are folders other than "All tables"
return this.folders.some(folder => folder.id !== 'all-tables-kitten');
}

private preserveFolderStates() {
Expand All @@ -453,12 +465,9 @@ export class DbTablesListComponent implements OnInit, OnChanges {
this.preservedFolderStates[folder.id] = folder.expanded;
});

// Check if there are only "All Tables" folder (no custom folders)
const hasCustomFolders = this.folders.some(folder => folder.name !== 'All Tables');

// If no custom folders exist, ensure "All Tables" is always expanded
if (!hasCustomFolders) {
const allTablesFolder = this.folders.find(folder => folder.name === 'All Tables');
// If no custom folders exist, ensure "All tables" is always expanded
if (!this.hasCustomFolders()) {
const allTablesFolder = this.folders.find(folder => folder.id === 'all-tables-kitten');
if (allTablesFolder) {
this.preservedFolderStates[allTablesFolder.id] = true;
this.preservedActiveFolder = allTablesFolder.id;
Expand All @@ -471,12 +480,9 @@ export class DbTablesListComponent implements OnInit, OnChanges {
}

private restoreFolderStates() {
// Check if there are only "All Tables" folder (no custom folders)
const hasCustomFolders = this.folders.some(folder => folder.name !== 'All Tables');

// If no custom folders exist, always expand "All Tables"
if (!hasCustomFolders) {
const allTablesFolder = this.folders.find(folder => folder.name === 'All Tables');
// If no custom folders exist, always expand "All tables"
if (!this.hasCustomFolders()) {
const allTablesFolder = this.folders.find(folder => folder.id === 'all-tables-kitten');
if (allTablesFolder) {
allTablesFolder.expanded = true;
this.currentCollapsedFolder = allTablesFolder;
Expand Down
Loading