diff --git a/apps/frontend/src/components/ui/ProjectMemberHeader.vue b/apps/frontend/src/components/ui/ProjectMemberHeader.vue index 74077a008..59f08be91 100644 --- a/apps/frontend/src/components/ui/ProjectMemberHeader.vue +++ b/apps/frontend/src/components/ui/ProjectMemberHeader.vue @@ -8,14 +8,18 @@

You've been invited to join this project. Please accept or decline the invitation.

- - + + + + + +
Publishing checklist
- + + +
@@ -80,9 +83,11 @@ import { LightBulbIcon, TriangleAlertIcon, DropdownIcon, + SendIcon, } from "@modrinth/assets"; import { acceptTeamInvite, removeTeamMember } from "~/helpers/teams.js"; import { nags } from "@modrinth/moderation"; +import { ButtonStyled } from "@modrinth/ui"; import type { Nag, NagContext, NagStatus } from "@modrinth/moderation"; import type { Project, User, Version } from "@modrinth/utils"; import type { Component } from "vue"; @@ -138,8 +143,19 @@ const nagContext = computed(() => ({ versions: props.versions, currentMember: props.currentMember as User, currentRoute: props.routeName, + tags: props.tags, + submitProject: submitForReview, })); +const submitForReview = async () => { + if ( + !props.acknowledgedMessage || + nags.value.filter((x) => x.condition && x.status === "required").length === 0 + ) { + await props.setProcessing(); + } +}; + const applicableNags = computed(() => { return nags.filter((nag) => { return nag.shouldShow(nagContext.value); diff --git a/packages/moderation/data/nags/core.ts b/packages/moderation/data/nags/core.ts index ad6d467ff..4ae32da77 100644 --- a/packages/moderation/data/nags/core.ts +++ b/packages/moderation/data/nags/core.ts @@ -2,6 +2,20 @@ import type { Nag, NagContext } from '../../types/nags' import { formatProjectType } from '@modrinth/utils' export const coreNags: Nag[] = [ + { + id: 'moderator-feedback', + title: 'Review moderator feedback', + description: () => + 'Review any feedback from moderators regarding your project before resubmitting.', + status: 'suggestion', + shouldShow: (context: NagContext) => + context.tags.rejectedStatuses.includes(context.project.status), + link: { + path: 'moderation', + title: 'Visit moderation thread', + shouldShow: (context: NagContext) => context.currentRoute !== 'type-id-moderation', + }, + }, { id: 'upload-version', title: 'Upload a version', diff --git a/packages/moderation/data/nags/extended.ts b/packages/moderation/data/nags/extended.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/moderation/types/nags.ts b/packages/moderation/types/nags.ts index 0e8075c8c..f922fa253 100644 --- a/packages/moderation/types/nags.ts +++ b/packages/moderation/types/nags.ts @@ -32,6 +32,8 @@ export interface NagContext { * The current route in the application. */ currentRoute: string + tags: any + submitProject: (...any: any) => any } /**