-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathpanel-edit-dialog.component.ts
More file actions
112 lines (100 loc) · 3.33 KB
/
Copy pathpanel-edit-dialog.component.ts
File metadata and controls
112 lines (100 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import { CommonModule } from '@angular/common';
import { Component, computed, Inject, OnInit, signal } from '@angular/core';
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatSelectModule } from '@angular/material/select';
import { Router, RouterModule } from '@angular/router';
import { Angulartics2 } from 'angulartics2';
import posthog from 'posthog-js';
import { DashboardWidget } from 'src/app/models/dashboard';
import { DashboardsService } from 'src/app/services/dashboards.service';
import { SavedQueriesService } from 'src/app/services/saved-queries.service';
@Component({
selector: 'app-panel-edit-dialog',
templateUrl: './panel-edit-dialog.component.html',
styleUrls: ['./panel-edit-dialog.component.css'],
imports: [
CommonModule,
ReactiveFormsModule,
RouterModule,
MatDialogModule,
MatButtonModule,
MatDividerModule,
MatFormFieldModule,
MatIconModule,
MatSelectModule,
],
})
export class PanelEditDialogComponent implements OnInit {
protected submitting = signal(false);
protected form!: FormGroup;
protected isEdit: boolean;
protected savedQueries = computed(() => this._savedQueries.savedQueries());
constructor(
@Inject(MAT_DIALOG_DATA)
public data: { connectionId: string; dashboardId: string; widget: DashboardWidget | null },
public dialogRef: MatDialogRef<PanelEditDialogComponent>,
private _dashboards: DashboardsService,
private _savedQueries: SavedQueriesService,
private _router: Router,
private fb: FormBuilder,
private angulartics2: Angulartics2,
) {
this.isEdit = !!data.widget;
}
ngOnInit(): void {
this._savedQueries.setActiveConnection(this.data.connectionId);
const widget = this.data.widget;
this.form = this.fb.group({
query_id: [widget?.query_id || '', [Validators.required]],
});
}
async onSubmit(): Promise<void> {
if (this.form.invalid) return;
this.submitting.set(true);
const formValue = this.form.value;
if (this.isEdit) {
const payload = {
query_id: formValue.query_id,
};
const result = await this._dashboards.updateWidget(
this.data.connectionId,
this.data.dashboardId,
this.data.widget!.id,
payload,
);
if (result) {
this.angulartics2.eventTrack.next({
action: 'Dashboards: panel updated successfully',
});
posthog.capture('Dashboards: panel updated successfully');
this.dialogRef.close(true);
}
} else {
const payload = {
query_id: formValue.query_id,
position_x: 0,
position_y: 0,
width: 4,
height: 4,
};
const result = await this._dashboards.createWidget(this.data.connectionId, this.data.dashboardId, payload);
if (result) {
this.angulartics2.eventTrack.next({
action: 'Dashboards: panel created successfully',
});
posthog.capture('Dashboards: panel created successfully');
this.dialogRef.close(true);
}
}
this.submitting.set(false);
}
navigateToCreateQuery(): void {
this.dialogRef.close();
this._router.navigate(['/panels', this.data.connectionId, 'new']);
}
}