Release 2025-05-25-irZj
This commit is contained in:
@@ -478,28 +478,43 @@ if (!service) return Astro.rewrite('/404')
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex shrink-0 gap-1.5">
|
||||
<form method="POST" action={actions.admin.event.toggle} class="contents">
|
||||
<input type="hidden" name="eventId" value={event.id} />
|
||||
<Tooltip text={event.visible ? 'Hide Event' : 'Show Event'}>
|
||||
<Tooltip text={event.visible ? 'Hide' : 'Show'}>
|
||||
<form method="POST" action={actions.admin.event.toggle} class="contents">
|
||||
<input type="hidden" name="eventId" value={event.id} />
|
||||
<Button
|
||||
type="submit"
|
||||
variant="faded"
|
||||
size="sm"
|
||||
icon={event.visible ? 'ri:eye-off-line' : 'ri:eye-line'}
|
||||
iconOnly
|
||||
label={event.visible ? 'Hide' : 'Show'}
|
||||
/>
|
||||
</Tooltip>
|
||||
</form>
|
||||
<Button
|
||||
type="button"
|
||||
variant="faded"
|
||||
size="sm"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-event-${event.id}')?.classList.toggle('hidden')`}
|
||||
/>
|
||||
<form method="POST" action={actions.admin.event.delete} class="contents">
|
||||
<input type="hidden" name="eventId" value={event.id} />
|
||||
<Button type="submit" size="sm" variant="faded" icon="ri:delete-bin-line" />
|
||||
</form>
|
||||
</form>
|
||||
</Tooltip>
|
||||
<Tooltip text="Edit">
|
||||
<Button
|
||||
type="button"
|
||||
variant="faded"
|
||||
size="sm"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-event-${event.id}')?.classList.toggle('hidden')`}
|
||||
iconOnly
|
||||
label="Edit"
|
||||
/>
|
||||
</Tooltip>
|
||||
<Tooltip text="Delete">
|
||||
<form method="POST" action={actions.admin.event.delete} class="contents">
|
||||
<input type="hidden" name="eventId" value={event.id} />
|
||||
<Button
|
||||
type="submit"
|
||||
size="sm"
|
||||
variant="faded"
|
||||
icon="ri:delete-bin-line"
|
||||
iconOnly
|
||||
label="Delete"
|
||||
/>
|
||||
</form>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
{/* Edit Event Form - Hidden by default */}
|
||||
@@ -673,17 +688,30 @@ if (!service) return Astro.rewrite('/404')
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex shrink-0 gap-1.5">
|
||||
<Button
|
||||
type="button"
|
||||
size="sm"
|
||||
variant="faded"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-verification-step-${step.id}')?.classList.toggle('hidden')`}
|
||||
/>
|
||||
<form method="POST" action={actions.admin.verificationStep.delete} class="inline">
|
||||
<input type="hidden" name="id" value={step.id} />
|
||||
<Button type="submit" size="sm" variant="faded" icon="ri:delete-bin-line" />
|
||||
</form>
|
||||
<Tooltip text="Edit">
|
||||
<Button
|
||||
type="button"
|
||||
size="sm"
|
||||
variant="faded"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-verification-step-${step.id}')?.classList.toggle('hidden')`}
|
||||
iconOnly
|
||||
label="Edit"
|
||||
/>
|
||||
</Tooltip>
|
||||
<Tooltip text="Delete">
|
||||
<form method="POST" action={actions.admin.verificationStep.delete} class="inline">
|
||||
<input type="hidden" name="id" value={step.id} />
|
||||
<Button
|
||||
type="submit"
|
||||
size="sm"
|
||||
variant="faded"
|
||||
icon="ri:delete-bin-line"
|
||||
iconOnly
|
||||
label="Delete"
|
||||
/>
|
||||
</form>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -844,21 +872,34 @@ if (!service) return Astro.rewrite('/404')
|
||||
<p class="text-day-400 text-sm text-pretty">{method.value}</p>
|
||||
</div>
|
||||
<div class="flex shrink-0 gap-1.5">
|
||||
<Button
|
||||
type="button"
|
||||
variant="faded"
|
||||
size="sm"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-contact-method-${method.id}')?.classList.toggle('hidden')`}
|
||||
/>
|
||||
<form
|
||||
method="POST"
|
||||
action={actions.admin.service.deleteContactMethod}
|
||||
class="contents"
|
||||
>
|
||||
<input type="hidden" name="id" value={method.id} />
|
||||
<Button type="submit" size="sm" variant="faded" icon="ri:delete-bin-line" />
|
||||
</form>
|
||||
<Tooltip text="Edit">
|
||||
<Button
|
||||
type="button"
|
||||
variant="faded"
|
||||
size="sm"
|
||||
icon="ri:pencil-line"
|
||||
onclick={`document.getElementById('edit-contact-method-${method.id}')?.classList.toggle('hidden')`}
|
||||
iconOnly
|
||||
label="Edit"
|
||||
/>
|
||||
</Tooltip>
|
||||
<Tooltip text="Delete">
|
||||
<form
|
||||
method="POST"
|
||||
action={actions.admin.service.deleteContactMethod}
|
||||
class="contents"
|
||||
>
|
||||
<input type="hidden" name="id" value={method.id} />
|
||||
<Button
|
||||
type="submit"
|
||||
size="sm"
|
||||
variant="faded"
|
||||
icon="ri:delete-bin-line"
|
||||
iconOnly
|
||||
label="Delete"
|
||||
/>
|
||||
</form>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ import MyPicture from '../../../components/MyPicture.astro'
|
||||
import SortArrowIcon from '../../../components/SortArrowIcon.astro'
|
||||
import Tooltip from '../../../components/Tooltip.astro'
|
||||
import { getKycLevelInfo } from '../../../constants/kycLevels'
|
||||
import { getVerificationStatusInfo } from '../../../constants/verificationStatus'
|
||||
import { serviceVisibilities } from '../../../constants/serviceVisibility'
|
||||
import { getVerificationStatusInfo, verificationStatuses } from '../../../constants/verificationStatus'
|
||||
import BaseLayout from '../../../layouts/BaseLayout.astro'
|
||||
import { cn } from '../../../lib/cn'
|
||||
import { zodParseQueryParamsStoringErrors } from '../../../lib/parseUrlFilters'
|
||||
@@ -209,11 +210,11 @@ const truncate = (text: string, length: number) => {
|
||||
id="visibility"
|
||||
class="mt-1 w-full rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-200 focus:border-blue-500 focus:ring-blue-500 focus:outline-none"
|
||||
>
|
||||
<option value="">All Visibilities</option>
|
||||
<option value="">All</option>
|
||||
{
|
||||
Object.values(ServiceVisibility).map((status) => (
|
||||
<option value={status} selected={filters.visibility === status}>
|
||||
{status}
|
||||
serviceVisibilities.map((visibility) => (
|
||||
<option value={visibility.value} selected={filters.visibility === visibility.value}>
|
||||
{visibility.label}
|
||||
</option>
|
||||
))
|
||||
}
|
||||
@@ -227,11 +228,11 @@ const truncate = (text: string, length: number) => {
|
||||
id="verificationStatus"
|
||||
class="mt-1 w-full rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-200 focus:border-blue-500 focus:ring-blue-500 focus:outline-none"
|
||||
>
|
||||
<option value="">All Statuses</option>
|
||||
<option value="">All</option>
|
||||
{
|
||||
Object.values(VerificationStatus).map((status) => (
|
||||
<option value={status} selected={filters.verificationStatus === status}>
|
||||
{status}
|
||||
verificationStatuses.map((status) => (
|
||||
<option value={status.value} selected={filters.verificationStatus === status.value}>
|
||||
{status.label}
|
||||
</option>
|
||||
))
|
||||
}
|
||||
|
||||
@@ -222,7 +222,9 @@ const where = {
|
||||
verificationStatus: {
|
||||
in: includeScams ? uniq([...filters.verification, 'VERIFICATION_FAILED'] as const) : filters.verification,
|
||||
},
|
||||
serviceVisibility: ServiceVisibility.PUBLIC,
|
||||
serviceVisibility: {
|
||||
in: [ServiceVisibility.PUBLIC, ServiceVisibility.ARCHIVED],
|
||||
},
|
||||
overallScore: { gte: filters['min-score'] },
|
||||
acceptedCurrencies: filters.currencies.length
|
||||
? filters['currency-mode'] === 'and'
|
||||
@@ -372,6 +374,7 @@ const [categories, [services, totalServices], countCommunityOnly, attributes] =
|
||||
imageUrl: true,
|
||||
verificationStatus: true,
|
||||
acceptedCurrencies: true,
|
||||
serviceVisibility: true,
|
||||
attributes: {
|
||||
select: {
|
||||
attribute: {
|
||||
|
||||
@@ -30,7 +30,7 @@ import { formatContactMethod } from '../../constants/contactMethods'
|
||||
import { currencies, getCurrencyInfo } from '../../constants/currencies'
|
||||
import { getEventTypeInfo } from '../../constants/eventTypes'
|
||||
import { getKycLevelInfo, kycLevels } from '../../constants/kycLevels'
|
||||
import { serviceVisibilitiesById } from '../../constants/serviceVisibility'
|
||||
import { getServiceVisibilityInfo } from '../../constants/serviceVisibility'
|
||||
import { getTosHighlightRatingInfo } from '../../constants/tosHighlightRating'
|
||||
import { getUserSentimentInfo } from '../../constants/userSentiment'
|
||||
import { getVerificationStatusInfo, verificationStatusesByValue } from '../../constants/verificationStatus'
|
||||
@@ -240,7 +240,11 @@ const watchingDetails = makeWatchingDetails(dbNotificationPreferences, service?.
|
||||
|
||||
if (!service) return Astro.rewrite('/404')
|
||||
|
||||
if (service.serviceVisibility !== 'PUBLIC' && service.serviceVisibility !== 'UNLISTED') {
|
||||
if (
|
||||
service.serviceVisibility !== 'PUBLIC' &&
|
||||
service.serviceVisibility !== 'UNLISTED' &&
|
||||
service.serviceVisibility !== 'ARCHIVED'
|
||||
) {
|
||||
return Astro.rewrite('/404')
|
||||
}
|
||||
|
||||
@@ -356,6 +360,8 @@ const ogImageTemplateData = {
|
||||
score: service.overallScore,
|
||||
imageUrl: service.imageUrl,
|
||||
} satisfies OgImageAllTemplatesWithProps
|
||||
|
||||
const serviceVisibilityInfo = getServiceVisibilityInfo(service.serviceVisibility)
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
@@ -457,16 +463,17 @@ const ogImageTemplateData = {
|
||||
]}
|
||||
>
|
||||
{
|
||||
service.serviceVisibility === 'UNLISTED' && (
|
||||
<div class={cn('mb-4 rounded-md bg-yellow-900/50 p-2 text-sm text-yellow-400')}>
|
||||
(serviceVisibilityInfo.value === 'UNLISTED' || serviceVisibilityInfo.value === 'ARCHIVED') && (
|
||||
<div class={cn('mb-4 rounded-md bg-yellow-900/50 px-3 py-2 text-sm text-yellow-400')}>
|
||||
<Icon
|
||||
name={serviceVisibilitiesById.UNLISTED.icon}
|
||||
class={cn('me-1.5 inline-block size-4 align-[-0.15em]', serviceVisibilitiesById.UNLISTED.iconClass)}
|
||||
name={serviceVisibilityInfo.icon}
|
||||
class="me-1.5 inline-block size-4 align-[-0.15em] text-yellow-500"
|
||||
/>
|
||||
Unlisted service, only accessible via direct link and won't appear in searches.
|
||||
{serviceVisibilityInfo.longDescription}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
<VerificationWarningBanner service={service} />
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
@@ -1245,7 +1252,8 @@ const ogImageTemplateData = {
|
||||
<div class="flex flex-col gap-2">
|
||||
{
|
||||
service.verificationStatus !== 'VERIFICATION_SUCCESS' &&
|
||||
service.verificationStatus !== 'VERIFICATION_FAILED' && (
|
||||
service.verificationStatus !== 'VERIFICATION_FAILED' &&
|
||||
service.serviceVisibility !== 'ARCHIVED' && (
|
||||
<form
|
||||
method="POST"
|
||||
action={actions.service.requestVerification}
|
||||
|
||||
Reference in New Issue
Block a user