annotate src/UpcomingEvents.ts @ 20:e8c90d893919

layout and sorting
author drewp@bigasterisk.com
date Mon, 26 Aug 2024 16:17:49 -0700
parents 472003015880
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
1 import { LitElement, css, html } from "lit";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
2 import { customElement, property } from "lit/decorators.js";
20
e8c90d893919 layout and sorting
drewp@bigasterisk.com
parents: 17
diff changeset
3 import { sortBy, sortedUniqBy } from "lodash";
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
4 import { DataFactory, Quad_Subject, Store } from "n3";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
5 import { shared } from "./shared";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
6 import { EV, fetchGraph, parseGraph, RDF } from "./parseRdf";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
7 import { DisplayEvent } from "./DisplayEvent";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
8
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
9 const { namedNode } = DataFactory;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
10
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
11 @customElement("fd-upcoming-events")
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
12 export class UpcomingEvents extends LitElement {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
13 static styles = [
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
14 shared,
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
15 css`
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
16 `,
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
17 ];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
18 @property() evs: DisplayEvent[];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
19 constructor() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
20 super();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
21 this.evs = [];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
22 this.load();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
23 setInterval(this.load.bind(this), 5 * 60 * 1000);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
24 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
25
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
26 async load() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
27 const r = await fetchGraph("/gcalendarwatch/graph/calendar/upcoming");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
28 await parseGraph(r, (store: Store) => {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
29 const graph = namedNode(EV + "gcalendar");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
30 this.evs = [];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
31 store.getSubjects(namedNode(RDF + "type"), namedNode(EV + "Event"), graph).forEach((ev: Quad_Subject) => {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
32 const de = new DisplayEvent(store, graph, ev);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
33 if (de.show()) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
34 this.evs = [...this.evs, de];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
35 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
36 });
20
e8c90d893919 layout and sorting
drewp@bigasterisk.com
parents: 17
diff changeset
37 this.evs = sortedUniqBy(sortBy(this.evs, "start"), (de) => de.start + de.title);
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
38 });
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
39 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
40
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
41 render() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
42 return html`
17
472003015880 restyle using css grid
drewp@bigasterisk.com
parents: 15
diff changeset
43 <h1>Calendar</h1>
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
44 <ol>
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
45 ${this.evs.map((d) => html`<li><span class="date">${d.shortDate()}</span> ${d.title}</li>`)}
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
46 </ol>
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
47 `;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
48 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
49 }