Forms - v1.0.0-beta1
SubmissionDetail Component
The SubmissionDetail component displays a single submission's complete details.
Basic Usage
<livewire:forms::submission-detail :submission="$submission" />
Properties
| Property | Type | Default | Description |
|---|---|---|---|
submission |
FormSubmission | required | Submission to display |
Features
- Display all field values
- Show submission metadata
- Download uploaded files
- Delete submission
- Resend notifications
Component Structure
<div class="submission-detail">
{{-- Header --}}
<div class="header">
<h2>Submission {{ $submission->submission_number }}</h2>
<p>Submitted: {{ $submission->created_at->format('F j, Y g:i A') }}</p>
</div>
{{-- Metadata --}}
<div class="metadata">
@if ($submission->ip_address)
<p><strong>IP Address:</strong> {{ $submission->ip_address }}</p>
@endif
@if ($submission->user_agent)
<p><strong>User Agent:</strong> {{ $submission->user_agent }}</p>
@endif
</div>
{{-- Field Values --}}
<div class="field-values">
<h3>Submitted Data</h3>
<table>
@foreach ($submission->values as $value)
<tr>
<th>{{ $value->field_label }}</th>
<td>
@if (is_array($value->value))
{{ implode(', ', $value->value) }}
@else
{{ $value->value }}
@endif
</td>
</tr>
@endforeach
</table>
</div>
{{-- Uploaded Files --}}
@if ($submission->uploads->count() > 0)
<div class="uploads">
<h3>Uploaded Files</h3>
@foreach ($submission->uploads as $upload)
<div class="upload">
<span>{{ $upload->original_name }}</span>
<span>({{ $upload->humanFileSize() }})</span>
<a href="{{ route('forms.uploads.download', [$submission->form, $submission, $upload]) }}"
download>
Download
</a>
</div>
@endforeach
</div>
@endif
{{-- Actions --}}
<div class="actions">
<button wire:click="resendNotifications">Resend Notifications</button>
<button wire:click="delete" wire:confirm="Are you sure?">Delete</button>
</div>
</div>
Methods
delete
Delete the submission:
public function delete(): void
{
$this->authorize('delete', $this->submission);
$formId = $this->submission->form_id;
$this->submission->delete();
session()->flash('success', 'Submission deleted.');
$this->redirect(route('forms.submissions.index', $formId));
}
resendNotifications
Resend all notifications:
public function resendNotifications(): void
{
$this->notificationService->sendNotifications($this->submission);
session()->flash('success', 'Notifications sent.');
}
downloadUpload
Download an uploaded file:
public function downloadUpload(int $uploadId)
{
$upload = $this->submission->uploads->find($uploadId);
if (!$upload) {
abort(404);
}
$disk = Storage::disk($upload->disk);
return response()->download(
$disk->path($upload->path),
$upload->original_name
);
}
Displaying Values
Format different value types:
@switch($value->field?->type)
@case('checkbox')
{{ $value->value ? 'Yes' : 'No' }}
@break
@case('checkbox_group')
@case('select')
@if (is_array($value->value))
<ul>
@foreach ($value->value as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@else
{{ $value->value }}
@endif
@break
@case('textarea')
<pre>{{ $value->value }}</pre>
@break
@case('file')
{{-- File handled separately via uploads --}}
@break
@default
{{ $value->value }}
@endswitch
Events Emitted
| Event | Payload | Description |
|---|---|---|
submission-deleted |
{ id } |
Submission deleted |
notifications-resent |
{ count } |
Notifications sent |
Customizing the View
Publish views:
php artisan vendor:publish --tag=forms-views
Edit resources/views/vendor/forms/livewire/submission-detail.blade.php.
Next Steps
- SubmissionsList - Submissions listing
- Submissions Usage - Working with submissions
- File Uploads - File handling