2025-08-14 21:48:38 +01:00
import { defineMessage , useVIntl } from '@vintl/vintl'
import type { Nag , NagContext } from '../../types/nags'
2025-08-13 09:45:13 +01:00
export const coreNags : Nag [ ] = [
2025-08-14 21:48:38 +01:00
{
id : 'moderator-feedback' ,
title : defineMessage ( {
id : 'nags.moderator-feedback.title' ,
2025-11-06 13:37:37 +03:00
defaultMessage : 'Review feedback' ,
2025-08-14 21:48:38 +01:00
} ) ,
description : defineMessage ( {
id : 'nags.moderator-feedback.description' ,
defaultMessage :
'Review and address all concerns from the moderation team before resubmitting.' ,
} ) ,
status : 'warning' ,
shouldShow : ( context : NagContext ) = >
context . tags . rejectedStatuses . includes ( context . project . status ) ,
link : {
path : 'moderation' ,
title : defineMessage ( {
id : 'nags.moderation.title' ,
defaultMessage : 'Visit moderation thread' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-moderation' ,
} ,
} ,
{
id : 'upload-version' ,
title : defineMessage ( {
id : 'nags.upload-version.title' ,
defaultMessage : 'Upload a version' ,
} ) ,
description : defineMessage ( {
id : 'nags.upload-version.description' ,
defaultMessage : 'At least one version is required for a project to be submitted for review.' ,
} ) ,
status : 'required' ,
shouldShow : ( context : NagContext ) = > context . versions . length < 1 ,
link : {
2025-12-18 11:56:15 -08:00
path : 'settings/versions' ,
2025-08-14 21:48:38 +01:00
title : defineMessage ( {
id : 'nags.versions.title' ,
defaultMessage : 'Visit versions page' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-versions' ,
} ,
} ,
{
id : 'add-description' ,
title : defineMessage ( {
id : 'nags.add-description.title' ,
defaultMessage : 'Add a description' ,
} ) ,
description : defineMessage ( {
id : 'nags.add-description.description' ,
defaultMessage :
"A description that clearly describes the project's purpose and function is required." ,
} ) ,
status : 'required' ,
shouldShow : ( context : NagContext ) = > context . project . body === '' ,
link : {
path : 'settings/description' ,
title : defineMessage ( {
id : 'nags.settings.description.title' ,
defaultMessage : 'Visit description settings' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-settings-description' ,
} ,
} ,
{
id : 'add-icon' ,
title : defineMessage ( {
id : 'nags.add-icon.title' ,
defaultMessage : 'Add an icon' ,
} ) ,
description : defineMessage ( {
id : 'nags.add-icon.description' ,
defaultMessage :
'Adding a unique, relevant, and engaging icon makes your project identifiable and helps it stand out.' ,
} ) ,
status : 'suggestion' ,
shouldShow : ( context : NagContext ) = > ! context . project . icon_url ,
link : {
path : 'settings' ,
title : defineMessage ( {
id : 'nags.settings.title' ,
defaultMessage : 'Visit general settings' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-settings' ,
} ,
} ,
{
id : 'upload-gallery-image' ,
title : defineMessage ( {
id : 'nags.upload-gallery-image.title' ,
defaultMessage : 'Upload a gallery image' ,
} ) ,
description : ( context : NagContext ) = > {
const { formatMessage } = useVIntl ( )
2025-08-13 09:45:13 +01:00
2025-08-14 21:48:38 +01:00
return formatMessage (
defineMessage ( {
id : 'nags.upload-gallery-image.description' ,
defaultMessage :
2025-11-06 13:37:37 +03:00
'At least one gallery image is required to showcase the content of your {type, select, resourcepack {resource pack, except for audio or localization packs. If this describes your pack, please select the appropriate tag} shader {shader} other {project}}.' ,
2025-08-14 21:48:38 +01:00
} ) ,
{
2025-11-06 13:37:37 +03:00
type : context . project . project_type ,
2025-08-14 21:48:38 +01:00
} ,
)
} ,
status : 'required' ,
shouldShow : ( context : NagContext ) = > {
return (
( context . project . project_type === 'resourcepack' ||
context . project . project_type === 'shader' ) &&
( ! context . project . gallery || context . project . gallery ? . length === 0 ) &&
! (
context . project . categories . includes ( 'audio' ) ||
context . project . additional_categories . includes ( 'audio' ) ||
context . project . categories . includes ( 'locale' ) ||
context . project . additional_categories . includes ( 'locale' )
)
)
} ,
link : {
2025-12-18 11:56:15 -08:00
path : 'settings/gallery' ,
2025-08-14 21:48:38 +01:00
title : defineMessage ( {
id : 'nags.gallery.title' ,
defaultMessage : 'Visit gallery page' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-gallery' ,
} ,
} ,
{
id : 'feature-gallery-image' ,
title : defineMessage ( {
id : 'nags.feature-gallery-image.title' ,
defaultMessage : 'Feature a gallery image' ,
} ) ,
description : defineMessage ( {
id : 'nags.feature-gallery-image.description' ,
defaultMessage :
'The featured gallery image is often how your project makes its first impression.' ,
} ) ,
status : 'suggestion' ,
shouldShow : ( context : NagContext ) = > {
const featuredGalleryImage = context . project . gallery ? . find ( ( img ) = > img . featured )
return context . project ? . gallery ? . length === 0 || ! featuredGalleryImage
} ,
link : {
2025-12-18 11:56:15 -08:00
path : 'settings/gallery' ,
2025-08-14 21:48:38 +01:00
title : defineMessage ( {
id : 'nags.gallery.title' ,
defaultMessage : 'Visit gallery page' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-gallery' ,
} ,
} ,
{
id : 'select-tags' ,
title : defineMessage ( {
id : 'nags.select-tags.title' ,
defaultMessage : 'Select tags' ,
} ) ,
description : defineMessage ( {
id : 'nags.select-tags.description' ,
defaultMessage :
'Select the tags that correctly apply to your project to help the right users find it.' ,
} ) ,
status : 'suggestion' ,
shouldShow : ( context : NagContext ) = >
context . project . versions . length > 0 && context . project . categories . length < 1 ,
link : {
path : 'settings/tags' ,
title : defineMessage ( {
id : 'nags.settings.tags.title' ,
defaultMessage : 'Visit tag settings' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-settings-tags' ,
} ,
} ,
{
id : 'add-links' ,
title : defineMessage ( {
id : 'nags.add-links.title' ,
defaultMessage : 'Add external links' ,
} ) ,
description : defineMessage ( {
id : 'nags.add-links.description' ,
defaultMessage :
'Add any relevant links targeted outside of Modrinth, such as source code, an issue tracker, or a Discord invite.' ,
} ) ,
status : 'suggestion' ,
shouldShow : ( context : NagContext ) = >
! (
context . project . issues_url ||
context . project . source_url ||
context . project . wiki_url ||
context . project . discord_url ||
context . project . donation_urls . length > 0
) ,
link : {
path : 'settings/links' ,
title : defineMessage ( {
id : 'nags.settings.links.title' ,
defaultMessage : 'Visit links settings' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-settings-links' ,
} ,
} ,
{
id : 'select-license' ,
title : defineMessage ( {
id : 'nags.select-license.title' ,
defaultMessage : 'Select a license' ,
} ) ,
description : ( context : NagContext ) = > {
const { formatMessage } = useVIntl ( )
2025-08-13 09:45:13 +01:00
2025-08-14 21:48:38 +01:00
return formatMessage (
defineMessage ( {
id : 'nags.select-license.description' ,
2025-11-06 13:37:37 +03:00
defaultMessage :
'Select the license your {type, select, mod {mod} modpack {modpack} resourcepack {resource pack} shader {shader} plugin {plugin} datapack {data pack} other {project}} is distributed under.' ,
2025-08-14 21:48:38 +01:00
} ) ,
{
2025-11-06 13:37:37 +03:00
type : context . project . project_type ,
2025-08-14 21:48:38 +01:00
} ,
)
} ,
status : 'required' ,
shouldShow : ( context : NagContext ) = > context . project . license . id === 'LicenseRef-Unknown' ,
link : {
path : 'settings/license' ,
title : defineMessage ( {
id : 'nags.settings.license.title' ,
defaultMessage : 'Visit license settings' ,
} ) ,
shouldShow : ( context : NagContext ) = > context . currentRoute !== 'type-id-settings-license' ,
} ,
} ,
2025-08-13 09:45:13 +01:00
]