UNPKG

24.2 kBJavaScriptView Raw
1var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5 return c > 3 && r && Object.defineProperty(target, key, r), r;
6};
7import { LitElement, html, css, customElement, property, query } from 'lit-element/lit-element.js';
8import { _ } from '@kano/i18n/dist/index.js';
9import './kwc-auth.js';
10import * as icons from './icons.js';
11const headerImage = `url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIxIiBoZWlnaHQ9IjU3IiB2aWV3Qm94PSIwIDAgMjIxIDU3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDApIj4KPHBhdGggb3BhY2l0eT0iMC42IiBkPSJNMTMyIDEyLjlDMTMyIDcuMzAwMDEgMTM2LjYgMi43MDAwMSAxNDIuMiAyLjcwMDAxQzE0Ny44IDIuNzAwMDEgMTUyLjQgNy4zMDAwMSAxNTIuNCAxMi45QzE1Mi40IDE4LjUgMTQ3LjggMjMuMSAxNDIuMiAyMy4xQzEzNi42IDIzLjEgMTMyIDE4LjUgMTMyIDEyLjlaTTE0OS42IDEyLjlDMTQ5LjYgOC44MDAwMSAxNDYuMyA1LjUwMDAxIDE0Mi4yIDUuNTAwMDFDMTM4LjEgNS41MDAwMSAxMzQuOCA4LjgwMDAxIDEzNC44IDEyLjlDMTM0LjggMTcgMTM4LjEgMjAuMyAxNDIuMiAyMC4zQzE0Ni4zIDIwLjMgMTQ5LjYgMTcgMTQ5LjYgMTIuOVoiIGZpbGw9IiNGRjY5MDAiLz4KPHBhdGggb3BhY2l0eT0iMC42IiBkPSJNMTM4LjQgMTIuOUMxMzguNCAxMC44IDE0MC4xIDkgMTQyLjMgOUMxNDQuNCA5IDE0Ni4yIDEwLjcgMTQ2LjIgMTIuOUMxNDYuMiAxNS4xIDE0NC41IDE2LjggMTQyLjMgMTYuOEMxNDAuMSAxNi44IDEzOC40IDE1IDEzOC40IDEyLjlaTTE0My4zIDEyLjlDMTQzLjMgMTIuMyAxNDIuOCAxMS44IDE0Mi4yIDExLjhDMTQxLjYgMTEuOCAxNDEuMSAxMi4zIDE0MS4xIDEyLjlDMTQxLjEgMTMuNSAxNDEuNiAxNCAxNDIuMiAxNEMxNDIuOCAxNCAxNDMuMyAxMy41IDE0My4zIDEyLjlaIiBmaWxsPSIjRkY2OTAwIi8+CjxwYXRoIG9wYWNpdHk9IjAuNiIgZD0iTTE4OS4xIDI2LjJDMTg5LjEgMjMuMyAxOTEuNCAyMSAxOTQuMyAyMUMxOTcuMiAyMSAxOTkuNSAyMy4zIDE5OS41IDI2LjJDMTk5LjUgMjkuMSAxOTcuMiAzMS40IDE5NC4zIDMxLjRDMTkxLjQgMzEuNCAxODkuMSAyOS4xIDE4OS4xIDI2LjJaTTE5NS44IDI2LjJDMTk1LjggMjUuNCAxOTUuMiAyNC44IDE5NC40IDI0LjhDMTkzLjYgMjQuOCAxOTMgMjUuNCAxOTMgMjYuMkMxOTMgMjcgMTkzLjYgMjcuNiAxOTQuNCAyNy42QzE5NS4yIDI3LjYgMTk1LjggMjcgMTk1LjggMjYuMloiIGZpbGw9IiNGRjY5MDAiLz4KPHBhdGggb3BhY2l0eT0iMC42IiBkPSJNNjguNSAyNS40QzcwLjEgMjUuNCA3MS41IDI0LjEgNzEuNSAyMi40VjExLjVDNzEuNSA5LjkgNzAuMiA4LjUgNjguNSA4LjVDNjYuOSA4LjUgNjUuNSA5LjggNjUuNSAxMS41VjIyLjRDNjUuNSAyNC4xIDY2LjggMjUuNCA2OC41IDI1LjRaIiBmaWxsPSIjRkY2OTAwIi8+CjxnIG9wYWNpdHk9IjAuNiI+CjxwYXRoIG9wYWNpdHk9IjAuNiIgZD0iTTEyNS40IDE5LjdDMTI1LjQgMjEuNCAxMjQuMSAyMi43IDEyMi40IDIyLjdDMTIwLjcgMjIuNyAxMTkuNCAyMS40IDExOS40IDE5LjdDMTE5LjQgMTggMTIwLjcgMTYuNyAxMjIuNCAxNi43QzEyNC4xIDE2LjcgMTI1LjQgMTguMSAxMjUuNCAxOS43WiIgZmlsbD0iI0ZGNjkwMCIvPgo8L2c+CjxwYXRoIGQ9Ik0yMTQuMSAwVjQuNkMyMTQuMSA2LjIgMjE1LjQgNy42IDIxNy4xIDcuNkMyMTguOCA3LjYgMjIwLjEgNi4zIDIyMC4xIDQuNlYwSDIxNC4xWiIgZmlsbD0iIzY3NjdFQyIvPgo8cGF0aCBkPSJNMTMyIDEyLjlDMTMyIDcuMzAwMDEgMTM2LjYgMi43MDAwMSAxNDIuMiAyLjcwMDAxQzE0Ny44IDIuNzAwMDEgMTUyLjQgNy4zMDAwMSAxNTIuNCAxMi45QzE1Mi40IDE4LjUgMTQ3LjggMjMuMSAxNDIuMiAyMy4xQzEzNi42IDIzLjEgMTMyIDE4LjUgMTMyIDEyLjlaTTE0OS42IDEyLjlDMTQ5LjYgOC44MDAwMSAxNDYuMyA1LjUwMDAxIDE0Mi4yIDUuNTAwMDFDMTM4LjEgNS41MDAwMSAxMzQuOCA4LjgwMDAxIDEzNC44IDEyLjlDMTM0LjggMTcgMTM4LjEgMjAuMyAxNDIuMiAyMC4zQzE0Ni4zIDIwLjMgMTQ5LjYgMTcgMTQ5LjYgMTIuOVoiIGZpbGw9IiNGRjY5MDAiLz4KPHBhdGggZD0iTTEzOC40IDEyLjlDMTM4LjQgMTAuOCAxNDAuMSA5IDE0Mi4zIDlDMTQ0LjQgOSAxNDYuMiAxMC43IDE0Ni4yIDEyLjlDMTQ2LjIgMTUuMSAxNDQuNSAxNi44IDE0Mi4zIDE2LjhDMTQwLjEgMTYuOCAxMzguNCAxNSAxMzguNCAxMi45Wk0xNDMuMyAxMi45QzE0My4zIDEyLjMgMTQyLjggMTEuOCAxNDIuMiAxMS44QzE0MS42IDExLjggMTQxLjEgMTIuMyAxNDEuMSAxMi45QzE0MS4xIDEzLjUgMTQxLjYgMTQgMTQyLjIgMTRDMTQyLjggMTQgMTQzLjMgMTMuNSAxNDMuMyAxMi45WiIgZmlsbD0iI0ZGNjkwMCIvPgo8cGF0aCBkPSJNMTg5LjEgMjYuMkMxODkuMSAyMy4zIDE5MS40IDIxIDE5NC4zIDIxQzE5Ny4yIDIxIDE5OS41IDIzLjMgMTk5LjUgMjYuMkMxOTkuNSAyOS4xIDE5Ny4yIDMxLjQgMTk0LjMgMzEuNEMxOTEuNCAzMS40IDE4OS4xIDI5LjEgMTg5LjEgMjYuMlpNMTk1LjggMjYuMkMxOTUuOCAyNS40IDE5NS4yIDI0LjggMTk0LjQgMjQuOEMxOTMuNiAyNC44IDE5MyAyNS40IDE5MyAyNi4yQzE5MyAyNyAxOTMuNiAyNy42IDE5NC40IDI3LjZDMTk1LjIgMjcuNiAxOTUuOCAyNyAxOTUuOCAyNi4yWiIgZmlsbD0iI0ZGNjkwMCIvPgo8cGF0aCBkPSJNNjguNSAyNS40QzcwLjEgMjUuNCA3MS41IDI0LjEgNzEuNSAyMi40VjExLjVDNzEuNSA5LjkgNzAuMiA4LjUgNjguNSA4LjVDNjYuOSA4LjUgNjUuNSA5LjggNjUuNSAxMS41VjIyLjRDNjUuNSAyNC4xIDY2LjggMjUuNCA2OC41IDI1LjRaIiBmaWxsPSIjRkY2OTAwIi8+CjxwYXRoIGQ9Ik0xMjUuNCAxOS43QzEyNS40IDIxLjQgMTI0LjEgMjIuNyAxMjIuNCAyMi43QzEyMC43IDIyLjcgMTE5LjQgMjEuNCAxMTkuNCAxOS43QzExOS40IDE4IDEyMC43IDE2LjcgMTIyLjQgMTYuN0MxMjQuMSAxNi43IDEyNS40IDE4LjEgMTI1LjQgMTkuN1oiIGZpbGw9IiNGRjY5MDAiLz4KPHBhdGggZD0iTTAgMFY4LjRDMCAxMCAxLjMgMTEuNCAzIDExLjRDNC43IDExLjQgNiAxMC4xIDYgOC40VjBIMFoiIGZpbGw9IiNGRkIzMDAiLz4KPHBhdGggZD0iTTEzMiAxMi45QzEzMiA3LjMwMDAxIDEzNi42IDIuNzAwMDEgMTQyLjIgMi43MDAwMUMxNDcuOCAyLjcwMDAxIDE1Mi40IDcuMzAwMDEgMTUyLjQgMTIuOUMxNTIuNCAxOC41IDE0Ny44IDIzLjEgMTQyLjIgMjMuMUMxMzYuNiAyMy4xIDEzMiAxOC41IDEzMiAxMi45Wk0xNDkuNiAxMi45QzE0OS42IDguODAwMDEgMTQ2LjMgNS41MDAwMSAxNDIuMiA1LjUwMDAxQzEzOC4xIDUuNTAwMDEgMTM0LjggOC44MDAwMSAxMzQuOCAxMi45QzEzNC44IDE3IDEzOC4xIDIwLjMgMTQyLjIgMjAuM0MxNDYuMyAyMC4zIDE0OS42IDE3IDE0OS42IDEyLjlaIiBmaWxsPSIjRUY1Mjg1Ii8+CjxwYXRoIGQ9Ik0xMzguNCAxMi45QzEzOC40IDEwLjggMTQwLjEgOSAxNDIuMyA5QzE0NC40IDkgMTQ2LjIgMTAuNyAxNDYuMiAxMi45QzE0Ni4yIDE1LjEgMTQ0LjUgMTYuOCAxNDIuMyAxNi44QzE0MC4xIDE2LjggMTM4LjQgMTUgMTM4LjQgMTIuOVpNMTQzLjMgMTIuOUMxNDMuMyAxMi4zIDE0Mi44IDExLjggMTQyLjIgMTEuOEMxNDEuNiAxMS44IDE0MS4xIDEyLjMgMTQxLjEgMTIuOUMxNDEuMSAxMy41IDE0MS42IDE0IDE0Mi4yIDE0QzE0Mi44IDE0IDE0My4zIDEzLjUgMTQzLjMgMTIuOVoiIGZpbGw9IiNGRkIzMDAiLz4KPHBhdGggZD0iTTE4OS4xIDI2LjJDMTg5LjEgMjMuMyAxOTEuNCAyMSAxOTQuMyAyMUMxOTcuMiAyMSAxOTkuNSAyMy4zIDE5OS41IDI2LjJDMTk5LjUgMjkuMSAxOTcuMiAzMS40IDE5NC4zIDMxLjRDMTkxLjQgMzEuNCAxODkuMSAyOS4xIDE4OS4xIDI2LjJaTTE5NS44IDI2LjJDMTk1LjggMjUuNCAxOTUuMiAyNC44IDE5NC40IDI0LjhDMTkzLjYgMjQuOCAxOTMgMjUuNCAxOTMgMjYuMkMxOTMgMjcgMTkzLjYgMjcuNiAxOTQuNCAyNy42QzE5NS4yIDI3LjYgMTk1LjggMjcgMTk1LjggMjYuMloiIGZpbGw9IiNGRkIzMDAiLz4KPHBhdGggZD0iTTY4LjUgMjUuNEM3MC4xIDI1LjQgNzEuNSAyNC4xIDcxLjUgMjIuNFYxMS41QzcxLjUgOS45IDcwLjIgOC41IDY4LjUgOC41QzY2LjkgOC41IDY1LjUgOS44IDY1LjUgMTEuNVYyMi40QzY1LjUgMjQuMSA2Ni44IDI1LjQgNjguNSAyNS40WiIgZmlsbD0iI0ZGNjkwMCIvPgo8cGF0aCBkPSJNNzUuOTAwMiA0NS42QzcwLjMwMDIgNDUuNiA2NS43MDAyIDUwLjIgNjUuNzAwMiA1NS44SDY4LjUwMDJINzIuMDAwMkg3NC44MDAySDc2LjkwMDJINzkuNzAwMkg4My4yMDAySDg2LjAwMDJDODYuMTAwMiA1MC4yIDgxLjUwMDIgNDUuNiA3NS45MDAyIDQ1LjZaIiBmaWxsPSIjMDBDOUIyIi8+CjxwYXRoIGQ9Ik0yMTMuNiA1NlY1MS44QzIxMy42IDUwLjEgMjEyLjIgNDguNyAyMTAuNSA0OC43QzIwOC44IDQ4LjcgMjA3LjQgNTAuMSAyMDcuNCA1MS44VjU2SDIxMy42WiIgZmlsbD0iI0ZGNjkwMCIvPgo8cGF0aCBkPSJNMTI1LjQgMTkuN0MxMjUuNCAyMS40IDEyNC4xIDIyLjcgMTIyLjQgMjIuN0MxMjAuNyAyMi43IDExOS40IDIxLjQgMTE5LjQgMTkuN0MxMTkuNCAxOCAxMjAuNyAxNi43IDEyMi40IDE2LjdDMTI0LjEgMTYuNyAxMjUuNCAxOC4xIDEyNS40IDE5LjdaIiBmaWxsPSIjMDBDOUIyIi8+CjxwYXRoIGQ9Ik0xNzUuNSAwVjYuNUMxNzUuNSA4LjEgMTc2LjggOS41IDE3OC41IDkuNUMxODAuMSA5LjUgMTgxLjUgOC4yIDE4MS41IDYuNVYwSDE3NS41WiIgZmlsbD0iI0ZGNjkwMCIvPgo8cGF0aCBkPSJNNDMuNjAwNCAxMi45QzQ1LjIwMDQgMTEuMyA0Ni4xMDA0IDkuMSA0Ni4xMDA0IDYuOEM0Ni4xMDA0IDQuNSA0NS4yMDA0IDIuMyA0My42MDA0IDAuN0w0My4wMDA0IDBIMzguODAwNEMzOS4yMDA0IDAuOCAzOS43MDA0IDEuNSA0MC40MDA0IDIuMkw0MS4zMDA0IDMuMUM0Mi4zMDA0IDQuMSA0Mi44MDA0IDUuNCA0Mi44MDA0IDYuOEM0Mi44MDA0IDguMiA0Mi4zMDA0IDkuNSA0MS4zMDA0IDEwLjVMNDAuOTAwNCAxMC45QzM5LjMwMDQgMTIuNSAzOC40MDA0IDE0LjcgMzguNDAwNCAxN0MzOC40MDA0IDE5LjMgMzkuMzAwNCAyMS41IDQwLjkwMDQgMjMuMUM0MS42MDA0IDIzLjggNDIuNjAwNCAyMy44IDQzLjMwMDQgMjMuMUM0NC4wMDA0IDIyLjQgNDQuMDAwNCAyMS40IDQzLjMwMDQgMjAuN0M0Mi4zMDA0IDE5LjcgNDEuODAwNCAxOC40IDQxLjgwMDQgMTdDNDEuODAwNCAxNS42IDQyLjMwMDQgMTQuMyA0My4zMDA0IDEzLjNMNDMuNjAwNCAxMi45WiIgZmlsbD0iIzY3NjdFQyIvPgo8cGF0aCBkPSJNMTQ1LjIgNTZWNTAuOVY0MS40QzE0NS4yIDM5LjggMTQzLjkgMzguNSAxNDIuMyAzOC41QzE0MC43IDM4LjUgMTM5LjQgMzkuOCAxMzkuNCA0MS40VjUwLjlWNTZIMTQ1LjJaIiBmaWxsPSIjNjc2N0VDIi8+CjxwYXRoIGQ9Ik0xNzYuNSA1Mi4xQzE3Ni41IDUzLjUgMTc2IDU0LjggMTc1IDU1LjhMMTc0LjkgNTUuOUgxNzkuMUMxNzkuNyA1NC43IDE4MCA1My40IDE4MCA1Mi4xQzE4MCA0OS44IDE3OS4xIDQ3LjYgMTc3LjUgNDZDMTc2LjggNDUuMyAxNzUuOCA0NS4zIDE3NS4xIDQ2QzE3NC40IDQ2LjcgMTc0LjQgNDcuNyAxNzUuMSA0OC40QzE3NiA0OS40IDE3Ni41IDUwLjcgMTc2LjUgNTIuMVoiIGZpbGw9IiMwMEM5QjIiLz4KPHBhdGggZD0iTTExNy45IDU2VjM2LjVDMTE3LjkgMzQuOSAxMTYuNiAzMy41IDExNC45IDMzLjVDMTEzLjMgMzMuNSAxMTEuOSAzNC44IDExMS45IDM2LjVWNTZIMTE3LjlaIiBmaWxsPSIjRkY2OTAwIi8+CjxwYXRoIGQ9Ik0zNiA1Ni4xVjQ0LjNDMzYgNDIuNyAzNC43IDQxLjMgMzMgNDEuM0MzMS40IDQxLjMgMzAgNDIuNiAzMCA0NC4zVjU2LjFIMzZaIiBmaWxsPSIjRkY2OTAwIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMjIwLjEiIGhlaWdodD0iNTYuMSIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K')`;
12let AuthView = class AuthView extends LitElement {
13 constructor() {
14 super(...arguments);
15 this.view = { id: '' };
16 this.views = new Map();
17 this.headerText = '';
18 this.allowExit = false;
19 }
20 set flowDefinition(value) {
21 if (this.flowDefinition) {
22 throw new Error('Cant define twice');
23 }
24 value.forEach(el => {
25 this.views.set(el.id, el);
26 });
27 this.view = this.views.get('login') || value[0];
28 }
29 static get styles() {
30 return [
31 css `
32 :host {
33 display: block;
34 font-family: "proxima", Helvetica, Arial, sans-serif;
35 }
36 kwc-auth {
37 height: 100%;
38 }
39 h1,
40 h2,
41 h3,
42 h4,
43 p,
44 a,
45 input {
46 line-height: 1em;
47 }
48
49 h2, h3 {
50 color: #414a51;
51 text-align: left;
52 }
53 h2 {
54 font-size: 24px;
55 }
56
57 h3 {
58 font-size: 20px;
59 }
60
61 p {
62 font-size: 20px;
63 margin: 0;
64 }
65
66 p.color-grey {
67 color: #9FA4A8;
68 }
69
70 a {
71 color: #FF6900;
72 text-decoration: none;
73 }
74
75 button {
76 text-align: center;
77 margin-top: 20px;
78 }
79 .play {
80 width: 100%;
81 height: 100%;
82 background-color: #2C3D4E;
83 }
84 .page-content,
85 .login-page {
86 display: flex;
87 flex-flow: column;
88 width: 100%;
89 margin: 0 auto;
90 max-width: 420px;
91 align-items: stretch;
92 flex-grow: 1;
93 justify-content: space-between;
94 }
95 .page-content {
96 height: calc(100vh - 56px);
97 padding-top: 20px;
98 box-sizing: border-box;
99 }
100 .login-page {
101 background-color: var(--color-black);
102 max-width: 100%;
103 height: 100vh;
104 }
105 .login-page__container {
106 display: flex;
107 flex-flow: column;
108 align-items: stretch;
109 justify-content: center;
110 height: 100%;
111 }
112 .login-page__container kwc-auth {
113 height: auto;
114 width: 100%;
115 max-width: 360px;
116 }
117 .login-page footer {
118 max-width: 420px;
119 align-self: center;
120 }
121 .back-button {
122 display: flex;
123 }
124 .back-button a {
125 display: flex;
126 align-items: center;
127 color: #414A51;
128 font-weight: bold;
129 text-decoration: none;
130 }
131 .back-button a img {
132 margin-right: 10px;
133 }
134 .back-button:hover a {
135 color: #2a3035;
136 text-decoration: underline;
137 cursor: pointer;
138 }
139 header {
140 position: relative;
141 height: 56px;
142 width: 100%;
143 background-color: #D95000;
144 display: flex;
145 flex-direction: column;
146 justify-content: center;
147 overflow: hidden;
148 background-color: #E9EBEC;
149 background-repeat: no-repeat;
150 background-position: calc(100% - 6px) 0px;
151 background-size: contain;
152 }
153 .header-content {
154 display: flex;
155 align-items: center;
156 position: relative;
157 max-width: 420px;
158 width: 420px;
159 margin: 0 auto;
160 box-sizing: border-box;
161 padding: 0 10px;
162 }
163 header h3,
164 header img {
165 display: inline-block;
166 color: #434A50;
167 font-size: 24px;
168 margin: 0;
169 }
170 .world-logo {
171 width: 56px;
172 margin-right: 12px;
173 }
174 footer {
175 width: 100%;
176 border-top: 1px solid #E9EBEC;
177 text-align: center;
178 max-height: 60px;
179 align-self: flex-end;
180 flex-grow: 0;
181 margin-top: 18px;
182 box-sizing: border-box;
183 }
184 footer a {
185 display: inline-block;
186 color: darkgray;
187 text-decoration: none;
188 padding: 14px 10px 20px;
189 font-weight: bold;
190 }
191 footer a:hover {
192 text-decoration: underline;
193 }
194 .button-wrapper {
195 text-align: center;
196 }
197
198 @media (max-width: 600px) {
199 header {
200 display: flex;
201 flex-direction: row;
202 align-items: center;
203 }
204 .login-page__container {
205 height: 100vh;
206 box-sizing: border-box;
207 }
208 .login-page__container kwc-auth {
209 height: inherit;
210 width: 100%;
211 max-width: none;
212 }
213 .login-page footer {
214 max-width: none;
215 align-self: center;
216 }
217 }
218 `,
219 ];
220 }
221 headerTemplate() {
222 const { id } = this.view;
223 const privacyHeader = _('UPDATED_PRIVACY_SETTINGS', 'We’ve updated our privacy settings');
224 const signupHeader = _('SIGNUP', 'Signup');
225 let header = html ``;
226 switch (id) {
227 case 'username':
228 header = this.headerContentTemplate(signupHeader);
229 break;
230 case 'update-username':
231 header = this.headerContentTemplate(privacyHeader);
232 break;
233 case 'password':
234 header = this.headerContentTemplate(signupHeader);
235 break;
236 case 'email':
237 header = this.headerContentTemplate(signupHeader);
238 break;
239 case 'update-email':
240 header = this.headerContentTemplate(privacyHeader);
241 break;
242 case 'success':
243 header = this.headerContentTemplate(_('WELCOME_TO_KANO', 'Welcome to Kano'));
244 break;
245 case 'forgot-username':
246 header = this.headerContentTemplate(signupHeader);
247 break;
248 case 'forgot-password':
249 header = this.headerContentTemplate(signupHeader);
250 break;
251 case 'forgot-email':
252 header = this.headerContentTemplate(signupHeader);
253 break;
254 default:
255 break;
256 }
257 return html `
258 <header id="header" style="background-image:${headerImage}" >
259 ${header}
260 </header>
261 `;
262 }
263 backButtonTemplate() {
264 if (typeof this.view.backButton === 'undefined') {
265 return;
266 }
267 const button = this.view.backButton;
268 return html `
269 <div class="back-button">
270 <a @click=${() => this.changeTemplate(button.link)} >
271 <img src=${icons.back} />
272 ${button.text}
273 </a>
274 </div>
275 `;
276 }
277 headerContentTemplate(text) {
278 const showButton = typeof this.view.backButton !== 'undefined';
279 return html `
280 <div class="header-content">
281 ${showButton ? this.backButtonTemplate() : this.header(text)}
282 </div>
283 `;
284 }
285 header(text) {
286 return html `
287 <img src=${icons.world} class="world-logo" />
288 <h3>${text}</h3>
289 `;
290 }
291 handleClick(id) {
292 this.changeTemplate(id);
293 }
294 handleChangeView(e) {
295 this.changeTemplate(e.detail.nextView);
296 }
297 changeTemplate(id) {
298 this.view = this.views.get(id) || { id: 'login' };
299 this.dispatchEvent(new CustomEvent('view-changed', { detail: this.view, bubbles: true, composed: true }));
300 }
301 renderTemplate() {
302 switch (this.view.id) {
303 case 'play':
304 return html `
305 <div class="play"></div>
306 `;
307 case 'login':
308 return html `
309 <div class="login-page">
310 <div class="login-page__container">
311 <kwc-auth
312 .view='${this.view.id}'
313 .locale='${this.locale}'
314 @changeView=${this.handleChangeView}
315 @login=${this.handleLogin}
316 ></kwc-auth>
317 </div>
318 </div>
319 `;
320 default:
321 return html `
322 ${this.headerTemplate()}
323 <div class="page-content page-content--${this.view.id}">
324 <kwc-auth
325 .view='${this.view.id}'
326 .locale='${this.locale}'
327 .allowExit=${this.allowExit}
328 @changeView=${this.handleChangeView}
329 @submit-username=${this.handleSubmitUsername}
330 @submit-password=${this.handleSubmitPassword}
331 @login=${this.handleLogin}
332 @register=${this.handleRegister}
333 @update-username=${this.handleUpdateUsername}
334 @update-email=${this.handleUpdateEmail}
335 @forgot-password=${this.handleForgotPassword}
336 @forgot-username=${this.handleForgotUsername}
337 @forgot-email=${this.handleForgotEmail}
338 @finished-flow=${this.handleFinishedFlow}
339 @exit=${this.handleExit}
340 ></kwc-auth>
341 </div>
342 `;
343 }
344 }
345 render() {
346 return this.renderTemplate();
347 }
348 validateForm(form) {
349 return form && form.username && form.password && form.email;
350 }
351 getActions() {
352 if (!this.actions) {
353 throw new Error('Could not configure auth: actions id not defined');
354 }
355 return this.actions;
356 }
357 setLoading(state) {
358 const el = this.authElement;
359 if (!el) {
360 return;
361 }
362 el.loading = state;
363 }
364 displayError(message, getter) {
365 const auth = this.authElement;
366 if (!auth) {
367 return;
368 }
369 const el = getter(auth);
370 if (!el) {
371 return;
372 }
373 el.error = message || _('SOMETHING_WENT_WRONG', 'Something went wrong, please try again later');
374 }
375 wrapTask(task) {
376 this.setLoading(true);
377 return task()
378 .then((v) => {
379 this.setLoading(false);
380 return v;
381 })
382 .catch((e) => {
383 this.setLoading(false);
384 throw e;
385 });
386 }
387 handleSubmitUsername(e) {
388 return this.wrapTask(() => {
389 return this.getActions().checkUsernameAvailability(e.detail)
390 .then(() => this.changeTemplate('password'))
391 .catch((e) => this.displayError(e.message, (el) => el.username));
392 });
393 }
394 handleSubmitPassword() {
395 return this.wrapTask(() => {
396 return new Promise((resolve) => setTimeout(resolve, 500))
397 .then(() => this.changeTemplate('email'));
398 });
399 }
400 handleLogin(e) {
401 // Reset error initially
402 this.displayError(' ', (el) => el.login);
403 return this.wrapTask(() => {
404 return this.getActions().login(e.detail)
405 .then((user) => {
406 if (user.attributes && user.attributes.username && user.attributes.username === 'invalid') {
407 this.changeTemplate('update-username');
408 }
409 else if (user.attributes && user.attributes.email && (user.attributes.email === 'invalid' || user.attributes.email === 'removed')) {
410 this.changeTemplate('update-email');
411 }
412 else {
413 this.changeTemplate('play');
414 }
415 })
416 .catch((e) => {
417 this.displayError(e.message, (el) => el.login);
418 });
419 });
420 }
421 handleRegister(e) {
422 return this.wrapTask(() => {
423 return this.getActions().register(e.detail.form)
424 .then(() => this.changeTemplate('success'))
425 .catch((e) => {
426 // TODO: Handle error codes here
427 this.displayError(e.message, (el) => el.forgotPassword);
428 });
429 });
430 }
431 handleUpdateUsername(e) {
432 return this.wrapTask(() => {
433 return this.getActions().updateUsername(e.detail)
434 .then(() => this.changeTemplate('update-email'))
435 .catch((e) => this.displayError(e.message, (el) => el.username));
436 });
437 }
438 handleUpdateEmail(e) {
439 return this.wrapTask(() => {
440 return this.getActions().updateEmail(e.detail)
441 .then(() => this.changeTemplate('play'))
442 .catch((e) => this.displayError(e.message, (el) => el.email));
443 });
444 }
445 handleForgotPassword(e) {
446 return this.wrapTask(() => {
447 return this.getActions().forgotPassword(e.detail)
448 .then(() => this.changeTemplate('login'))
449 .catch((e) => this.displayError(e.message, (el) => el.forgotPassword));
450 });
451 }
452 handleForgotUsername(e) {
453 return this.wrapTask(() => {
454 return this.getActions().forgotUsername(e.detail)
455 .then(() => this.changeTemplate('login'))
456 .catch((e) => this.displayError(e.message, (el) => el.forgotUsername));
457 });
458 }
459 handleForgotEmail(e) {
460 this.getActions().forgotEmail(e.detail)
461 .then(() => this.changeTemplate('play'));
462 }
463 handleFinishedFlow() {
464 this.getActions().finish()
465 .then(() => this.changeTemplate('play'));
466 }
467 handleResendEmail() {
468 this.getActions().resendEmail('userId')
469 .then(() => this.changeTemplate('play'));
470 }
471 handleExit() {
472 this.getActions().exit();
473 }
474};
475__decorate([
476 property({ type: Object })
477], AuthView.prototype, "view", void 0);
478__decorate([
479 property({ type: String })
480], AuthView.prototype, "headerText", void 0);
481__decorate([
482 property({ type: Boolean })
483], AuthView.prototype, "allowExit", void 0);
484__decorate([
485 query('kwc-auth')
486], AuthView.prototype, "authElement", void 0);
487AuthView = __decorate([
488 customElement('kwc-auth-example')
489], AuthView);
490export { AuthView };
491export default AuthView;
492//# sourceMappingURL=kwc-auth-example.js.map
\No newline at end of file