Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
5ff6206
collections
karinakharchenko Sep 26, 2025
c96d2f2
collections fixed
karinakharchenko Sep 26, 2025
ce23e38
fix: close open menus when starting to edit a collection in the dashb…
karinakharchenko Sep 26, 2025
3991fa1
боковое меню
karinakharchenko Sep 29, 2025
b18b1ae
style: update dashboard table list styles for collapsed sidebar</mess…
karinakharchenko Sep 29, 2025
888fd10
style: update dashboard table list styles for collapsed sidebar</mess…
karinakharchenko Sep 29, 2025
590d460
feat: add search and add collection buttons to collapsed sidebar in d…
karinakharchenko Sep 29, 2025
c4ec4bc
refactor: enhance collapsed sidebar functionality and styles in dashb…
karinakharchenko Sep 29, 2025
e9f677b
refactor: improve active state handling and styles for collapsed coll…
karinakharchenko Sep 29, 2025
f15184b
feat: implement search functionality to collapse and expand collectio…
karinakharchenko Sep 29, 2025
560a603
refactor: rename collections to folders and update related functional…
karinakharchenko Sep 30, 2025
e53258b
feat: implement edit tables dialog functionality in dashboard with up…
karinakharchenko Sep 30, 2025
4ec27ad
feat: add folder state preservation and restoration on sidebar collap…
karinakharchenko Sep 30, 2025
d9d441f
сы
karinakharchenko Sep 30, 2025
8a39df4
feat: add table icon support and improve collapsed table item styles …
karinakharchenko Sep 30, 2025
7962b7c
feat: enhance collapsed sidebar layout and functionality with improve…
karinakharchenko Sep 30, 2025
8b607ca
feat: implement folder icon color customization and enhance collapsed…
karinakharchenko Sep 30, 2025
b2ed8ee
feat: add empty folder styling and enhance folder state management in…
karinakharchenko Oct 2, 2025
8de6edf
feat: enhance edit tables dialog with close button and keyboard acces…
karinakharchenko Oct 3, 2025
dc5ec0a
feat: improve dialog close behavior by distinguishing between inside …
karinakharchenko Oct 3, 2025
4ea7db6
feat: update styles for empty folders and improve sidebar menu alignm…
karinakharchenko Oct 3, 2025
1836a2a
tables list: fix code indents
lyubov-voloshko Oct 21, 2025
c0d5398
tables list:
lyubov-voloshko Oct 22, 2025
103b24c
table folders:
lyubov-voloshko Oct 28, 2025
8b90ada
remove folder edit name on double click
lyubov-voloshko Oct 29, 2025
7d0f3a2
tables list: move edit table name to Table edit and fix UI
lyubov-voloshko Oct 30, 2025
7103024
delete folder notification
lyubov-voloshko Oct 30, 2025
a0aee1f
tables categories: hide Add table button and Edit buttons for non-admin
lyubov-voloshko Oct 31, 2025
93330fa
Merge branch 'main' into collection-of-tables
lyubov-voloshko Oct 31, 2025
8915a99
fix unit tests
lyubov-voloshko Oct 31, 2025
16823f6
Merge branch 'collection-of-tables' of github.com:karinakharchenko/ro…
lyubov-voloshko Oct 31, 2025
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
16 changes: 16 additions & 0 deletions frontend/src/app/components/dashboard/dashboard.component.css
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,22 @@
margin-left: 12px;
}

.toggle-button-position button {
border-radius: 4px;
}

.toggle-button-position button mat-icon {
border-radius: 4px;
}

.toggle-button-position button:hover {
border-radius: 4px;
}

.toggle-button-position button:hover mat-icon {
border-radius: 4px;
}

