fix: UI and copy issues

This commit is contained in:
Gary 2024-03-08 14:35:29 -08:00
parent dc2b15ba2a
commit c870cd8ced
5 changed files with 271 additions and 294 deletions

View File

@ -1,6 +1,6 @@
{{ Illuminate\Mail\Markdown::parse('---') }}
Thank you,<br>
{{ config('app.name') ?? 'Last Hour Cloud' }}
Last Hour Cloud
{{ Illuminate\Mail\Markdown::parse('[Contact Support](https://lasthourhosting.org/contact.html)') }}

View File

@ -154,15 +154,15 @@
<li title="Get Involved">
<a class="justify-center hover:text-white hover:bg-transparent" href="https://shilohcode.com/get-involved" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 16 16">
<path d="M13.5 1a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3M11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.5 2.5 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5m-8.5 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3m11 5.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3" />
<path fill="currentColor" d="M13.5 1a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3M11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.5 2.5 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5m-8.5 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3m11 5.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3" />
</svg>
</a>
</li>
<li title="Get help!">
<a href="https://lasthourhosting.org/contact.html" target="_blank">
<div class="justify-center hover:text-white hover:bg-transparent">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path d="M16 8c0 3.866-3.582 7-8 7a9 9 0 0 1-2.347-.306c-.584.296-1.925.864-4.181 1.234-.2.032-.352-.176-.273-.362.354-.836.674-1.95.77-2.966C.744 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7M5 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0m4 0a1 1 0 1 0-2 0 1 1 0 0 0 2 0m3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2" />
<div class="justify-center items-center hover:text-white hover:bg-transparent">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill="currentColor" d="M16 8c0 3.866-3.582 7-8 7a9 9 0 0 1-2.347-.306c-.584.296-1.925.864-4.181 1.234-.2.032-.352-.176-.273-.362.354-.836.674-1.95.77-2.966C.744 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7M5 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0m4 0a1 1 0 1 0-2 0 1 1 0 0 0 2 0m3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2" />
</svg>
</div>
</a>

View File

@ -2,7 +2,7 @@
@section('body')
<div title="Send us feedback or get help!" class="fixed top-0 right-0 p-2 px-4 pt-4 mt-auto text-xs">
<a href="https://lasthourhosting.org/contact.html" target="_blank">
<div class="justify-center hover:text-white hover:bg-transparent">
<div class="justify-center items-center hover:text-white hover:bg-transparent">
<svg class="icon" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" d="M140 180a12 12 0 1 1-12-12a12 12 0 0 1 12 12M128 72c-22.06 0-40 16.15-40 36v4a8 8 0 0 0 16 0v-4c0-11 10.77-20 24-20s24 9 24 20s-10.77 20-24 20a8 8 0 0 0-8 8v8a8 8 0 0 0 16 0v-.72c18.24-3.35 32-17.9 32-35.28c0-19.85-17.94-36-40-36m104 56A104 104 0 1 1 128 24a104.11 104.11 0 0 1 104 104m-16 0a88 88 0 1 0-88 88a88.1 88.1 0 0 0 88-88" />
</svg>

View File

