* initial commit federation * more federation * more federation * more federation * completes follow, accept, undo * add trail create activity * process trail create activity * more trail create activity * adds missing endpoints * adds update and delete activity * adds comment activities * adds activities back * adds summit logs activities * deletes follow counts table * fixes migrations * fixes migrations * fixes migrations * fixes migrations * adds remote profiles * ctd * ctd * we are getting closer... * adds public summit logs * fixes federated trails in lists * adds remote lists * adds list activites * fixes lists * adds notifications * adds iri redirect * fixes comments and summitlogs * fixes follows and profiles * adds asynchronous send * fixes list search * adds encryption key * bug fixes * fixes activity signing * removes custon activity object types * adds html editor * fixes html editor * fixes display issues on mastodon * adds federated sharing * finishes announcements * fixes small summit log issues * adds trail likes * finalizes likes * fixes images for komoot * add disable federation option * adds private profiles * updates docs * adds federated comments * adds trail and comments actvitiypub routes * adds mentions to editor * adds mentions to trails, comments, summit logs * updates theme * updates theme * update docs * update docs * updates docs * fixes various frontend problems * fixes activitypub follows api * updates docs * updates docs --------- Co-authored-by: Christian Beutel <>
89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import { Comment } from "$lib/models/comment";
|
|
import type { Trail } from "$lib/models/trail";
|
|
import { APIError } from "$lib/util/api_util";
|
|
import { type ListResult } from "pocketbase";
|
|
import { get, writable, type Writable } from "svelte/store";
|
|
import { currentUser } from "./user_store";
|
|
import { isURL } from "$lib/util/file_util";
|
|
|
|
export const comments: Writable<Comment[]> = writable([])
|
|
|
|
export async function comments_index(trailId: string, handle?: string) {
|
|
let filter: string;
|
|
if (isURL(trailId)) {
|
|
filter = `trail="${trailId}"||trail.iri="${trailId}"||trail="${trailId.substring(trailId.length - 15)}"`
|
|
} else {
|
|
filter = `trail="${trailId}"`
|
|
}
|
|
let r = await fetch(`/api/v1/comment?` + new URLSearchParams({
|
|
filter,
|
|
expand: "author",
|
|
sort: "-created",
|
|
...(handle ? { handle } : {})
|
|
}), {
|
|
method: 'GET',
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
|
|
const fetchedComments: ListResult<Comment> = await r.json();
|
|
|
|
comments.set(fetchedComments.items);
|
|
|
|
return fetchedComments.items;
|
|
}
|
|
|
|
export async function comments_create(comment: Comment) {
|
|
const user = get(currentUser)
|
|
if (!user) {
|
|
throw Error("Unauthenticated")
|
|
}
|
|
|
|
comment.author = user.actor
|
|
|
|
let r = await fetch('/api/v1/comment?' + new URLSearchParams({
|
|
expand: "author",
|
|
}), {
|
|
method: 'PUT',
|
|
body: JSON.stringify(comment),
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
|
|
const model: Comment = await r.json();
|
|
|
|
return model;
|
|
}
|
|
|
|
export async function comments_update(comment: Comment) {
|
|
let r = await fetch('/api/v1/comment/' + comment.id, {
|
|
method: 'POST',
|
|
body: JSON.stringify(comment),
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
|
|
const model: Comment = await r.json();
|
|
|
|
return model;
|
|
}
|
|
|
|
export async function comments_delete(comment: Comment) {
|
|
const r = await fetch('/api/v1/comment/' + comment.id, {
|
|
method: 'DELETE',
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
} |