From 4578114cfe436f4cf115a00c96a1586ab32c65b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20Jurmanovi=C4=87?= Date: Thu, 3 Jun 2021 19:18:15 +0200 Subject: [PATCH] implemented wallet create modal --- src/components/app-menu/AppMenuElement.ts | 2 +- src/pages/home-page/HomePageElement.ts | 4 +- src/pages/index.ts | 1 + .../wallet-create/WalletCreateElement.ts | 94 +++++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/pages/wallet-create/WalletCreateElement.ts diff --git a/src/components/app-menu/AppMenuElement.ts b/src/components/app-menu/AppMenuElement.ts index 8af181f..40d6ef9 100644 --- a/src/components/app-menu/AppMenuElement.ts +++ b/src/components/app-menu/AppMenuElement.ts @@ -88,7 +88,7 @@ class AppMenuElement extends BaseComponentElement { const renderWallets = (wallets: Array) => { if (isAuth && totalWallets > 0) { return html`${wallets.map((wallet) => - regularMenu(`wallet/${wallet.id}`, wallet.name) + regularMenu(`/wallet/${wallet.id}`, wallet.name) )}`; } return html``; diff --git a/src/pages/home-page/HomePageElement.ts b/src/pages/home-page/HomePageElement.ts index df9448e..1ec1ef0 100644 --- a/src/pages/home-page/HomePageElement.ts +++ b/src/pages/home-page/HomePageElement.ts @@ -38,13 +38,13 @@ class HomePageElement extends BasePageElement { if (_modal) { this.appMain.closeModal(); } else { - this.appMain.createModal("login-page"); + this.appMain.createModal("wallet-create"); } }; render = (): TemplateResult => { return html` - + `; }; } diff --git a/src/pages/index.ts b/src/pages/index.ts index bf0f0cf..1f69361 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -5,3 +5,4 @@ export * from "./login-page/LoginPageElement"; export * from "./not-found/NotFoundElement"; export * from "./history-page/HistoryPageElement"; export * from "./wallet-list/WalletListElement"; +export * from "./wallet-create/WalletCreateElement"; diff --git a/src/pages/wallet-create/WalletCreateElement.ts b/src/pages/wallet-create/WalletCreateElement.ts new file mode 100644 index 0000000..0ee1775 --- /dev/null +++ b/src/pages/wallet-create/WalletCreateElement.ts @@ -0,0 +1,94 @@ +import { targets, controller } from "@github/catalyst"; +import { html, TemplateResult } from "@github/jtml"; +import { AuthService, WalletService } from "services/"; +import { InputFieldElement } from "components/"; +import { RouterService } from "core/services"; +import { BasePageElement } from "common/"; + +@controller +class WalletCreateElement extends BasePageElement { + @targets inputs: Array; + private walletService: WalletService; + authService: AuthService; + errorMessage: string; + constructor() { + super(); + } + elementConnected = (): void => { + this.walletService = new WalletService(this.appMain?.appService); + this.authService = new AuthService(this.appMain.appService); + this.update(); + }; + + get nameInput(): InputFieldElement { + for (const i in this.inputs) { + if (this.inputs[i]?.name == "name") { + return this.inputs[i]; + } + } + } + + get values(): Object { + const formObject: any = {}; + this.inputs.forEach((input: InputFieldElement) => { + const inputType = input.inp; + formObject[input.name] = (inputType as HTMLInputElement).value; + }); + return formObject; + } + + onSubmit = async (): Promise => { + try { + if (!this.validate()) { + return; + } + const response = await this.walletService.post(this.values); + + if (response?.id) { + this.routerService.goTo("/wallet/:walletId", { + walletId: response.id, + }); + const { token } = this.authStore; + this.authStore.token = token; + } + } catch (err) { + this.errorMessage = "Unable to create wallet!"; + this.update(); + } + }; + + validate(): boolean { + let _return = true; + this.inputs.forEach((input: InputFieldElement) => { + const valid: boolean = input.validate(); + if (!valid) _return = false; + }); + return _return; + } + + render = (): TemplateResult => { + return html` +
Create wallet
+
+ + ${this.errorMessage + ? html`
${this.errorMessage}
` + : html``} + +
+ `; + }; +} + +export type { WalletCreateElement };