fix regexp, add more no-select, refactor, fix date formatting

This commit is contained in:
einhornimmond 2025-03-28 10:30:57 +01:00
parent 96bacae6ae
commit 494a3514a6
5 changed files with 95 additions and 131 deletions

View File

@ -7,7 +7,7 @@
<small class="ms-2" data-test="moderator-date">
{{ $d(new Date(message.createdAt), 'short') }}
</small>
<span class="ms-2 me-2" data-test="moderator-name">
<span class="ms-2 me-2 no-select" data-test="moderator-name">
{{ message.userFirstName }} {{ message.userLastName }}
</span>
<BAvatar square variant="warning">
@ -28,7 +28,7 @@
<BAvatar variant="info">
<variant-icon icon="person-fill" variant="white" />
</BAvatar>
<span class="ms-2 me-2" data-test="user-name">
<span class="ms-2 me-2 no-select" data-test="user-name">
{{ message.userFirstName }} {{ message.userLastName }}
</span>
<small class="ms-2" data-test="user-date">

View File

@ -93,15 +93,6 @@
</BButton>
</div>
</template>
<template #cell(firstName)="row">
<div class="no-select">{{ row.item.firstName }}</div>
</template>
<template #cell(lastName)="row">
<div class="no-select">{{ row.item.lastName }}</div>
</template>
<template #cell(contributionDate)="row">
<div class="no-select">{{ row.item.contributionDate }}</div>
</template>
<template #row-details="row">
<row-details
:row="row"
@ -250,7 +241,7 @@ export default {
if (selectedText) {
// remove hashtags
const cleanedText = selectedText.replace(/#[a-zA-Z0-9_-]*/g, '')
const cleanedText = selectedText.replace(/#([\p{L}\p{N}_-]+)/gu, '')
event.clipboardData.setData('text/plain', cleanedText)
event.preventDefault()
}
@ -263,8 +254,4 @@ export default {
background-color: #e1a908;
border-color: #e1a908;
}
.no-select {
user-select: none;
}
</style>

View File

@ -156,6 +156,7 @@ const props = defineProps({
const rolesValues = {
ADMIN: 'ADMIN',
MODERATOR: 'MODERATOR',
MODERATOR_AI: 'MODERATOR_AI',
USER: 'USER',
}
@ -166,6 +167,28 @@ const myItems = ref()
const creationUserData = ref({})
const rowDetails = ref()
const userRoleChangeConfirmationBody = computed(() => {
let roleLabel = ''
switch (userChangeForm.value.roleSelected) {
case rolesValues.ADMIN:
roleLabel = t('userRole.selectRoles.admin')
break
case rolesValues.MODERATOR:
roleLabel = t('userRole.selectRoles.moderator')
break
case rolesValues.MODERATOR_AI:
roleLabel = t('userRole.selectRoles.moderatorAi')
break
default:
roleLabel = t('userRole.selectRoles.user')
break
}
return t('overlay.changeUserRole.question', {
username: `${selectedRow.value.firstName} ${selectedRow.value.lastName}`,
newRole: roleLabel,
})
})
const showModal = async () => {
await confirm?.({
props: {
@ -175,15 +198,7 @@ const showModal = async () => {
title: t('overlay.changeUserRole.title'),
okTitle: t('overlay.changeUserRole.yes'),
okVariant: 'danger',
body: t('overlay.changeUserRole.question', {
username: `${selectedRow.value.firstName} ${selectedRow.value.lastName}`,
newRole:
userChangeForm.value.roleSelected === rolesValues.ADMIN
? t('userRole.selectRoles.admin')
: userChangeForm.value.roleSelected === rolesValues.MODERATOR
? t('userRole.selectRoles.moderator')
: t('userRole.selectRoles.user'),
}),
body: userRoleChangeConfirmationBody.value,
},
})
.then((ok) => {

View File

@ -119,7 +119,7 @@ const FILTER_TAB_MAP = [
]
const store = useStore()
const { t, d } = useI18n()
const { t } = useI18n()
const { toastError, toastSuccess } = useAppToast()
const tabIndex = ref(0)
@ -134,6 +134,33 @@ const query = ref('')
const noHashtag = ref(null)
const hideResubmissionModel = ref(true)
const formatDateOrDash = (value) => (value ? new Date(value).toLocaleDateString() : '—')
const baseFields = {
firstName: { key: 'firstName', label: t('firstname'), class: 'no-select' },
lastName: { key: 'lastName', label: t('lastname'), class: 'no-select' },
amount: { key: 'amount', label: t('creation'), formatter: (value) => value + ' GDD' },
memo: { key: 'memo', label: t('text'), class: 'text-break' },
contributionDate: {
key: 'contributionDate',
label: t('created'),
class: 'no-select',
formatter: formatDateOrDash,
},
createdAt: {
key: 'createdAt',
label: t('createdAt'),
class: 'no-select',
formatter: formatDateOrDash,
},
confirmedAt: {
key: 'confirmedAt',
label: t('contributions.confirms'),
class: 'no-select',
formatter: formatDateOrDash,
},
confirmedBy: { key: 'confirmedBy', label: t('moderator.moderator'), class: 'no-select' },
}
const fields = computed(
() =>
[
@ -141,103 +168,54 @@ const fields = computed(
[
{ key: 'bookmark', label: t('delete') },
{ key: 'deny', label: t('deny') },
{ key: 'firstName', label: t('firstname') },
{ key: 'lastName', label: t('lastname') },
{
key: 'amount',
label: t('creation'),
formatter: (value) => value + ' GDD',
},
{ key: 'memo', label: t('text'), class: 'text-break' },
{
key: 'contributionDate',
label: t('created'),
formatter: (value) => formatDateOrDash(value),
},
{ key: 'moderatorId', label: t('moderator.moderator') },
baseFields.firstName,
baseFields.lastName,
baseFields.amount,
baseFields.memo,
baseFields.contributionDate,
{ key: 'moderatorId', label: t('moderator.moderator'), class: 'no-select' },
{ key: 'editCreation', label: t('details') },
{ key: 'confirm', label: t('save') },
],
// confirmed contributions
[
{ key: 'firstName', label: t('firstname') },
{ key: 'lastName', label: t('lastname') },
{
key: 'amount',
label: t('creation'),
formatter: (value) => value + ' GDD',
},
{ key: 'memo', label: t('text'), class: 'text-break' },
{
key: 'contributionDate',
label: t('created'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'createdAt',
label: t('createdAt'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'confirmedAt',
label: t('contributions.confirms'),
formatter: (value) => formatDateOrDash(value),
},
{ key: 'confirmedBy', label: t('moderator.moderator') },
baseFields.firstName,
baseFields.lastName,
baseFields.memo,
baseFields.contributionDate,
baseFields.createdAt,
baseFields.confirmedAt,
baseFields.confirmedBy,
{ key: 'chatCreation', label: t('details') },
],
// denied contributions
[
{ key: 'firstName', label: t('firstname') },
{ key: 'lastName', label: t('lastname') },
{
key: 'amount',
label: t('creation'),
formatter: (value) => value + ' GDD',
},
{ key: 'memo', label: t('text'), class: 'text-break' },
{
key: 'contributionDate',
label: t('created'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'createdAt',
label: t('createdAt'),
formatter: (value) => formatDateOrDash(value),
},
baseFields.firstName,
baseFields.lastName,
baseFields.amount,
baseFields.memo,
baseFields.contributionDate,
baseFields.createdAt,
{
key: 'deniedAt',
label: t('contributions.denied'),
formatter: (value) => formatDateOrDash(value),
formatter: formatDateOrDash,
},
{ key: 'deniedBy', label: t('moderator.moderator') },
{ key: 'chatCreation', label: t('details') },
],
// deleted contributions
[
{ key: 'firstName', label: t('firstname') },
{ key: 'lastName', label: t('lastname') },
{
key: 'amount',
label: t('creation'),
formatter: (value) => value + ' GDD',
},
{ key: 'memo', label: t('text'), class: 'text-break' },
{
key: 'contributionDate',
label: t('created'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'createdAt',
label: t('createdAt'),
formatter: (value) => formatDateOrDash(value),
},
baseFields.firstName,
baseFields.lastName,
baseFields.amount,
baseFields.memo,
baseFields.contributionDate,
baseFields.createdAt,
{
key: 'deletedAt',
label: t('contributions.deleted'),
formatter: (value) => formatDateOrDash(value),
formatter: formatDateOrDash,
},
{ key: 'deletedBy', label: t('moderator.moderator') },
{ key: 'chatCreation', label: t('details') },
@ -245,30 +223,14 @@ const fields = computed(
// all contributions
[
{ key: 'status', label: t('status') },
{ key: 'firstName', label: t('firstname') },
{ key: 'lastName', label: t('lastname') },
{
key: 'amount',
label: t('creation'),
formatter: (value) => value + ' GDD',
},
{ key: 'memo', label: t('text'), class: 'text-break' },
{
key: 'contributionDate',
label: t('created'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'createdAt',
label: t('createdAt'),
formatter: (value) => formatDateOrDash(value),
},
{
key: 'confirmedAt',
label: t('contributions.confirms'),
formatter: (value) => formatDateOrDash(value),
},
{ key: 'confirmedBy', label: t('moderator.moderator') },
baseFields.firstName,
baseFields.lastName,
baseFields.amount,
baseFields.memo,
baseFields.contributionDate,
baseFields.createdAt,
baseFields.confirmedAt,
baseFields.confirmedBy,
{ key: 'chatCreation', label: t('details') },
],
][tabIndex.value],
@ -455,10 +417,6 @@ const updateStatus = (id) => {
target.status = 'IN_PROGRESS'
}
}
const formatDateOrDash = (value) => {
return value ? d(new Date(value), 'short') : '—'
}
</script>
<style>
@ -474,4 +432,8 @@ const formatDateOrDash = (value) => {
z-index: 1000000;
cursor: pointer;
}
.no-select {
user-select: none;
}
</style>

View File

@ -286,7 +286,7 @@
"logout": "Abmelden",
"overview": "Übersicht",
"send": "Senden",
"settings": "Einstellung",
"settings": "Einstellungen",
"circles": "Kreise",
"support": "Support",
"transactions": "Transaktionen",