feat: server access post release QA (#6316)

* fix: clicking users in table in app takes you to blank page instead of website

* fix: wrong loader icon on server panel

* fix: surface var misalignment

* fix: password managers still detecting username field as something to autofill

* feat: show users on backupitem components

* feat: seperators for filter sections

* fix: lint + change remove -> revoke

* fix: copy

* feat: align copy
This commit is contained in:
Calum H.
2026-06-05 15:54:27 +01:00
committed by GitHub
parent c653228fe7
commit dfe12d4ecb
23 changed files with 287 additions and 81 deletions
@@ -39,6 +39,7 @@
:roles="roleOptions"
:can-manage-users="canManageUsers"
:permission-denied-message="permissionDeniedMessage"
:user-profile-link="props.userProfileLink"
@update-role="updateMemberRole"
@resend-invite="resendInvite"
@cancel-invite="requestCancelInvite"
@@ -127,6 +128,7 @@ import {
type ServerAccessMember,
type ServerAccessRole,
type ServerAccessRoleOption,
type ServerAccessUserProfileLink,
} from '#ui/components/servers/access'
import { useVIntl } from '#ui/composables/i18n'
import { useServerPermissions } from '#ui/composables/server-permissions'
@@ -144,6 +146,7 @@ type RoleFilter = ServerAccessRole | 'all'
const props = withDefaults(
defineProps<{
showAuditLogInstances?: boolean
userProfileLink?: (username: string) => ServerAccessUserProfileLink
}>(),
{
showAuditLogInstances: false,
@@ -260,6 +260,7 @@ export function useAccessAuditLog({
key: group.key,
label: formatMessage(group.label),
icon: group.icon,
dividerBefore: true,
},
...group.actions.map((action) => ({
value: action,
@@ -103,19 +103,19 @@ export const accessMessages = defineMessages({
},
inviteCancelledTitle: {
id: 'servers.access-page.notification.invite-cancelled.title',
defaultMessage: 'Invite cancelled',
defaultMessage: 'Invite revoked',
},
inviteCancelledText: {
id: 'servers.access-page.notification.invite-cancelled.text',
defaultMessage: 'Cancelled the invite for {target}.',
defaultMessage: 'Revoked the invite for {target}.',
},
memberRemovedTitle: {
id: 'servers.access-page.notification.member-removed.title',
defaultMessage: 'Access removed',
defaultMessage: 'Access revoked',
},
memberRemovedText: {
id: 'servers.access-page.notification.member-removed.text',
defaultMessage: 'Removed {target} from this server.',
defaultMessage: 'Revoked access for {target}.',
},
loadFailedTitle: {
id: 'servers.access-page.notification.load-failed.title',
@@ -178,7 +178,7 @@ export const actionLogActionMessages = defineMessages({
},
user_removed: {
id: 'servers.access-page.activity-log-filter.action.user-removed',
defaultMessage: 'Removed user',
defaultMessage: 'Revoked access',
},
addon_added: {
id: 'servers.access-page.activity-log-filter.action.addon-added',
@@ -156,6 +156,7 @@
<BackupItem
class="my-1.5 min-w-0 flex-1"
:backup="backup"
:creator="backupCreator(backup)"
:selected="selectedIds.has(backup.id)"
:highlighted="highlightedBackupId === backup.id"
:restore-disabled="backupRestoreDisabled"
@@ -461,6 +462,15 @@ type BackupGroup = {
backups: Archon.BackupsQueue.v1.BackupQueueBackup[]
}
function backupCreator(
backup: Archon.BackupsQueue.v1.BackupQueueBackup,
): Archon.BackupsQueue.v1.UserInfo | null {
return (
backup.history.find((operation) => operation.operation_type === 'create' && operation.user_info)
?.user_info ?? null
)
}
const groupedBackups = computed((): BackupGroup[] => {
if (!filteredBackups.value.length) return []