diff --git a/apps/frontend/src/pages/admin/user_email.vue b/apps/frontend/src/pages/admin/user_email.vue
new file mode 100644
index 000000000..40b5e1886
--- /dev/null
+++ b/apps/frontend/src/pages/admin/user_email.vue
@@ -0,0 +1,61 @@
+
+
diff --git a/apps/frontend/src/pages/collection/[id].vue b/apps/frontend/src/pages/collection/[id].vue
index d40a4d47d..6db09cb9c 100644
--- a/apps/frontend/src/pages/collection/[id].vue
+++ b/apps/frontend/src/pages/collection/[id].vue
@@ -1,7 +1,7 @@
-
import {
+ BoxIcon,
CalendarIcon,
EditIcon,
- XIcon,
- SaveIcon,
- UploadIcon,
- TrashIcon,
- LinkIcon,
- LockIcon,
GridIcon,
ImageIcon,
- ListIcon,
- UpdatedIcon,
LibraryIcon,
- BoxIcon,
+ LinkIcon,
+ ListIcon,
+ LockIcon,
+ SaveIcon,
+ TrashIcon,
+ UpdatedIcon,
+ UploadIcon,
+ XIcon,
} from "@modrinth/assets";
import {
- PopoutMenu,
- FileInput,
- DropdownSelect,
Avatar,
Button,
commonMessages,
+ ConfirmModal,
+ DropdownSelect,
+ FileInput,
+ PopoutMenu,
} from "@modrinth/ui";
+import { isAdmin } from "@modrinth/utils";
import WorldIcon from "assets/images/utils/world.svg";
import UpToDate from "assets/images/illustrations/up_to_date.svg";
import { addNotification } from "~/composables/notifs.js";
-import ModalConfirm from "~/components/ui/ModalConfirm.vue";
import NavRow from "~/components/ui/NavRow.vue";
import ProjectCard from "~/components/ui/ProjectCard.vue";
import AdPlaceholder from "~/components/ui/AdPlaceholder.vue";
@@ -596,7 +597,7 @@ useSeoMeta({
const canEdit = computed(
() =>
auth.value.user &&
- auth.value.user.id === collection.value.user &&
+ (auth.value.user.id === collection.value.user || isAdmin(auth.value.user)) &&
collection.value.id !== "following",
);
@@ -650,7 +651,7 @@ async function saveChanges() {
method: "PATCH",
body: {
name: name.value,
- description: summary.value,
+ description: summary.value || null,
status: visibility.value,
new_projects: newProjectIds,
},
@@ -685,7 +686,11 @@ async function deleteCollection() {
method: "DELETE",
apiVersion: 3,
});
- await navigateTo("/dashboard/collections");
+ if (auth.value.user.id === collection.value.user) {
+ await navigateTo("/dashboard/collections");
+ } else {
+ await navigateTo(`/user/${collection.value.user}/collections`);
+ }
} catch (err) {
addNotification({
group: "main",
diff --git a/apps/frontend/src/pages/dashboard/collections.vue b/apps/frontend/src/pages/dashboard/collections.vue
index a231062b9..11c86c38e 100644
--- a/apps/frontend/src/pages/dashboard/collections.vue
+++ b/apps/frontend/src/pages/dashboard/collections.vue
@@ -49,7 +49,9 @@
diff --git a/apps/frontend/src/pages/moderation/review.vue b/apps/frontend/src/pages/moderation/review.vue
index 0b94fbe62..7d2372cff 100644
--- a/apps/frontend/src/pages/moderation/review.vue
+++ b/apps/frontend/src/pages/moderation/review.vue
@@ -101,7 +101,7 @@
+
+
diff --git a/apps/frontend/src/pages/news/changelog/index.vue b/apps/frontend/src/pages/news/changelog/index.vue
new file mode 100644
index 000000000..c89bfc5a4
--- /dev/null
+++ b/apps/frontend/src/pages/news/changelog/index.vue
@@ -0,0 +1,65 @@
+
+
+
diff --git a/apps/frontend/src/pages/report.vue b/apps/frontend/src/pages/report.vue
index 8c54c9d3d..7ce690a24 100644
--- a/apps/frontend/src/pages/report.vue
+++ b/apps/frontend/src/pages/report.vue
@@ -1,99 +1,270 @@