96 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  <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>
 | 
