Skip to content

Commit 79994b7

Browse files
committed
Merge branch 'main' into backend_ai_fixes
2 parents 7d0ee49 + d1da6d8 commit 79994b7

12 files changed

Lines changed: 121 additions & 19 deletions

frontend/src/app/components/dashboard/db-table-view/db-table-widgets/db-table-widgets.component.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,12 @@ export class DbTableWidgetsComponent implements OnInit {
157157
"height": 100,
158158
"prefix": "https://example.com/images/"
159159
}
160-
}
161160
`,
162161
JSON: `// No settings required`,
163162
Money: `// Configure money widget settings
164163
// example:
165164
{
166165
"default_currency": "USD",
167-
"show_currency_selector": false,
168166
"decimal_places": 2,
169167
"allow_negative": true
170168
}

frontend/src/app/components/dashboard/db-table-view/db-table-widgets/widget/widget.component.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
88
import { MatIconModule } from '@angular/material/icon';
99
import { MatInputModule } from '@angular/material/input';
1010
import { MatSelectModule } from '@angular/material/select';
11+
import { T } from '@angular/cdk/portal-directives.d-BoG39gYN';
1112
import { Widget } from 'src/app/models/table';
1213

1314
@Component({
@@ -67,7 +68,16 @@ export class WidgetComponent implements OnInit, OnChanges {
6768
Code: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#code',
6869
Image: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#image',
6970
Foreign_key: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#foreign-key',
70-
Phone: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#phone'
71+
Phone: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#phone',
72+
Color: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#color',
73+
Money: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#money',
74+
Country: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#country',
75+
UUID: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#uuid',
76+
Range: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#range',
77+
Date: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#date-time-and-datetime',
78+
DateTime: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#date-time-and-datetime',
79+
Time: 'https://docs.rocketadmin.com/Reference/UI%20Widgets/widgets_management#date-time-and-datetime',
80+
7181
};
7282

7383
ngOnInit(): void {

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-dialog/saved-filters-dialog.component.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { RouterTestingModule } from '@angular/router/testing';
88
import { SavedFiltersDialogComponent } from './saved-filters-dialog.component';
99
import { TablesService } from 'src/app/services/tables.service';
1010
import { of } from 'rxjs';
11+
import { Angulartics2Module } from 'angulartics2';
1112

1213
describe('SavedFiltersDialogComponent', () => {
1314
let component: SavedFiltersDialogComponent;
@@ -26,7 +27,8 @@ describe('SavedFiltersDialogComponent', () => {
2627
await TestBed.configureTestingModule({
2728
imports: [
2829
SavedFiltersDialogComponent,
29-
RouterTestingModule
30+
RouterTestingModule,
31+
Angulartics2Module.forRoot(),
3032
],
3133
providers: [
3234
{ provide: TablesService, useValue: tableSpy },

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-dialog/saved-filters-dialog.component.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { UIwidgets } from 'src/app/consts/record-edit-types';
2222
import { TableField, TableForeignKey } from 'src/app/models/table';
2323
import { getTableTypes } from 'src/app/lib/setup-table-row-structure';
2424
import { omitBy } from 'lodash';
25+
import { Angulartics2, Angulartics2OnModule } from 'angulartics2';
2526

2627
@Component({
2728
selector: 'app-saved-filters-dialog',
@@ -40,7 +41,8 @@ import { omitBy } from 'lodash';
4041
RouterModule,
4142
MatDialogModule,
4243
MatSnackBarModule,
43-
ContentLoaderComponent
44+
ContentLoaderComponent,
45+
Angulartics2OnModule
4446
],
4547
templateUrl: './saved-filters-dialog.component.html',
4648
styleUrl: './saved-filters-dialog.component.css'
@@ -73,7 +75,8 @@ export class SavedFiltersDialogComponent implements OnInit {
7375
private _tables: TablesService,
7476
private _connections: ConnectionsService,
7577
private dialogRef: MatDialogRef<SavedFiltersDialogComponent>,
76-
private snackBar: MatSnackBar
78+
private snackBar: MatSnackBar,
79+
private angulartics2: Angulartics2,
7780
) {}
7881

7982
ngOnInit(): void {
@@ -279,8 +282,14 @@ export class SavedFiltersDialogComponent implements OnInit {
279282
} else {
280283
this._tables.createSavedFilter(this.data.connectionID, this.data.tableName, payload)
281284
.subscribe(() => {
285+
this.angulartics2.eventTrack.next({
286+
action: 'Saved filters: saved filter is created successfully',
287+
});
282288
this.dialogRef.close(true);
283289
}, (error) => {
290+
this.angulartics2.eventTrack.next({
291+
action: 'Saved filters: error creating saved filter',
292+
});
284293
console.error('Error saving filter:', error);
285294
this.snackBar.open('Error saving filter', 'Close', { duration: 3000 });
286295
});

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
display: flex;
33
flex-direction: column;
44
gap: 8px;
5-
margin: 20px 0 4px;
65
}
76

87
.saved-filters-list {

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
<div class="saved-filters-container">
2-
<div class="saved-filters-list">
2+
<app-placeholder-saved-filters *ngIf="savedFilterData === null"></app-placeholder-saved-filters>
3+
<div *ngIf="savedFilterData" class="saved-filters-list">
34
<button *ngIf="accessLevel === 'edit' && savedFilterData?.length === 0"
45
mat-button type="button"
6+
angulartics2On="click"
7+
angularticsAction="Saved filters: first time setup is clicked"
58
(click)="handleOpenSavedFiltersDialog()">
69
<mat-icon>tune</mat-icon>
710
Setup custom filters
811
</button>
912

1013
<button *ngIf="accessLevel === 'edit' && savedFilterData.length !== 0"
1114
mat-icon-button type="button"
12-
[matMenuTriggerFor]="menu">
15+
[matMenuTriggerFor]="menu"
16+
angulartics2On="click"
17+
angularticsAction="Saved filters: open menu is clicked">
1318
<mat-icon>tune</mat-icon>
1419
</button>
1520
<mat-menu #menu="matMenu">

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.spec.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ActivatedRoute, Router, convertToParamMap } from '@angular/router';
22
import { ComponentFixture, TestBed } from '@angular/core/testing';
33

4+
import { Angulartics2Module } from 'angulartics2';
45
import { ConnectionsService } from 'src/app/services/connections.service';
56
import { HttpClientTestingModule } from '@angular/common/http/testing';
67
import { MatDialog } from '@angular/material/dialog';
@@ -14,7 +15,7 @@ class JsonURLMock {
1415
static stringify(obj: any): string {
1516
return JSON.stringify(obj);
1617
}
17-
18+
1819
static parse(str: string): any {
1920
try {
2021
return JSON.parse(str);
@@ -77,7 +78,8 @@ describe('SavedFiltersPanelComponent', () => {
7778
await TestBed.configureTestingModule({
7879
imports: [
7980
SavedFiltersPanelComponent,
80-
HttpClientTestingModule
81+
HttpClientTestingModule,
82+
Angulartics2Module.forRoot(),
8183
],
8284
providers: [
8385
{ provide: TablesService, useValue: tablesServiceMock },
@@ -99,10 +101,10 @@ describe('SavedFiltersPanelComponent', () => {
99101
component.tableTypes = {};
100102
component.selectedTableDisplayName = 'Users';
101103
component.tableForeignKeys = [];
102-
104+
103105
// Mock filterSelected event emitter
104106
spyOn(component.filterSelected, 'emit');
105-
107+
106108
fixture.detectChanges();
107109
});
108110

@@ -164,21 +166,21 @@ describe('SavedFiltersPanelComponent', () => {
164166
filters: { city: { eq: 'New York' } }
165167
}
166168
};
167-
169+
168170
// Spy on applyDynamicColumnChanges to prevent it from executing
169171
spyOn(component, 'applyDynamicColumnChanges');
170-
172+
171173
// Replace setTimeout with a function that executes immediately
172174
spyOn<any>(window, 'setTimeout').and.callFake((fn) => {
173175
// Execute function immediately instead of waiting
174176
fn();
175177
// Return a fake timer ID
176178
return 999;
177179
});
178-
180+
179181
// Call the method under test
180182
component.updateDynamicColumnValue('Chicago');
181-
183+
182184
// Verify the value was updated
183185
expect(component.savedFilterMap.filter1.dynamicColumn.value).toBe('Chicago');
184186
expect(component.applyDynamicColumnChanges).toHaveBeenCalled();

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angu
33
import { TableField, TableForeignKey } from 'src/app/models/table';
44

55
import { AccessLevel } from 'src/app/models/user';
6+
import { Angulartics2OnModule } from 'angulartics2';
67
import { CommonModule } from '@angular/common';
78
import { ConnectionsService } from 'src/app/services/connections.service';
89
import { DynamicModule } from 'ng-dynamic-component';
@@ -18,6 +19,7 @@ import { MatMenuModule } from '@angular/material/menu';
1819
import { MatSelectModule } from '@angular/material/select';
1920
import { MatTabsModule } from '@angular/material/tabs';
2021
import { MatTooltipModule } from '@angular/material/tooltip';
22+
import { PlaceholderSavedFiltersComponent } from 'src/app/components/skeletons/placeholder-saved-filters/placeholder-saved-filters.component';
2123
import { SavedFiltersDialogComponent } from './saved-filters-dialog/saved-filters-dialog.component';
2224
import { TablesService } from 'src/app/services/tables.service';
2325
import { UIwidgets } from 'src/app/consts/record-edit-types';
@@ -38,7 +40,9 @@ import { normalizeTableName } from 'src/app/lib/normalize';
3840
MatSelectModule,
3941
MatTabsModule,
4042
MatTooltipModule,
41-
MatMenuModule
43+
MatMenuModule,
44+
PlaceholderSavedFiltersComponent,
45+
Angulartics2OnModule
4246
],
4347
templateUrl: './saved-filters-panel.component.html',
4448
styleUrl: './saved-filters-panel.component.css'
@@ -59,7 +63,7 @@ export class SavedFiltersPanelComponent implements OnInit, OnDestroy {
5963

6064
private dynamicColumnValueDebounceTimer: any = null;
6165

62-
public savedFilterData: any[] = [];
66+
public savedFilterData = null;
6367
public savedFilterMap: { [key: string]: any } = {};
6468

6569
public selectedFilterSetId: string | null = null;
@@ -96,6 +100,9 @@ export class SavedFiltersPanelComponent implements OnInit, OnDestroy {
96100
this.route.paramMap.subscribe(params => {
97101
const tableNameFromUrl = params.get('table-name');
98102
if (tableNameFromUrl) {
103+
this.savedFilterData = null;
104+
this.selectedFilterSetId = null;
105+
this.selectedFilter = null;
99106
this.selectedTableName = tableNameFromUrl;
100107
this.loadSavedFilters();
101108
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
.box {
2+
display: flex;
3+
align-items: center;
4+
gap: 8px;
5+
width: 100%;
6+
}
7+
8+
.edit-button {
9+
height: 36px;
10+
width: 36px;
11+
border-radius: 50%;
12+
margin-right: 8px;
13+
/* mix-blend-mode: normal !important; */
14+
}
15+
16+
.saved-filter {
17+
height: 32px;
18+
border-radius: 4px;
19+
}
20+
21+
.saved-filter_1 {
22+
width: 100px;
23+
}
24+
25+
.saved-filter_2 {
26+
width: 150px;
27+
}
28+
29+
.saved-filter_3 {
30+
width: 200px;
31+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<div class="box skeleton">
2+
<div class="bone edit-button"></div>
3+
<div class="bone saved-filter saved-filter_1"></div>
4+
<div class="bone saved-filter saved-filter_2"></div>
5+
<div class="bone saved-filter saved-filter_3"></div>
6+
</div>

0 commit comments

Comments
 (0)