unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
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}