Skip to content

Instantly share code, notes, and snippets.

@eriklumme
eriklumme / stock-tracker.ts
Created October 15, 2020 19:49
Stock Tracker 15
import { registerStyles } from '@vaadin/vaadin-themable-mixin/register-styles.js';
registerStyles('vaadin-combo-box-item', css`
.symbol { font-weight: bold }
.name { font-size: 0.8rem }
`);
@eriklumme
eriklumme / stock-tracker.ts
Created October 15, 2020 19:48
Stock Tracker 14
<vaadin-combo-box
@filter-changed=${this.onStockSearchStringChanged}
.renderer=${this.renderSearchBoxItems}
id="stock-search"
label="Search for a stock symbol"
item-label-path="symbol">
</vaadin-combo-box>
...
@eriklumme
eriklumme / stock-tracker.ts
Last active October 15, 2020 19:45
Stock Tracker 13
private searchApiURL = 'https://financialmodelingprep.com/api/v3/search?query=<query>&exchange=NASDAQ';
private onStockSearchStringChanged(filterEvent: any) {
let searchString = filterEvent.detail.value;
if (!searchString) {
this.stockSearchBox.filteredItems = [];
return;
}
const url = this.searchApiURL.replace('<query>', searchString);
@eriklumme
eriklumme / stock-tracker.ts
Last active October 15, 2020 19:57
Stock Tracker 12
import {LitElement, html, css, customElement, property, query} from 'lit-element';
...
import '@vaadin/vaadin-combo-box';
import '@vaadin/vaadin-button';
import '@vaadin/vaadin-ordered-layout';
...
@query("#stock-search")
private stockSearchBox: any;
@eriklumme
eriklumme / stock-tracker.ts
Created October 15, 2020 19:39
Stock Tracker 11
:host {
display: flex;
flex-flow: column;
box-sizing: border-box;
padding: var(--lumo-space-l);
}
@eriklumme
eriklumme / stock-tracker.ts
Created October 15, 2020 19:38
Stock Tracker 10
static get styles() {
return css`
.percentage {
color: green;
font-weight: bold;
}
.percentage.negative {
color: red;
}
`;
@eriklumme
eriklumme / stock-tracker.ts
Last active October 15, 2020 19:57
Stock Tracker 9
render() {
return html`
<vaadin-grid .items=${this.items}>
<vaadin-grid-column path="symbol"></vaadin-grid-column>
<vaadin-grid-column path="price"></vaadin-grid-column>
<vaadin-grid-column .renderer=${this.renderPercentage} header="Percentage change"></vaadin-grid-column>
</vaadin-grid>
`;
}
@eriklumme
eriklumme / stock-tracker.ts
Created October 15, 2020 19:33
Stock Tracker 8
firstUpdated() {
this.updateGrid();
}
private updateGrid() {
StockService.getStocks().then(stocks => {
let symbols = stocks.map(stock => stock.symbol).concat(',');
let url = this.stockAPIBaseUrl + symbols;
fetch(url)
@eriklumme
eriklumme / stock-tracker.ts
Last active October 15, 2020 19:33
Stock Tracker 7
@property({ type: Array })
private items = [];
firstUpdated() {
StockService.getStocks().then(stocks => this.items = stocks);
}
@eriklumme
eriklumme / stock-tracker.ts
Last active October 15, 2020 19:58
Stock Tracker 6
render() {
return html`
<vaadin-grid .items=${this.items}>
<vaadin-grid-column path="symbol"></vaadin-grid-column>
</vaadin-grid>
`;
}