feat: Multiple Features, Accessibility, Security, and UX Improvements #59

Merged
naomi merged 27 commits from feat/polish into main 2026-02-20 01:51:25 -08:00
2 changed files with 14 additions and 11 deletions
Showing only changes of commit 391ea6d9f6 - Show all commits
+5 -6
View File
@@ -7,10 +7,9 @@
import type {
Activity,
ActivityFeedResponse,
ActivityType,
ActivityUser,
} from "@library/shared-types";
import { ACHIEVEMENTS } from "@library/shared-types";
import { ACHIEVEMENTS, ActivityType } from "@library/shared-types";
import { prisma } from "../lib/prisma";
export class ActivityService {
@@ -89,7 +88,7 @@ export class ActivityService {
return suggestions.map((suggestion) => ({
id: `suggestion-${suggestion.id}`,
type: "SUGGESTION" as const,
type: ActivityType.suggestion,
user: suggestion.user as ActivityUser,
entityType: suggestion.entityType,
suggestionTitle: suggestion.title,
@@ -139,7 +138,7 @@ export class ActivityService {
);
return {
id: `like-${like.id}`,
type: "LIKE" as const,
type: ActivityType.like,
user: like.user as ActivityUser,
entityType: like.entityType,
entityId: like.entityId,
@@ -229,7 +228,7 @@ export class ActivityService {
return {
id: `comment-${comment.id}`,
type: "COMMENT" as const,
type: ActivityType.comment,
user: comment.user as ActivityUser,
entityType,
entityId,
@@ -282,7 +281,7 @@ export class ActivityService {
const achievement = ACHIEVEMENTS[ua.achievementKey];
return {
id: `achievement-${ua.id}`,
type: "ACHIEVEMENT" as const,
type: ActivityType.achievement,
user: ua.user as ActivityUser,
achievementKey: ua.achievementKey,
achievementName: achievement.title,
@@ -7,7 +7,8 @@
import { Component, OnInit, inject, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterLink } from '@angular/router';
import type { Activity, ActivityType } from '@library/shared-types';
import type { Activity } from '@library/shared-types';
import { ActivityType } from '@library/shared-types';
import { ActivityService } from '../../services/activity.service';
@Component({
@@ -64,7 +65,7 @@ import { ActivityService } from '../../services/activity.service';
<div class="activity-content">
@switch (activity.type) {
@case ('SUGGESTION') {
@case (ActivityType.suggestion) {
<div class="activity-suggestion">
<span class="activity-icon">πŸ’‘</span>
<span class="activity-text">
@@ -76,7 +77,7 @@ import { ActivityService } from '../../services/activity.service';
</span>
</div>
}
@case ('LIKE') {
@case (ActivityType.like) {
<div class="activity-like">
<span class="activity-icon">❀️</span>
<span class="activity-text">
@@ -87,7 +88,7 @@ import { ActivityService } from '../../services/activity.service';
</span>
</div>
}
@case ('COMMENT') {
@case (ActivityType.comment) {
<div class="activity-comment">
<span class="activity-icon">πŸ’¬</span>
<span class="activity-text">
@@ -99,7 +100,7 @@ import { ActivityService } from '../../services/activity.service';
<p class="comment-preview">"{{ activity.commentPreview }}"</p>
</div>
}
@case ('ACHIEVEMENT') {
@case (ActivityType.achievement) {
<div class="activity-achievement">
<span class="activity-icon">{{ activity.achievementIcon }}</span>
<span class="activity-text">
@@ -360,6 +361,9 @@ import { ActivityService } from '../../services/activity.service';
export class ActivityFeedComponent implements OnInit {
private activityService = inject(ActivityService);
// Make ActivityType accessible in template
ActivityType = ActivityType;
activities = signal<Activity[]>([]);
loading = signal(true);
loadingMore = signal(false);