ui ui ui ui ui ui ux ux ux ux ux ux
This commit is contained in:
@@ -8,10 +8,15 @@
|
||||
<livewire:project.database.backup-now :backup="$backup" />
|
||||
@endif
|
||||
@if ($backup->database_id !== 0)
|
||||
<x-forms.button isError wire:click="delete">Delete</x-forms.button>
|
||||
<x-modal-confirmation isErrorButton>
|
||||
<x-slot:button-title>
|
||||
Delete
|
||||
</x-slot:button-title>
|
||||
This will stop the scheduled backup for this database.<br>Please think again.
|
||||
</x-modal-confirmation>
|
||||
@endif
|
||||
</div>
|
||||
<div class="w-32 pb-2">
|
||||
<div class="w-48 pb-2">
|
||||
<x-forms.checkbox instantSave label="Backup Enabled" id="backup.enabled" />
|
||||
<x-forms.checkbox instantSave label="S3 Enabled" id="backup.save_s3" />
|
||||
</div>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<div class="flex flex-col-reverse gap-2">
|
||||
@forelse($executions as $execution)
|
||||
<form wire:key="{{ data_get($execution, 'id') }}" class="relative flex flex-col p-4 border-dotted border-1 bg-coolgray-100"
|
||||
@class([
|
||||
<form wire:key="{{ data_get($execution, 'id') }}"
|
||||
class="relative flex flex-col p-4 border-dotted border-1 bg-coolgray-100" @class([
|
||||
'border-green-500' => data_get($execution, 'status') === 'success',
|
||||
'border-red-500' => data_get($execution, 'status') === 'failed',
|
||||
])>
|
||||
@if (data_get($execution, 'status') === 'running')
|
||||
<div class="absolute top-2 right-2">
|
||||
<x-loading />
|
||||
</div>
|
||||
<div class="absolute top-2 right-2">
|
||||
<x-loading />
|
||||
</div>
|
||||
@endif
|
||||
<div>Database: {{ data_get($execution, 'database_name', 'N/A') }}</div>
|
||||
<div>Status: {{ data_get($execution, 'status') }}</div>
|
||||
@@ -26,8 +26,12 @@
|
||||
<x-forms.button class=" hover:bg-coolgray-400"
|
||||
wire:click="download({{ data_get($execution, 'id') }})">Download</x-forms.button>
|
||||
@endif
|
||||
<x-forms.button isError wire:click="deleteBackup({{ data_get($execution, 'id') }})"
|
||||
wire:confirm.prompt="Are you sure?\n\nType DELETE to confirm|DELETE">Delete</x-forms.button>
|
||||
<x-modal-confirmation isErrorButton action="deleteBackup({{ data_get($execution, 'id') }})">
|
||||
<x-slot:button-title>
|
||||
Delete
|
||||
</x-slot:button-title>
|
||||
This will delete this backup. It is not reversible.<br>Please think again.
|
||||
</x-modal-confirmation>
|
||||
</div>
|
||||
</form>
|
||||
@empty
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<div>
|
||||
<h1>Backups</h1>
|
||||
<livewire:project.database.heading :database="$database" />
|
||||
|
||||
<x-modal modalId="startDatabase">
|
||||
<x-slot:modalBody>
|
||||
<livewire:activity-monitor header="Database Startup Logs" />
|
||||
@@ -11,11 +12,17 @@
|
||||
</x-forms.button>
|
||||
</x-slot:modalSubmit>
|
||||
</x-modal>
|
||||
<livewire:project.database.create-scheduled-backup :database="$database" :s3s="$s3s" />
|
||||
<div class="pt-6">
|
||||
<div class="flex gap-2 ">
|
||||
<h2 class="pb-4">Scheduled Backups</h2>
|
||||
<x-forms.button onclick="createScheduledBackup.showModal()">+ Add</x-forms.button>
|
||||
<x-slide-over>
|
||||
<x-slot:title>New Scheduled Backup</x-slot:title>
|
||||
<x-slot:content>
|
||||
<livewire:project.database.create-scheduled-backup :database="$database" :s3s="$s3s" />
|
||||
</x-slot:content>
|
||||
<button @click="slideOverOpen=true" class="button">+
|
||||
Add</button>
|
||||
</x-slide-over>
|
||||
</div>
|
||||
<livewire:project.database.scheduled-backups :database="$database" />
|
||||
</div>
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
<dialog id="createScheduledBackup" class="modal">
|
||||
<form method="dialog" class="flex flex-col gap-2 rounded modal-box" wire:submit='submit'>
|
||||
<h2>New Backup</h2>
|
||||
<x-forms.input placeholder="0 0 * * * or daily" id="frequency" label="Frequency" required />
|
||||
<h3>S3 Storage</h3>
|
||||
<x-forms.checkbox id="save_s3" label="Save to S3" />
|
||||
<x-forms.select id="selected_storage_id">
|
||||
@if ($s3s->count() === 0)
|
||||
<option value="0">No S3 Storages found.</option>
|
||||
@else
|
||||
@foreach ($s3s as $s3)
|
||||
<option value="{{ $s3->id }}">{{ $s3->name }}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</x-forms.select>
|
||||
<x-forms.button onclick="createScheduledBackup.close()" type="submit">
|
||||
Save
|
||||
</x-forms.button>
|
||||
</form>
|
||||
<form method="dialog" class="modal-backdrop">
|
||||
<button>close</button>
|
||||
</form>
|
||||
</dialog>
|
||||
<form class="flex flex-col gap-2 rounded" wire:submit='submit'>
|
||||
<x-forms.input placeholder="0 0 * * * or daily" id="frequency" label="Frequency" required />
|
||||
<x-forms.checkbox id="save_s3" label="Save to S3" />
|
||||
<x-forms.select id="selected_storage_id">
|
||||
@if ($s3s->count() === 0)
|
||||
<option value="0">No S3 Storages found.</option>
|
||||
@else
|
||||
@foreach ($s3s as $s3)
|
||||
<option value="{{ $s3->id }}">{{ $s3->name }}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</x-forms.select>
|
||||
<x-forms.button type="submit" @click="slideOverOpen=false">
|
||||
Save
|
||||
</x-forms.button>
|
||||
</form>
|
||||
|
||||
@@ -1,4 +1,73 @@
|
||||
<nav wire:poll.5000ms="check_status">
|
||||
<x-resources.breadcrumbs :resource="$database" :parameters="$parameters" />
|
||||
<x-databases.navbar :database="$database" :parameters="$parameters" />
|
||||
<x-slide-over @startdatabase.window="slideOverOpen = true" closeWithX fullScreen>
|
||||
<x-slot:title>Database Startup Logs</x-slot:title>
|
||||
<x-slot:content>
|
||||
<livewire:activity-monitor showWaiting />
|
||||
</x-slot:content>
|
||||
</x-slide-over>
|
||||
<div class="navbar-main">
|
||||
<a class="{{ request()->routeIs('project.database.configuration') ? 'text-white' : '' }}"
|
||||
href="{{ route('project.database.configuration', $parameters) }}">
|
||||
<button>Configuration</button>
|
||||
</a>
|
||||
<a class="{{ request()->routeIs('project.database.command') ? 'text-white' : '' }}"
|
||||
href="{{ route('project.database.command', $parameters) }}">
|
||||
<button>Execute Command</button>
|
||||
</a>
|
||||
<a class="{{ request()->routeIs('project.database.logs') ? 'text-white' : '' }}"
|
||||
href="{{ route('project.database.logs', $parameters) }}">
|
||||
<button>Logs</button>
|
||||
</a>
|
||||
@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') ? 'text-white' : '' }}"
|
||||
href="{{ route('project.database.backup.index', $parameters) }}">
|
||||
<button>Backups</button>
|
||||
</a>
|
||||
@endif
|
||||
<div class="flex-1"></div>
|
||||
@if (!str($database->status)->startsWith('exited'))
|
||||
<x-modal-confirmation @click="$wire.dispatch('stopEvent')">
|
||||
<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>
|
||||
This database will be stopped. <br>Please think again.
|
||||
</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 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('stopEvent', () => {
|
||||
$wire.$dispatch('warning', 'Stopping database.');
|
||||
$wire.$call('stop');
|
||||
});
|
||||
</script>
|
||||
@endscript
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<h2>Import Backup</h2>
|
||||
<div class="mt-2 mb-4 rounded alert">
|
||||
<div class="mt-2 mb-4 rounded alert-error">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 stroke-current shrink-0" fill="none" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
||||
@@ -55,6 +55,6 @@
|
||||
<livewire:activity-monitor header="Database import output" />
|
||||
</div>
|
||||
@else
|
||||
<div class="text-neutral-500">Database must be running to import a backup.</div>
|
||||
<div>Database must be running to import a backup.</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
@forelse($database->scheduledBackups as $backup)
|
||||
@if ($type === 'database')
|
||||
@if ($type == 'database')
|
||||
<a class="flex flex-col box"
|
||||
href="{{ route('project.database.backup.execution', [...$parameters, 'backup_uuid' => $backup->uuid]) }}">
|
||||
<div>Frequency: {{ $backup->frequency }}</div>
|
||||
@@ -25,10 +25,10 @@
|
||||
</div>
|
||||
@if ($type === 'service-database' && $selectedBackup)
|
||||
<div class="pt-10">
|
||||
<livewire:project.database.backup-edit key="{{ $selectedBackup->id }}" :backup="$selectedBackup" :s3s="$s3s"
|
||||
<livewire:project.database.backup-edit wire:key="{{ $selectedBackup->id }}" :backup="$selectedBackup" :s3s="$s3s"
|
||||
:status="data_get($database, 'status')" />
|
||||
<h3 class="py-4">Executions</h3>
|
||||
<livewire:project.database.backup-executions key="{{ $selectedBackup->id }}" :backup="$selectedBackup"
|
||||
<livewire:project.database.backup-executions wire:keykey="{{ $selectedBackup->id }}" :backup="$selectedBackup"
|
||||
:executions="$selectedBackup->executions" />
|
||||
</div>
|
||||
@endif
|
||||
|
||||
Reference in New Issue
Block a user