import { CollectionView, View } from 'marionette'; import { html } from 'lit-html'; export const LoadingView = View.extend({ template: () => html`

Loading records…

` }); export const ErrorView = View.extend({ template: () => html`

Could not open records.

`, triggers: { 'click .js-retry': 'retry' } }); export const RecordsLayout = View.extend({ className: 'records', template: () => html`

Records

`, childViewTriggers: { retry: 'retry', reload: 'reload' }, regions: { status: '.js-status', list: '.js-list', detail: '.js-detail' } }); export const RecordsStatus = View.extend({ modelEvents: { change: 'render' }, template: ({ count, loading, error }) => html`

${loading ? 'Loading records…' : `${count} ${count === 1 ? 'record' : 'records'}`}

${error ? html`

${error}

` : html``}`, triggers: { 'click .js-retry': 'retry', 'click .js-reload': 'reload' } }); const RecordRow = View.extend({ tagName: 'li', modelEvents: { change: 'render' }, stateEvents: { 'change:selectedId': 'render' }, templateContext() { return { selected: this.getState().get('selectedId') === this.model.id }; }, template: ({ title, selected }) => html` `, triggers: { 'click button': 'select' } }); export const RecordsList = CollectionView.extend({ tagName: 'ul', attributes: { 'aria-label': 'Records' }, childView: RecordRow, childViewOptions() { return { state: this.getState() }; }, childViewTriggers: { select: 'select:record' } }); export const EmptyDetailView = View.extend({ template: () => html`

Select a record.

` }); export const DetailView = View.extend({ template: ({ title, description }) => html`

${title}

${description}

` });