@foxy.io/elements 1.9.0-beta.1 → 1.11.0-beta.2
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/cdn/foxy-access-recovery-form.js +1 -1
- package/dist/cdn/foxy-address-card.js +1 -1
- package/dist/cdn/foxy-address-form.js +1 -1
- package/dist/cdn/foxy-attribute-card.js +1 -1
- package/dist/cdn/foxy-attribute-form.js +1 -1
- package/dist/cdn/foxy-cancellation-form.js +1 -1
- package/dist/cdn/foxy-collection-page.js +1 -1
- package/dist/cdn/foxy-collection-pages.js +1 -1
- package/dist/cdn/foxy-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +1 -1
- package/dist/cdn/foxy-customer.js +1 -1
- package/dist/cdn/foxy-customers-table.js +1 -1
- package/dist/cdn/foxy-error-entry-card.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-payment-method-card.js +1 -1
- package/dist/cdn/foxy-sign-in-form.js +1 -1
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +1 -1
- package/dist/cdn/foxy-user-form.js +1 -1
- package/dist/cdn/foxy-users-table.js +1 -1
- package/dist/cdn/{shared-77bdf956.js → shared-1e8cda7a.js} +1 -1
- package/dist/cdn/{shared-6f84ea16.js → shared-43316b66.js} +1 -1
- package/dist/cdn/{shared-8f34ce95.js → shared-5ad54678.js} +1 -1
- package/dist/cdn/{shared-92d03925.js → shared-750035db.js} +1 -1
- package/dist/cdn/{shared-1d0ef57d.js → shared-9ba229fb.js} +1 -1
- package/dist/cdn/shared-a110de43.js +1 -0
- package/dist/cdn/{shared-4b33c6d2.js → shared-b0c39c37.js} +1 -1
- package/dist/cdn/translations/country/de.json +251 -0
- package/dist/cdn/translations/customer-portal-settings/en.json +4 -0
- package/dist/cdn/translations/region/de.json +66 -0
- package/dist/cdn/translations/shared/de.json +117 -0
- package/dist/elements/public/CollectionPages/CollectionPages.js +6 -11
- package/dist/elements/public/CollectionPages/CollectionPages.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/CustomerPortalSettings.js +17 -3
- package/dist/elements/public/CustomerPortalSettings/CustomerPortalSettings.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/machine.js +8 -0
- package/dist/elements/public/CustomerPortalSettings/machine.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.d.ts +13 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.js +53 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.js.map +1 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.d.ts +3 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.js +6 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.js.map +1 -0
- package/dist/elements/public/CustomerPortalSettings/types.d.ts +5 -1
- package/dist/elements/public/CustomerPortalSettings/types.js.map +1 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js +6 -11
- package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
- package/dist/elements/public/NucleonElement/serveFromCache.d.ts +1 -0
- package/dist/elements/public/NucleonElement/serveFromCache.js +49 -0
- package/dist/elements/public/NucleonElement/serveFromCache.js.map +1 -0
- package/package.json +1 -1
- package/dist/cdn/shared-b13a5ed3.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,h as t}from"./shared-84203d52.js";import{C as s}from"./shared-23966eed.js";import"./foxy-nucleon-element.js";import{R as l,T as a,a as i}from"./shared-8057ee9c.js";import{c as r}from"./shared-4e709717.js";import{N as d}from"./shared-
|
|
1
|
+
import{_ as e,h as t}from"./shared-84203d52.js";import{C as s}from"./shared-23966eed.js";import"./foxy-nucleon-element.js";import{R as l,T as a,a as i}from"./shared-8057ee9c.js";import{c as r}from"./shared-4e709717.js";import{N as d}from"./shared-a110de43.js";let n,o,h,u,c,m=e=>e;const p=s(l(a(i(d))));class v extends p{constructor(){super(...arguments),this.templates={},this.columns=[]}static get properties(){return e(e({},super.properties),{},{columns:{attribute:!1}})}render(){var e,s;return t(n||(n=m` <div data-testid="wrapper" class="relative" aria-busy="${0}" aria-live="polite"> <table class="table-fixed w-full" data-testid="table"> <thead class="sr-only"> <tr> ${0} </tr> </thead> <tbody class="divide-y divide-contrast-10"> ${0} </tbody> </table> ${0} </div> ${0} `),this.in("busy"),this.columns.map((e=>{var s;return t(o||(o=m` <th> ${0} </th> `),null===(s=e.header)||void 0===s?void 0:s.call(e,{html:t,lang:this.lang,data:this.data,ns:this.ns}))})),this.__rows.map((e=>{var s;return t(h||(h=m` <tr class="h-l"> ${0} </tr> `),null===(s=this.columns)||void 0===s?void 0:s.map(((s,l)=>{var a;return t(u||(u=m` <td class="${0}"> ${0} </td> `),r({"text-right":l===this.columns.length-1,"hidden sm-table-cell":"sm"===s.hideBelow,"hidden md-table-cell":"md"===s.hideBelow,"hidden lg-table-cell":"lg"===s.hideBelow,"hidden xl-table-cell":"xl"===s.hideBelow,"truncate h-l font-lumo text-body text-m":!0}),e?null===(a=s.cell)||void 0===a?void 0:a.call(s,{html:t,lang:this.lang,data:e,ns:this.ns}):"")})))})),this.in({idle:"snapshot"})?"":t(c||(c=m` <div class="absolute inset-0 flex items-center justify-center"> <foxy-spinner data-testid="spinner" layout="vertical" state="${0}" class="p-m bg-base shadow-xs rounded-t-l rounded-b-l" lang="${0}" ns="${0} ${0}"> </foxy-spinner> </div> `),this.in("busy")?"busy":this.in("idle")?"empty":"error",this.lang,this.ns,null!==(s=null===(e=customElements.get("foxy-spinner"))||void 0===e?void 0:e.defaultNS)&&void 0!==s?s:""),this.renderTemplateOrSlot())}get __rows(){var e,t,s;const l=Object.values(null!==(t=null===(e=this.data)||void 0===e?void 0:e._embedded)&&void 0!==t?t:{}).reduce(((e,t)=>[...e,...t]),[]);let a;if(0===l.length)try{const e=new URL(null!==(s=this.href)&&void 0!==s?s:"").searchParams.get("limit"),t=parseInt(null!=e?e:"");a=isNaN(t)?20:t}catch(e){a=20}else a=l.length;return new Array(a).fill(null).map(((e,t)=>{var s;return null!==(s=l[t])&&void 0!==s?s:e}))}}export{v as T};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e,L as t,m as s,b as r,_ as i,R as n,F as o,e as h}from"./shared-84203d52.js";import{A as a}from"./shared-497fd63c.js";import{U as _}from"./shared-7684cb05.js";import{i as c}from"./shared-9f78e096.js";function d(t,s){let r=null;return e(s).forEach((function(){var e,s,i,n,o;if((null===(i=null===(s=null===(e=this.node)||void 0===e?void 0:e._links)||void 0===s?void 0:s.self)||void 0===i?void 0:i.href)===t)return r=JSON.stringify(this.node),void this.stop();Object.entries(null!==(o=null===(n=this.node)||void 0===n?void 0:n._links)&&void 0!==o?o:{}).some((([e,s])=>{var i,n;if(s.href!==t)return!1;const o=null===(n=null===(i=this.node)||void 0===i?void 0:i._embedded)||void 0===n?void 0:n[e];if(!o||!Array.isArray(o))return!1;const h=o.length<20?o.length:21,a=new URL(t),_=new URL(t);return a.searchParams.set("offset",o.length.toString()),_.searchParams.set("offset",h.toString()),r=JSON.stringify({returned_items:o.length,total_items:h,offset:0,limit:20,_embedded:{[e]:o},_links:{curies:this.node._links.curies,first:{href:t},last:{href:_.toString()},prev:{href:t},next:{href:a.toString()},self:{href:t}}}),this.stop(),!0}))})),new Response(r,{status:r?200:404})}class u extends t{constructor(){super(...arguments),this.lang="",this.parent="",this.__href="",this.__group="",this.__service=c(s.withConfig({services:{sendDelete:()=>this._sendDelete(),sendPatch:({edits:e})=>this._sendPatch(e),sendPost:({edits:e})=>this._sendPost(e),sendGet:()=>this._sendGet()},actions:{validate:r({errors:e=>{const t=this.constructor.v8n,s=i(i({},e.data),e.edits);return t.map((e=>e(s))).filter((e=>"string"==typeof e)).filter(((e,t,s)=>s.indexOf(e)===t))}})}}))}static get properties(){return{parent:{type:String},group:{type:String,noAccessor:!0},href:{type:String,noAccessor:!0},lang:{type:String}}}static get v8n(){return[]}get failure(){return this.__service.state.context.failure}get errors(){return this.__service.state.context.errors}get form(){const{data:e,edits:t}=this.__service.state.context;return i(i({},e),t)}get data(){return this.__service.state.context.data}set data(e){var t;this.__service.send({type:"SET_DATA",data:e}),this.__href=null!==(t=null==e?void 0:e._links.self.href)&&void 0!==t?t:""}get group(){return this.__group}set group(e){this.__group=e,this.__destroyRumour(),this.__createRumour()}get href(){return this.__href}set href(e){this.__href=e,e?this.__service.send({type:"FETCH"}):this.__service.send({type:"SET_DATA",data:null})}in(e){return this.__service.state.matches(e)}undo(){this.__service.send({type:"UNDO"})}edit(e){this.__service.send({type:"EDIT",data:e})}submit(){this.__service.send({type:"SUBMIT"})}delete(){this.__service.send({type:"DELETE"})}connectedCallback(){super.connectedCallback(),this.__createService(),this.__createRumour(),this.__createServer()}disconnectedCallback(){super.disconnectedCallback(),this.__destroyService(),this.__destroyRumour(),this.__destroyServer()}async _fetch(...e){const t=await new a(this).fetch(...e);if(!t.ok)throw t;return t.json()}async _sendPost(e){const t=JSON.stringify(e),s=await this._fetch(this.parent,{body:t,method:"POST"}),r=u.Rumour(this.group);return this.__destroyRumour(),r.share({data:s,related:[this.parent],source:s._links.self.href}),this.__createRumour(),s}async _sendGet(){const e=await this._fetch(this.href),t=u.Rumour(this.group);return this.__destroyRumour(),t.share({data:e,source:this.href}),this.__createRumour(),e}async _sendPatch(e){const t=JSON.stringify(e),s=await this._fetch(this.href,{body:t,method:"PATCH"}),r=u.Rumour(this.group);return this.__destroyRumour(),r.share({data:s,source:this.href}),this.__createRumour(),s}async _sendDelete(){const e=await this._fetch(this.href,{method:"DELETE"}),t=u.Rumour(this.group);return this.__destroyRumour(),t.share({data:null,source:this.href,related:[this.parent]}),this.__createRumour(),e}__createService(){this.__service.onTransition((e=>{if(!e.changed)return;const t=e.toStrings().reduce(((e,t)=>[...e,...t.split(".")]),[]);this.setAttribute("state",[...new Set(t)].join(" ")),this.requestUpdate(),this.dispatchEvent(new _)})),this.__service.onChange((()=>{this.requestUpdate(),this.dispatchEvent(new _)})),this.__service.start()}__destroyService(){this.__service.stop()}__createRumour(){const e=u.Rumour(this.group);this.__unsubscribeFromRumour=e.track((e=>this.__handleRumourUpdate(e)))}__destroyRumour(){var e;null===(e=this.__unsubscribeFromRumour)||void 0===e||e.call(this)}__createServer(){this.__fetchEventHandler=this.__handleFetchEvent.bind(this),this.addEventListener("fetch",this.__fetchEventHandler)}__destroyServer(){this.removeEventListener("fetch",this.__fetchEventHandler)}__handleRumourUpdate(e){var t;try{const s=null===(t=this.__service.state)||void 0===t?void 0:t.context.data;if(!s)return;const r=e(s);r!==s&&this.__service.send({data:r,type:"SET_DATA"})}catch(e){if(!(e instanceof n.UpdateError))throw e;this.__service.send({type:"FETCH"})}}__handleFetchEvent(e){if(!(e instanceof o))return;if("GET"!==e.request.method)return;const t=d(e.request.url,this.data);t.ok&&(e.respondWith(Promise.resolve(t)),console.debug(`%c@foxy.io/elements::${this.localName}\n%c200%c GET ${e.request.url}`,"color: gray","background: gray; padding: 0 .2em; border-radius: .2em; color: white;",""))}}u.UpdateEvent=_,u.Rumour=h((()=>new n)),u.API=a;export{u as N,d as s};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as t}from"./shared-84203d52.js";import{T as e}from"./shared-
|
|
1
|
+
import{_ as t}from"./shared-84203d52.js";import{T as e}from"./shared-9ba229fb.js";import{a as s}from"./shared-8057ee9c.js";import{p as a}from"./shared-69d0ca61.js";let n,o,r,i,l=t=>t;class c extends(s(e,"subscriptions-table")){constructor(){super(...arguments),this.columns=[c.priceColumn,c.summaryColumn,c.statusColumn,c.subTokenURLColumn]}}c.priceColumn={cell:e=>{const s=e.data._embedded["fx:last_transaction"],o=`${s.total_order} ${s.currency_code}`;return e.html(n||(n=l`
|
|
2
2
|
<foxy-i18n
|
|
3
3
|
data-testclass="i18n frequencies"
|
|
4
4
|
class="font-semibold text-s font-tnum"
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AD": "Andorra",
|
|
3
|
+
"AE": "Vereinigte Arabische Emirate",
|
|
4
|
+
"AF": "Afghanistan",
|
|
5
|
+
"AG": "Antigua und Barbuda",
|
|
6
|
+
"AI": "Anguilla",
|
|
7
|
+
"AL": "Albanien",
|
|
8
|
+
"AM": "Armenien",
|
|
9
|
+
"AO": "Angola",
|
|
10
|
+
"AQ": "Antarktika",
|
|
11
|
+
"AR": "Argentinien",
|
|
12
|
+
"AS": "Amerikanisch-Samoa",
|
|
13
|
+
"AT": "Österreich",
|
|
14
|
+
"AU": "Australien",
|
|
15
|
+
"AW": "Aruba",
|
|
16
|
+
"AX": "Åland",
|
|
17
|
+
"AZ": "Aserbaidschan",
|
|
18
|
+
"BA": "Bosnien und Herzegowina",
|
|
19
|
+
"BB": "Barbados",
|
|
20
|
+
"BD": "Bangladesch",
|
|
21
|
+
"BE": "Belgien",
|
|
22
|
+
"BF": "Burkina Faso",
|
|
23
|
+
"BG": "Bulgarien",
|
|
24
|
+
"BH": "Bahrain",
|
|
25
|
+
"BI": "Burundi",
|
|
26
|
+
"BJ": "Benin",
|
|
27
|
+
"BL": "St. Barthélemy",
|
|
28
|
+
"BM": "Bermuda",
|
|
29
|
+
"BN": "Brunei Darussalam",
|
|
30
|
+
"BO": "Bolivien",
|
|
31
|
+
"BQ": "Bonaire, Sint Eustatius und Saba",
|
|
32
|
+
"BR": "Brasilien",
|
|
33
|
+
"BS": "Bahamas",
|
|
34
|
+
"BT": "Bhutan",
|
|
35
|
+
"BV": "Bouvetinsel",
|
|
36
|
+
"BW": "Botsuana",
|
|
37
|
+
"BY": "Belarus",
|
|
38
|
+
"BZ": "Belize",
|
|
39
|
+
"CA": "Kanada",
|
|
40
|
+
"CC": "Kokosinseln (Keelinginseln)",
|
|
41
|
+
"CD": "Kongo, Demokratische Republik",
|
|
42
|
+
"CF": "Zentralafrikanische Republik",
|
|
43
|
+
"CG": "Kongo",
|
|
44
|
+
"CH": "Schweiz",
|
|
45
|
+
"CI": "Côte d'Ivoire",
|
|
46
|
+
"CK": "Cookinseln",
|
|
47
|
+
"CL": "Chile",
|
|
48
|
+
"CM": "Kamerun",
|
|
49
|
+
"CN": "China",
|
|
50
|
+
"CO": "Kolumbien",
|
|
51
|
+
"CR": "Costa Rica",
|
|
52
|
+
"CU": "Serbien und Montenegro",
|
|
53
|
+
"CV": "Kuba",
|
|
54
|
+
"CW": "Cabo Verde",
|
|
55
|
+
"CX": "Weihnachtsinsel",
|
|
56
|
+
"CY": "Zypern",
|
|
57
|
+
"CZ": "Tschechische Republik",
|
|
58
|
+
"DE": "Deutschland",
|
|
59
|
+
"DJ": "Dschibuti",
|
|
60
|
+
"DK": "Dänemark",
|
|
61
|
+
"DM": "Dominica",
|
|
62
|
+
"DO": "Dominikanische Republik",
|
|
63
|
+
"DZ": "Algerien",
|
|
64
|
+
"EC": "Ecuador",
|
|
65
|
+
"EE": "Estland",
|
|
66
|
+
"EG": "Ägypten",
|
|
67
|
+
"EH": "Westsahara",
|
|
68
|
+
"ER": "Eritrea",
|
|
69
|
+
"ES": "Spanien",
|
|
70
|
+
"ET": "Äthiopien",
|
|
71
|
+
"FI": "Finnland",
|
|
72
|
+
"FJ": "Fidschi",
|
|
73
|
+
"FK": "Falklandinseln",
|
|
74
|
+
"FM": "Mikronesien",
|
|
75
|
+
"FO": "Färöer",
|
|
76
|
+
"FR": "Frankreich",
|
|
77
|
+
"GA": "Gabun",
|
|
78
|
+
"GB": "Großbritannien",
|
|
79
|
+
"GD": "Grenada",
|
|
80
|
+
"GE": "Georgien",
|
|
81
|
+
"GF": "Französisch-Guayana",
|
|
82
|
+
"GG": "Guernsey",
|
|
83
|
+
"GH": "Ghana",
|
|
84
|
+
"GI": "Gibraltar",
|
|
85
|
+
"GL": "Grönland",
|
|
86
|
+
"GM": "Gambia",
|
|
87
|
+
"GN": "Guinea",
|
|
88
|
+
"GP": "Guadeloupe",
|
|
89
|
+
"GQ": "Äquatorialguinea",
|
|
90
|
+
"GR": "Griechenland",
|
|
91
|
+
"GS": "Südgeorgien und die Südlichen Sandwichinseln",
|
|
92
|
+
"GT": "Guatemala",
|
|
93
|
+
"GU": "Guam",
|
|
94
|
+
"GW": "Guinea-Bissau",
|
|
95
|
+
"GY": "Guyana",
|
|
96
|
+
"HK": "Hongkong",
|
|
97
|
+
"HM": "Heard und McDonaldinseln",
|
|
98
|
+
"HN": "Honduras",
|
|
99
|
+
"HR": "Kroatien",
|
|
100
|
+
"HT": "Haiti",
|
|
101
|
+
"HU": "Ungarn",
|
|
102
|
+
"ID": "Indonesien",
|
|
103
|
+
"IE": "Irland",
|
|
104
|
+
"IL": "Israel",
|
|
105
|
+
"IM": "Insel Man",
|
|
106
|
+
"IN": "Indien",
|
|
107
|
+
"IO": "Britisches Territorium im Indischen Ozean",
|
|
108
|
+
"IQ": "Irak",
|
|
109
|
+
"IR": "Iran",
|
|
110
|
+
"IS": "Island",
|
|
111
|
+
"IT": "Italien",
|
|
112
|
+
"JE": "Jersey",
|
|
113
|
+
"JM": "Jamaika",
|
|
114
|
+
"JO": "Jordanien",
|
|
115
|
+
"JP": "Japan",
|
|
116
|
+
"KE": "Kenia",
|
|
117
|
+
"KG": "Kirgisistan",
|
|
118
|
+
"KH": "Kambodscha",
|
|
119
|
+
"KI": "Kiribati",
|
|
120
|
+
"KM": "Komoren",
|
|
121
|
+
"KN": "St. Kitts und Nevis",
|
|
122
|
+
"KP": "Korea, Demokratische Volksrepublik",
|
|
123
|
+
"KR": "Korea, Republik",
|
|
124
|
+
"KW": "Kuwait",
|
|
125
|
+
"KY": "Kaimaninseln",
|
|
126
|
+
"KZ": "Kasachstan",
|
|
127
|
+
"LA": "Laos",
|
|
128
|
+
"LB": "Libanon",
|
|
129
|
+
"LC": "St. Lucia",
|
|
130
|
+
"LI": "Liechtenstein",
|
|
131
|
+
"LK": "Sri Lanka",
|
|
132
|
+
"LR": "Liberia",
|
|
133
|
+
"LS": "Lesotho",
|
|
134
|
+
"LT": "Litauen",
|
|
135
|
+
"LU": "Luxemburg",
|
|
136
|
+
"LV": "Lettland",
|
|
137
|
+
"LY": "Libyen",
|
|
138
|
+
"MA": "Marokko",
|
|
139
|
+
"MC": "Monaco",
|
|
140
|
+
"MD": "Moldau",
|
|
141
|
+
"ME": "Montenegro",
|
|
142
|
+
"MF": "Saint-Martin",
|
|
143
|
+
"MG": "Madagaskar",
|
|
144
|
+
"MH": "Marshallinseln",
|
|
145
|
+
"MK": "Nordmazedonien",
|
|
146
|
+
"ML": "Mali",
|
|
147
|
+
"MM": "Myanmar",
|
|
148
|
+
"MN": "Mongolei",
|
|
149
|
+
"MO": "Macau",
|
|
150
|
+
"MP": "Nördliche Marianen",
|
|
151
|
+
"MQ": "Martinique",
|
|
152
|
+
"MR": "Mauretanien",
|
|
153
|
+
"MS": "Montserrat",
|
|
154
|
+
"MT": "Malta",
|
|
155
|
+
"MU": "Mauritius",
|
|
156
|
+
"MV": "Malediven",
|
|
157
|
+
"MW": "Malawi",
|
|
158
|
+
"MX": "Mexiko",
|
|
159
|
+
"MY": "Malaysia",
|
|
160
|
+
"MZ": "Mosambik",
|
|
161
|
+
"NA": "Namibia",
|
|
162
|
+
"NC": "Neukaledonien",
|
|
163
|
+
"NE": "Niger",
|
|
164
|
+
"NF": "Norfolkinsel",
|
|
165
|
+
"NG": "Nigeria",
|
|
166
|
+
"NI": "Nicaragua",
|
|
167
|
+
"NL": "Niederlande",
|
|
168
|
+
"NO": "Norwegen",
|
|
169
|
+
"NP": "Nepal",
|
|
170
|
+
"NR": "Nauru",
|
|
171
|
+
"NU": "Niue",
|
|
172
|
+
"NZ": "Neuseeland",
|
|
173
|
+
"OM": "Oman",
|
|
174
|
+
"PA": "Panama",
|
|
175
|
+
"PE": "Peru",
|
|
176
|
+
"PF": "Französisch-Polynesien",
|
|
177
|
+
"PG": "Papua-Neuguinea",
|
|
178
|
+
"PH": "Philippinen",
|
|
179
|
+
"PK": "Pakistan",
|
|
180
|
+
"PL": "Polen",
|
|
181
|
+
"PM": "St. Pierre und Miquelon",
|
|
182
|
+
"PN": "Pitcairninseln",
|
|
183
|
+
"PR": "Puerto Rico",
|
|
184
|
+
"PS": "Gazastreifen",
|
|
185
|
+
"PT": "Portugal",
|
|
186
|
+
"PW": "Palau",
|
|
187
|
+
"PY": "Paraguay",
|
|
188
|
+
"QA": "Katar",
|
|
189
|
+
"RE": "Réunion",
|
|
190
|
+
"RO": "Rumänien",
|
|
191
|
+
"RS": "Serbien",
|
|
192
|
+
"RU": "Russische Föderation",
|
|
193
|
+
"RW": "Ruanda",
|
|
194
|
+
"SA": "Saudi-Arabien",
|
|
195
|
+
"SB": "Salomonen",
|
|
196
|
+
"SC": "Seychellen",
|
|
197
|
+
"SD": "Sudan",
|
|
198
|
+
"SE": "Schweden",
|
|
199
|
+
"SG": "Singapur",
|
|
200
|
+
"SH": "St. Helena, Ascension und Tristan da Cunha",
|
|
201
|
+
"SI": "Slowenien",
|
|
202
|
+
"SJ": "Spitzbergen",
|
|
203
|
+
"SK": "Slowakei",
|
|
204
|
+
"SL": "Sierra Leone",
|
|
205
|
+
"SM": "San Marino",
|
|
206
|
+
"SN": "Senegal",
|
|
207
|
+
"SO": "Somalia",
|
|
208
|
+
"SR": "Suriname",
|
|
209
|
+
"SS": "Südsudan",
|
|
210
|
+
"ST": "São Tomé und Príncipe",
|
|
211
|
+
"SV": "El Salvador",
|
|
212
|
+
"SX": "Sint Maarten,",
|
|
213
|
+
"SY": "Syrien",
|
|
214
|
+
"SZ": "Eswatini",
|
|
215
|
+
"TC": "Turks- und Caicosinseln",
|
|
216
|
+
"TD": "Tschad",
|
|
217
|
+
"TF": "Bassas da India",
|
|
218
|
+
"TG": "Togo",
|
|
219
|
+
"TH": "Thailand",
|
|
220
|
+
"TJ": "Tadschikistan",
|
|
221
|
+
"TK": "Tokelau",
|
|
222
|
+
"TL": "Timor-Leste",
|
|
223
|
+
"TM": "Turkmenistan",
|
|
224
|
+
"TN": "Tunesien",
|
|
225
|
+
"TO": "Tonga",
|
|
226
|
+
"TR": "Türkei",
|
|
227
|
+
"TT": "Trinidad und Tobago",
|
|
228
|
+
"TV": "Tuvalu",
|
|
229
|
+
"TW": "Taiwan",
|
|
230
|
+
"TZ": "Tansania",
|
|
231
|
+
"UA": "Ukraine",
|
|
232
|
+
"UG": "Uganda",
|
|
233
|
+
"UM": "Kleinere Amerikanische Überseeinseln",
|
|
234
|
+
"US": "Vereinigte Staaten",
|
|
235
|
+
"UY": "Uruguay",
|
|
236
|
+
"UZ": "Usbekistan",
|
|
237
|
+
"VA": "Vatikanstadt",
|
|
238
|
+
"VC": "St. Vincent und die Grenadinen",
|
|
239
|
+
"VE": "Venezuela",
|
|
240
|
+
"VG": "Britische Jungferninseln",
|
|
241
|
+
"VI": "Amerikanische Jungferninseln",
|
|
242
|
+
"VN": "Vietnam",
|
|
243
|
+
"VU": "Vanuatu",
|
|
244
|
+
"WF": "Wallis und Futuna",
|
|
245
|
+
"WS": "Samoa",
|
|
246
|
+
"YE": "Jemen",
|
|
247
|
+
"YT": "Mayotte",
|
|
248
|
+
"ZA": "Südafrika",
|
|
249
|
+
"ZM": "Sambia",
|
|
250
|
+
"ZW": "Simbabwe"
|
|
251
|
+
}
|
|
@@ -66,6 +66,10 @@
|
|
|
66
66
|
"minWarning": "The minimum is either too close to the maximum or exceeds it. This may make your customers unable to change next date under certain conditions. Please proceed with caution.",
|
|
67
67
|
"maxHint": "Requires the new date to be at most {{duration}} into the future."
|
|
68
68
|
},
|
|
69
|
+
"sso": {
|
|
70
|
+
"title": "Enable Single Sign-On (SSO)",
|
|
71
|
+
"subtitle": "Sync your sessions across your website and our checkout"
|
|
72
|
+
},
|
|
69
73
|
"jwt": {
|
|
70
74
|
"title": "JWT shared secret",
|
|
71
75
|
"subtitle": "Reset this key to drop all active sessions",
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AL": "Alabama",
|
|
3
|
+
"AK": "Alaska",
|
|
4
|
+
"AS": "American Samoa",
|
|
5
|
+
"AZ": "Arizona",
|
|
6
|
+
"AR": "Arkansas",
|
|
7
|
+
"AF": "Armed Forces Africa",
|
|
8
|
+
"AA": "Armed Forces Americas",
|
|
9
|
+
"AC": "Armed Forces Canada",
|
|
10
|
+
"AE": "Armed Forces Europe",
|
|
11
|
+
"AM": "Armed Forces Middle East",
|
|
12
|
+
"AP": "Armed Forces Pacific",
|
|
13
|
+
"CA": "California",
|
|
14
|
+
"CO": "Colorado",
|
|
15
|
+
"CT": "Connecticut",
|
|
16
|
+
"DE": "Delaware",
|
|
17
|
+
"DC": "Washington DC",
|
|
18
|
+
"FM": "Federated States Of Micronesia",
|
|
19
|
+
"FL": "Florida",
|
|
20
|
+
"GA": "Georgia",
|
|
21
|
+
"GU": "Guam",
|
|
22
|
+
"HI": "Hawaii",
|
|
23
|
+
"ID": "Idaho",
|
|
24
|
+
"IL": "Illinois",
|
|
25
|
+
"IN": "Indiana",
|
|
26
|
+
"IA": "Iowa",
|
|
27
|
+
"KS": "Kansas",
|
|
28
|
+
"KY": "Kentucky",
|
|
29
|
+
"LA": "Louisiana",
|
|
30
|
+
"ME": "Maine",
|
|
31
|
+
"MH": "Marshall Islands",
|
|
32
|
+
"MD": "Maryland",
|
|
33
|
+
"MA": "Massachusetts",
|
|
34
|
+
"MI": "Michigan",
|
|
35
|
+
"MN": "Minnesota",
|
|
36
|
+
"MS": "Mississippi",
|
|
37
|
+
"MO": "Missouri",
|
|
38
|
+
"MT": "Montana",
|
|
39
|
+
"NE": "Nebraska",
|
|
40
|
+
"NV": "Nevada",
|
|
41
|
+
"NH": "New Hampshire",
|
|
42
|
+
"NJ": "New Jersey",
|
|
43
|
+
"NM": "New Mexico",
|
|
44
|
+
"NY": "New York",
|
|
45
|
+
"NC": "North Carolina",
|
|
46
|
+
"ND": "North Dakota",
|
|
47
|
+
"MP": "Northern Mariana Islands",
|
|
48
|
+
"OH": "Ohio",
|
|
49
|
+
"OK": "Oklahoma",
|
|
50
|
+
"OR": "Oregon",
|
|
51
|
+
"PA": "Pennsylvania",
|
|
52
|
+
"PR": "Puerto Rico",
|
|
53
|
+
"RI": "Rhode Island",
|
|
54
|
+
"SC": "South Carolina",
|
|
55
|
+
"SD": "South Dakota",
|
|
56
|
+
"TN": "Tennessee",
|
|
57
|
+
"TX": "Texas",
|
|
58
|
+
"UT": "Utah",
|
|
59
|
+
"VT": "Vermont",
|
|
60
|
+
"VI": "Virgin Islands",
|
|
61
|
+
"VA": "Virginia",
|
|
62
|
+
"WA": "Washington",
|
|
63
|
+
"WV": "West Virginia",
|
|
64
|
+
"WI": "Wisconsin",
|
|
65
|
+
"WY": "Wyoming"
|
|
66
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"address1": "Adresse Zeile 1",
|
|
3
|
+
"address2": "Adresse Zeile 2",
|
|
4
|
+
"address_name": "Name Adresse",
|
|
5
|
+
"address_plural": "Adressen",
|
|
6
|
+
"attribute_plural": "Kennzeichen",
|
|
7
|
+
"cancel": "Abbrechen",
|
|
8
|
+
"city": "Stadt",
|
|
9
|
+
"close": "Schließen",
|
|
10
|
+
"company": "Firma",
|
|
11
|
+
"country": "Land",
|
|
12
|
+
"create": "Erstellen",
|
|
13
|
+
"daily": "täglich",
|
|
14
|
+
"daily_plural": "Jede {{count}} Tage",
|
|
15
|
+
"date": "{{value, date}}",
|
|
16
|
+
"date_created": "erstellt am",
|
|
17
|
+
"date_modified": "Letzte Änderung",
|
|
18
|
+
"day": "Tag",
|
|
19
|
+
"day_plural": "Tage",
|
|
20
|
+
"default_billing_address": "Vorgegebene Rechnungsadresse",
|
|
21
|
+
"default_shipping_address": "Vorgegebene Lieferadresse",
|
|
22
|
+
"delete": "Löschen",
|
|
23
|
+
"delete_prompt": "Diese Ressource wird endgültig gelöscht. Sind Sie sicher?",
|
|
24
|
+
"email": "Email",
|
|
25
|
+
"end_date": "Enddatum",
|
|
26
|
+
"end_subscription": "End Subskription",
|
|
27
|
+
"end_subscription_explainer": "Ihr Abonnement bleibt bis zum gewählten Enddatum aktiv. Wenn Sie sich entscheiden, dieses Abonnement später fortzusetzen, müssen Sie sich möglicherweise erneut anmelden.",
|
|
28
|
+
"expires": "Läuft aus",
|
|
29
|
+
"first_name": "Vorname",
|
|
30
|
+
"frequency": "$t({{units}}, { \"count\": {{count}} })",
|
|
31
|
+
"frequency_label": "Häufigkeit",
|
|
32
|
+
"frequency_plural": "$t({{units}}, { \"count\": {{count}} })",
|
|
33
|
+
"full_address": "{{address1}} {{address2}} {{city}} {{region}} {{postal_code}}",
|
|
34
|
+
"full_name": "{{first_name}} {{last_name}}",
|
|
35
|
+
"invalid_credential_error": "Falsche E-Mail oder falsches Passwort. Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut.",
|
|
36
|
+
"item": "Artikel",
|
|
37
|
+
"item_plural": "Artikel",
|
|
38
|
+
"last_4_digits": "Letzte 4 Stellen",
|
|
39
|
+
"last_login_date": "Letzte Anmeldung",
|
|
40
|
+
"last_name": "Nachname",
|
|
41
|
+
"load_more": "Mehr laden",
|
|
42
|
+
"loading_busy": "Wird geladen",
|
|
43
|
+
"loading_empty": "Keine Daten",
|
|
44
|
+
"loading_end": "Keine Daten mehr",
|
|
45
|
+
"loading_error": "Wurde nicht geladen",
|
|
46
|
+
"loading_paused": "Unterbrochen",
|
|
47
|
+
"month": "Monat",
|
|
48
|
+
"month_plural": "Monate",
|
|
49
|
+
"monthly": "Monatlich",
|
|
50
|
+
"monthly_plural": "Jede {{count}} Monate",
|
|
51
|
+
"name": "Name",
|
|
52
|
+
"next_transaction_date": "Nächster Transaktionstermin",
|
|
53
|
+
"new_password": "Neues Passwort",
|
|
54
|
+
"new_password_format_error": "Das neue Passwort, das Sie gewählt haben, ist zu schwach. Bitte geben Sie ein sicheres neues Passwort ein.",
|
|
55
|
+
"new_password_required_error": "Um Ihr Konto sicher zu halten, ändern Sie bitte Ihr Passwort, bevor Sie sich dieses Mal anmelden.",
|
|
56
|
+
"password": "Passwort",
|
|
57
|
+
"payment_method_plural": "Zahlungsmöglichkeiten",
|
|
58
|
+
"phone": "Telefon",
|
|
59
|
+
"postal_code": "Postleitzahl",
|
|
60
|
+
"preview": "Vorschau",
|
|
61
|
+
"price": "{{amount, price}}",
|
|
62
|
+
"price_recurring": "{{amount, price}} $t(frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\" })",
|
|
63
|
+
"price_twice_a_month": "{{amount, price}} $t(twice_a_month)",
|
|
64
|
+
"receipt": "Quittung",
|
|
65
|
+
"recover_access": "Einmaligen Code erhalten",
|
|
66
|
+
"recover_access_hint": "Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen ein temporäres Passwort zu",
|
|
67
|
+
"recover_access_success": "Erledigt! Bitte prüfen Sie Ihre E-Mail für weitere Anweisungen.",
|
|
68
|
+
"region": "Region",
|
|
69
|
+
"save": "Speichern",
|
|
70
|
+
"sign_in": "Sich anmelden",
|
|
71
|
+
"sign_in_hint": "Bitte geben Sie Ihre E-Mail und Ihr Passwort ein",
|
|
72
|
+
"subscription_active": "Nächste Zahlung am {{date, date}}",
|
|
73
|
+
"subscription_cancelled": "Beendet am {{date, date}}",
|
|
74
|
+
"subscription_failed": "Zahlung fehlgeschlagen am {{date, date}}",
|
|
75
|
+
"subscription_plural": "Abonnements",
|
|
76
|
+
"subscription_will_be_cancelled": "Wird beendet am {{date, date}}",
|
|
77
|
+
"tax_id": "Steuer-ID",
|
|
78
|
+
"transaction_approved": "Zugelassen",
|
|
79
|
+
"transaction_authorized": "Autorisiert",
|
|
80
|
+
"transaction_captured": "Erfasst",
|
|
81
|
+
"transaction_completed": "Abgeschlossen",
|
|
82
|
+
"transaction_declined": "Abgelehnt",
|
|
83
|
+
"transaction_pending": "Anstehend",
|
|
84
|
+
"transaction_plural": "Transaktionen",
|
|
85
|
+
"transaction_refunded": "Erstattet",
|
|
86
|
+
"transaction_rejected": "Zurückgewiesen",
|
|
87
|
+
"transaction_summary": "{{most_expensive_item.name}}",
|
|
88
|
+
"transaction_summary_plural": "{{most_expensive_item.name}} und {{count}} mehr",
|
|
89
|
+
"transaction_verified": "Überprüft",
|
|
90
|
+
"transaction_voided": "Storniert",
|
|
91
|
+
"twice_a_month": "Zweimal im Monat",
|
|
92
|
+
"undo_cancel": "Überprüfung",
|
|
93
|
+
"undo_confirm": "Verwerfen",
|
|
94
|
+
"undo_header": "Nicht gespeicherte Änderungen",
|
|
95
|
+
"undo_message": "Sieht so aus, als hätten Sie Ihre Änderungen nicht gespeichert! Was möchten Sie mit ihnen machen?",
|
|
96
|
+
"unknown_error": "Es ist ein unbekannter Fehler aufgetreten. Bitte versuchen Sie es später noch einmal.",
|
|
97
|
+
"update": "Aktualisieren",
|
|
98
|
+
"update_billing": "Abrechnung aktualisieren",
|
|
99
|
+
"update_items": "Bearbeiten",
|
|
100
|
+
"v8n_format_error": "Ungültiges Format",
|
|
101
|
+
"v8n_invalid_email": "Ungültige E-Mail",
|
|
102
|
+
"v8n_required": "Erforderlich",
|
|
103
|
+
"v8n_too_long": "Zu lang",
|
|
104
|
+
"value": "Wert",
|
|
105
|
+
"visibility": "Sichtbarkeit",
|
|
106
|
+
"visibility_private": "Nur ich",
|
|
107
|
+
"visibility_public": "Jeder",
|
|
108
|
+
"visibility_restricted": "Store-Admins",
|
|
109
|
+
"week": "Woche",
|
|
110
|
+
"week_plural": "Wochen",
|
|
111
|
+
"weekly": "Wöchentlich",
|
|
112
|
+
"weekly_plural": "Alle {{count}} Wochen",
|
|
113
|
+
"year": "Jahr",
|
|
114
|
+
"year_plural": "Jahre",
|
|
115
|
+
"yearly": "Jährlich",
|
|
116
|
+
"yearly_plural": "Alle {{count}} Jahre"
|
|
117
|
+
}
|
|
@@ -6,7 +6,7 @@ import { NucleonElement } from "../NucleonElement/NucleonElement.js";
|
|
|
6
6
|
import { Rumour } from '@foxy.io/sdk/core';
|
|
7
7
|
import { machine } from "./machine.js";
|
|
8
8
|
import { repeat } from 'lit-html/directives/repeat';
|
|
9
|
-
import
|
|
9
|
+
import { serveFromCache } from "../NucleonElement/serveFromCache.js";
|
|
10
10
|
/**
|
|
11
11
|
* Renders an element for each page in a collection.
|
|
12
12
|
*
|
|
@@ -270,16 +270,11 @@ export class CollectionPages extends ConfigurableMixin(LitElement) {
|
|
|
270
270
|
this.__respondIfPossible(event);
|
|
271
271
|
}
|
|
272
272
|
__respondIfPossible(event) {
|
|
273
|
-
const
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
const body = JSON.stringify(this.node);
|
|
279
|
-
event.respondWith(Promise.resolve(new Response(body)));
|
|
280
|
-
this.stop();
|
|
281
|
-
}
|
|
282
|
-
});
|
|
273
|
+
const cacheResponse = serveFromCache(event.request.url, this.pages);
|
|
274
|
+
if (!cacheResponse.ok)
|
|
275
|
+
return;
|
|
276
|
+
event.respondWith(Promise.resolve(cacheResponse));
|
|
277
|
+
console.debug(`%c@foxy.io/elements::${this.localName}\n%c200%c GET ${event.request.url}`, 'color: gray', `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`, '');
|
|
283
278
|
}
|
|
284
279
|
__stallRequest(event) {
|
|
285
280
|
event.stopImmediatePropagation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionPages.js","sourceRoot":"","sources":["../../../../src/elements/public/CollectionPages/CollectionPages.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Event, Page, PageRenderer } from './types';\nimport { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { State, StateMachine, interpret } from 'xstate';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { FetchEvent } from '../NucleonElement/FetchEvent';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { Rumour } from '@foxy.io/sdk/core';\nimport { machine } from './machine';\nimport { repeat } from 'lit-html/directives/repeat';\nimport traverse from 'traverse';\n\n/**\n * Renders an element for each page in a collection.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-collection-pages\n * @since 1.1.0\n */\nexport class CollectionPages<TPage extends Page> extends ConfigurableMixin(LitElement) {\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n manual: { type: Boolean, reflect: true },\n first: { type: String, noAccessor: true },\n pages: { type: Array, noAccessor: true },\n group: { type: String },\n lang: { type: String },\n page: { type: String },\n ns: { type: String },\n };\n }\n\n /** Optional ISO 639-1 code describing the language element content is written in. */\n lang = '';\n\n ns = '';\n\n private __renderPage!: PageRenderer<TPage>;\n\n private __page!: string | PageRenderer<TPage>;\n\n private __group = '';\n\n private __stopTrackingRumour!: () => void;\n\n private __fetchEventHandler = (evt: unknown) => this.__handleFetchEvent(evt);\n\n private __service = interpret(\n (machine as unknown as StateMachine<Context<TPage>, any, Event<TPage>>).withConfig({\n services: {\n observeChildren: () => callback => {\n const observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) callback('RESUME');\n });\n\n observer.observe(this.renderRoot.children[this.renderRoot.children.length - 1]);\n return () => observer.disconnect();\n },\n\n sendGet: async ctx => {\n const lastPage = ctx.pages[ctx.pages.length - 1];\n const lastPageHref = lastPage?._links.next.href ?? ctx.first;\n const response = await new NucleonElement.API(this).fetch(lastPageHref);\n\n if (!response.ok) throw response;\n const json = await response.json();\n\n this.__stopTrackingRumour();\n\n NucleonElement.Rumour(this.group).share({\n source: json._links.self.href,\n data: json,\n });\n\n this.__trackRumour();\n\n return json;\n },\n },\n })\n );\n\n constructor() {\n super();\n this.page = 'foxy-collection-page foxy-null';\n }\n\n /**\n * Custom element tag or a render function to use for displaying collection pages.\n * Generated custom elements will have the following attributes:\n *\n * - `group` – same as `foxy-collection-pages[group]`;\n * - `href` – collection page's `_links.self.href` value;\n * - `lang` – same as `foxy-collection-pages[lang]`;\n * - `item` – will contain `item-tag` when provided with a string value formatted as `page-tag item-tag`.\n *\n * Render function will receive `PageRenderer<TPage>` in the first argument.\n * Uses `foxy-collection-page` by default.\n */\n get page(): string | PageRenderer<TPage> {\n return this.__page;\n }\n\n set page(value: string | PageRenderer<TPage>) {\n if (typeof value === 'string') {\n const item = value.split(' ').pop();\n const itemAttribute = item ? `item=\"${item}\"` : '';\n\n this.__renderPage = new Function(\n 'ctx',\n `return ctx.html\\`\n <${value}\n disabledcontrols=\\${ctx.disabledControls.toString()}\n readonlycontrols=\\${ctx.readonlyControls.toString()}\n hiddencontrols=\\${ctx.hiddenControls.toString()}\n group=\\${ctx.group}\n href=\\${ctx.href}\n lang=\\${ctx.lang}\n ns=\"$\\{ctx.ns} $\\{customElements.get('${value}')?.defaultNS ?? ''}\"\n ${itemAttribute}\n ?disabled=\\${ctx.disabled}\n ?readonly=\\${ctx.readonly}\n ?hidden=\\${ctx.hidden}\n .templates=\\${ctx.templates}\n >\n </${value}>\\``\n ) as PageRenderer<TPage>;\n } else {\n this.__renderPage = value;\n }\n\n this.__page = value;\n this.requestUpdate();\n }\n\n /** URL of the first page in a collection. */\n get first(): string {\n return this.__service.state.context.first;\n }\n\n set first(data: string) {\n this.__service.send({ type: 'SET_FIRST', data });\n }\n\n /** Array of all currently loaded pages in a collection. */\n get pages(): TPage[] {\n return this.__service.state.context.pages;\n }\n\n set pages(data: TPage[]) {\n this.__service.send({ type: 'SET_PAGES', data });\n }\n\n /** Rumour group. Elements in different groups will not share updates. Empty by default. */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__stopTrackingRumour?.();\n this.__trackRumour();\n }\n\n /** If false, will load pages on scroll. If true, will display a button triggering the process. */\n get manual(): boolean {\n return this.__service.state.context.manual;\n }\n\n set manual(data: boolean) {\n this.__service.send({ type: 'SET_MANUAL', data });\n }\n\n /**\n * Checks if this element is in the given state. Available states:\n *\n * - `busy` when loading a page;\n * - `fail` when page load fails;\n * - `idle` when not loading anything for one of the reasons below:\n * - `paused` if waiting for user to scroll further;\n * - `manual` when next page load will be triggered by clicking a button;\n * - `auto` when next page load will be triggered by scrolling to the observer target;\n * - `empty` if collection is empty;\n * - `end` if there are no more items in a collection.\n *\n * @example element.in({ idle: 'empty' })\n */\n in(stateValue: State<Context, Event>['value']): boolean {\n return this.__service.state.matches(stateValue);\n }\n\n /** @readonly */\n createRenderRoot(): CollectionPages<TPage> {\n return this;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('fetch', this.__fetchEventHandler);\n this.__createService();\n this.__trackRumour();\n }\n\n /** @readonly */\n render(): TemplateResult {\n const items = this.pages.map(page => ({\n key: page._links.self.href,\n href: page._links.self.href,\n }));\n\n if (this.__service.state.matches('busy')) {\n items.push({ key: 'stalled', href: 'foxy://collection-pages/stall' });\n } else if (this.__service.state.matches('fail')) {\n items.push({ key: 'failed', href: 'foxy://collection-pages/fail' });\n } else if (this.__service.state.matches({ idle: 'empty' })) {\n items.push({ key: 'empty', href: '' });\n }\n\n return html`\n <!-- collection items -->\n ${repeat(\n items,\n page => page.key,\n (page, pageIndex) => {\n return this.__renderPage({\n disabledControls: this.disabledControls,\n readonlyControls: this.readonlyControls,\n hiddenControls: this.hiddenControls,\n templates: this.templates,\n disabled: this.disabled,\n readonly: this.readonly,\n hidden: this.hidden,\n group: this.group,\n data: this.pages[pageIndex] ?? null,\n href: page.href,\n lang: this.lang,\n ns: this.ns,\n html,\n });\n }\n )}\n ${this.manual\n ? this.in({ idle: 'paused' })\n ? html`\n <!-- manual trigger -->\n <vaadin-button theme=\"small contrast\" @click=${() => this.__service.send('RESUME')}>\n <foxy-i18n lang=${this.lang} key=\"load_more\" ns=${this.ns}></foxy-i18n>\n </vaadin-button>\n `\n : ''\n : html`\n <!-- intersection observer target -->\n <span></span>\n `}\n `;\n }\n\n /** @readonly */\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n this.dispatchEvent(new NucleonElement.UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('fetch', this.__fetchEventHandler);\n this.__service.stop();\n this.__stopTrackingRumour?.();\n }\n\n private __trackRumour() {\n this.__stopTrackingRumour = NucleonElement.Rumour(this.group).track(update => {\n try {\n if (this.pages.length === 0) {\n update({ _links: { self: { href: this.first } } });\n } else {\n this.pages.map(page => update(page));\n }\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'SET_FIRST', data: this.first });\n } else {\n throw err;\n }\n }\n });\n }\n\n private __createService() {\n this.__service\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n }\n\n private __handleFetchEvent(event: unknown) {\n if (!(event instanceof FetchEvent) || event.target === this) return;\n const { method, url } = event.request;\n\n if (method !== 'GET') return;\n if (url === 'foxy://collection-pages/stall') return this.__stallRequest(event);\n if (url === 'foxy://collection-pages/fail') return this.__failRequest(event);\n\n this.__respondIfPossible(event);\n }\n\n private __respondIfPossible(event: FetchEvent) {\n const localName = this.localName;\n\n traverse(this.__service.state.context.pages).forEach(function () {\n if (this.node?._links?.self?.href === event.request.url) {\n console.debug(\n `%c@foxy.io/elements::${localName}\\n%c200%c GET ${event.request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n\n const body = JSON.stringify(this.node);\n event.respondWith(Promise.resolve(new Response(body)));\n this.stop();\n }\n });\n }\n\n private __stallRequest(event: FetchEvent) {\n event.stopImmediatePropagation();\n event.respondWith(new Promise(() => void 0));\n }\n\n private __failRequest(event: FetchEvent) {\n event.stopImmediatePropagation();\n event.respondWith(Promise.resolve(this.__service.state.context.error as Response));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CollectionPages.js","sourceRoot":"","sources":["../../../../src/elements/public/CollectionPages/CollectionPages.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Event, Page, PageRenderer } from './types';\nimport { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { State, StateMachine, interpret } from 'xstate';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { FetchEvent } from '../NucleonElement/FetchEvent';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { Rumour } from '@foxy.io/sdk/core';\nimport { machine } from './machine';\nimport { repeat } from 'lit-html/directives/repeat';\nimport { serveFromCache } from '../NucleonElement/serveFromCache';\n\n/**\n * Renders an element for each page in a collection.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-collection-pages\n * @since 1.1.0\n */\nexport class CollectionPages<TPage extends Page> extends ConfigurableMixin(LitElement) {\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n manual: { type: Boolean, reflect: true },\n first: { type: String, noAccessor: true },\n pages: { type: Array, noAccessor: true },\n group: { type: String },\n lang: { type: String },\n page: { type: String },\n ns: { type: String },\n };\n }\n\n /** Optional ISO 639-1 code describing the language element content is written in. */\n lang = '';\n\n ns = '';\n\n private __renderPage!: PageRenderer<TPage>;\n\n private __page!: string | PageRenderer<TPage>;\n\n private __group = '';\n\n private __stopTrackingRumour!: () => void;\n\n private __fetchEventHandler = (evt: unknown) => this.__handleFetchEvent(evt);\n\n private __service = interpret(\n (machine as unknown as StateMachine<Context<TPage>, any, Event<TPage>>).withConfig({\n services: {\n observeChildren: () => callback => {\n const observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) callback('RESUME');\n });\n\n observer.observe(this.renderRoot.children[this.renderRoot.children.length - 1]);\n return () => observer.disconnect();\n },\n\n sendGet: async ctx => {\n const lastPage = ctx.pages[ctx.pages.length - 1];\n const lastPageHref = lastPage?._links.next.href ?? ctx.first;\n const response = await new NucleonElement.API(this).fetch(lastPageHref);\n\n if (!response.ok) throw response;\n const json = await response.json();\n\n this.__stopTrackingRumour();\n\n NucleonElement.Rumour(this.group).share({\n source: json._links.self.href,\n data: json,\n });\n\n this.__trackRumour();\n\n return json;\n },\n },\n })\n );\n\n constructor() {\n super();\n this.page = 'foxy-collection-page foxy-null';\n }\n\n /**\n * Custom element tag or a render function to use for displaying collection pages.\n * Generated custom elements will have the following attributes:\n *\n * - `group` – same as `foxy-collection-pages[group]`;\n * - `href` – collection page's `_links.self.href` value;\n * - `lang` – same as `foxy-collection-pages[lang]`;\n * - `item` – will contain `item-tag` when provided with a string value formatted as `page-tag item-tag`.\n *\n * Render function will receive `PageRenderer<TPage>` in the first argument.\n * Uses `foxy-collection-page` by default.\n */\n get page(): string | PageRenderer<TPage> {\n return this.__page;\n }\n\n set page(value: string | PageRenderer<TPage>) {\n if (typeof value === 'string') {\n const item = value.split(' ').pop();\n const itemAttribute = item ? `item=\"${item}\"` : '';\n\n this.__renderPage = new Function(\n 'ctx',\n `return ctx.html\\`\n <${value}\n disabledcontrols=\\${ctx.disabledControls.toString()}\n readonlycontrols=\\${ctx.readonlyControls.toString()}\n hiddencontrols=\\${ctx.hiddenControls.toString()}\n group=\\${ctx.group}\n href=\\${ctx.href}\n lang=\\${ctx.lang}\n ns=\"$\\{ctx.ns} $\\{customElements.get('${value}')?.defaultNS ?? ''}\"\n ${itemAttribute}\n ?disabled=\\${ctx.disabled}\n ?readonly=\\${ctx.readonly}\n ?hidden=\\${ctx.hidden}\n .templates=\\${ctx.templates}\n >\n </${value}>\\``\n ) as PageRenderer<TPage>;\n } else {\n this.__renderPage = value;\n }\n\n this.__page = value;\n this.requestUpdate();\n }\n\n /** URL of the first page in a collection. */\n get first(): string {\n return this.__service.state.context.first;\n }\n\n set first(data: string) {\n this.__service.send({ type: 'SET_FIRST', data });\n }\n\n /** Array of all currently loaded pages in a collection. */\n get pages(): TPage[] {\n return this.__service.state.context.pages;\n }\n\n set pages(data: TPage[]) {\n this.__service.send({ type: 'SET_PAGES', data });\n }\n\n /** Rumour group. Elements in different groups will not share updates. Empty by default. */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__stopTrackingRumour?.();\n this.__trackRumour();\n }\n\n /** If false, will load pages on scroll. If true, will display a button triggering the process. */\n get manual(): boolean {\n return this.__service.state.context.manual;\n }\n\n set manual(data: boolean) {\n this.__service.send({ type: 'SET_MANUAL', data });\n }\n\n /**\n * Checks if this element is in the given state. Available states:\n *\n * - `busy` when loading a page;\n * - `fail` when page load fails;\n * - `idle` when not loading anything for one of the reasons below:\n * - `paused` if waiting for user to scroll further;\n * - `manual` when next page load will be triggered by clicking a button;\n * - `auto` when next page load will be triggered by scrolling to the observer target;\n * - `empty` if collection is empty;\n * - `end` if there are no more items in a collection.\n *\n * @example element.in({ idle: 'empty' })\n */\n in(stateValue: State<Context, Event>['value']): boolean {\n return this.__service.state.matches(stateValue);\n }\n\n /** @readonly */\n createRenderRoot(): CollectionPages<TPage> {\n return this;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('fetch', this.__fetchEventHandler);\n this.__createService();\n this.__trackRumour();\n }\n\n /** @readonly */\n render(): TemplateResult {\n const items = this.pages.map(page => ({\n key: page._links.self.href,\n href: page._links.self.href,\n }));\n\n if (this.__service.state.matches('busy')) {\n items.push({ key: 'stalled', href: 'foxy://collection-pages/stall' });\n } else if (this.__service.state.matches('fail')) {\n items.push({ key: 'failed', href: 'foxy://collection-pages/fail' });\n } else if (this.__service.state.matches({ idle: 'empty' })) {\n items.push({ key: 'empty', href: '' });\n }\n\n return html`\n <!-- collection items -->\n ${repeat(\n items,\n page => page.key,\n (page, pageIndex) => {\n return this.__renderPage({\n disabledControls: this.disabledControls,\n readonlyControls: this.readonlyControls,\n hiddenControls: this.hiddenControls,\n templates: this.templates,\n disabled: this.disabled,\n readonly: this.readonly,\n hidden: this.hidden,\n group: this.group,\n data: this.pages[pageIndex] ?? null,\n href: page.href,\n lang: this.lang,\n ns: this.ns,\n html,\n });\n }\n )}\n ${this.manual\n ? this.in({ idle: 'paused' })\n ? html`\n <!-- manual trigger -->\n <vaadin-button theme=\"small contrast\" @click=${() => this.__service.send('RESUME')}>\n <foxy-i18n lang=${this.lang} key=\"load_more\" ns=${this.ns}></foxy-i18n>\n </vaadin-button>\n `\n : ''\n : html`\n <!-- intersection observer target -->\n <span></span>\n `}\n `;\n }\n\n /** @readonly */\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n this.dispatchEvent(new NucleonElement.UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('fetch', this.__fetchEventHandler);\n this.__service.stop();\n this.__stopTrackingRumour?.();\n }\n\n private __trackRumour() {\n this.__stopTrackingRumour = NucleonElement.Rumour(this.group).track(update => {\n try {\n if (this.pages.length === 0) {\n update({ _links: { self: { href: this.first } } });\n } else {\n this.pages.map(page => update(page));\n }\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'SET_FIRST', data: this.first });\n } else {\n throw err;\n }\n }\n });\n }\n\n private __createService() {\n this.__service\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n }\n\n private __handleFetchEvent(event: unknown) {\n if (!(event instanceof FetchEvent) || event.target === this) return;\n const { method, url } = event.request;\n\n if (method !== 'GET') return;\n if (url === 'foxy://collection-pages/stall') return this.__stallRequest(event);\n if (url === 'foxy://collection-pages/fail') return this.__failRequest(event);\n\n this.__respondIfPossible(event);\n }\n\n private __respondIfPossible(event: FetchEvent) {\n const cacheResponse = serveFromCache(event.request.url, this.pages);\n if (!cacheResponse.ok) return;\n\n event.respondWith(Promise.resolve(cacheResponse));\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${event.request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n\n private __stallRequest(event: FetchEvent) {\n event.stopImmediatePropagation();\n event.respondWith(new Promise(() => void 0));\n }\n\n private __failRequest(event: FetchEvent) {\n event.stopImmediatePropagation();\n event.respondWith(Promise.resolve(this.__service.state.context.error as Response));\n }\n}\n"]}
|