@future-grid/fgp-graph
Version:
fgp-graph is a chart lib based on Dygraphs
98 lines (81 loc) • 3.45 kB
text/typescript
import html2canvas from 'html2canvas';
import {DataRequestTarget, GraphSeries} from '../metadata/configurations';
export interface DataHandler {
source: string;
/**
* fetch data for multi-devices
*
* @param {Array<string>} ids
* @param deviceType
* @param interval
* @param {{ start: number; end: number }} range
* @param {Array<string>} [fields]
* @param seriesConfig config from viewConfig
* @param target rangebar or graph
* @returns {Array<{ id: string, data: Array<any> }>}
* @memberof DataHandler
*/
fetchdata(ids: Array<string>, deviceType: string, interval: string, range: { start: number; end: number }, fields?: Array<string>, seriesConfig?: Array<GraphSeries>, target?: DataRequestTarget): Promise<Array<{ id: string, data: Array<any> }>>;
fetchFirstNLast(ids: Array<string>, devieType: string, interval: string, fields?: Array<string>): Promise<Array<{ id: string, data: { first: any, last: any } }>>;
}
export class LoadingSpinner {
private spinner: HTMLElement;
private spinnerHtml: string = `
<svg width="16px" height="12px">
<polyline id="back" points="1 6 4 6 6 11 10 1 12 6 15 6"></polyline>
<polyline id="front" points="1 6 4 6 6 11 10 1 12 6 15 6"></polyline>
</svg>
`;
public isLoading: boolean = false;
constructor(public container: HTMLElement) {
this.spinner = document.createElement('div');
this.spinner.setAttribute("class", "indicator");
this.spinner.innerHTML = this.spinnerHtml;
}
public show(): void {
// add into parent
this.container.appendChild(this.spinner);
this.isLoading = true;
}
public done(): void {
this.container.removeChild(this.spinner);
this.isLoading = false;
}
}
export class ExportUtils {
public static exportCsv(content: string, fileName: string) {
// simulate click "<a>"
let downloadDom: HTMLAnchorElement = document.createElement('a');
let mimeType: string = 'application/octet-stream';
if (URL && 'download' in downloadDom) {
//html5 A[download]
downloadDom.href = URL.createObjectURL(new Blob([content], {
type: mimeType
}));
downloadDom.setAttribute('download', fileName);
document.body.appendChild(downloadDom);
downloadDom.click();
document.body.removeChild(downloadDom);
}
}
public static saveAsImage(graphDiv: HTMLElement, fileName: string) {
if (graphDiv) {
// to blob and then download
html2canvas(graphDiv).then(canvas => {
canvas.toBlob(blobData => {
if (blobData) {
let downloadDom: HTMLAnchorElement = document.createElement('a');
if (URL && 'download' in downloadDom) {
//html5 A[download]
downloadDom.href = URL.createObjectURL(blobData);
downloadDom.setAttribute('download', fileName);
document.body.appendChild(downloadDom);
downloadDom.click();
document.body.removeChild(downloadDom);
}
}
});
});
}
}
}