diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2025-03-31 17:33:04 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2025-03-31 17:33:04 -0400 | 
| commit | 97c9e1e0bb73c7b08c830c47548ac1c4b5bebd0b (patch) | |
| tree | 76d437e3349be177d0105b9a7a6bae9b7bd1b33a | |
| parent | f7a0ce90b0ead17ad4002108d7e868899954c69d (diff) | |
| download | JellySolutions-97c9e1e0bb73c7b08c830c47548ac1c4b5bebd0b.tar.gz JellySolutions-97c9e1e0bb73c7b08c830c47548ac1c4b5bebd0b.tar.bz2 JellySolutions-97c9e1e0bb73c7b08c830c47548ac1c4b5bebd0b.zip  | |
TOASTS
Diffstat (limited to '')
| -rw-r--r-- | ufund-ui/src/app/app.component.css | 28 | ||||
| -rw-r--r-- | ufund-ui/src/app/app.component.html | 8 | ||||
| -rw-r--r-- | ufund-ui/src/app/app.component.ts | 14 | ||||
| -rw-r--r-- | ufund-ui/src/app/app.module.ts | 2 | ||||
| -rw-r--r-- | ufund-ui/src/app/components/toast/toast.component.css | 57 | ||||
| -rw-r--r-- | ufund-ui/src/app/components/toast/toast.component.html | 7 | ||||
| -rw-r--r-- | ufund-ui/src/app/components/toast/toast.component.ts | 37 | ||||
| -rw-r--r-- | ufund-ui/src/app/services/toasts.service.ts | 12 | 
8 files changed, 118 insertions, 47 deletions
diff --git a/ufund-ui/src/app/app.component.css b/ufund-ui/src/app/app.component.css index 5204919..0bcd658 100644 --- a/ufund-ui/src/app/app.component.css +++ b/ufund-ui/src/app/app.component.css @@ -64,31 +64,3 @@  } - -.toast { -    transform: translateY(-90px); -    transition: transform .5s; -    align-self: center; -    z-index: 3; -    position: absolute; -    top: 15px; -    display: flex; -    flex-direction: row; -    padding: 3px 15px; -    background-color: #3a3a3a; -    border-radius: 100000px; -    gap: 10px; -    align-items: center; - -    button { -        aspect-ratio: 1/1; -        margin-right: -11px; -        padding: 8px; -        display: flex; -        align-items: center; -    } -} - -.toast.active { -    transform: translateY(0); -} diff --git a/ufund-ui/src/app/app.component.html b/ufund-ui/src/app/app.component.html index 89075e1..959eada 100644 --- a/ufund-ui/src/app/app.component.html +++ b/ufund-ui/src/app/app.component.html @@ -1,11 +1,3 @@ -<div class="toast" #toastdiv> -<!--    <span{{(toast | async).message}}</span>--> -<!--    <a *ngIf="toast.action" (click)="toast.action.onAction()">{{toast.action.label}}</a>--> -<!--    <button (click)="toastdiv.classList.remove('active')">--> -<!--        <span class="icon">close</span>--> -<!--    </button>--> -</div> -  <div id="header">      <div>          <a routerLink="/"> diff --git a/ufund-ui/src/app/app.component.ts b/ufund-ui/src/app/app.component.ts index df9114e..2f98334 100644 --- a/ufund-ui/src/app/app.component.ts +++ b/ufund-ui/src/app/app.component.ts @@ -1,15 +1,11 @@ -import {Component, OnInit, Inject} from '@angular/core'; +import {Component, OnInit, Inject, ViewContainerRef} from '@angular/core';  import {BehaviorSubject} from 'rxjs';  import { DOCUMENT } from '@angular/common';  import {AuthService} from './services/auth.service'; -import {ToastType} from './services/toasts.service'; +import {ToastsService} from './services/toasts.service';  import {User} from './models/User';  import {ActivatedRoute, Router} from '@angular/router'; -interface ToastProps { -    type: ToastType, message: string, action?: {label: string, onAction: () => void} -} -  @Component({    selector: 'app-root',    templateUrl: './app.component.html', @@ -19,13 +15,13 @@ interface ToastProps {  export class AppComponent implements OnInit {      // title = 'ufund-ui';      currentUser?: BehaviorSubject<User | null>; -    toast = new BehaviorSubject<ToastProps>({type: ToastType.INFO, message: "testToast"}) -      constructor(          private authService: AuthService,          private router: Router,          private route: ActivatedRoute, +        protected toastService: ToastsService, +        private viewContainerRef: ViewContainerRef,          @Inject(DOCUMENT) private document: Document      ) {} @@ -34,6 +30,7 @@ export class AppComponent implements OnInit {      }      ngOnInit() { +        this.toastService.setRootViewContainerRef(this.viewContainerRef)          this.currentUser = this.authService.getCurrentUserSubject()          let data = localStorage.getItem("credential");          if (data) { @@ -51,5 +48,4 @@ export class AppComponent implements OnInit {          localStorage.removeItem("credential")          location.reload()      } -  } diff --git a/ufund-ui/src/app/app.module.ts b/ufund-ui/src/app/app.module.ts index ea7e6ad..c91256e 100644 --- a/ufund-ui/src/app/app.module.ts +++ b/ufund-ui/src/app/app.module.ts @@ -16,6 +16,7 @@ import {CommonModule} from '@angular/common';  import {LoginComponent} from './components/login/login.component';  import { MiniNeedListComponent } from './components/mini-need-list/mini-need-list.component';  import { SignupComponent } from './components/signup/signup.component'; +import { ToastComponent } from './components/toast/toast.component';  @NgModule({      declarations: [ @@ -29,6 +30,7 @@ import { SignupComponent } from './components/signup/signup.component';          LoginComponent,          SignupComponent,          MiniNeedListComponent, +        ToastComponent,      ],      imports: [          BrowserModule, diff --git a/ufund-ui/src/app/components/toast/toast.component.css b/ufund-ui/src/app/components/toast/toast.component.css new file mode 100644 index 0000000..4cd81fe --- /dev/null +++ b/ufund-ui/src/app/components/toast/toast.component.css @@ -0,0 +1,57 @@ +:host { +    display: flex; +    align-items: center; +    justify-content: center; +} + +@keyframes slideDown { +    from {transform: translateY(-90px);} +    to {transform: translateY(0);} +} + +.toast { +    /*transform: translateY(-90px);*/ +    animation: slideDown .5s ease-in-out; +    transition: transform .5s; +    align-self: center; +    z-index: 3; +    position: absolute; +    top: 15px; +    display: flex; +    flex-direction: row; +    padding: 3px 15px; +    background-color: #3a3a3a; +    border-radius: 100000px; +    gap: 10px; +    align-items: center; + +    button { +        aspect-ratio: 1/1; +        margin-right: -11px; +        padding: 8px; +        display: flex; +        align-items: center; +        background-color: transparent; +    } + +    button:hover { +        background-color: rgba(255, 255, 255, 0.1); +    } +} + +.toast.hide { +    transform: translateY(-90px); +} + +.toast.warning { +    background-color: #ffc500; +    color: black; + +    button { +        color: black; +    } +} + +.toast.error { +    background-color: #d81a1a; +} diff --git a/ufund-ui/src/app/components/toast/toast.component.html b/ufund-ui/src/app/components/toast/toast.component.html new file mode 100644 index 0000000..dccf869 --- /dev/null +++ b/ufund-ui/src/app/components/toast/toast.component.html @@ -0,0 +1,7 @@ +<div class="toast" [ngClass]="ToastType[type].toLowerCase()" #toastDiv> +    <span>{{this.message}}</span> +    <a *ngIf="this.action" (click)="this.action.onAction()">{{this.action.label}}</a> +    <button (click)="hide()"> +        <span class="icon">close</span> +    </button> +</div> diff --git a/ufund-ui/src/app/components/toast/toast.component.ts b/ufund-ui/src/app/components/toast/toast.component.ts new file mode 100644 index 0000000..47fd7ff --- /dev/null +++ b/ufund-ui/src/app/components/toast/toast.component.ts @@ -0,0 +1,37 @@ +import {Component, ElementRef, Input, OnInit, ViewChild} from '@angular/core'; +import {ToastType} from '../../services/toasts.service'; + +@Component({ +  selector: 'app-toast', +  standalone: false, +  templateUrl: './toast.component.html', +  styleUrl: './toast.component.css' +}) +export class ToastComponent implements OnInit{ +    @Input() type!: ToastType +    @Input() message!: string +    @Input() action?: {label: string, onAction: () => void} + +    @ViewChild("toastDiv") toastDiv!: ElementRef<HTMLDivElement> + +    ngOnInit() { +        setTimeout(() => { +            this.hide(); +        }, 3000) +    } + +    hide() { +        console.log(this.toastDiv, typeof this.toastDiv) +        this.toastDiv.nativeElement.classList.add('hide') +    } + +    getColor() { +        switch (this.type) { +            case ToastType.ERROR: return "red"; +            case ToastType.INFO: return ""; +            case ToastType.WARNING: return "yellow"; +        } +    } + +    protected readonly ToastType = ToastType; +} diff --git a/ufund-ui/src/app/services/toasts.service.ts b/ufund-ui/src/app/services/toasts.service.ts index 0c35e45..4fd024e 100644 --- a/ufund-ui/src/app/services/toasts.service.ts +++ b/ufund-ui/src/app/services/toasts.service.ts @@ -1,4 +1,5 @@ -import {Injectable} from '@angular/core'; +import {Injectable, ViewContainerRef} from '@angular/core'; +import {ToastComponent} from '../components/toast/toast.component';  export enum ToastType {      INFO, @@ -11,9 +12,16 @@ export enum ToastType {  })  export class ToastsService { -    constructor() {} +    private vcr?: ViewContainerRef      sendToast(type: ToastType, message: string, action?: {label: string, onAction: () => void}) { +        let compRef = this.vcr?.createComponent(ToastComponent)! +        compRef.setInput("message", message) +        compRef.setInput("type", type) +        compRef.setInput("action", action) +    } +    setRootViewContainerRef(vcr: ViewContainerRef) { +        this.vcr = vcr      }  }  | 
