From 57f21be1f6a4028d8f40d8c49e959f1ee8036df2 Mon Sep 17 00:00:00 2001 From: duncte123 Date: Mon, 29 Jan 2024 17:36:53 +0100 Subject: [PATCH] Finish register ui --- src/app/auth/sign-up/sign-up.component.html | 42 ++++++++++++++---- src/app/auth/sign-up/sign-up.component.ts | 21 ++++----- .../connection-settings.component.html | 0 .../connection-settings.component.scss | 0 .../connection-settings.component.ts | 13 +++--- .../element-connections.component.html | 23 ++++++++++ .../element-connections.component.scss | 4 ++ .../element-connections.component.ts | 43 +++++++++++++++++++ src/app/elements/elements.module.ts | 5 +++ src/app/user/settings/settings.component.html | 30 +++---------- src/app/user/user.module.ts | 2 - src/assets/i18n | 2 +- src/model/user.ts | 2 +- src/utils/helpers.ts | 12 +++++- 14 files changed, 142 insertions(+), 57 deletions(-) rename src/app/{user/settings => elements/element-connections}/connection-settings/connection-settings.component.html (100%) rename src/app/{user/settings => elements/element-connections}/connection-settings/connection-settings.component.scss (100%) rename src/app/{user/settings => elements/element-connections}/connection-settings/connection-settings.component.ts (84%) create mode 100644 src/app/elements/element-connections/element-connections.component.html create mode 100644 src/app/elements/element-connections/element-connections.component.scss create mode 100644 src/app/elements/element-connections/element-connections.component.ts diff --git a/src/app/auth/sign-up/sign-up.component.html b/src/app/auth/sign-up/sign-up.component.html index 2116e01d..b3c52658 100644 --- a/src/app/auth/sign-up/sign-up.component.html +++ b/src/app/auth/sign-up/sign-up.component.html @@ -25,13 +25,15 @@

{{'user.settings.new.description' | translate}}

-

{{'user.settings.displayName.help' | translate}}

{{'user.settings.displayName.error.max' | translate}}

{{'user.settings.displayName.error.min' | translate}}

+

{{'user.settings.displayName.error.required' | translate}}

+

{{'user.settings.displayName.help' | translate}}

@@ -103,19 +105,24 @@

{{'user.settings.new.description' | translate}}

+
- - - - + - - + +
-
-
+ + +
+

{{'user.settings.password.error.required' | translate}}

+
@@ -136,5 +148,17 @@

{{'user.settings.new.description' | translate}}

