to do
This commit is contained in:
parent
0b738ca7ca
commit
4c135c4901
@ -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>
|
||||||
|
|||||||
@ -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 {
|
} else {
|
||||||
console.log('Missing required data for to-do chart:', { table: this.table });
|
// 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 {
|
||||||
|
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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user