annotate web/src/main.ts @ 18:a527228aa353 default tip

prefect use postgres
author drewp@bigasterisk.com
date Fri, 19 Jul 2024 21:01:09 -0700
parents b9c2b7fedbcd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
1 import { SlTextarea, setBasePath } from "@shoelace-style/shoelace";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
2 import "@shoelace-style/shoelace/dist/themes/light.css";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
3 import { LitElement, PropertyValueMap, css, html } from "lit";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
4 import { customElement, queryAsync, state } from "lit/decorators.js";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
5 import { unsafeHTML } from "lit/directives/unsafe-html.js";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
6 setBasePath("@fs/opt/node_modules/@shoelace-style/shoelace/dist");
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
7
14
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
8 interface Doc {
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
9 sourceTitle: string
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
10 phrase: string
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
11 snippetHtml: string
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
12 }
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
13
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
14 @customElement("sco-search-page")
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
15 export class ScoSearchPage extends LitElement {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
16 static styles = [
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
17 css`
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
18 :host {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
19 display: flex;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
20 flex-direction: column;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
21 height: 100vh;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
22 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
23 form {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
24 display: flex;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
25 flex-direction: row;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
26 align-items: flex-end;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
27
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
28 margin: 0 10% 0 100px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
29 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
30 sl-textarea {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
31 width: 100%;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
32 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
33 :host > * {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
34 padding: 5px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
35 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
36 section#results {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
37 background-color: #ffffffde;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
38 flex-grow: 1;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
39 display: flex;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
40 flex-direction: column;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
41 overflow: hidden;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
42 margin-bottom: 15px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
43 margin-left: 110px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
44 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
45 img.bot {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
46 width: 237px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
47 position: absolute;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
48 left: -33px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
49 top: -22px;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
50 z-index: -1;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
51 }
8
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
52 dt {
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
53 color: blue;
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
54 }
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
55 dd {
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
56 margin-bottom: 25px;
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
57 }
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
58 `,
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
59 ];
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
60 @state() query: string = "climate";
14
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
61 @state() results: Doc[] = [];
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
62 @state() queryError: string = "";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
63 @queryAsync("sl-textarea") queryEl?: Promise<SlTextarea>;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
64 protected async firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>) {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
65 super.firstUpdated(_changedProperties);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
66
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
67 await this.pressingEnterSubmitsForm();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
68
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
69 this.queryParamToProperty();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
70
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
71 window.addEventListener("popstate", (event) => {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
72 this.queryParamToProperty();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
73 });
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
74
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
75 this.submit().catch(console.error);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
76 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
77
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
78 private async pressingEnterSubmitsForm() {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
79 const ta = (await this.queryEl)?.shadowRoot?.querySelector("textarea");
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
80 ta?.addEventListener("keydown", (event: KeyboardEvent) => {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
81 if (event.code == "Enter" && !event.shiftKey) {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
82 event.preventDefault();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
83 this.submit();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
84 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
85 });
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
86 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
87
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
88 private queryParamToProperty() {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
89 const urlParams = new URLSearchParams(window.location.search);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
90 const qParam = urlParams.get("q");
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
91
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
92 if (qParam) {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
93 this.query = qParam;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
94 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
95 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
96
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
97 private async propertyToQueryParam() {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
98 const currentUrl = new URL(window.location.href);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
99
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
100 const q = await this.getCurrentQuery();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
101 if (currentUrl.searchParams.get("q") !== q) {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
102 currentUrl.searchParams.set("q", q);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
103
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
104 const newUrl = currentUrl.toString();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
105
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
106 history.pushState({}, document.title, newUrl);
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
107 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
108 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
109
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
110 render() {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
111 return html`
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
112 <section id="query">
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
113 <img class="bot" src="sco-bot.jpg" />
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
114 <form>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
115 <sl-textarea .value=${this.query} rows="1" resize="auto" label="Query" enterkeyhint="search" autocapitalize="off" autofocus="true"></sl-textarea>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
116 <sl-button variant="primary" @click=${this.submit}>Submit</sl-button>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
117 <div>${this.queryError}</div>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
118 </form>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
119 </section>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
120 <section id="results">
8
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
121 <dl>
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
122 ${this.results.map(
14
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
123 (r: Doc) =>
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
124 html`<dt>${r.sourceTitle}</dt>
8
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
125 <dd>${unsafeHTML(r.snippetHtml)}</dd>`
14
b9c2b7fedbcd fix up deployment and connect ui to server again
drewp@bigasterisk.com
parents: 8
diff changeset
126 )}
8
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
127 </dl>
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
128 <div>Matching results: ${this.results.length}</div>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
129 </section>
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
130 `;
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
131 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
132
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
133 async getCurrentQuery(): Promise<string> {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
134 return (await this.queryEl)!.value || "";
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
135 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
136
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
137 async submit() {
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
138 await this.propertyToQueryParam();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
139
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
140 this.results = [];
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
141
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
142 const sentQ = await this.getCurrentQuery();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
143
8
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
144 const resp = await fetch("query?" + new URLSearchParams({ q: sentQ }));
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
145 if (sentQ != (await this.getCurrentQuery())) {
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
146 // old result- ignore
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
147 return;
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
148 }
f23b21bd0fce apex search
drewp@bigasterisk.com
parents: 6
diff changeset
149 this.results = (await resp.json()).results;
6
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
150 this.requestUpdate();
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
151 }
a4659594f2e5 add web page
drewp@bigasterisk.com
parents:
diff changeset
152 }