This commit is contained in:
string 2025-10-29 12:16:54 +05:30
parent 0b738ca7ca
commit 4c135c4901
2 changed files with 144 additions and 21 deletions

View File

@ -298,10 +298,10 @@
<tr> <tr>
<td></td> <td></td>
<td> <td>
<input [(ngModel)]="todo" placeholder="Add Todo" class="clr-input todo-input"> <input [(ngModel)]="todo" (keyup.enter)="addTodo(todo)" placeholder="Add Todo" class="clr-input todo-input">
</td> </td>
<td style="text-align:right"> <td style="text-align:right">
<a routerLink="." color='primary' (click)="addTodo(todo)"> <a color='primary' (click)="addTodo(todo)" class="add-button">
<clr-icon shape="plus"></clr-icon> <clr-icon shape="plus"></clr-icon>
</a> </a>
</td> </td>

View File

@ -1,4 +1,5 @@
import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service';
import { FilterService } from '../../common-filter/filter.service'; import { FilterService } from '../../common-filter/filter.service';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
@ -39,16 +40,22 @@ export class ToDoChartComponent implements OnInit, OnChanges {
currentDrilldownLevel: number = 0; // Current drilldown level (0 = base level) currentDrilldownLevel: number = 0; // Current drilldown level (0 = base level)
originalTodoList: string[] = []; originalTodoList: string[] = [];
constructor(private filterService: FilterService) { } constructor(
private dashboardService: Dashboard3Service,
private filterService: FilterService
) { }
ngOnInit(): void { ngOnInit(): void {
// Subscribe to filter changes // Subscribe to filter changes
this.subscriptions.push( this.subscriptions.push(
this.filterService.filterState$.subscribe(filters => { this.filterService.filterState$.subscribe(filters => {
// When filters change, refresh the chart data // When filters change, refresh the chart data
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
}) })
); );
// Initialize with default data
this.fetchToDoData();
} }
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: SimpleChanges): void {
@ -76,7 +83,7 @@ export class ToDoChartComponent implements OnInit, OnChanges {
data: any; data: any;
todo: string; todo: string;
todoList = ['todo 1']; todoList: string[] = [];
// Add properties for filter functionality // Add properties for filter functionality
private openMultiselects: Map<string, string> = new Map(); // Map of filterId -> context private openMultiselects: Map<string, string> = new Map(); // Map of filterId -> context
@ -88,22 +95,107 @@ export class ToDoChartComponent implements OnInit, OnChanges {
fetchToDoData(): void { fetchToDoData(): void {
// If we have the necessary data, fetch to-do data from the service // If we have the necessary data, fetch to-do data from the service
if (this.table) { if (this.table && this.xAxis) {
console.log('Fetching to-do data for:', { table: this.table }); console.log('Fetching to-do data for:', { table: this.table, xAxis: this.xAxis, connection: this.connection });
// For to-do chart, we might want to fetch data differently // Convert baseFilters to filter parameters
// This is a placeholder implementation - you may need to adjust based on your API let filterParams = '';
console.log('To-do chart would fetch data from table:', this.table); if (this.baseFilters && this.baseFilters.length > 0) {
const filterObj = {};
this.baseFilters.forEach(filter => {
if (filter.field && filter.value) {
filterObj[filter.field] = filter.value;
}
});
if (Object.keys(filterObj).length > 0) {
filterParams = JSON.stringify(filterObj);
}
}
// In a real implementation, you would connect to your service here // Add common filters to filter parameters
// For now, we'll just keep the default to-do list const commonFilters = this.filterService.getFilterValues();
console.log('Common filters from service:', commonFilters);
if (Object.keys(commonFilters).length > 0) {
// Merge common filters with base filters
const mergedFilterObj = {};
// Add base filters first
if (filterParams) {
try {
const baseFilterObj = JSON.parse(filterParams);
Object.assign(mergedFilterObj, baseFilterObj);
} catch (e) {
console.warn('Failed to parse base filter parameters:', e);
}
}
// Add common filters using the field name as the key, not the filter id
Object.keys(commonFilters).forEach(filterId => {
const filterValue = commonFilters[filterId];
// Find the filter definition to get the field name
const filterDef = this.filterService.getFilters().find(f => f.id === filterId);
if (filterDef && filterDef.field) {
const fieldName = filterDef.field;
if (filterValue !== undefined && filterValue !== null && filterValue !== '') {
mergedFilterObj[fieldName] = filterValue;
}
} else {
// Fallback to using filterId as field name if no field is defined
if (filterValue !== undefined && filterValue !== null && filterValue !== '') {
mergedFilterObj[filterId] = filterValue;
}
}
});
if (Object.keys(mergedFilterObj).length > 0) {
filterParams = JSON.stringify(mergedFilterObj);
}
}
console.log('Final filter parameters:', filterParams);
// Fetch data from the dashboard service
this.dashboardService.getChartData(this.table, 'todo', this.xAxis, '', this.connection, '', '', filterParams).subscribe(
(data: any) => {
console.log('Received to-do chart data:', data);
if (data === null) {
console.warn('To-do chart API returned null data. Check if the API endpoint is working correctly.');
this.todoList = [];
return;
}
// Handle the actual data structure returned by the API
if (data && data.chartLabels) {
// Use chartLabels as the todo items
this.todoList = data.chartLabels;
} else if (data && data.labels) {
// Fallback to labels if chartLabels is not available
this.todoList = data.labels;
} else {
console.warn('To-do chart received data does not have expected structure', data);
this.todoList = [];
}
},
(error) => {
console.error('Error fetching to-do chart data:', error);
this.todoList = [];
}
);
} else { } else {
console.log('Missing required data for to-do chart:', { table: this.table }); console.log('Missing required data for to-do chart:', { table: this.table, xAxis: this.xAxis });
// Initialize with default data if no table is specified
if (this.todoList.length === 0) {
this.todoList = ['Sample Task 1', 'Sample Task 2', 'Sample Task 3'];
}
} }
} }
public addTodo(todo: string) { public addTodo(todo: string) {
this.todoList.push(todo); if (todo && todo.trim() !== '') {
this.todoList.push(todo.trim());
this.todo = ''; // Clear the input field
}
} }
public removeTodo(todoIx: number) { public removeTodo(todoIx: number) {
@ -112,6 +204,37 @@ export class ToDoChartComponent implements OnInit, OnChanges {
} }
} }
// Navigate back to previous drilldown level
navigateBack(): void {
console.log('Navigating back, current stack:', this.drilldownStack);
console.log('Current level:', this.currentDrilldownLevel);
if (this.drilldownStack.length > 0) {
// Remove the last entry from the stack
const removedEntry = this.drilldownStack.pop();
console.log('Removed entry from stack:', removedEntry);
// Update the current drilldown level
this.currentDrilldownLevel = this.drilldownStack.length;
console.log('New level after pop:', this.currentDrilldownLevel);
console.log('Stack after pop:', this.drilldownStack);
if (this.drilldownStack.length > 0) {
// Fetch data for the previous level
console.log('Fetching data for previous level');
this.fetchToDoData();
} else {
// Back to base level
console.log('Back to base level, resetting to original data');
this.todoList = [...this.originalTodoList];
}
} else {
// Already at base level, reset to original data
console.log('Already at base level, resetting to original data');
this.todoList = [...this.originalTodoList];
}
}
// Initialize filter values with proper default values based on type // Initialize filter values with proper default values based on type
private initializeFilterValues(): void { private initializeFilterValues(): void {
console.log('Initializing filter values'); console.log('Initializing filter values');
@ -249,21 +372,21 @@ export class ToDoChartComponent implements OnInit, OnChanges {
onBaseFilterChange(filter: any): void { onBaseFilterChange(filter: any): void {
console.log('Base filter changed:', filter); console.log('Base filter changed:', filter);
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Handle drilldown filter changes // Handle drilldown filter changes
onDrilldownFilterChange(filter: any): void { onDrilldownFilterChange(filter: any): void {
console.log('Drilldown filter changed:', filter); console.log('Drilldown filter changed:', filter);
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Handle layer filter changes // Handle layer filter changes
onLayerFilterChange(filter: any): void { onLayerFilterChange(filter: any): void {
console.log('Layer filter changed:', filter); console.log('Layer filter changed:', filter);
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Handle multiselect changes // Handle multiselect changes
@ -286,21 +409,21 @@ export class ToDoChartComponent implements OnInit, OnChanges {
} }
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Handle date range changes // Handle date range changes
onDateRangeChange(filter: any, dateRange: { start: string | null, end: string | null }): void { onDateRangeChange(filter: any, dateRange: { start: string | null, end: string | null }): void {
filter.value = dateRange; filter.value = dateRange;
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Handle toggle changes // Handle toggle changes
onToggleChange(filter: any, checked: boolean): void { onToggleChange(filter: any, checked: boolean): void {
filter.value = checked; filter.value = checked;
// Refresh data when filter changes // Refresh data when filter changes
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
// Toggle multiselect dropdown visibility // Toggle multiselect dropdown visibility
@ -419,7 +542,7 @@ export class ToDoChartComponent implements OnInit, OnChanges {
this.openMultiselects.clear(); this.openMultiselects.clear();
// Refresh data // Refresh data
// For To Do chart, this would trigger a refresh of the todo list this.fetchToDoData();
} }
ngOnDestroy(): void { ngOnDestroy(): void {