@ -4,7 +4,7 @@
<div class="w-96">
<x-forms.select wire:model="selectedEnvironment">
@foreach ($environments as $environment)
<option value="{{ $environment->name }}">Environment: {{ $environment->name }}</option>
<option value="{{ $environment->name }}">Environment: {{ $environment->name }}</option>
@endforeach
</x-forms.select>
</div>
@ -12,147 +12,136 @@
<div class="pb-4 ">Deploy resources, like Applications, Databases, Services...</div>
<div class="flex flex-col gap-4 pt-10 sm:px-20">
@if ($current_step === 'type')
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step">Select a Server</li>
<li class="step">Select a Destination</li>
</ul>
<h2>Applications</h2>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('public')">
<x-slot:title>Public Repository</x-slot>
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step">Select a Server</li>
<li class="step">Select a Destination</li>
</ul>
<h2>Applications</h2>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('public')">
<x-slot:title>Public Repository</x-slot>
<x-slot:description>
You can deploy any kind of public repositories from the supported git providers.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/git.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('private-gh-app')">
<x-slot:title>Private Repository (with GitHub App)</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/git.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('private-gh-app')">
<x-slot:title>Private Repository (with GitHub App)</x-slot>
<x-slot:description>
You can deploy public & private repositories through your GitHub Apps.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/github.svg') }}">
</x-slot:logo>
</x-resource-view>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/github.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('private-deploy-key')">
<x-slot:title> Private Repository (with deploy key)</x-slot>
<x-resource-view wire="setType('private-deploy-key')">
<x-slot:title> Private Repository (with deploy key)</x-slot>
<x-slot:description>
You can deploy public & private repositories with a simple deploy key (SSH key).
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/git.svg') }}">
</x-slot:logo>
</x-resource-view>
</div>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('dockerfile')">
<x-slot:title>Based on a Dockerfile</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/git.svg') }}">
</x-slot:logo>
</x-resource-view>
</div>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('dockerfile')">
<x-slot:title>Based on a Dockerfile</x-slot>
<x-slot:description>
You can deploy a simple Dockerfile, without Git.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('docker-compose-empty')">
<x-slot:title>Based on a Docker Compose</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('docker-compose-empty')">
<x-slot:title>Based on a Docker Compose</x-slot>
<x-slot:description>
You can deploy complex application easily with Docker Compose, without Git.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('docker-image')">
<x-slot:title>Based on an existing Docker Image</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('docker-image')">
<x-slot:title>Based on an existing Docker Image</x-slot>
<x-slot:description>
You can deploy an existing Docker Image from any Registry, without Git.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
</div>
<h2 class="py-4">Databases</h2>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('postgresql')">
<x-slot:title> New PostgreSQL</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/docker.svg') }}">
</x-slot:logo>
</x-resource-view>
</div>
<h2 class="py-4">Databases</h2>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
<x-resource-view wire="setType('postgresql')">
<x-slot:title> New PostgreSQL</x-slot>
<x-slot:description>
PostgreSQL is an object-relational database known for its
robustness, advanced features, and strong standards compliance.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/postgres.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('redis')">
<x-slot:title> New Redis</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/postgres.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('redis')">
<x-slot:title> New Redis</x-slot>
<x-slot:description>
Redis is an open-source, in-memory data structure store, used as a database, cache, and message
broker.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/redis.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mongodb')">
<x-slot:title> New MongoDB</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/redis.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mongodb')">
<x-slot:title> New MongoDB</x-slot>
<x-slot:description>
MongoDB is a source-available, NoSQL database that uses JSON-like documents with
optional schemas.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/mongodb.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mysql')">
<x-slot:title>New MySQL</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/mongodb.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mysql')">
<x-slot:title>New MySQL</x-slot>
<x-slot:description>
MySQL is a relational database known for its speed, reliability, and
flexibility.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/mysql.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mariadb')">
<x-slot:title> New Mariadb</x-slot>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/mysql.svg') }}">
</x-slot:logo>
</x-resource-view>
<x-resource-view wire="setType('mariadb')">
<x-slot:title> New Mariadb</x-slot>
<x-slot:description>
MariaDB is a relational database that serves as a drop-in
replacement for MySQL.
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/mariadb.svg') }}">
</x-slot:logo>
</x-resource-view>
</x-slot>
<x-slot:logo>
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/mariadb.svg') }}">
</x-slot:logo>
</x-resource-view>
{{-- <div class="box group" wire="setType('existing-postgresql')">
{{-- <div class="box group" wire="setType('existing-postgresql')">
<div class="flex flex-col mx-6">
<div class="group-hover:text-white">
Backup Existing PostgreSQL
@ -162,105 +151,99 @@
</div>
</div>
</div> --}}
</div>
<div class="flex items-center gap-4" wire:init='loadServices'>
<h2 class="py-4">Services</h2>
<x-forms.button wire:click="loadServices('force')">Reload List</x-forms.button>
<input
class="w-full text-white rounded input input-sm bg-coolgray-200 disabled:bg-coolgray-200/50 disabled:border-none placeholder:text-coolgray-500 read-only:text-neutral-500 read-only:bg-coolgray-200/50"
wire:model.live.debounce.200ms="search" autofocus placeholder="Search...">
</div>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
@if ($loadingServices)
<span class="loading loading-xs loading-spinner"></span>
@else
@forelse ($services as $serviceName => $service)
@if (data_get($service, 'minversion') && version_compare(config('version'), data_get($service, 'minversion'), '<'))
<x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot>
<x-slot:description>
@if (data_get($service, 'slogan'))
{{ data_get($service, 'slogan') }}
@endif
</div>
<div class="flex items-center gap-4" wire:init='loadServices'>
<h2 class="py-4">Services</h2>
<x-forms.button wire:click="loadServices('force')">Reload List</x-forms.button>
<input class="w-full text-white rounded input input-sm bg-coolgray-200 disabled:bg-coolgray-200/50 disabled:border-none placeholder:text-coolgray-500 read-only:text-neutral-500 read-only:bg-coolgray-200/50" wire:model.live.debounce.200ms="search" autofocus placeholder="Search...">
</div>
<div class="grid justify-start grid-cols-1 gap-4 text-left xl:grid-cols-3">
@if ($loadingServices)
<span class="loading loading-xs loading-spinner"></span>
@else
@forelse ($services as $serviceName => $service)
@if (data_get($service, 'minversion') && version_compare(config('version'), data_get($service, 'minversion'), '<')) <x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot>
<x-slot:description>
@if (data_get($service, 'slogan'))
{{ data_get($service, 'slogan') }}
@endif
</x-slot>
<x-slot:logo>
@if (data_get($service, 'logo'))
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset(data_get($service, 'logo')) }}">
@endif
</x-slot:logo>
<x-slot:documentation>
{{ data_get($service, 'documentation') }}
</x-slot>
<x-slot:upgrade>
You need to upgrade Last Hour Cloud to {{ data_get($service, 'minversion') }} to use this
service.
</x-slot>
<x-slot:logo>
@if (data_get($service, 'logo'))
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset(data_get($service, 'logo')) }}">
@endif
</x-slot:logo>
<x-slot:documentation>
{{ data_get($service, 'documentation') }}
</x-slot>
<x-slot:upgrade>
You need to upgrade Coolify to {{ data_get($service, 'minversion') }} to use this
service.
</x-slot>
</x-resource-view>
{{-- <button class="text-left cursor-not-allowed bg-coolgray-100 box-without-bg" disabled>
</x-resource-view>
{{-- <button class="text-left cursor-not-allowed bg-coolgray-100 box-without-bg" disabled>
<div class="flex flex-col mx-6">
<div class="font-bold">
{{ Str::headline($serviceName) }}
</div>
You need to upgrade to {{ data_get($service, 'minversion') }} to use this service.
</div>
</button> --}}
@else
<x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot>
<x-slot:description>
@if (data_get($service, 'slogan'))
{{ data_get($service, 'slogan') }}
@endif
</x-slot>
<x-slot:logo>
@if (file_exists(public_path(data_get($service, 'logo'))))
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset(data_get($service, 'logo')) }}">
@else
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset('svgs/unknown.svg') }}">
@endif
</x-slot:logo>
<x-slot:documentation>
{{ data_get($service, 'documentation') }}
</x-slot>
</x-resource-view>
{{-- <button class="text-left box group" wire:loading.attr="disabled"
wire:click="setType('one-click-service-{{ $serviceName }}')">
<div class="flex flex-col mx-2">
<div class="font-bold text-white group-hover:text-white">
{{ Str::headline($serviceName) }}
</div>
@if (data_get($service, 'slogan'))
<div class="description">
{{ data_get($service, 'slogan') }}
</div>
@endif
</div>
</button> --}}
@endif
@empty
<div class="w-96">No service found. Please try to reload the list!</div>
@endforelse
</div>
You need to upgrade to {{ data_get($service, 'minversion') }} to use this service.
</div>
</button> --}}
@else
<x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot>
<x-slot:description>
@if (data_get($service, 'slogan'))
{{ data_get($service, 'slogan') }}
@endif
</div>
<div class="py-4 pb-10">Trademarks Policy: The respective trademarks mentioned here are owned by the
respective
companies, and use of them does not imply any affiliation or endorsement.</div>
</x-slot>
<x-slot:logo>
@if (file_exists(public_path(data_get($service, 'logo'))))
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset(data_get($service, 'logo')) }}">
@else
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100" src="{{ asset('svgs/unknown.svg') }}">
@endif
</x-slot:logo>
<x-slot:documentation>
{{ data_get($service, 'documentation') }}
</x-slot>
</x-resource-view>
{{-- <button class="text-left box group" wire:loading.attr="disabled"
wire:click="setType('one-click-service-{{ $serviceName }}')">
<div class="flex flex-col mx-2">
<div class="font-bold text-white group-hover:text-white">
{{ Str::headline($serviceName) }}
</div>
@if (data_get($service, 'slogan'))
<div class="description">
{{ data_get($service, 'slogan') }}
</div>
@endif
@if ($current_step === 'servers')
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step step-secondary">Select a Server</li>
<li class="step">Select a Destination</li>
</ul>
</div>
</button> --}}
@endif
@empty
<div class="w-96">No service found. Please try to reload the list!</div>
@endforelse
@endif
</div>
<div class="py-4 pb-10">Trademarks Policy: The respective trademarks mentioned here are owned by the
respective
companies, and use of them does not imply any affiliation or endorsement.</div>
@endif
@if ($current_step === 'servers')
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step step-secondary">Select a Server</li>
<li class="step">Select a Destination</li>
</ul>
{{-- @if ($isDatabase)
{{-- @if ($isDatabase)
<div class="flex items-center justify-center pt-4">
<x-forms.checkbox instantSave wire:model="includeSwarm"
helper="Swarm clusters are excluded from this list by default. For database, services or complex compose deployments with databases to work with Swarm,
@ -268,79 +251,78 @@
label="Include Swarm Clusters" />
</div>
@endif --}}
<div class="flex flex-col justify-center gap-4 text-left xl:flex-row xl:flex-wrap">
@forelse($servers as $server)
<div class="w-64 box group" wire:click="setServer({{ $server }})">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
{{ $server->name }}
</div>
<div class="text-xs group-hover:text-white">
{{ $server->description }}</div>
</div>
</div>
@empty
<div>
<div>No validated & reachable servers found. <a class="text-white underline" href="/servers">
Go to servers page
</a></div>
<x-use-magic-bar link="/server/new" />
</div>
@endforelse
<div class="flex flex-col justify-center gap-4 text-left xl:flex-row xl:flex-wrap">
@forelse($servers as $server)
<div class="w-64 box group" wire:click="setServer({{ $server }})">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
{{ $server->name }}
</div>
{{-- @if ($isDatabase)
<div class="text-xs group-hover:text-white">
{{ $server->description }}
</div>
</div>
</div>
@empty
<div>
<div>No validated & reachable servers found. <a class="text-white underline" href="/servers">
Go to servers page
</a></div>
<x-use-magic-bar link="/server/new" />
</div>
@endforelse
</div>
{{-- @if ($isDatabase)
<div class="text-center">Swarm clusters are excluded from this type of resource at the moment. It will
be activated soon. Stay tuned.</div>
@endif --}}
@endif
@if ($current_step === 'destinations')
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step step-secondary">Select a Server</li>
<li class="step step-secondary">Select a Destination</li>
</ul>
@endif
@if ($current_step === 'destinations')
<ul class="pb-10 steps">
<li class="step step-secondary">Select Resource Type</li>
<li class="step step-secondary">Select a Server</li>
<li class="step step-secondary">Select a Destination</li>
</ul>
<div class="flex flex-col justify-center gap-4 text-left xl:flex-row xl:flex-wrap">
@if ($server->isSwarm())
@foreach ($swarmDockers as $swarmDocker)
<div class="box group" wire:click="setDestination('{{ $swarmDocker->uuid }}')">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
Swarm Docker <span class="text-xs">({{ $swarmDocker->name }})</span>
</div>
</div>
</div>
@endforeach
@else
@foreach ($standaloneDockers as $standaloneDocker)
<div class="box group" wire:click="setDestination('{{ $standaloneDocker->uuid }}')">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
Standalone Docker <span class="text-xs">({{ $standaloneDocker->name }})</span>
</div>
<div class="text-xs group-hover:text-white">
Network: {{ $standaloneDocker->network }}</div>
</div>
</div>
@endforeach
@endif
<a href="{{ route('destination.new', ['server_id' => $server_id]) }}"
class="items-center justify-center text-center box-without-bg group bg-coollabs hover:bg-coollabs-100">
<div class="flex flex-col mx-6 ">
<div class="font-bold text-white">
+ Add New
</div>
</div>
</a>
<div class="flex flex-col justify-center gap-4 text-left xl:flex-row xl:flex-wrap">
@if ($server->isSwarm())
@foreach ($swarmDockers as $swarmDocker)
<div class="box group" wire:click="setDestination('{{ $swarmDocker->uuid }}')">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
Swarm Docker <span class="text-xs">({{ $swarmDocker->name }})</span>
</div>
@endif
@if ($current_step === 'existing-postgresql')
<form wire:submit='addExistingPostgresql' class="flex items-end gap-4">
<x-forms.input placeholder="postgres://username:password@database:5432" label="Database URL"
id="existingPostgresqlUrl" />
<x-forms.button type="submit">Add Database</x-forms.button>
</form>
@endif
</div>
</div>
@endforeach
@else
@foreach ($standaloneDockers as $standaloneDocker)
<div class="box group" wire:click="setDestination('{{ $standaloneDocker->uuid }}')">
<div class="flex flex-col mx-6">
<div class="font-bold group-hover:text-white">
Standalone Docker <span class="text-xs">({{ $standaloneDocker->name }})</span>
</div>
<div class="text-xs group-hover:text-white">
Network: {{ $standaloneDocker->network }}</div>
</div>
</div>
@endforeach
@endif
<a href="{{ route('destination.new', ['server_id' => $server_id]) }}" class="items-center justify-center text-center box-without-bg group bg-coollabs hover:bg-coollabs-100">
<div class="flex flex-col mx-6 ">
<div class="font-bold text-white">
+ Add New
</div>
</div>
</a>
</div>
@endif
@if ($current_step === 'existing-postgresql')
<form wire:submit='addExistingPostgresql' class="flex items-end gap-4">
<x-forms.input placeholder="postgres://username:password@database:5432" label="Database URL" id="existingPostgresqlUrl" />
<x-forms.button type="submit">Add Database</x-forms.button>
</form>
@endif
</div>
</div>

View File

@ -13,22 +13,20 @@
<div class="flex items-center gap-2">
<h2>Transactional Email</h2>
</div>
<div class="pb-4 ">Email settings for password resets, invitations, shared with Pro+ subscribers etc.</div>
<div class="pb-4 ">Email settings for password resets, invitations, shared with users etc.</div>
<form wire:submit='submitFromFields' class="pb-4">
<div class="flex flex-col items-end w-full gap-2 xl:flex-row">
<x-forms.input required id="settings.smtp_from_name" helper="Name used in emails." label="From Name" />
<x-forms.input required id="settings.smtp_from_address" helper="Email address used in emails."
label="From Address" />
<x-forms.input required id="settings.smtp_from_address" helper="Email address used in emails." label="From Address" />
<x-forms.button type="submit">
Save
</x-forms.button>
@if (isEmailEnabled($settings) &&
auth()->user()->isAdminFromSession() &&
isTestEmailEnabled($settings))
<x-forms.button onclick="sendTestEmail.showModal()"
class="text-white normal-case btn btn-xs no-animation btn-primary">
Send Test Email
</x-forms.button>
auth()->user()->isAdminFromSession() &&
isTestEmailEnabled($settings))
<x-forms.button onclick="sendTestEmail.showModal()" class="text-white normal-case btn btn-xs no-animation btn-primary">
Send Test Email
</x-forms.button>
@endif
</div>
</form>
@ -43,14 +41,12 @@
<div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input required id="settings.smtp_host" placeholder="smtp.mailgun.org" label="Host" />
<x-forms.input required id="settings.smtp_port" placeholder="587" label="Port" />
<x-forms.input id="settings.smtp_encryption" helper="If SMTP uses SSL, set it to 'tls'."
placeholder="tls" label="Encryption" />
<x-forms.input id="settings.smtp_encryption" helper="If SMTP uses SSL, set it to 'tls'." placeholder="tls" label="Encryption" />
</div>
<div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input id="settings.smtp_username" label="SMTP Username" />
<x-forms.input id="settings.smtp_password" type="password" label="SMTP Password" />
<x-forms.input id="settings.smtp_timeout" helper="Timeout value for sending emails."
label="Timeout" />
<x-forms.input id="settings.smtp_timeout" helper="Timeout value for sending emails." label="Timeout" />
</div>
</div>
<div class="flex justify-end gap-4 pt-6">
@ -68,8 +64,7 @@
<form wire:submit='submitResend' class="flex flex-col">
<div class="flex flex-col gap-4">
<div class="flex flex-col w-full gap-2 xl:flex-row">
<x-forms.input type="password" id="settings.resend_api_key" placeholder="API key" required
label="Host" />
<x-forms.input type="password" id="settings.resend_api_key" placeholder="API key" required label="Host" />
</div>
</div>
<div class="flex justify-end gap-4 pt-6">
@ -80,4 +75,4 @@
</form>
</div>
</div>
</div>
</div>