Files
coolify/resources/views/livewire/project/service/resource-card.blade.php
T
Andras Bacsai 51583069f4 feat(status): unify resource status badges
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.
2026-06-05 13:31:20 +02:00

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>