unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 83 lines 2.5 kB view raw
1import { Component, inject, input } from "@angular/core"; 2import { Overlay, OverlayModule } from "@angular/cdk/overlay"; 3import { MatButtonModule } from "@angular/material/button"; 4import { FontAwesomeModule } from "@fortawesome/angular-fontawesome"; 5import { PostsService } from "../../services/posts.service"; 6import { MessageService } from "../../services/message.service"; 7import { MatTooltipModule } from "@angular/material/tooltip"; 8import { Emoji } from "../../interfaces/emoji"; 9import { Dialog } from "@angular/cdk/dialog"; 10import { EmojiPickerComponent } from "../emoji-picker/emoji-picker.component"; 11import { ParticleService } from "src/app/services/particle.service"; 12import { EnvironmentService } from "src/app/services/environment.service"; 13 14@Component({ 15 selector: "app-emoji-react", 16 imports: [ 17 MatButtonModule, 18 FontAwesomeModule, 19 OverlayModule, 20 MatTooltipModule, 21 ], 22 templateUrl: "./emoji-react.component.html", 23 styleUrl: "./emoji-react.component.scss", 24}) 25export class EmojiReactComponent { 26 private overlay = inject(Overlay); 27 private postsService = inject(PostsService); 28 private messages = inject(MessageService); 29 private particle = inject(ParticleService); 30 31 scrollStrategy; 32 dialog = inject(Dialog); 33 readonly postId = input<string>(""); 34 isOpen = false; 35 loading = false; 36 37 constructor() { 38 this.scrollStrategy = this.overlay.scrollStrategies.reposition(); 39 } 40 openDialog(): void { 41 const dialogRef = this.dialog.open<Emoji>(EmojiPickerComponent, { 42 autoFocus: false, 43 }); 44 45 dialogRef.closed.subscribe((result) => { 46 if (result) { 47 this.reactToPost(result); 48 } 49 }); 50 } 51 52 async reactToPost(emoji: Emoji) { 53 this.loading = true; 54 const response = await this.postsService.emojiReactPost( 55 this.postId(), 56 emoji.name 57 ); 58 if (response) { 59 this.messages.add({ 60 severity: "success", 61 summary: `Reacted with ${emoji.name} succesfully`, 62 }); 63 64 // Play emoji 65 const emojiIsImage = emoji.url !== ""; 66 if (emojiIsImage) { 67 const fullUrl = `${EnvironmentService.environment.cacheDomain}/api/v2/cache/emoji/${emoji.uuid}`; 68 this.particle.imageReact(fullUrl); 69 } else { 70 this.particle.emojiReact(emoji.name); 71 } 72 73 this.isOpen = false; 74 this.loading = false; 75 } else { 76 this.messages.add({ 77 severity: "error", 78 summary: `Something went wrong!`, 79 }); 80 this.loading = false; 81 } 82 } 83}