mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-05 22:14:19 +00:00
Introduce a shared status badge component and reuse it across resource status views, service cards, and the server navbar. Replace icon-only refresh controls with consistent badge buttons and cover the new status layout with feature tests.
86 lines
4.9 KiB
PHP
86 lines
4.9 KiB
PHP
<div @class([
|
|
'border-l border-dashed border-red-500' => str($resource->status)->contains(['exited']),
|
|
'border-l border-dashed border-success' => str($resource->status)->contains(['running']),
|
|
'border-l border-dashed border-warning' => str($resource->status)->contains(['starting', 'restarting']),
|
|
'flex gap-2 box-without-bg-without-border dark:bg-coolgray-100 bg-white dark:hover:text-neutral-300 group',
|
|
])>
|
|
<div class="flex flex-row w-full">
|
|
<div class="flex flex-col flex-1">
|
|
<div class="pb-2">
|
|
@if ($resource->human_name)
|
|
{{ Str::headline($resource->human_name) }}
|
|
@else
|
|
{{ Str::headline($resource->name) }}
|
|
@endif
|
|
<span class="text-xs">({{ $resource->image }})</span>
|
|
</div>
|
|
@if ($resource->configuration_required)
|
|
<span class="text-xs text-error">(configuration required)</span>
|
|
@endif
|
|
@if ($resource->description)
|
|
<span class="text-xs">{{ Str::limit($resource->description, 60) }}</span>
|
|
@endif
|
|
@if ($isApplication && $resource->fqdn)
|
|
<span class="flex gap-1 text-xs">{{ Str::limit($resource->fqdn, 60) }}
|
|
@can('update', $service)
|
|
<x-modal-input title="Edit Domains" :closeOutside="false">
|
|
<x-slot:content>
|
|
<span class="cursor-pointer">
|
|
<svg xmlns="http://www.w3.org/2000/svg"
|
|
class="w-4 h-4 dark:text-warning text-coollabs"
|
|
viewBox="0 0 24 24">
|
|
<g fill="none" stroke="currentColor" stroke-linecap="round"
|
|
stroke-linejoin="round" stroke-width="2">
|
|
<path d="m12 15l8.385-8.415a2.1 2.1 0 0 0-2.97-2.97L9 12v3h3zm4-10l3 3" />
|
|
<path d="M9 7.07A7 7 0 0 0 10 21a7 7 0 0 0 6.929-6" />
|
|
</g>
|
|
</svg>
|
|
</span>
|
|
</x-slot:content>
|
|
<livewire:project.service.edit-domain applicationId="{{ $resource->id }}"
|
|
wire:key="edit-domain-{{ $resource->id }}" />
|
|
</x-modal-input>
|
|
@endcan
|
|
</span>
|
|
@endif
|
|
<div @class(['pt-2' => $isApplication])>
|
|
@if (str($resource->status)->contains('running'))
|
|
<x-status-badge status="{{ formatContainerStatus($resource->status) }}" type="success" />
|
|
@elseif (str($resource->status)->contains(['starting', 'restarting', 'degraded']))
|
|
<x-status-badge status="{{ formatContainerStatus($resource->status) }}" type="warning" />
|
|
@else
|
|
<x-status-badge status="{{ formatContainerStatus($resource->status) }}" type="error" />
|
|
@endif
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center px-4">
|
|
@if ($isDatabase && ($resource->isBackupSolutionAvailable() || $resource->is_migrated))
|
|
<a class="mx-4 text-xs font-bold hover:underline" {{ wireNavigate() }}
|
|
href="{{ route('project.service.database.backups', [...$parameters, 'stack_service_uuid' => $resource->uuid]) }}">
|
|
Backups
|
|
</a>
|
|
@endif
|
|
<a class="mx-4 text-xs font-bold hover:underline" {{ wireNavigate() }}
|
|
href="{{ route('project.service.index', [...$parameters, 'stack_service_uuid' => $resource->uuid]) }}">
|
|
Settings
|
|
</a>
|
|
@if (str($resource->status)->contains('running'))
|
|
@can('update', $service)
|
|
<x-modal-confirmation :title="$isApplication ? 'Confirm Service Application Restart?' : 'Confirm Service Database Restart?'"
|
|
buttonTitle="Restart" submitAction="restart" :actions="$isApplication
|
|
? [
|
|
'The selected service application will be unavailable during the restart.',
|
|
'If the service application is currently in use data could be lost.',
|
|
]
|
|
: [
|
|
'This service database will be unavailable during the restart.',
|
|
'If the service database is currently in use data could be lost.',
|
|
]"
|
|
:confirmWithText="false" :confirmWithPassword="false"
|
|
:step2ButtonText="$isApplication ? 'Restart Service Container' : 'Restart Database'" />
|
|
@endcan
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|