diff --git a/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts b/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts index 36e89e4..00e2948 100644 --- a/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts +++ b/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts @@ -23,6 +23,20 @@ export interface DashboardContentModel { component?: any; name: string; type?:string; + // Common properties + table?: string; + connection?: string; + baseFilters?: any[]; + // Common filter properties + commonFilterEnabled?: boolean; + // Drilldown properties + drilldownEnabled?: boolean; + drilldownApiUrl?: string; + drilldownXAxis?: string; + drilldownYAxis?: string; + drilldownParameter?: string; + drilldownFilters?: any[]; + drilldownLayers?: any[]; } export interface DashboardModel { @@ -67,6 +81,10 @@ export class value1{ export const WidgetsMock: WidgetModel[] = [ + { + name: 'Common Filter', + identifier: 'common_filter' + }, { name: 'Radar Chart', identifier: 'radar_chart' @@ -111,4 +129,4 @@ export const WidgetsMock: WidgetModel[] = [ name: 'To Do', identifier: 'to_do_chart' } -] +] \ No newline at end of file diff --git a/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts b/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts index d31362b..f0b0f4a 100644 --- a/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts +++ b/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts @@ -97,6 +97,7 @@ export class LoginPageComponent implements OnInit { .subscribe( resp => { console.log('API Response received:', resp); + // Always reset loading state when response is received this.isLoading = false; // Handle different response formats @@ -106,7 +107,7 @@ export class LoginPageComponent implements OnInit { return; } // Handle different response formats - if (resp.success === 'false') { + if (resp.success === 'false' || resp.success === false) { this.isError = true; this.errMsg = resp.message || 'Login failed'; return; @@ -123,6 +124,7 @@ export class LoginPageComponent implements OnInit { }, (errResponse: HttpErrorResponse) => { console.log('API Error received:', errResponse); + // Always reset loading state when error occurs this.isLoading = false; this.isError = true; @@ -167,4 +169,4 @@ export class LoginPageComponent implements OnInit { this.showPassword = !this.showPassword; } -} +} \ No newline at end of file diff --git a/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html b/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html deleted file mode 100644 index 815da4a..0000000 --- a/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html +++ /dev/null @@ -1,20 +0,0 @@ - - - -
-Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ipsa fuga, asperiores mollitia iste vitae repellendus adipisci atque eum corrupti ad placeat unde voluptatum quia perferendis neque expedita, sequi iure quo. Ut error adipisci ex cum sint, suscipit, voluptatem repellat nemo dolorum unde dolores quasi aut. A earum quo mollitia voluptatibus!
- - - - - - diff --git a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew 6.zip b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew 6.zip new file mode 100644 index 0000000..72d0003 Binary files /dev/null and b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew 6.zip differ diff --git a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/common-filter.component.ts b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/common-filter.component.ts index bf7209e..f32238b 100644 --- a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/common-filter.component.ts +++ b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/common-filter.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Component, OnInit, OnDestroy, Input } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { Subscription } from 'rxjs'; import { Filter, FilterService, FilterType } from './filter.service'; @@ -9,6 +9,12 @@ import { Filter, FilterService, FilterType } from './filter.service'; styleUrls: ['./common-filter.component.scss'] }) export class CommonFilterComponent implements OnInit, OnDestroy { + @Input() baseFilters: any[] = []; + @Input() drilldownFilters: any[] = []; + @Input() drilldownLayers: any[] = []; + @Input() fieldName: string; + @Input() connection: number; + filters: Filter[] = []; filterForm: FormGroup; presets: string[] = []; @@ -102,7 +108,15 @@ export class CommonFilterComponent implements OnInit, OnDestroy { // Handle filter value changes onFilterChange(filterId: string, value: any): void { + console.log('=== COMMON FILTER DEBUG INFO ==='); + console.log('Filter value changed for ID:', filterId); + console.log('New value:', value); + + const filterDef = this.filters.find(f => f.id === filterId); + console.log('Filter definition:', filterDef); + this.filterService.updateFilterValue(filterId, value); + console.log('=== END COMMON FILTER DEBUG ==='); } // Handle multiselect changes diff --git a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/filter.service.ts b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/filter.service.ts index 1e246c1..4dea664 100644 --- a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/filter.service.ts +++ b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/common-filter/filter.service.ts @@ -62,11 +62,19 @@ export class FilterService { // Update filter value updateFilterValue(filterId: string, value: any): void { + console.log('=== FILTER SERVICE DEBUG INFO ==='); + console.log('Updating filter value for ID:', filterId); + console.log('New value:', value); + const currentState = this.filterStateSubject.value; - this.filterStateSubject.next({ + const newState = { ...currentState, [filterId]: value - }); + }; + + console.log('New filter state:', newState); + this.filterStateSubject.next(newState); + console.log('=== END FILTER SERVICE DEBUG ==='); } // Get current filter values diff --git a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts index 641a480..a0aefc5 100644 --- a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts +++ b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts @@ -798,6 +798,15 @@ export class EditnewdashComponent implements OnInit { drilldownLayers: item['drilldownLayers'] || [] }; + // For CommonFilterComponent, also pass baseFilters, drilldownFilters, drilldownLayers, fieldName, and connection + if (item.component && item.component.name === 'CommonFilterComponent') { + chartInputs['baseFilters'] = item['baseFilters'] || []; + chartInputs['drilldownFilters'] = item['drilldownFilters'] || []; + chartInputs['drilldownLayers'] = item['drilldownLayers'] || []; + chartInputs['fieldName'] = item['name'] || ''; + chartInputs['connection'] = item['connection'] || undefined; + } + // Remove undefined properties to avoid passing unnecessary data Object.keys(chartInputs).forEach(key => { if (chartInputs[key] === undefined) { diff --git a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts index 3bf405f..200079a 100644 --- a/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts +++ b/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts @@ -122,10 +122,15 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { // If we have the necessary data, fetch chart data from the service if (this.table && this.xAxis && this.yAxis) { - console.log('Fetching bar chart data for:', { table: this.table, xAxis: this.xAxis, yAxis: this.yAxis, connection: this.connection }); + console.log('=== BAR CHART DEBUG INFO ==='); + console.log('Table:', this.table); + console.log('X-Axis:', this.xAxis); + console.log('Y-Axis:', this.yAxis); + console.log('Connection:', this.connection); // Convert yAxis to string if it's an array const yAxisString = Array.isArray(this.yAxis) ? this.yAxis.join(',') : this.yAxis; + console.log('Y-Axis String:', yAxisString); // Get the parameter value from the drilldown stack for base level (should be empty) let parameterValue = ''; @@ -147,10 +152,14 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { filterParams = JSON.stringify(filterObj); } } + console.log('Base filters:', this.baseFilters); + console.log('Base filter params:', filterParams); // Add common filters to filter parameters const commonFilters = this.filterService.getFilterValues(); + const filterDefinitions = this.filterService.getFilters(); console.log('Common filters from service:', commonFilters); + console.log('Filter definitions:', filterDefinitions); if (Object.keys(commonFilters).length > 0) { // Merge common filters with base filters @@ -169,17 +178,25 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { // Add common filters using the field name as the key, not the filter id Object.keys(commonFilters).forEach(filterId => { const filterValue = commonFilters[filterId]; + console.log(`Processing filter ID: ${filterId}, Value:`, filterValue); + // Find the filter definition to get the field name const filterDef = this.filterService.getFilters().find(f => f.id === filterId); + console.log(`Filter definition for ${filterId}:`, filterDef); + if (filterDef && filterDef.field) { const fieldName = filterDef.field; + console.log(`Mapping filter ID ${filterId} to field name: ${fieldName}`); if (filterValue !== undefined && filterValue !== null && filterValue !== '') { mergedFilterObj[fieldName] = filterValue; + console.log(`Added to merged filters: ${fieldName} =`, filterValue); } } else { // Fallback to using filterId as field name if no field is defined + console.log(`No field name found for filter ID ${filterId}, using ID as field name`); if (filterValue !== undefined && filterValue !== null && filterValue !== '') { mergedFilterObj[filterId] = filterValue; + console.log(`Added to merged filters: ${filterId} =`, filterValue); } } }); @@ -189,11 +206,12 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { } } - console.log('Final filter parameters:', filterParams); + console.log('Final merged filter object:', filterParams); // Fetch data from the dashboard service with parameter field and value // For base level, we pass empty parameter and value, but now also pass filters const subscription = this.dashboardService.getChartData(this.table, 'bar', this.xAxis, yAxisString, this.connection, '', '', filterParams).subscribe( (data: any) => { + console.log('=== BAR CHART DATA RESPONSE ==='); console.log('Received bar chart data:', data); if (data === null) { console.warn('Bar chart API returned null data. Check if the API endpoint is working correctly.'); @@ -214,6 +232,7 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { // Trigger change detection // this.barChartData = [...this.barChartData]; console.log('Updated bar chart with data:', { labels: this.barChartLabels, data: this.barChartData }); + console.log('=== CHART UPDATED SUCCESSFULLY ==='); } else if (data && data.labels && data.datasets) { // Backend has already filtered the data, just display it this.noDataAvailable = data.labels.length === 0; @@ -222,6 +241,7 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { // Trigger change detection // this.barChartData = [...this.barChartData]; console.log('Updated bar chart with legacy data format:', { labels: this.barChartLabels, data: this.barChartData }); + console.log('=== CHART UPDATED SUCCESSFULLY (LEGACY) ==='); } else { console.warn('Bar chart received data does not have expected structure', data); this.noDataAvailable = true; @@ -232,6 +252,7 @@ export class BarChartComponent implements OnInit, OnChanges, OnDestroy { this.isFetchingData = false; }, (error) => { + console.error('=== BAR CHART ERROR ==='); console.error('Error fetching bar chart data:', error); this.noDataAvailable = true; this.barChartLabels = []; diff --git a/frontend/angular-clarity-master/src/app/services/api/login.service.ts b/frontend/angular-clarity-master/src/app/services/api/login.service.ts index 0b1cb1a..58b73b0 100644 --- a/frontend/angular-clarity-master/src/app/services/api/login.service.ts +++ b/frontend/angular-clarity-master/src/app/services/api/login.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { Observable, BehaviorSubject } from 'rxjs'; +import { Observable, BehaviorSubject, Subject } from 'rxjs'; import { UserInfoService, LoginInfoInStorage} from '../user-info.service'; import { ApiRequestService } from './api-request.service'; import { HttpClient } from '@angular/common/http'; @@ -43,63 +43,70 @@ export class LoginService { */ - let loginDataSubject:BehaviorSubject