UNPKG

@3mo/fetchable-data-grid

Version:

A fetchable variant of @3mo/data-grid

109 lines (103 loc) 3.35 kB
var FetchableDataGridRefetchIconButton_1; import { __decorate } from "tslib"; import { Component, component, event, html, property, css } from '@a11d/lit'; import { tooltip } from '@3mo/tooltip'; import { Localizer } from '@3mo/localization'; import { contextMenu } from '@3mo/context-menu'; Localizer.dictionaries.add('de', { 'Refetch': 'Neu laden', 'automatically every ${seconds:string}': 'automatisch alle ${seconds:string}', 'Off': 'Aus', }); /** * @fires requestFetch * @fires autoRefetchChange */ let FetchableDataGridRefetchIconButton = FetchableDataGridRefetchIconButton_1 = class FetchableDataGridRefetchIconButton extends Component { constructor() { super(...arguments); this.fetching = false; } static get styles() { return css ` mo-grid { color: var(--mo-color-gray); &[data-fetching] { color: var(--mo-color-accent); } mo-icon-button { grid-area: 1 / 1; &[data-selected] { animation: rotate 1500ms ease-in-out infinite; } } span { grid-area: 1 / 1; place-self: end end; font-size: 0.65rem; font-weight: 700; } } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } `; } get template() { const tooltipText = [ t('Refetch'), !this.autoRefetch ? undefined : t('automatically every ${seconds:string}', { seconds: this.autoRefetch.formatAsUnit('second', { unitDisplay: 'long' }) }) ].filter(Boolean).join(' - '); return html ` <mo-grid ?data-fetching=${this.fetching}> <mo-icon-button icon='sync' ${tooltip(tooltipText)} ?data-selected=${this.fetching} @click=${() => this.requestFetch.dispatch()} ${contextMenu(() => html ` <style> mo-context-menu-item { &::part(icon) { font-size: 18px; opacity: 0; } &[data-selected]::part(icon) { opacity: 0.75; } } </style> ${[undefined, ...FetchableDataGridRefetchIconButton_1.refetchOptions].map(seconds => html ` <mo-context-menu-item icon='done' ?data-selected=${this.autoRefetch === seconds} @click=${() => { this.autoRefetch = seconds; this.autoRefetchChange.dispatch(seconds); }} > ${seconds?.formatAsUnit('second', { unitDisplay: 'narrow' }) ?? t('Off')} </mo-context-menu-item> `)} `)} ></mo-icon-button> ${!this.autoRefetch ? html.nothing : html ` <span>${this.autoRefetch.format()}</span> `} </mo-grid> `; } }; FetchableDataGridRefetchIconButton.refetchOptions = [5, 10, 30, 60]; __decorate([ event() ], FetchableDataGridRefetchIconButton.prototype, "requestFetch", void 0); __decorate([ property({ type: Boolean }) ], FetchableDataGridRefetchIconButton.prototype, "fetching", void 0); __decorate([ event() ], FetchableDataGridRefetchIconButton.prototype, "autoRefetchChange", void 0); __decorate([ property({ type: Number }) ], FetchableDataGridRefetchIconButton.prototype, "autoRefetch", void 0); FetchableDataGridRefetchIconButton = FetchableDataGridRefetchIconButton_1 = __decorate([ component('mo-fetchable-data-grid-refetch-icon-button') ], FetchableDataGridRefetchIconButton); export { FetchableDataGridRefetchIconButton };