@nyaruka/temba-components 0.24.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sw.js CHANGED
@@ -1,2 +1,2 @@
1
- if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let r=Promise.resolve();return t[e]||(r=new Promise(async r=>{if("document"in self){const t=document.createElement("script");t.src=e,document.head.appendChild(t),t.onload=r}else importScripts(e),r()})),r.then(()=>{if(!t[e])throw new Error(`Module ${e} didn’t register its module`);return t[e]})},r=(r,t)=>{Promise.all(r.map(e)).then(e=>t(1===e.length?e[0]:e))},t={require:Promise.resolve(r)};self.define=(r,s,o)=>{t[r]||(t[r]=Promise.resolve().then(()=>{let t={};const n={uri:location.origin+r.slice(1)};return Promise.all(s.map(r=>{switch(r){case"exports":return t;case"module":return n;default:return e(r)}})).then(e=>{const r=o(...e);return t.default||(t.default=r),t})}))}}define("./sw.js",["./workbox-80efdfd1"],(function(e){"use strict";e.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"ef1b57e2.js",revision:"197036068e252f090cc7282a245da584"},{url:"templates/components-body.html",revision:"50ed235b9a1d4fc5d965f9bb00ebca41"},{url:"templates/components-head.html",revision:"e8272aa33ec2dc7efe1ed8d48b5a85f1"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"))),e.registerRoute("polyfills/*.js",new e.CacheFirst,"GET")}));
1
+ if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let r=Promise.resolve();return t[e]||(r=new Promise(async r=>{if("document"in self){const t=document.createElement("script");t.src=e,document.head.appendChild(t),t.onload=r}else importScripts(e),r()})),r.then(()=>{if(!t[e])throw new Error(`Module ${e} didn’t register its module`);return t[e]})},r=(r,t)=>{Promise.all(r.map(e)).then(e=>t(1===e.length?e[0]:e))},t={require:Promise.resolve(r)};self.define=(r,s,o)=>{t[r]||(t[r]=Promise.resolve().then(()=>{let t={};const n={uri:location.origin+r.slice(1)};return Promise.all(s.map(r=>{switch(r){case"exports":return t;case"module":return n;default:return e(r)}})).then(e=>{const r=o(...e);return t.default||(t.default=r),t})}))}}define("./sw.js",["./workbox-80efdfd1"],(function(e){"use strict";e.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"85f2e730.js",revision:"a0211b2c829be197340b7713bf0fef89"},{url:"templates/components-body.html",revision:"3b73dd721b71a942c5977106dc9251e9"},{url:"templates/components-head.html",revision:"3835a901cb21b016f4432807588ebfac"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"))),e.registerRoute("polyfills/*.js",new e.CacheFirst,"GET")}));
2
2
  //# sourceMappingURL=sw.js.map
package/dist/sw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sw.js","sources":["../../../../../tmp/cef30b2bb62fb553fcb64a9f2709e9a0/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-routing/registerRoute.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {skipWaiting as workbox_core_skipWaiting} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-core/skipWaiting.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nworkbox_core_skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"ef1b57e2.js\",\n \"revision\": \"197036068e252f090cc7282a245da584\"\n },\n {\n \"url\": \"templates/components-body.html\",\n \"revision\": \"50ed235b9a1d4fc5d965f9bb00ebca41\"\n },\n {\n \"url\": \"templates/components-head.html\",\n \"revision\": \"e8272aa33ec2dc7efe1ed8d48b5a85f1\"\n }\n], {});\n\nworkbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"/index.html\")));\n\n\nworkbox_routing_registerRoute(\"polyfills/*.js\", new workbox_strategies_CacheFirst(), 'GET');\n\n\n\n\n"],"names":["workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL","workbox_strategies_CacheFirst"],"mappings":"k1BAmCoC,CAClC,KACS,uBACK,oCAEd,KACS,0CACK,oCAEd,KACS,0CACK,qCAEb,oBAE2B,IAAIA,kBAAgCC,0BAA2C,iCAG/E,iBAAkB,IAAIC,aAAiC"}
1
+ {"version":3,"file":"sw.js","sources":["../../../../../tmp/816dba2c89bd025d2e68797c1bbcab76/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-routing/registerRoute.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {skipWaiting as workbox_core_skipWaiting} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-core/skipWaiting.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/temba-components/temba-components/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nworkbox_core_skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"85f2e730.js\",\n \"revision\": \"a0211b2c829be197340b7713bf0fef89\"\n },\n {\n \"url\": \"templates/components-body.html\",\n \"revision\": \"3b73dd721b71a942c5977106dc9251e9\"\n },\n {\n \"url\": \"templates/components-head.html\",\n \"revision\": \"3835a901cb21b016f4432807588ebfac\"\n }\n], {});\n\nworkbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"/index.html\")));\n\n\nworkbox_routing_registerRoute(\"polyfills/*.js\", new workbox_strategies_CacheFirst(), 'GET');\n\n\n\n\n"],"names":["workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL","workbox_strategies_CacheFirst"],"mappings":"k1BAmCoC,CAClC,KACS,uBACK,oCAEd,KACS,0CACK,oCAEd,KACS,0CACK,qCAEb,oBAE2B,IAAIA,kBAAgCC,0BAA2C,iCAG/E,iBAAkB,IAAIC,aAAiC"}
@@ -1 +1 @@
1
- <script type="module" src="{{STATIC_URL}}@nyaruka/temba-components/dist/ef1b57e2.js"></script><script>window.TEMBA_COMPONENTS_VERSION="0.24.0"</script>
1
+ <script type="module" src="{{STATIC_URL}}@nyaruka/temba-components/dist/85f2e730.js"></script><script>window.TEMBA_COMPONENTS_VERSION="0.24.1"</script>
@@ -1 +1 @@
1
- <link rel="modulepreload" href="{{STATIC_URL}}@nyaruka/temba-components/dist/ef1b57e2.js" crossorigin="anonymous">
1
+ <link rel="modulepreload" href="{{STATIC_URL}}@nyaruka/temba-components/dist/85f2e730.js" crossorigin="anonymous">
@@ -51,9 +51,6 @@ export class ContactSearch extends FormElement {
51
51
  vertical-align: top;
52
52
  }
53
53
 
54
- .summary {
55
- }
56
-
57
54
  table {
58
55
  width: 100%;
59
56
  }
@@ -186,43 +183,46 @@ export class ContactSearch extends FormElement {
186
183
  const lastSeenOn = this.summary.query.indexOf('last_seen_on') > -1;
187
184
  summary = html `
188
185
  <div class="summary ${this.expanded ? 'expanded' : ''}">
189
- <table cellspacing="0" cellpadding="0">
190
- <tr class="header">
191
- <td colspan="2">
192
- Found <a
193
- class="linked"
194
- target="_"
195
- href="/contact/?search=${encodeURIComponent(this.summary.query)}"
196
-
197
- >${count.toLocaleString()}</a> contact${count !== 1 ? 's' : ''}</div>
198
- </td>
199
- ${fields.map(field => html ` <td class="field-header">${field.label}</td> `)}
200
- <td></td>
201
- <td class="field-header date">
202
- ${lastSeenOn ? 'Last Seen' : 'Created'}
203
- </td>
204
- </tr>
186
+ <table cellspacing="0" cellpadding="0">
187
+ <tr class="header">
188
+ <td colspan="2">
189
+ Found
190
+ <a
191
+ class="linked"
192
+ target="_"
193
+ href="/contact/?search=${encodeURIComponent(this.summary.query)}"
194
+ >
195
+ ${count.toLocaleString()}
196
+ </a>
197
+ contact${count !== 1 ? 's' : ''}
198
+ </td>
199
+ ${fields.map(field => html ` <td class="field-header">${field.label}</td> `)}
200
+ <td></td>
201
+ <td class="field-header date">
202
+ ${lastSeenOn ? 'Last Seen' : 'Created'}
203
+ </td>
204
+ </tr>
205
205
 
206
- ${this.summary.sample.map((contact) => html `
207
- <tr class="contact">
208
- <td class="urn">${contact.primary_urn_formatted}</td>
209
- <td class="name">${contact.name}</td>
210
- ${fields.map(field => html `
211
- <td class="field">
212
- ${(contact.fields[field.uuid] || { text: '' })
213
- .text}
214
- </td>
215
- `)}
216
- <td></td>
217
- <td class="date">
218
- ${lastSeenOn
206
+ ${this.summary.sample.map((contact) => html `
207
+ <tr class="contact">
208
+ <td class="urn">
209
+ ${contact.primary_urn_formatted}
210
+ </td>
211
+ <td class="name">${contact.name}</td>
212
+ ${fields.map(field => html `
213
+ <td class="field">
214
+ ${(contact.fields[field.uuid] || { text: '' }).text}
215
+ </td>
216
+ `)}
217
+ <td></td>
218
+ <td class="date">
219
+ ${lastSeenOn
219
220
  ? contact.last_seen_on || '--'
220
221
  : contact.created_on}
221
- </td>
222
- </tr>
223
- `)}
224
-
225
- ${this.summary.total > this.summary.sample.length
222
+ </td>
223
+ </tr>
224
+ `)}
225
+ ${this.summary.total > this.summary.sample.length
226
226
  ? html `<tr class="table-footer">
227
227
  <td class="query-details" colspan=${fields.length + 3}></td>
228
228
  <td class="more">
@@ -235,8 +235,7 @@ export class ContactSearch extends FormElement {
235
235
  </td>
236
236
  </tr>`
237
237
  : null}
238
-
239
- </table>
238
+ </table>
240
239
  </div>
241
240
  `;
242
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ContactSearch.js","sourceRoot":"","sources":["../../../src/contactsearch/ContactSearch.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, property, css } from 'lit-element';\nimport { getUrl, WebResponse } from '../utils';\nimport { TextInput } from '../textinput/TextInput';\nimport '../alert/Alert';\nimport { Contact, CustomEventType } from '../interfaces';\nimport { styleMap } from 'lit-html/directives/style-map';\nimport { FormElement } from '../FormElement';\n\nconst QUEIT_MILLIS = 1000;\n\ninterface SummaryResponse {\n total: number;\n sample: Contact[];\n query: string;\n fields: { [uuid: string]: { label: string; type: string } };\n error?: string;\n}\n\nexport class ContactSearch extends FormElement {\n static get styles() {\n return css`\n :host {\n color: var(--color-text);\n }\n\n .urn {\n width: 120px;\n }\n\n .name {\n width: 160px;\n }\n\n .date {\n text-align: right;\n }\n\n .field-header {\n font-size: 80%;\n color: var(--color-text-dark);\n }\n\n .field-header.date {\n text-align: right;\n }\n\n .more {\n font-size: 90%;\n padding-top: 5px;\n padding-right: 3px;\n text-align: right;\n width: 100px;\n vertical-align: top;\n }\n\n .summary {\n }\n\n table {\n width: 100%;\n }\n\n .contact td {\n border-bottom: 1px solid var(--color-borders);\n padding: 5px 3px;\n }\n\n .table-footer td {\n padding: 10px 3px;\n }\n\n .query-replaced,\n .count-replaced {\n display: inline-block;\n background: var(--color-primary-light);\n color: var(--color-text-dark);\n padding: 3px 6px;\n border-radius: var(--curvature);\n font-size: 85%;\n margin: 0px 3px;\n }\n\n temba-loading {\n margin-top: 10px;\n margin-right: 10px;\n opacity: 0;\n }\n\n .error {\n margin-top: 10px;\n }\n\n .match-count {\n padding: 4px;\n margin-top: 6px;\n }\n\n .linked {\n color: var(--color-link-primary);\n text-decoration: none;\n cursor: pointer;\n }\n\n .header td {\n border-bottom: 0px solid var(--color-borders);\n padding: 5px 3px;\n }\n\n .expanded .header td {\n border-bottom: 2px solid var(--color-borders);\n }\n\n td.field-header,\n tr.table-footer,\n tr.contact {\n display: none;\n }\n\n .expanded td.field-header {\n display: table-cell;\n }\n\n .expanded tr.contact,\n .expanded tr.table-footer {\n display: table-row;\n }\n\n .query {\n display: var(--contact-search-query-display);\n margin-bottom: 10px;\n }\n `;\n }\n\n // private cancelToken: CancelTokenSource;\n\n @property({ type: Boolean })\n fetching: boolean;\n\n @property({ type: Boolean })\n expanded: boolean;\n\n @property({ type: String })\n endpoint: string;\n\n @property({ type: String })\n placeholder = '';\n\n @property({ type: String })\n name = '';\n\n @property({ type: String })\n query = '';\n\n @property({ type: Number })\n inactiveThreshold = 1000;\n\n @property({ type: Number })\n inactiveDays = 90;\n\n @property({ attribute: false })\n summary: SummaryResponse;\n\n private lastQuery: number;\n\n public updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n\n if (changedProperties.has('query')) {\n this.fetching = !!this.query;\n\n // clear our summary on any change\n this.summary = null;\n if (this.lastQuery) {\n window.clearTimeout(this.lastQuery);\n }\n\n if (this.query.trim().length > 0) {\n this.lastQuery = window.setTimeout(() => {\n this.fetchSummary(this.query);\n }, QUEIT_MILLIS);\n }\n }\n }\n\n public executeQuery(query: string): any {\n const url = this.endpoint + query.replace('\\n', ' ');\n getUrl(url).then((response: WebResponse) => {\n if (response.status === 200) {\n const summary = response.json as SummaryResponse;\n this.fireCustomEvent(CustomEventType.FetchComplete, summary);\n }\n });\n }\n\n public fetchSummary(query: string): any {\n const url = this.endpoint + query.replace('\\n', ' ');\n getUrl(url).then((response: WebResponse) => {\n this.fetching = false;\n if (response.status === 200) {\n this.summary = response.json as SummaryResponse;\n\n if (this.summary.error) {\n this.errors = [this.summary.error];\n } else {\n this.errors = [];\n }\n this.requestUpdate('errors');\n this.fireCustomEvent(CustomEventType.ContentChanged, this.summary);\n }\n });\n }\n\n private handleQueryChange(evt: KeyboardEvent) {\n const input = evt.target as TextInput;\n this.query = input.inputElement.value;\n }\n\n public render(): TemplateResult {\n let summary: TemplateResult;\n if (this.summary) {\n const fields = Object.keys(this.summary.fields || []).map(\n (uuid: string) => {\n return { uuid, ...this.summary.fields[uuid] };\n }\n );\n\n if (!this.summary.error) {\n const count = this.summary.total;\n const lastSeenOn = this.summary.query.indexOf('last_seen_on') > -1;\n\n summary = html`\n <div class=\"summary ${this.expanded ? 'expanded' : ''}\">\n <table cellspacing=\"0\" cellpadding=\"0\">\n <tr class=\"header\">\n <td colspan=\"2\">\n Found <a\n class=\"linked\"\n target=\"_\"\n href=\"/contact/?search=${encodeURIComponent(this.summary.query)}\"\n \n >${count.toLocaleString()}</a> contact${\n count !== 1 ? 's' : ''\n }</div>\n </td>\n ${fields.map(\n field => html` <td class=\"field-header\">${field.label}</td> `\n )}\n <td></td>\n <td class=\"field-header date\">\n ${lastSeenOn ? 'Last Seen' : 'Created'}\n </td>\n </tr>\n\n ${this.summary.sample.map(\n (contact: Contact) => html`\n <tr class=\"contact\">\n <td class=\"urn\">${(contact as any).primary_urn_formatted}</td>\n <td class=\"name\">${contact.name}</td>\n ${fields.map(\n field => html`\n <td class=\"field\">\n ${((contact as any).fields[field.uuid] || { text: '' })\n .text}\n </td>\n `\n )}\n <td></td>\n <td class=\"date\">\n ${lastSeenOn\n ? contact.last_seen_on || '--'\n : contact.created_on}\n </td>\n </tr>\n `\n )}\n\n ${\n this.summary.total > this.summary.sample.length\n ? html`<tr class=\"table-footer\">\n <td class=\"query-details\" colspan=${fields.length + 3}></td>\n <td class=\"more\">\n <a\n class=\"linked\"\n target=\"_\"\n href=\"/contact/?search=${encodeURIComponent(\n this.summary.query\n )}\"\n >more</a\n >\n </td>\n </tr>`\n : null\n }\n \n </table>\n </div>\n `;\n }\n }\n\n const loadingStyle = this.fetching ? { opacity: '1' } : {};\n\n return html`\n <div class=\"query\">\n <temba-textinput\n .label=${this.label}\n .helpText=${this.helpText}\n .widgetOnly=${this.widgetOnly}\n .errors=${this.errors}\n name=${this.name}\n .inputRoot=${this}\n @input=${this.handleQueryChange}\n placeholder=${this.placeholder}\n .value=${this.query}\n textarea\n autogrow\n >\n </temba-textinput>\n </div>\n\n ${this.fetching\n ? html`<temba-loading\n units=\"4\"\n style=${styleMap(loadingStyle)}\n ></temba-loading>`\n : this.summary\n ? html` <div class=\"summary\">${summary}</div> `\n : null}\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ContactSearch.js","sourceRoot":"","sources":["../../../src/contactsearch/ContactSearch.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, property, css } from 'lit-element';\nimport { getUrl, WebResponse } from '../utils';\nimport { TextInput } from '../textinput/TextInput';\nimport '../alert/Alert';\nimport { Contact, CustomEventType } from '../interfaces';\nimport { styleMap } from 'lit-html/directives/style-map';\nimport { FormElement } from '../FormElement';\n\nconst QUEIT_MILLIS = 1000;\n\ninterface SummaryResponse {\n total: number;\n sample: Contact[];\n query: string;\n fields: { [uuid: string]: { label: string; type: string } };\n error?: string;\n}\n\nexport class ContactSearch extends FormElement {\n static get styles() {\n return css`\n :host {\n color: var(--color-text);\n }\n\n .urn {\n width: 120px;\n }\n\n .name {\n width: 160px;\n }\n\n .date {\n text-align: right;\n }\n\n .field-header {\n font-size: 80%;\n color: var(--color-text-dark);\n }\n\n .field-header.date {\n text-align: right;\n }\n\n .more {\n font-size: 90%;\n padding-top: 5px;\n padding-right: 3px;\n text-align: right;\n width: 100px;\n vertical-align: top;\n }\n\n table {\n width: 100%;\n }\n\n .contact td {\n border-bottom: 1px solid var(--color-borders);\n padding: 5px 3px;\n }\n\n .table-footer td {\n padding: 10px 3px;\n }\n\n .query-replaced,\n .count-replaced {\n display: inline-block;\n background: var(--color-primary-light);\n color: var(--color-text-dark);\n padding: 3px 6px;\n border-radius: var(--curvature);\n font-size: 85%;\n margin: 0px 3px;\n }\n\n temba-loading {\n margin-top: 10px;\n margin-right: 10px;\n opacity: 0;\n }\n\n .error {\n margin-top: 10px;\n }\n\n .match-count {\n padding: 4px;\n margin-top: 6px;\n }\n\n .linked {\n color: var(--color-link-primary);\n text-decoration: none;\n cursor: pointer;\n }\n\n .header td {\n border-bottom: 0px solid var(--color-borders);\n padding: 5px 3px;\n }\n\n .expanded .header td {\n border-bottom: 2px solid var(--color-borders);\n }\n\n td.field-header,\n tr.table-footer,\n tr.contact {\n display: none;\n }\n\n .expanded td.field-header {\n display: table-cell;\n }\n\n .expanded tr.contact,\n .expanded tr.table-footer {\n display: table-row;\n }\n\n .query {\n display: var(--contact-search-query-display);\n margin-bottom: 10px;\n }\n `;\n }\n\n // private cancelToken: CancelTokenSource;\n\n @property({ type: Boolean })\n fetching: boolean;\n\n @property({ type: Boolean })\n expanded: boolean;\n\n @property({ type: String })\n endpoint: string;\n\n @property({ type: String })\n placeholder = '';\n\n @property({ type: String })\n name = '';\n\n @property({ type: String })\n query = '';\n\n @property({ type: Number })\n inactiveThreshold = 1000;\n\n @property({ type: Number })\n inactiveDays = 90;\n\n @property({ attribute: false })\n summary: SummaryResponse;\n\n private lastQuery: number;\n\n public updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n\n if (changedProperties.has('query')) {\n this.fetching = !!this.query;\n\n // clear our summary on any change\n this.summary = null;\n if (this.lastQuery) {\n window.clearTimeout(this.lastQuery);\n }\n\n if (this.query.trim().length > 0) {\n this.lastQuery = window.setTimeout(() => {\n this.fetchSummary(this.query);\n }, QUEIT_MILLIS);\n }\n }\n }\n\n public executeQuery(query: string): any {\n const url = this.endpoint + query.replace('\\n', ' ');\n getUrl(url).then((response: WebResponse) => {\n if (response.status === 200) {\n const summary = response.json as SummaryResponse;\n this.fireCustomEvent(CustomEventType.FetchComplete, summary);\n }\n });\n }\n\n public fetchSummary(query: string): any {\n const url = this.endpoint + query.replace('\\n', ' ');\n getUrl(url).then((response: WebResponse) => {\n this.fetching = false;\n if (response.status === 200) {\n this.summary = response.json as SummaryResponse;\n\n if (this.summary.error) {\n this.errors = [this.summary.error];\n } else {\n this.errors = [];\n }\n this.requestUpdate('errors');\n this.fireCustomEvent(CustomEventType.ContentChanged, this.summary);\n }\n });\n }\n\n private handleQueryChange(evt: KeyboardEvent) {\n const input = evt.target as TextInput;\n this.query = input.inputElement.value;\n }\n\n public render(): TemplateResult {\n let summary: TemplateResult;\n if (this.summary) {\n const fields = Object.keys(this.summary.fields || []).map(\n (uuid: string) => {\n return { uuid, ...this.summary.fields[uuid] };\n }\n );\n\n if (!this.summary.error) {\n const count = this.summary.total;\n const lastSeenOn = this.summary.query.indexOf('last_seen_on') > -1;\n\n summary = html`\n <div class=\"summary ${this.expanded ? 'expanded' : ''}\">\n <table cellspacing=\"0\" cellpadding=\"0\">\n <tr class=\"header\">\n <td colspan=\"2\">\n Found\n <a\n class=\"linked\"\n target=\"_\"\n href=\"/contact/?search=${encodeURIComponent(\n this.summary.query\n )}\"\n >\n ${count.toLocaleString()}\n </a>\n contact${count !== 1 ? 's' : ''}\n </td>\n ${fields.map(\n field => html` <td class=\"field-header\">${field.label}</td> `\n )}\n <td></td>\n <td class=\"field-header date\">\n ${lastSeenOn ? 'Last Seen' : 'Created'}\n </td>\n </tr>\n\n ${this.summary.sample.map(\n (contact: Contact) => html`\n <tr class=\"contact\">\n <td class=\"urn\">\n ${(contact as any).primary_urn_formatted}\n </td>\n <td class=\"name\">${contact.name}</td>\n ${fields.map(\n field => html`\n <td class=\"field\">\n ${(\n (contact as any).fields[field.uuid] || { text: '' }\n ).text}\n </td>\n `\n )}\n <td></td>\n <td class=\"date\">\n ${lastSeenOn\n ? contact.last_seen_on || '--'\n : contact.created_on}\n </td>\n </tr>\n `\n )}\n ${this.summary.total > this.summary.sample.length\n ? html`<tr class=\"table-footer\">\n <td class=\"query-details\" colspan=${fields.length + 3}></td>\n <td class=\"more\">\n <a\n class=\"linked\"\n target=\"_\"\n href=\"/contact/?search=${encodeURIComponent(\n this.summary.query\n )}\"\n >more</a\n >\n </td>\n </tr>`\n : null}\n </table>\n </div>\n `;\n }\n }\n\n const loadingStyle = this.fetching ? { opacity: '1' } : {};\n\n return html`\n <div class=\"query\">\n <temba-textinput\n .label=${this.label}\n .helpText=${this.helpText}\n .widgetOnly=${this.widgetOnly}\n .errors=${this.errors}\n name=${this.name}\n .inputRoot=${this}\n @input=${this.handleQueryChange}\n placeholder=${this.placeholder}\n .value=${this.query}\n textarea\n autogrow\n >\n </temba-textinput>\n </div>\n\n ${this.fetching\n ? html`<temba-loading\n units=\"4\"\n style=${styleMap(loadingStyle)}\n ></temba-loading>`\n : this.summary\n ? html` <div class=\"summary\">${summary}</div> `\n : null}\n `;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyaruka/temba-components",
3
- "version": "0.24.0",
3
+ "version": "0.24.1",
4
4
  "description": "Web components to support rapidpro and related projects",
5
5
  "author": "Nyaruka <code@nyaruka.coim>",
6
6
  "main": "dist/index.js",
@@ -53,9 +53,6 @@ export class ContactSearch extends FormElement {
53
53
  vertical-align: top;
54
54
  }
55
55
 
56
- .summary {
57
- }
58
-
59
56
  table {
60
57
  width: 100%;
61
58
  }
@@ -231,52 +228,56 @@ export class ContactSearch extends FormElement {
231
228
 
232
229
  summary = html`
233
230
  <div class="summary ${this.expanded ? 'expanded' : ''}">
234
- <table cellspacing="0" cellpadding="0">
235
- <tr class="header">
236
- <td colspan="2">
237
- Found <a
238
- class="linked"
239
- target="_"
240
- href="/contact/?search=${encodeURIComponent(this.summary.query)}"
241
-
242
- >${count.toLocaleString()}</a> contact${
243
- count !== 1 ? 's' : ''
244
- }</div>
245
- </td>
246
- ${fields.map(
247
- field => html` <td class="field-header">${field.label}</td> `
231
+ <table cellspacing="0" cellpadding="0">
232
+ <tr class="header">
233
+ <td colspan="2">
234
+ Found
235
+ <a
236
+ class="linked"
237
+ target="_"
238
+ href="/contact/?search=${encodeURIComponent(
239
+ this.summary.query
240
+ )}"
241
+ >
242
+ ${count.toLocaleString()}
243
+ </a>
244
+ contact${count !== 1 ? 's' : ''}
245
+ </td>
246
+ ${fields.map(
247
+ field => html` <td class="field-header">${field.label}</td> `
248
+ )}
249
+ <td></td>
250
+ <td class="field-header date">
251
+ ${lastSeenOn ? 'Last Seen' : 'Created'}
252
+ </td>
253
+ </tr>
254
+
255
+ ${this.summary.sample.map(
256
+ (contact: Contact) => html`
257
+ <tr class="contact">
258
+ <td class="urn">
259
+ ${(contact as any).primary_urn_formatted}
260
+ </td>
261
+ <td class="name">${contact.name}</td>
262
+ ${fields.map(
263
+ field => html`
264
+ <td class="field">
265
+ ${(
266
+ (contact as any).fields[field.uuid] || { text: '' }
267
+ ).text}
268
+ </td>
269
+ `
270
+ )}
271
+ <td></td>
272
+ <td class="date">
273
+ ${lastSeenOn
274
+ ? contact.last_seen_on || '--'
275
+ : contact.created_on}
276
+ </td>
277
+ </tr>
278
+ `
248
279
  )}
249
- <td></td>
250
- <td class="field-header date">
251
- ${lastSeenOn ? 'Last Seen' : 'Created'}
252
- </td>
253
- </tr>
254
-
255
- ${this.summary.sample.map(
256
- (contact: Contact) => html`
257
- <tr class="contact">
258
- <td class="urn">${(contact as any).primary_urn_formatted}</td>
259
- <td class="name">${contact.name}</td>
260
- ${fields.map(
261
- field => html`
262
- <td class="field">
263
- ${((contact as any).fields[field.uuid] || { text: '' })
264
- .text}
265
- </td>
266
- `
267
- )}
268
- <td></td>
269
- <td class="date">
270
- ${lastSeenOn
271
- ? contact.last_seen_on || '--'
272
- : contact.created_on}
273
- </td>
274
- </tr>
275
- `
276
- )}
277
-
278
- ${
279
- this.summary.total > this.summary.sample.length
280
+ ${this.summary.total > this.summary.sample.length
280
281
  ? html`<tr class="table-footer">
281
282
  <td class="query-details" colspan=${fields.length + 3}></td>
282
283
  <td class="more">
@@ -290,10 +291,8 @@ export class ContactSearch extends FormElement {
290
291
  >
291
292
  </td>
292
293
  </tr>`
293
- : null
294
- }
295
-
296
- </table>
294
+ : null}
295
+ </table>
297
296
  </div>
298
297
  `;
299
298
  }