.dashboard {
display: flex;
flex-direction: column;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,13 @@ <h3 class='mat-subheading-2'>Rocketadmin can not find any tables</h3>
</ng-template>
<app-db-tables-list
[collapsed]="!shownTableTitles"
[connectionTitle]="connectionTitle"
[tables]="tablesList"
[connectionID]="connectionID"
[selectedTable]="selectedTableName">
[selectedTable]="selectedTableName"
[uiSettings]="uiSettings"
[accessLevel]="currentConnectionAccessLevel"
(expandSidebar)="toggleSideBar()">
</app-db-tables-list>
</mat-sidenav>
<mat-sidenav-content class="table-preview">
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/app/components/dashboard/dashboard.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ export class DashboardComponent implements OnInit, OnDestroy {
return this._connections.currentConnection.isTestConnection
}

get connectionTitle() {
return this._connections.currentConnection?.title || 'Database';
}

get defaultTableToOpen () {
return this._connections.defaultTableToOpen;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
.confirmation-message {
margin: 0 0 20px 0;
font-size: 16px;
line-height: 1.5;
color: #424242;
}

.confirmation-message strong {
color: #212121;
font-weight: 600;
}

.folder-info {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 16px;
background-color: #e3f2fd;
border-radius: 4px;
margin-bottom: 20px;
}

.info-icon {
color: #1976d2;
font-size: 20px;
width: 20px;
height: 20px;
margin-top: 2px;
}

.info-text {
margin: 0;
font-size: 14px;
line-height: 1.5;
color: #424242;
flex: 1;
}

.warning-note {
padding: 12px 16px;
background-color: #fff3e0;
border-radius: 4px;
border-left: 4px solid #ff9800;
}

.warning-note p {
margin: 0;
font-size: 14px;
line-height: 1.5;
color: #424242;
}

.warning-note strong {
color: #e65100;
font-weight: 600;
}

.cancel-button {
color: #666;
}

.delete-button {
display: flex;
align-items: center;
gap: 8px;
}

.delete-button mat-icon {
font-size: 18px;
width: 18px;
height: 18px;
}

/* Dark mode support */
@media (prefers-color-scheme: dark) {
.dialog-title {
border-bottom-color: #424242;
}

.dialog-content {
background-color: #303030;
}

.confirmation-message {
color: #e0e0e0;
}

.confirmation-message strong {
color: #fff;
}

.folder-info {
background-color: #1a3a52;
}

.info-icon {
color: #64b5f6;
}

.info-text {
color: #e0e0e0;
}

.warning-note {
background-color: #4a3c28;
border-left-color: #ffb74d;
}

.warning-note p {
color: #e0e0e0;
}

.warning-note strong {
color: #ffb74d;
}

.dialog-actions {
border-top-color: #424242;
}

.cancel-button {
color: #aaa;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<h1 mat-dialog-title>
Delete Folder
</h1>

<mat-dialog-content>
<p class="confirmation-message">
Are you sure you want to delete the folder <strong>"{{data.folderName}}"</strong>?
</p>

<div class="folder-info" *ngIf="data.tableCount > 0">
<mat-icon class="info-icon">info</mat-icon>
<p class="info-text">
This folder contains {{data.tableCount}} table{{data.tableCount > 1 ? 's' : ''}}.
The tables will not be deleted, only removed from this folder.
</p>
</div>

<div class="warning-note">
<p><strong>Note:</strong> This action cannot be undone.</p>
</div>
</mat-dialog-content>

<mat-dialog-actions align="end">
<button mat-button
(click)="onCancel()"
class="cancel-button">
Cancel
</button>
<button mat-flat-button
color="warn"
(click)="onDelete()"
class="delete-button">
Delete Folder
</button>
</mat-dialog-actions>
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Component, Inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';

export interface DbFolderDeleteDialogData {
folderName: string;
tableCount: number;
}

@Component({
selector: 'app-db-folder-delete-dialog',
templateUrl: './db-folder-delete-dialog.component.html',
styleUrls: ['./db-folder-delete-dialog.component.css'],
standalone: true,
imports: [
CommonModule,
MatDialogModule,
MatButtonModule,
MatIconModule
]
})
export class DbFolderDeleteDialogComponent {
constructor(
public dialogRef: MatDialogRef<DbFolderDeleteDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: DbFolderDeleteDialogData
) {}

onCancel(): void {
this.dialogRef.close(false);
}

onDelete(): void {
this.dialogRef.close(true);
}
}
Loading
Loading