Skip to content

Commit 03dae76

Browse files
Merge pull request #1579 from karinakharchenko/dashboard-ux
Dashboard ux
2 parents 05f1971 + 40e8356 commit 03dae76

29 files changed

Lines changed: 1144 additions & 513 deletions

backend/src/entities/visualizations/dashboard/repository/dashboard-custom-repository-extension.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ export const dashboardCustomRepositoryExtension: IDashboardRepository = {
2020
},
2121

2222
async findAllDashboardsByConnectionId(connectionId: string): Promise<DashboardEntity[]> {
23-
return await this.find({
24-
where: { connection_id: connectionId },
25-
order: { created_at: 'DESC' },
26-
});
23+
const qb = this.createQueryBuilder('dashboard')
24+
.leftJoinAndSelect('dashboard.widgets', 'widgets')
25+
.where('dashboard.connection_id = :connectionId', { connectionId })
26+
.orderBy('dashboard.created_at', 'DESC');
27+
return await qb.getMany();
2728
},
2829

2930
async findAllDashboardsWithWidgetsByConnectionId(connectionId: string): Promise<DashboardEntity[]> {

frontend/src/app/components/charts/chart-edit/chart-edit.component.css

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,35 @@
1+
.chart-edit-layout {
2+
display: flex;
3+
height: calc(100vh - 64px);
4+
}
5+
6+
.chart-edit-main {
7+
flex: 1;
8+
overflow-y: auto;
9+
}
10+
111
.chart-edit-page {
2-
margin: 2em auto;
3-
padding: 0 clamp(100px, 10vw, 200px);
12+
display: flex;
13+
flex-direction: column;
14+
min-height: 100%;
15+
padding: 0 clamp(40px, 5vw, 100px);
416
max-width: 1400px;
17+
margin: 3em auto;
518
}
619

7-
@media (width <= 900px) {
20+
@media (width <= 600px) {
821
.chart-edit-page {
922
padding: 0 16px;
23+
margin: 1.5em auto;
1024
}
1125
}
1226

1327
.chart-edit-header {
1428
display: flex;
1529
align-items: center;
1630
gap: 16px;
17-
margin-bottom: 24px;
31+
margin-bottom: 32px;
32+
flex-shrink: 0;
1833
}
1934

2035
.chart-edit-header h1 {
@@ -31,11 +46,15 @@
3146
display: flex;
3247
flex-direction: column;
3348
gap: 24px;
49+
flex: 1;
50+
overflow-y: auto;
51+
padding-bottom: 24px;
3452
}
3553

3654
.query-details {
3755
display: flex;
3856
gap: 16px;
57+
margin-top: 8px;
3958
}
4059

4160
@media (width <= 600px) {
@@ -210,17 +229,29 @@
210229
display: flex;
211230
justify-content: flex-end;
212231
gap: 16px;
213-
padding-top: 16px;
232+
padding: 16px 0;
214233
border-top: 1px solid rgba(0, 0, 0, 0.12);
234+
background-color: #fff;
235+
flex-shrink: 0;
236+
position: sticky;
237+
bottom: 0;
238+
margin-top: auto;
215239
}
216240

217241
@media (prefers-color-scheme: dark) {
218242
.actions {
219243
border-top-color: rgba(255, 255, 255, 0.12);
244+
background-color: #1e1e1e;
220245
}
221246
}
222247

223248
.actions button mat-spinner {
224249
display: inline-block;
225250
margin-right: 8px;
226251
}
252+
253+
.test-query-button .button-spinner {
254+
display: inline-block;
255+
vertical-align: middle;
256+
margin-right: 4px;
257+
}

frontend/src/app/components/charts/chart-edit/chart-edit.component.html

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
<app-alert></app-alert>
1+
<div class="chart-edit-layout">
2+
<app-dashboards-sidebar
3+
[connectionId]="connectionId()"
4+
activeTab="queries">
5+
</app-dashboards-sidebar>
26

3-
<div class="chart-edit-page">
7+
<div class="chart-edit-main">
8+
<app-alert></app-alert>
9+
10+
<div class="chart-edit-page">
411
<div class="chart-edit-header">
512
<button mat-icon-button (click)="cancel()" matTooltip="Back to list">
613
<mat-icon>arrow_back</mat-icon>
714
</button>
8-
<h1 class="mat-h1">{{ isEditMode() ? 'Edit Saved Query' : 'Create Saved Query' }}</h1>
15+
<h1 class="mat-h1">{{ isEditMode() ? 'Edit Widget' : 'Create Widget' }}</h1>
916
</div>
1017

1118
<div *ngIf="loading()" class="loading-container">
@@ -41,9 +48,10 @@ <h3>SQL Query</h3>
4148
<button mat-stroked-button
4249
(click)="testQuery()"
4350
[disabled]="!canTest()"
51+
class="test-query-button"
4452
data-testid="test-query-button">
4553
<mat-icon *ngIf="!testing()">play_arrow</mat-icon>
46-
<mat-spinner *ngIf="testing()" diameter="18"></mat-spinner>
54+
<mat-spinner *ngIf="testing()" diameter="18" class="button-spinner"></mat-spinner>
4755
{{ testing() ? 'Testing...' : 'Test Query' }}
4856
</button>
4957
</div>
@@ -148,18 +156,20 @@ <h3>Query Results ({{ testResults().length }} rows)</h3>
148156
<mat-icon>info</mat-icon>
149157
<p>Query executed successfully but returned no results.</p>
150158
</div>
159+
</div>
151160

152-
<div class="actions">
153-
<button mat-button (click)="cancel()" data-testid="cancel-button">
154-
Cancel
155-
</button>
156-
<button mat-flat-button color="primary"
157-
(click)="saveQuery()"
158-
[disabled]="!canSave()"
159-
data-testid="save-query-button">
160-
<mat-spinner *ngIf="saving()" diameter="18"></mat-spinner>
161-
{{ saving() ? 'Saving...' : (isEditMode() ? 'Update Query' : 'Save Query') }}
162-
</button>
161+
<div class="actions" *ngIf="!loading()">
162+
<button mat-button (click)="cancel()" data-testid="cancel-button">
163+
Cancel
164+
</button>
165+
<button mat-flat-button color="primary"
166+
(click)="saveQuery()"
167+
[disabled]="!canSave()"
168+
data-testid="save-query-button">
169+
<mat-spinner *ngIf="saving()" diameter="18"></mat-spinner>
170+
{{ saving() ? 'Saving...' : (isEditMode() ? 'Update Query' : 'Save Query') }}
171+
</button>
172+
</div>
163173
</div>
164174
</div>
165175
</div>

frontend/src/app/components/charts/chart-edit/chart-edit.component.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ describe('ChartEditComponent', () => {
7474

7575
mockUiSettingsService = {
7676
editorTheme: 'vs-dark',
77+
getUiSettings: vi.fn().mockReturnValue(of({})),
7778
};
7879

7980
await TestBed.configureTestingModule({

frontend/src/app/components/charts/chart-edit/chart-edit.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { ChartType, TestQueryResult } from 'src/app/models/saved-query';
1919
import { ConnectionsService } from 'src/app/services/connections.service';
2020
import { SavedQueriesService } from 'src/app/services/saved-queries.service';
2121
import { UiSettingsService } from 'src/app/services/ui-settings.service';
22+
import { DashboardsSidebarComponent } from '../../dashboards/dashboards-sidebar/dashboards-sidebar.component';
2223
import { AlertComponent } from '../../ui-components/alert/alert.component';
2324
import { ChartPreviewComponent } from '../chart-preview/chart-preview.component';
2425

@@ -41,6 +42,7 @@ import { ChartPreviewComponent } from '../chart-preview/chart-preview.component'
4142
CodeEditorModule,
4243
ChartPreviewComponent,
4344
AlertComponent,
45+
DashboardsSidebarComponent,
4446
],
4547
})
4648
export class ChartEditComponent implements OnInit {

0 commit comments

Comments
 (0)