mirror of
https://github.com/modrinth/code.git
synced 2026-08-25 00:55:25 +00:00
feat: allow bulk deleting attribution groups for moderators (#6839)
* feat: allow bulk deleting attribution groups for moderators * prepr
This commit is contained in:
@@ -18,7 +18,7 @@ import { renderString } from '@modrinth/utils'
|
||||
import { useMutation, useQueryClient } from '@tanstack/vue-query'
|
||||
import { computed, ref, useTemplateRef, watch } from 'vue'
|
||||
|
||||
import { ButtonStyled, Collapsible, OverflowMenu } from '#ui/components'
|
||||
import { ButtonStyled, Collapsible, ConfirmModal, OverflowMenu } from '#ui/components'
|
||||
import type { OverflowMenuOption } from '#ui/components/base'
|
||||
import { commonMessages } from '#ui/utils'
|
||||
|
||||
@@ -79,6 +79,7 @@ const addToGlobalModalRef =
|
||||
useTemplateRef<typeof AddToGlobalPermissionsDatabaseModal>('addToGlobalModalRef')
|
||||
const addToExistingModalRef =
|
||||
useTemplateRef<typeof AddToExistingExternalProjectModal>('addToExistingModalRef')
|
||||
const deleteGroupModalRef = useTemplateRef<InstanceType<typeof ConfirmModal>>('deleteGroupModalRef')
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const client = injectModrinthClient()
|
||||
@@ -138,7 +139,20 @@ const messages = defineMessages({
|
||||
},
|
||||
removeGroup: {
|
||||
id: 'external-files.permissions-card.remove-group',
|
||||
defaultMessage: 'Remove group',
|
||||
defaultMessage: 'Delete group',
|
||||
},
|
||||
removeGroupConfirmationTitle: {
|
||||
id: 'external-files.permissions-card.remove-group-confirmation.title',
|
||||
defaultMessage: 'Delete {title}?',
|
||||
},
|
||||
removeGroupConfirmationDescription: {
|
||||
id: 'external-files.permissions-card.remove-group-confirmation.description',
|
||||
defaultMessage:
|
||||
'This will permanently delete this attribution group and all files inside it. This action cannot be undone.',
|
||||
},
|
||||
removeGroupShiftHint: {
|
||||
id: 'external-files.permissions-card.remove-group-shift-hint',
|
||||
defaultMessage: 'Hold Shift while clicking to skip confirmation.',
|
||||
},
|
||||
moderationReasonLabel: {
|
||||
id: 'external-files.permissions-card.moderation-reason',
|
||||
@@ -254,7 +268,7 @@ const splitFileMutation = useMutation({
|
||||
})
|
||||
|
||||
const deleteGroupMutation = useMutation({
|
||||
mutationFn: () => client.labrinth.attribution_internal.deleteGroup(props.group.id),
|
||||
mutationFn: () => client.labrinth.attribution_internal.deleteGroups([props.group.id]),
|
||||
onSuccess: async () => {
|
||||
await queryClient.invalidateQueries({ queryKey: ['project-attribution', props.projectId] })
|
||||
emit('updated')
|
||||
@@ -265,7 +279,7 @@ const deleteGroupMutation = useMutation({
|
||||
title: formatMessage(
|
||||
defineMessage({
|
||||
id: 'external-files.permissions-card.remove-group-error.title',
|
||||
defaultMessage: 'Could not remove group',
|
||||
defaultMessage: 'Could not delete group',
|
||||
}),
|
||||
),
|
||||
text: error.message,
|
||||
@@ -305,10 +319,19 @@ function handleConfirmAddFiles(sha1s: string[]) {
|
||||
assignFilesMutation.mutate(sha1s)
|
||||
}
|
||||
|
||||
function handleDeleteGroup() {
|
||||
function deleteGroup() {
|
||||
deleteGroupMutation.mutate()
|
||||
}
|
||||
|
||||
function handleDeleteGroup(event: MouseEvent) {
|
||||
if (event.shiftKey) {
|
||||
deleteGroup()
|
||||
return
|
||||
}
|
||||
|
||||
deleteGroupModalRef.value?.show()
|
||||
}
|
||||
|
||||
async function handleAddFilesToGroup(event: MouseEvent) {
|
||||
try {
|
||||
const groups = await queryClient.ensureQueryData({
|
||||
@@ -825,6 +848,18 @@ const visibleQuickReplies = computed<OverflowMenuOption[]>(() => {
|
||||
</div>
|
||||
</div>
|
||||
</Collapsible>
|
||||
<ConfirmModal
|
||||
v-if="isModerator"
|
||||
ref="deleteGroupModalRef"
|
||||
:title="formatMessage(messages.removeGroupConfirmationTitle, { title })"
|
||||
:description="formatMessage(messages.removeGroupConfirmationDescription)"
|
||||
:proceed-label="formatMessage(messages.removeGroup)"
|
||||
@proceed="deleteGroup"
|
||||
>
|
||||
<p class="m-0 text-xs text-secondary">
|
||||
{{ formatMessage(messages.removeGroupShiftHint) }}
|
||||
</p>
|
||||
</ConfirmModal>
|
||||
<AddFilesToAttributionGroupModal
|
||||
ref="addFilesModalRef"
|
||||
:group-id="group.id"
|
||||
|
||||
@@ -1194,10 +1194,19 @@
|
||||
"defaultMessage": "You have obtained special permission to redistribute this work in your modpack."
|
||||
},
|
||||
"external-files.permissions-card.remove-group": {
|
||||
"defaultMessage": "Remove group"
|
||||
"defaultMessage": "Delete group"
|
||||
},
|
||||
"external-files.permissions-card.remove-group-confirmation.description": {
|
||||
"defaultMessage": "This will permanently delete this attribution group and all files inside it. This action cannot be undone."
|
||||
},
|
||||
"external-files.permissions-card.remove-group-confirmation.title": {
|
||||
"defaultMessage": "Delete {title}?"
|
||||
},
|
||||
"external-files.permissions-card.remove-group-error.title": {
|
||||
"defaultMessage": "Could not remove group"
|
||||
"defaultMessage": "Could not delete group"
|
||||
},
|
||||
"external-files.permissions-card.remove-group-shift-hint": {
|
||||
"defaultMessage": "Hold Shift while clicking to skip confirmation."
|
||||
},
|
||||
"external-files.permissions-card.split-file": {
|
||||
"defaultMessage": "Remove from group"
|
||||
|
||||
Reference in New Issue
Block a user