data-dashboard
Version:
A data-driven dashboard console for report widgets
50 lines (44 loc) • 1.38 kB
text/typescript
// DataDashboard ~~ MIT License
// Widget controller
// Imports
import { dna } from 'dna-dom';
import { fetchJson } from 'fetch-json';
// Modules
import { webAppUtil } from '../../modules/util.js';
// Types
type RawData = {
items: Book[],
};
type WidgetModel = {
books: Book[],
};
type Book = {
volumeInfo: {
title: string,
imageLinks: { thumbnail: string },
previewLink: string,
publisher: string,
},
saleInfo: {
listPrice: { amount: number },
},
};
const webAppWidgetSpacexBooks = {
show(widgetElem: Element): void {
const url = 'https://www.googleapis.com/books/v1/volumes';
const params = { q: 'spacex' };
const hasCover = (book: Book) => !!book.volumeInfo.imageLinks;
const fixHttpProtocol = (book: Book) => book.volumeInfo.imageLinks.thumbnail =
book.volumeInfo.imageLinks.thumbnail.replace('http:', 'https:');
const handleData = (data: RawData) => {
webAppUtil.spinnerStop(widgetElem);
const model = <WidgetModel>dna.getModel(widgetElem);
model.books = data.items.filter(hasCover);
model.books.forEach(fixHttpProtocol);
dna.refresh(widgetElem);
};
webAppUtil.spinnerStart(widgetElem);
fetchJson.get(url, params).then(handleData);
},
};
export { webAppWidgetSpacexBooks };