<div class="flex flex-col gap-2" wire:init='load_deployments' @if ($skip == 0) wire:poll.5000ms='reload_deployments' @endif> <h2 class="pt-4">Deployments <span class="text-xs">({{ $deployments_count }})</span></h2> @if (count($deployments) === 0) <x-forms.button wire:click="load_deployments({{ $default_take }})">Load Deployments </x-forms.button> @endif @if ($show_next) <x-forms.button wire:click="load_deployments({{ $default_take }})">Show More </x-forms.button> @endif @foreach ($deployments as $deployment) <a @class([ 'bg-coolgray-200 p-2 border-l border-dashed transition-colors hover:no-underline', 'cursor-not-allowed hover:bg-coolgray-200' => data_get($deployment, 'status') === 'queued' || data_get($deployment, 'status') === 'cancelled by system', 'border-warning hover:bg-warning hover:text-black' => data_get($deployment, 'status') === 'in_progress', 'border-error hover:bg-error' => data_get($deployment, 'status') === 'error', 'border-success hover:bg-success' => data_get($deployment, 'status') === 'finished', ]) @if (data_get($deployment, 'status') !== 'cancelled by system' && data_get($deployment, 'status') !== 'queued') href="{{ $current_url . '/' . data_get($deployment, 'deployment_uuid') }}" @endif class="hover:no-underline"> <div class="flex flex-col justify-start"> <div> {{ $deployment->id }} <span class="text-sm text-warning">></span> {{ $deployment->deployment_uuid }} <span class="text-sm text-warning">></span> {{ $deployment->status }} </div> @if (data_get($deployment, 'pull_request_id')) <div> Pull Request #{{ data_get($deployment, 'pull_request_id') }} @if (data_get($deployment, 'is_webhook')) (Webhook) @endif </div> @elseif (data_get($deployment, 'is_webhook')) <div>Webhook (sha @if (data_get($deployment, 'commit')) {{ data_get($deployment, 'commit') }}) @else HEAD) @endif </div> @endif <div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')"> <div>Finished <span x-text="measure_since_started()">0s</span> in <span class="font-bold" x-text="measure_finished_time()">0s</span></div> </div> </div> </a> @endforeach <script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/utc.js"></script> <script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.js"></script> <script> document.addEventListener('alpine:init', () => { let timers = {}; dayjs.extend(window.dayjs_plugin_utc); dayjs.extend(window.dayjs_plugin_relativeTime); Alpine.data('elapsedTime', (uuid, status, created_at, updated_at) => ({ finished_time: '0s', started_time: '0s', init() { if (timers[uuid]) { clearInterval(timers[uuid]); } if (status === 'in_progress') { timers[uuid] = setInterval(() => { this.finished_time = dayjs().diff(dayjs.utc(created_at), 'second') + 's' }, 1000); } else { let seconds = dayjs.utc(updated_at).diff(dayjs.utc(created_at), 'second') this.finished_time = seconds + 's'; } }, measure_finished_time() { return this.finished_time; }, measure_since_started() { return dayjs.utc(created_at).fromNow(); } })) }) </script> </div>