74 أسطر
1.8 KiB
TypeScript
74 أسطر
1.8 KiB
TypeScript
import { resolveMediaUrl } from "@/lib/media-url";
|
|
import type { ApiComment, ApiPost, ApiUser } from "@/types/api";
|
|
|
|
function asUser(value: ApiUser | string | undefined | null) {
|
|
if (!value || typeof value === "string") {
|
|
return null;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
export function getPostAuthor(post: ApiPost) {
|
|
return asUser(post.author ?? post.authorId);
|
|
}
|
|
|
|
export function getCommentAuthor(comment: ApiComment) {
|
|
return asUser(comment.author ?? comment.authorId);
|
|
}
|
|
|
|
export function getUserLabel(user: ApiUser | null) {
|
|
if (!user) {
|
|
return "-";
|
|
}
|
|
|
|
return user.name ?? user.stageName ?? user.username ?? user.email ?? "-";
|
|
}
|
|
|
|
export function getPostPreviewMedia(post: ApiPost) {
|
|
const imageCount = post.imageUrls?.length ?? 0;
|
|
const imageUrl = resolveMediaUrl(post.imageUrls?.[0]);
|
|
const thumbnailUrl = resolveMediaUrl(post.thumbnailUrl);
|
|
const videoUrl = resolveMediaUrl(post.videoUrl);
|
|
const audioUrl = resolveMediaUrl(post.audioUrl);
|
|
|
|
if (imageCount > 0 && imageUrl) {
|
|
return {
|
|
kind: "image" as const,
|
|
url: imageUrl,
|
|
sourceUrl: "",
|
|
count: imageCount,
|
|
};
|
|
}
|
|
|
|
if (thumbnailUrl) {
|
|
return {
|
|
kind: post.postType === "audio" ? ("audio" as const) : ("video" as const),
|
|
url: thumbnailUrl,
|
|
sourceUrl: post.postType === "video" ? videoUrl : audioUrl,
|
|
count: 1,
|
|
};
|
|
}
|
|
|
|
if (post.postType === "video" && videoUrl) {
|
|
return {
|
|
kind: "video" as const,
|
|
url: "",
|
|
sourceUrl: videoUrl,
|
|
count: 1,
|
|
};
|
|
}
|
|
|
|
return {
|
|
kind:
|
|
post.postType === "audio"
|
|
? ("audio" as const)
|
|
: post.postType === "video"
|
|
? ("video" as const)
|
|
: ("text" as const),
|
|
url: "",
|
|
sourceUrl: post.postType === "video" ? videoUrl : post.postType === "audio" ? audioUrl : "",
|
|
count: 0,
|
|
};
|
|
}
|