Deploy Ladill QR Plus / deploy (push) Successful in 27s
Add shared confirm-dialog component, Alpine ladillConfirm store, and swap browser confirms for consistent bottom-sheet modals across user, admin, and hosting flows. Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
4.1 KiB
PHP
72 lines
4.1 KiB
PHP
@extends('layouts.email')
|
|
@section('title', $domain['domain'].' — Ladill Email')
|
|
@section('content')
|
|
<div class="mx-auto max-w-3xl">
|
|
<div class="flex items-center gap-2 text-sm text-slate-400">
|
|
<a href="{{ route('email.domains.index') }}" class="hover:text-slate-600">Domains</a><span>/</span>
|
|
<span class="text-slate-600">{{ $domain['domain'] }}</span>
|
|
</div>
|
|
<div class="mt-2 flex items-center justify-between">
|
|
<h1 class="text-xl font-semibold tracking-tight text-slate-900">{{ $domain['domain'] }}</h1>
|
|
@if($domain['active'] ?? false)
|
|
<span class="rounded-full bg-emerald-50 px-2.5 py-1 text-[11px] font-medium text-emerald-700">Verified</span>
|
|
@else
|
|
<span class="rounded-full bg-amber-50 px-2.5 py-1 text-[11px] font-medium text-amber-700">Pending</span>
|
|
@endif
|
|
</div>
|
|
|
|
@unless($domain['active'] ?? false)
|
|
<div class="mt-6 rounded-2xl border border-slate-200 bg-white">
|
|
<div class="border-b border-slate-100 px-5 py-3.5"><h2 class="text-sm font-semibold text-slate-900">Publish these DNS records</h2></div>
|
|
@php $records = $domain['dns_records'] ?? []; @endphp
|
|
@if(empty($records))
|
|
<p class="px-5 py-6 text-sm text-slate-400">No DNS records returned. Try refreshing.</p>
|
|
@else
|
|
<table class="w-full text-sm">
|
|
<thead class="text-left text-[11px] uppercase tracking-wide text-slate-400">
|
|
<tr><th class="px-5 py-2 font-medium">Type</th><th class="px-2 py-2 font-medium">Name</th><th class="px-2 py-2 font-medium">Value</th></tr>
|
|
</thead>
|
|
<tbody class="divide-y divide-slate-50">
|
|
@foreach($records as $r)
|
|
<tr>
|
|
<td class="px-5 py-2.5 font-medium text-slate-700">{{ $r['type'] ?? '' }}</td>
|
|
<td class="px-2 py-2.5 font-mono text-xs text-slate-600">{{ $r['name'] ?? ($r['host'] ?? '@') }}</td>
|
|
<td class="px-2 py-2.5 max-w-xs truncate font-mono text-xs text-slate-600" title="{{ $r['value'] ?? '' }}">{{ $r['value'] ?? '' }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
@endif
|
|
</div>
|
|
<form method="POST" action="{{ route('email.domains.verify', $domain['id']) }}" class="mt-4">
|
|
@csrf
|
|
<button class="rounded-lg bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700">Verify domain</button>
|
|
<span class="ml-2 text-xs text-slate-400">DNS changes can take time to propagate.</span>
|
|
</form>
|
|
@else
|
|
<div class="mt-6 rounded-2xl border border-slate-200 bg-white p-5">
|
|
<p class="text-sm text-slate-600">This domain is verified. <a href="{{ route('email.mailboxes.create') }}" class="font-semibold text-indigo-600 hover:underline">Create a mailbox</a> on it.</p>
|
|
<dl class="mt-3 flex gap-4 text-xs text-slate-500">
|
|
<div>SPF <span class="{{ ($domain['spf'] ?? false) ? 'text-emerald-600' : 'text-rose-600' }}">{{ ($domain['spf'] ?? false) ? '✓' : '✗' }}</span></div>
|
|
<div>DKIM <span class="{{ ($domain['dkim'] ?? false) ? 'text-emerald-600' : 'text-rose-600' }}">{{ ($domain['dkim'] ?? false) ? '✓' : '✗' }}</span></div>
|
|
<div>DMARC <span class="{{ ($domain['dmarc'] ?? false) ? 'text-emerald-600' : 'text-rose-600' }}">{{ ($domain['dmarc'] ?? false) ? '✓' : '✗' }}</span></div>
|
|
</dl>
|
|
</div>
|
|
@endunless
|
|
|
|
<x-confirm-dialog
|
|
:name="'remove-domain-'.$domain['id']"
|
|
title="Remove domain?"
|
|
:message="'Remove '.$domain['domain'].'?'"
|
|
:action="route('email.domains.destroy', $domain['id'])"
|
|
method="DELETE"
|
|
confirm-label="Remove domain"
|
|
class="mt-4"
|
|
>
|
|
<x-slot:trigger>
|
|
<button type="button" class="text-xs font-medium text-rose-600 hover:underline">Remove domain</button>
|
|
</x-slot:trigger>
|
|
</x-confirm-dialog>
|
|
</div>
|
|
@endsection
|