Wrap ActivityMonitor components in wire:ignore to prevent parent component re-renders from destroying the Livewire component and causing "Snapshot missing" errors in production mode. The issue occurred when toggling the "Backup includes all databases" checkbox during database restore operations. The checkbox uses wire:model.live which triggers immediate parent re-renders, destroying the nested ActivityMonitor component in the slide-over. Changes: - Wrap ActivityMonitor in wire:ignore div in import.blade.php - Apply same fix preventatively to heading.blade.php wire:ignore prevents Livewire from re-rendering the DOM inside the wrapper, while still allowing event listeners and Alpine.js functionality to work correctly. The existing reset logic (slideOverClosed event) continues to function properly. Fixes #7335 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
111 lines
6.3 KiB
PHP
111 lines
6.3 KiB
PHP
<nav wire:poll.10000ms="checkStatus" class="pb-6">
|
|
<x-resources.breadcrumbs :resource="$database" :parameters="$parameters" />
|
|
<x-slide-over @startdatabase.window="slideOverOpen = true" closeWithX fullScreen>
|
|
<x-slot:title>Database Startup</x-slot:title>
|
|
<x-slot:content>
|
|
<div wire:ignore>
|
|
<livewire:activity-monitor header="Logs" fullHeight />
|
|
</div>
|
|
</x-slot:content>
|
|
</x-slide-over>
|
|
<div class="navbar-main">
|
|
<nav
|
|
class="flex overflow-x-scroll shrink-0 gap-6 items-center whitespace-nowrap sm:overflow-x-hidden scrollbar min-h-10">
|
|
<a class="{{ request()->routeIs('project.database.configuration') ? 'dark:text-white' : '' }}"
|
|
href="{{ route('project.database.configuration', $parameters) }}">
|
|
Configuration
|
|
</a>
|
|
|
|
<a class="{{ request()->routeIs('project.database.logs') ? 'dark:text-white' : '' }}"
|
|
href="{{ route('project.database.logs', $parameters) }}">
|
|
Logs
|
|
</a>
|
|
@can('canAccessTerminal')
|
|
<a class="{{ request()->routeIs('project.database.command') ? 'dark:text-white' : '' }}"
|
|
href="{{ route('project.database.command', $parameters) }}">
|
|
Terminal
|
|
</a>
|
|
@endcan
|
|
@if (
|
|
$database->getMorphClass() === 'App\Models\StandalonePostgresql' ||
|
|
$database->getMorphClass() === 'App\Models\StandaloneMongodb' ||
|
|
$database->getMorphClass() === 'App\Models\StandaloneMysql' ||
|
|
$database->getMorphClass() === 'App\Models\StandaloneMariadb')
|
|
<a class="{{ request()->routeIs('project.database.backup.index') ? 'dark:text-white' : '' }}"
|
|
href="{{ route('project.database.backup.index', $parameters) }}">
|
|
Backups
|
|
</a>
|
|
@endif
|
|
</nav>
|
|
@if ($database->destination->server->isFunctional())
|
|
<div class="flex flex-wrap gap-2 items-center">
|
|
@if (!str($database->status)->startsWith('exited'))
|
|
<x-modal-confirmation title="Confirm Database Restart?" buttonTitle="Restart" submitAction="restart"
|
|
:actions="[
|
|
'This database will be unavailable during the restart.',
|
|
'If the database is currently in use data could be lost.',
|
|
]" :confirmWithText="false" :confirmWithPassword="false" step2ButtonText="Restart Database"
|
|
:dispatchEvent="true" dispatchEventType="restartEvent">
|
|
<x-slot:button-title>
|
|
<svg class="w-5 h-5 dark:text-warning" viewBox="0 0 24 24"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
|
|
stroke-width="2">
|
|
<path d="M19.933 13.041a8 8 0 1 1-9.925-8.788c3.899-1 7.935 1.007 9.425 4.747" />
|
|
<path d="M20 4v5h-5" />
|
|
</g>
|
|
</svg>
|
|
Restart
|
|
</x-slot:button-title>
|
|
</x-modal-confirmation>
|
|
<x-modal-confirmation title="Confirm Database Stopping?" buttonTitle="Stop" submitAction="stop"
|
|
:checkboxes="$checkboxes" :actions="[
|
|
'This database will be stopped.',
|
|
'If the database is currently in use data could be lost.',
|
|
'All non-persistent data of this database (containers, networks, unused images) will be deleted (don\'t worry, no data is lost and you can start the database again).',
|
|
]" :confirmWithText="false" :confirmWithPassword="false"
|
|
step1ButtonText="Continue" step2ButtonText="Confirm">
|
|
<x-slot:button-title>
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-error" viewBox="0 0 24 24"
|
|
stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
|
|
stroke-linejoin="round">
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
|
<path d="M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z">
|
|
</path>
|
|
<path
|
|
d="M14 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z">
|
|
</path>
|
|
</svg>
|
|
Stop
|
|
</x-slot:button-title>
|
|
</x-modal-confirmation>
|
|
@else
|
|
<button @click="$wire.dispatch('startEvent')" class="gap-2 button">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 dark:text-warning" viewBox="0 0 24 24"
|
|
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
|
stroke-linejoin="round">
|
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
<path d="M7 4v16l13 -8z" />
|
|
</svg>
|
|
Start
|
|
</button>
|
|
@endif
|
|
@script
|
|
<script>
|
|
$wire.$on('startEvent', () => {
|
|
window.dispatchEvent(new CustomEvent('startdatabase'));
|
|
$wire.$call('start');
|
|
});
|
|
$wire.$on('restartEvent', () => {
|
|
$wire.$dispatch('info', 'Restarting database.');
|
|
window.dispatchEvent(new CustomEvent('startdatabase'));
|
|
$wire.$call('restart');
|
|
});
|
|
</script>
|
|
@endscript
|
|
</div>
|
|
@else
|
|
<div class="text-error">Underlying server is not functional.</div>
|
|
@endif
|
|
</div>
|
|
</nav>
|