DEV Community

UmairKhan
UmairKhan

Posted on

Dialogs and Dashboards

import { Component, OnInit, ViewChild } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';

@Component({
selector: 'app-panel',
templateUrl: './panel.component.html',
styleUrls: ['./panel.component.css']
})
export class PanelComponent implements OnInit {
@ViewChild('widgetList') widgetList: any;

constructor() { }

ngOnInit(): void {
// Add a WidgetBaseComponent instance for each widget that should be added to the panel
this.widgetList.nativeElement.appendChild(new WidgetBaseComponent());
}
}
import { Component, OnInit, ViewChild } from '@angular/core';
import { CdkDragDrop } from '@angular/cdk/drag-drop';

@Component({
selector: 'app-widget-base',
templateUrl: './widget-base.component.html',
styleUrls: ['./widget-base.component.css']
})
export class WidgetBaseComponent implements OnInit {
@ViewChild('widgetContainer') widgetContainer: any;

constructor() { }

ngOnInit(): void {
this.widgetContainer.cdkDropListDropped.subscribe((event: CdkDragDrop) => {
// Handle the widget drop event
});

// Add event handlers for the close, expand, and search buttons
this.widgetContainer.querySelector('.close-button').addEventListener('click', () => {
  // Close the widget
});

this.widgetContainer.querySelector('.expand-button').addEventListener('click', () => {
  // Expand the widget
});

this.widgetContainer.querySelector('.search-input').addEventListener('input', () => {
  // Search the widget content
});
Enter fullscreen mode Exit fullscreen mode

}
}
import { Component, OnInit, ViewChild } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';

@Component({
selector: 'app-panel',
templateUrl: './panel.component.html',
styleUrls: ['./panel.component.css']
})
export class PanelComponent implements OnInit {
@ViewChild('widgetList') widgetList: any;

constructor() { }

ngOnInit(): void {
// Add a WidgetBaseComponent instance for each widget that should be added to the panel
this.widgetList.nativeElement.appendChild(new WidgetBaseComponent());
}
}
// Clock widget
import { Component, OnInit } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';

@Component({
selector: 'app-clock-widget',
templateUrl: './clock-widget.component.html',
styleUrls: ['./clock-widget.component.css']
})
export class ClockWidgetComponent extends WidgetBaseComponent implements OnInit {

constructor() { super(); }

ngOnInit(): void { }
}

// Calendar widget
import { Component, OnInit } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';
import { CalendarEvent } from './calendar-event';

@Component({
selector: 'app-calendar-widget',
templateUrl: './calendar-widget.component.html',
styleUrls: ['./calendar-widget.component.css']
})
export class CalendarWidgetComponent extends WidgetBaseComponent implements OnInit {

events: CalendarEvent[] = [];

constructor() { super(); }

ngOnInit(): void {
// Fetch the calendar events from an API
// ...
}
}

// Inbox widget
import { Component, OnInit } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';
import { Email } from './email';

@Component({
selector: 'app-inbox-widget',
templateUrl: './inbox-widget.component.html',
styleUrls: ['./inbox-widget.component.css']
})
export class InboxWidgetComponent extends WidgetBaseComponent implements OnInit {

emails: Email[] = [];

constructor() { super(); }

ngOnInit(): void {
// Fetch the emails from an API
// ...
}
}

// Chart widget
import { Component, OnInit } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';
import { ChartData } from './chart-data';

@Component({
selector: 'app-chart-widget',
templateUrl: './chart-widget.component.html',
styleUrls: ['./chart-widget.component.css']
})
export class ChartWidgetComponent extends WidgetBaseComponent implements OnInit {

chartData: ChartData[] = [];

constructor() { super(); }

ngOnInit(): void {
// Fetch the chart data from an API
// ...
}
}

// Clock widget template

<< time >>

// Calendar widget template

  • << event.title >>

// Inbox widget template

  • << email.subject >>

// Chart widget template

// Clock widget CSS
.clock-widget {
text-align: center;
font-size: 24px;
}

// Calendar widget CSS
.calendar-widget {
list-style: none;
padding: 0;
}

.calendar-widget li {
cursor: pointer;
}

// Inbox widget CSS
.inbox-widget {
list-style: none;
padding: 0;
}

.inbox-widget li {
cursor: pointer;
}

// Chart widget CSS
.chart-widget {
width: 100%;
height: 300px;
}

chart {

width: 100%;
height: 100%;
}
import { Component, OnInit } from '@angular/core';
import { WidgetBaseComponent } from './widget-base.component';
import { HttpClient } from '@angular/common/http';

@Component({
selector: 'app-weather-widget',
templateUrl: './weather-widget.component.html',
styleUrls: ['./weather-widget.component.css']
})
export class WeatherWidgetComponent extends WidgetBaseComponent implements OnInit {

private weatherData: any;

constructor(private httpClient: HttpClient) { super(); }

ngOnInit(): void {
// Fetch the weather data from an API
this.httpClient.get('https://api.openweathermap.org/data/2.5/weather?q=London&units=metric&appid=YOUR_API_KEY').subscribe((data) => {
this.weatherData = data;
});
}

getTemperature() {
return this.weatherData.main.temp;
}

getCity() {
return this.weatherData.name;
}
}

Top comments (0)