+ + +
+
+ +
+
diff --git a/src/app/auth/sign-up/sign-up.component.ts b/src/app/auth/sign-up/sign-up.component.ts index 096bf084..7c8b8ea9 100644 --- a/src/app/auth/sign-up/sign-up.component.ts +++ b/src/app/auth/sign-up/sign-up.component.ts @@ -1,34 +1,31 @@ -import { Component, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { SignupDto } from '../../../model/dto/signup-dto'; -import { faEye, faEyeSlash, faLock, faUser, faEnvelope } from '@fortawesome/free-solid-svg-icons'; -import { faDiscord, faTwitch } from '@fortawesome/free-brands-svg-icons'; +import { faEnvelope, faEye, faEyeSlash, faLock, faUser } from '@fortawesome/free-solid-svg-icons'; @Component({ selector: 'app-sign-up', templateUrl: './sign-up.component.html', styleUrls: ['./sign-up.component.scss'] }) -export class SignUpComponent implements OnInit { +export class SignUpComponent { iconUser = faUser; iconEmail = faEnvelope; iconPadlock = faLock; iconEye = faEye; iconEyeSlash = faEyeSlash; - iconDiscord = faDiscord; - iconTwitch = faTwitch; loading = false; passwordHidden = true; data: SignupDto = { - connections: [], - country: null, displayName: '', + username: '', email: '', - languagesSpoken: [], password: '', + country: null, pronouns: [], - username: '', + languagesSpoken: [], + connections: [], }; constructor( @@ -41,11 +38,9 @@ export class SignUpComponent implements OnInit { }); } - ngOnInit(): void { - } - submit() { this.loading = true; + this.data.connections = this.data.connections.filter(it => it.platform && it.username); } get title(): string { diff --git a/src/app/user/settings/connection-settings/connection-settings.component.html b/src/app/elements/element-connections/connection-settings/connection-settings.component.html similarity index 100% rename from src/app/user/settings/connection-settings/connection-settings.component.html rename to src/app/elements/element-connections/connection-settings/connection-settings.component.html diff --git a/src/app/user/settings/connection-settings/connection-settings.component.scss b/src/app/elements/element-connections/connection-settings/connection-settings.component.scss similarity index 100% rename from src/app/user/settings/connection-settings/connection-settings.component.scss rename to src/app/elements/element-connections/connection-settings/connection-settings.component.scss diff --git a/src/app/user/settings/connection-settings/connection-settings.component.ts b/src/app/elements/element-connections/connection-settings/connection-settings.component.ts similarity index 84% rename from src/app/user/settings/connection-settings/connection-settings.component.ts rename to src/app/elements/element-connections/connection-settings/connection-settings.component.ts index 71203cb6..8b0475ec 100644 --- a/src/app/user/settings/connection-settings/connection-settings.component.ts +++ b/src/app/elements/element-connections/connection-settings/connection-settings.component.ts @@ -1,4 +1,4 @@ -import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { SocialAccount } from '../../../../model/social-account'; import { SocialPlatform } from '../../../../model/social-platform'; import { faTrash } from '@fortawesome/free-solid-svg-icons'; @@ -7,11 +7,11 @@ import { parseMastodonUrl } from '../../../../utils/helpers'; @Component({ selector: 'app-connection-settings', templateUrl: './connection-settings.component.html', - styleUrls: ['./connection-settings.component.scss'] + styleUrls: ['./connection-settings.component.scss'], }) export class ConnectionSettingsComponent implements OnInit { @Input() public connection: SocialAccount; - @Input() public discordId: number; + @Input() public discordId: string; @Input() public twitchId: string; @Output() public deleteSelf = new EventEmitter(); @@ -19,7 +19,8 @@ export class ConnectionSettingsComponent implements OnInit { public faTrash = faTrash; public platforms = SocialPlatform; - constructor() { } + constructor() { + } ngOnInit() { // @@ -30,7 +31,7 @@ export class ConnectionSettingsComponent implements OnInit { return Boolean( (type === 'DISCORD' && this.discordId) || - (type === 'TWITCH' && this.twitchId) + (type === 'TWITCH' && this.twitchId), ); } @@ -50,7 +51,7 @@ export class ConnectionSettingsComponent implements OnInit { for (const key of Object.keys(SocialPlatform)) { cloned[key] = { disabled: false, - url: cloned[key] + url: cloned[key], }; if (key === 'DISCORD' && this.discordId) { diff --git a/src/app/elements/element-connections/element-connections.component.html b/src/app/elements/element-connections/element-connections.component.html new file mode 100644 index 00000000..ec0b7460 --- /dev/null +++ b/src/app/elements/element-connections/element-connections.component.html @@ -0,0 +1,23 @@ +
+
+

+ {{ 'user.settings.connections.title' | translate }}
+ {{ 'user.settings.connections.subtitle' | translate }} +

+
+
+

{{ 'user.settings.connections.visibility' | translate }}

+
+ +
+ +
+
diff --git a/src/app/elements/element-connections/element-connections.component.scss b/src/app/elements/element-connections/element-connections.component.scss new file mode 100644 index 00000000..fb470d95 --- /dev/null +++ b/src/app/elements/element-connections/element-connections.component.scss @@ -0,0 +1,4 @@ +:host { + box-sizing: border-box; + display: block; +} diff --git a/src/app/elements/element-connections/element-connections.component.ts b/src/app/elements/element-connections/element-connections.component.ts new file mode 100644 index 00000000..153d1b40 --- /dev/null +++ b/src/app/elements/element-connections/element-connections.component.ts @@ -0,0 +1,43 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { SocialAccount } from '../../../model/social-account'; +import { faPlus } from '@fortawesome/free-solid-svg-icons'; + +@Component({ + selector: 'app-element-connections', + templateUrl: './element-connections.component.html', + styleUrls: ['./element-connections.component.scss'] +}) +export class ElementConnectionsComponent implements OnInit { + faPlus = faPlus; + + @Input() discordId = ''; + @Input() twitchId = ''; + + @Input() connections: SocialAccount[] = []; + @Output() connectionsChange = new EventEmitter(); + + constructor() { } + + ngOnInit(): void { + } + + addNewConnection(): void { + this.connections.push({ + platform: '', + username: '', + }); + this.connectionsChange.emit(this.connections); + } + + deleteConnection(connection: SocialAccount): void { + const conns = this.connections; + + const index = conns.indexOf(connection); + + if (index > -1) { + conns.splice(index, 1); + + this.connectionsChange.emit(this.connections); + } + } +} diff --git a/src/app/elements/elements.module.ts b/src/app/elements/elements.module.ts index b37981f4..0678f761 100644 --- a/src/app/elements/elements.module.ts +++ b/src/app/elements/elements.module.ts @@ -27,6 +27,8 @@ import { ElementPronounsComponent } from './element-pronouns/element-pronouns.co import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ElementLanguagesComponent } from './element-languages/element-languages.component'; import { ElementCountryComponent } from './element-country/element-country.component'; +import { ElementConnectionsComponent } from './element-connections/element-connections.component'; +import { ConnectionSettingsComponent } from './element-connections/connection-settings/connection-settings.component'; @NgModule({ declarations: [ @@ -51,6 +53,8 @@ import { ElementCountryComponent } from './element-country/element-country.compo ElementPronounsComponent, ElementLanguagesComponent, ElementCountryComponent, + ElementConnectionsComponent, + ConnectionSettingsComponent, ], exports: [ ElementTableComponent, @@ -74,6 +78,7 @@ import { ElementCountryComponent } from './element-country/element-country.compo ElementPronounsComponent, ElementLanguagesComponent, ElementCountryComponent, + ElementConnectionsComponent, ], imports: [ CommonModule, diff --git a/src/app/user/settings/settings.component.html b/src/app/user/settings/settings.component.html index 344fa0c6..9e8a985f 100644 --- a/src/app/user/settings/settings.component.html +++ b/src/app/user/settings/settings.component.html @@ -158,29 +158,13 @@

{{'user.settings.general' | translate}}

-
-
-

- {{ 'user.settings.connections.title' | translate }}
- {{ 'user.settings.connections.subtitle' | translate }} -

-
-
-

{{ 'user.settings.connections.visibility' | translate }}

-
- -
- -
-
+ + +

{{'user.settings.accountSync.title' | translate}}

{{'user.settings.accountSync.description' | translate}}

diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index f73e8089..4557fa96 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -11,7 +11,6 @@ import { ProfileComponent } from './profile/profile.component'; import { UserProfileResolver } from '../resolvers/user-profile-resolver'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { ConnectionComponent } from './profile/connection/connection.component'; -import { ConnectionSettingsComponent } from './settings/connection-settings/connection-settings.component'; import { SyncButtonComponent } from './settings/sync-button/sync-button.component'; import { UserProfileComponent } from './profile/user-profile/user-profile.component'; import { ElementModule } from '../elements/elements.module'; @@ -49,7 +48,6 @@ const userRoutes: Routes = [ SettingsComponent, ProfileComponent, ConnectionComponent, - ConnectionSettingsComponent, SyncButtonComponent, UserProfileComponent, UserSocialComponent, diff --git a/src/assets/i18n b/src/assets/i18n index c1b08876..b7266730 160000 --- a/src/assets/i18n +++ b/src/assets/i18n @@ -1 +1 @@ -Subproject commit c1b0887648f1d10aed6bf55b3e92869737c0eb99 +Subproject commit b7266730fa59dd313c397baf05b59c12e6ef8e70 diff --git a/src/model/user.ts b/src/model/user.ts index a028cecb..8f9be5a2 100644 --- a/src/model/user.ts +++ b/src/model/user.ts @@ -16,7 +16,7 @@ export class User { roles: string[]; connections: SocialAccount[]; enabled: boolean; - discordId: number; + discordId: string; twitterId: string; twitchId: string; patreonId: string; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index db5d731f..cbaa2604 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,5 +1,13 @@ +const mastodonRegex = /@?([^@]+)(?:@(.*))?/; + export function parseMastodonUrl(input: string): string { - const [username, platform] = input.split('@'); + const match = mastodonRegex.exec(input); + + if (match == null) { + return ''; + } + + const [_, username, platform] = match; - return `https://${platform}/@${username}`; + return `https://${platform || 'mastodon.social'}/@${username}`; }