diff --git a/resources/css/app.css b/resources/css/app.css index 76d7f19a5..246dc98df 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -122,5 +122,5 @@ tr td:first-child { @apply pt-2 pb-10; } .fullscreen { - @apply fixed top-0 left-0 w-full h-full z-[9999] bg-coolgray-200; + @apply fixed top-0 left-0 w-full h-full z-[9999] bg-coolgray-200 overflow-y-auto scrollbar ; } diff --git a/resources/views/livewire/project/application/deployment-logs.blade.php b/resources/views/livewire/project/application/deployment-logs.blade.php index f354083b3..a37f7e377 100644 --- a/resources/views/livewire/project/application/deployment-logs.blade.php +++ b/resources/views/livewire/project/application/deployment-logs.blade.php @@ -1,4 +1,4 @@ -<div class="pt-4"> +<div class="pt-4" x-data="{ fullscreen: false }"> <livewire:project.application.deployment-navbar :application_deployment_queue="$application_deployment_queue" /> @if (data_get($application_deployment_queue, 'status') === 'in_progress') <div class="flex items-center gap-1 pt-2 ">Deployment is @@ -12,25 +12,44 @@ class="text-warning">{{ Str::headline(data_get($application_deployment_queue, 'status')) }}</span>. </div> @endif - <div @if ($isKeepAliveOn) wire:poll.2000ms="polling" @endif - class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-dotted rounded border-coolgray-400 max-h-[32rem] p-2 px-4 mt-4 text-xs"> - <span class="flex flex-col"> - @if (decode_remote_command_output($application_deployment_queue)->count() > 0) - @foreach (decode_remote_command_output($application_deployment_queue) as $line) - <div @class([ - 'font-mono whitespace-pre-line', - 'text-neutral-400' => $line['type'] == 'stdout', - 'text-error' => $line['type'] == 'stderr', - 'text-warning' => $line['hidden'], - ])>[{{ $line['timestamp'] }}] @if ($line['hidden']) - <br>COMMAND: <br>{{ $line['command'] }} <br><br>OUTPUT: - @endif{{ $line['output'] }}@if ($line['hidden']) - @endif - </div> - @endforeach - @else - <span class="font-mono text-neutral-400">No logs yet.</span> - @endif - </span> + <div :class="fullscreen ? 'fullscreen' : ''"> + <div @if ($isKeepAliveOn) wire:poll.2000ms="polling" @endif + class="relative flex flex-col-reverse w-full p-2 px-4 mt-4 overflow-y-auto text-xs border border-dotted rounded scrollbar border-coolgray-400" + :class="fullscreen ? '' : 'max-h-[32rem]'"> + <button title="Minimize" x-show="fullscreen" class="absolute top-2 right-2" + x-on:click="fullscreen = !fullscreen"><svg class="icon" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" + stroke-width="2" d="M6 14h4m0 0v4m0-4l-6 6m14-10h-4m0 0V6m0 4l6-6" /> + </svg></button> + <button title="Fullscreen" x-show="!fullscreen" class="absolute top-2 right-2" + x-on:click="fullscreen = !fullscreen"><svg class="icon" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <g fill="none"> + <path + d="M24 0v24H0V0h24ZM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035c-.01-.004-.019-.001-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427c-.002-.01-.009-.017-.017-.018Zm.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093c.012.004.023 0 .029-.008l.004-.014l-.034-.614c-.003-.012-.01-.02-.02-.022Zm-.715.002a.023.023 0 0 0-.027.006l-.006.014l-.034.614c0 .012.007.02.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01l-.184-.092Z" /> + <path fill="currentColor" + d="M9.793 12.793a1 1 0 0 1 1.497 1.32l-.083.094L6.414 19H9a1 1 0 0 1 .117 1.993L9 21H4a1 1 0 0 1-.993-.883L3 20v-5a1 1 0 0 1 1.993-.117L5 15v2.586l4.793-4.793ZM20 3a1 1 0 0 1 .993.883L21 4v5a1 1 0 0 1-1.993.117L19 9V6.414l-4.793 4.793a1 1 0 0 1-1.497-1.32l.083-.094L17.586 5H15a1 1 0 0 1-.117-1.993L15 3h5Z" /> + </g> + </svg></button> + <span class="flex flex-col"> + @if (decode_remote_command_output($application_deployment_queue)->count() > 0) + @foreach (decode_remote_command_output($application_deployment_queue) as $line) + <div @class([ + 'font-mono whitespace-pre-line', + 'text-neutral-400' => $line['type'] == 'stdout', + 'text-error' => $line['type'] == 'stderr', + 'text-warning' => $line['hidden'], + ])>[{{ $line['timestamp'] }}] @if ($line['hidden']) + <br>COMMAND: <br>{{ $line['command'] }} <br><br>OUTPUT: + @endif{{ $line['output'] }}@if ($line['hidden']) + @endif + </div> + @endforeach + @else + <span class="font-mono text-neutral-400">No logs yet.</span> + @endif + </span> + </div> </div> </div> diff --git a/resources/views/livewire/project/shared/get-logs.blade.php b/resources/views/livewire/project/shared/get-logs.blade.php index 3514d4cdb..ee1b6b07e 100644 --- a/resources/views/livewire/project/shared/get-logs.blade.php +++ b/resources/views/livewire/project/shared/get-logs.blade.php @@ -16,7 +16,7 @@ <div x-data="{ fullscreen: false }" :class="fullscreen ? 'fullscreen' : 'container w-full pt-4 mx-auto'"> <div - class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4 pt-6 text-xs text-white relative"> + class="relative flex flex-col-reverse w-full p-4 pt-6 overflow-y-auto text-xs text-white border border-solid rounded scrollbar border-coolgray-300" :class="fullscreen ? '' : 'max-h-[32rem]'"> <button title="Minimize" x-show="fullscreen" class="absolute top-2 right-2" x-on:click="fullscreen = !fullscreen"><svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"