mirror of
https://github.com/cupcakearmy/coolify.git
synced 2024-10-23 00:24:15 +02:00
commit
a4cc406114
@ -40,7 +40,7 @@ public function __invoke(Server $server, Team $team)
|
|||||||
"echo ####### Restarting Docker Engine...",
|
"echo ####### Restarting Docker Engine...",
|
||||||
"systemctl restart docker",
|
"systemctl restart docker",
|
||||||
"echo ####### Creating default network...",
|
"echo ####### Creating default network...",
|
||||||
"docker network create --attachable coolify",
|
"docker network create --attachable coolify >/dev/null 2>&1 || true",
|
||||||
"echo ####### Done!"
|
"echo ####### Done!"
|
||||||
], $server);
|
], $server);
|
||||||
$found = StandaloneDocker::where('server_id', $server->id);
|
$found = StandaloneDocker::where('server_id', $server->id);
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
use Str;
|
use Str;
|
||||||
|
|
||||||
use function Laravel\Prompts\select;
|
use function Laravel\Prompts\select;
|
||||||
|
use function Laravel\Prompts\text;
|
||||||
|
|
||||||
class TestEmail extends Command
|
class TestEmail extends Command
|
||||||
{
|
{
|
||||||
@ -44,9 +45,10 @@ class TestEmail extends Command
|
|||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*/
|
*/
|
||||||
private ?MailMessage $mail = null;
|
private ?MailMessage $mail = null;
|
||||||
|
private string $email = 'andras.bacsai@protonmail.com';
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
$email = select(
|
$type = select(
|
||||||
'Which Email should be sent?',
|
'Which Email should be sent?',
|
||||||
options: [
|
options: [
|
||||||
'emails-test' => 'Test',
|
'emails-test' => 'Test',
|
||||||
@ -60,15 +62,15 @@ public function handle()
|
|||||||
'waitlist-confirmation' => 'Waitlist Confirmation',
|
'waitlist-confirmation' => 'Waitlist Confirmation',
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
$type = set_transanctional_email_settings();
|
$this->email = text('Email Address to send to');
|
||||||
if (!$type) {
|
set_transanctional_email_settings();
|
||||||
throw new Exception('No email settings found.');
|
|
||||||
}
|
|
||||||
$this->mail = new MailMessage();
|
$this->mail = new MailMessage();
|
||||||
$this->mail->subject("Test Email");
|
$this->mail->subject("Test Email");
|
||||||
switch ($email) {
|
switch ($type) {
|
||||||
case 'emails-test':
|
case 'emails-test':
|
||||||
$this->mail = (new Test())->toMail();
|
$this->mail = (new Test())->toMail();
|
||||||
|
$this->sendEmail();
|
||||||
break;
|
break;
|
||||||
case 'application-deployment-success':
|
case 'application-deployment-success':
|
||||||
$application = Application::all()->first();
|
$application = Application::all()->first();
|
||||||
@ -172,11 +174,7 @@ private function sendEmail()
|
|||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
fn (Message $message) => $message
|
fn (Message $message) => $message
|
||||||
->from(
|
->to($this->email)
|
||||||
'internal@example.com',
|
|
||||||
'Test Email',
|
|
||||||
)
|
|
||||||
->to('test@example.com')
|
|
||||||
->subject($this->mail->subject)
|
->subject($this->mail->subject)
|
||||||
->html((string)$this->mail->render())
|
->html((string)$this->mail->render())
|
||||||
);
|
);
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
use App\Models\PrivateKey;
|
use App\Models\PrivateKey;
|
||||||
use App\Models\Project;
|
use App\Models\Project;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
use App\Models\Team;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
@ -70,9 +71,10 @@ public function restartBoarding()
|
|||||||
}
|
}
|
||||||
public function skipBoarding()
|
public function skipBoarding()
|
||||||
{
|
{
|
||||||
currentTeam()->update([
|
Team::find(currentTeam()->id)->update([
|
||||||
'show_boarding' => false
|
'show_boarding' => false
|
||||||
]);
|
]);
|
||||||
|
ray(currentTeam());
|
||||||
refreshSession();
|
refreshSession();
|
||||||
return redirect()->route('dashboard');
|
return redirect()->route('dashboard');
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,6 @@ public function submitResend() {
|
|||||||
$this->validate([
|
$this->validate([
|
||||||
'settings.resend_api_key' => 'required'
|
'settings.resend_api_key' => 'required'
|
||||||
]);
|
]);
|
||||||
$this->settings->smtp_enabled = false;
|
|
||||||
$this->settings->save();
|
$this->settings->save();
|
||||||
$this->emit('success', 'Settings saved successfully.');
|
$this->emit('success', 'Settings saved successfully.');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@ -68,9 +67,18 @@ public function submitResend() {
|
|||||||
return general_error_handler($e, $this);
|
return general_error_handler($e, $this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public function instantSaveResend() {
|
||||||
|
try {
|
||||||
|
$this->settings->smtp_enabled = false;
|
||||||
|
$this->submitResend();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return general_error_handler($e, $this);
|
||||||
|
}
|
||||||
|
}
|
||||||
public function instantSave()
|
public function instantSave()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
$this->settings->resend_enabled = false;
|
||||||
$this->submit();
|
$this->submit();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return general_error_handler($e, $this);
|
return general_error_handler($e, $this);
|
||||||
@ -89,7 +97,6 @@ public function submit()
|
|||||||
'settings.smtp_password' => 'nullable',
|
'settings.smtp_password' => 'nullable',
|
||||||
'settings.smtp_timeout' => 'nullable',
|
'settings.smtp_timeout' => 'nullable',
|
||||||
]);
|
]);
|
||||||
$this->settings->resend_enabled = false;
|
|
||||||
$this->settings->save();
|
$this->settings->save();
|
||||||
$this->emit('success', 'Settings saved successfully.');
|
$this->emit('success', 'Settings saved successfully.');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
@ -23,7 +23,7 @@ public function switch_to($team_id)
|
|||||||
if (!$team_to_switch_to) {
|
if (!$team_to_switch_to) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
session(['currentTeam' => $team_to_switch_to]);
|
refreshSession($team_to_switch_to);
|
||||||
return redirect(request()->header('Referer'));
|
return redirect(request()->header('Referer'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ class IsBoardingFlow
|
|||||||
*/
|
*/
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
// ray()->showQueries()->color('orange');
|
ray()->showQueries()->color('orange');
|
||||||
if (showBoarding() && !in_array($request->path(), allowedPathsForBoardingAccounts())) {
|
if (showBoarding() && !in_array($request->path(), allowedPathsForBoardingAccounts())) {
|
||||||
return redirect('boarding');
|
return redirect('boarding');
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
use App\Notifications\Channels\SendsEmail;
|
use App\Notifications\Channels\SendsEmail;
|
||||||
use App\Notifications\TransactionalEmails\ResetPassword as TransactionalEmailsResetPassword;
|
use App\Notifications\TransactionalEmails\ResetPassword as TransactionalEmailsResetPassword;
|
||||||
|
use Cache;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
@ -94,7 +95,9 @@ public function isInstanceAdmin()
|
|||||||
|
|
||||||
public function currentTeam()
|
public function currentTeam()
|
||||||
{
|
{
|
||||||
return Team::find(session('currentTeam')->id);
|
return Cache::remember('team:' . auth()->user()->id, 3600, function() {
|
||||||
|
return Team::find(session('currentTeam')->id);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function otherTeams()
|
public function otherTeams()
|
||||||
|
@ -16,6 +16,7 @@ class DeploymentFailed extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public Application $application;
|
public Application $application;
|
||||||
public string $deployment_uuid;
|
public string $deployment_uuid;
|
||||||
public ?ApplicationPreview $preview = null;
|
public ?ApplicationPreview $preview = null;
|
||||||
|
@ -16,6 +16,7 @@ class DeploymentSuccess extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public Application $application;
|
public Application $application;
|
||||||
public string $deployment_uuid;
|
public string $deployment_uuid;
|
||||||
public ApplicationPreview|null $preview = null;
|
public ApplicationPreview|null $preview = null;
|
||||||
|
@ -14,6 +14,7 @@ class StatusChanged extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public $application;
|
public $application;
|
||||||
|
|
||||||
public string $application_name;
|
public string $application_name;
|
||||||
|
@ -14,6 +14,7 @@ class BackupFailed extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public string $name;
|
public string $name;
|
||||||
public string $frequency;
|
public string $frequency;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ class BackupSuccess extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public string $name;
|
public string $name;
|
||||||
public string $frequency;
|
public string $frequency;
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ class GeneralNotification extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public function __construct(public string $message)
|
public function __construct(public string $message)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ class NotReachable extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public function __construct(public Server $server)
|
public function __construct(public Server $server)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ class Test extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public function __construct(public string|null $emails = null)
|
public function __construct(public string|null $emails = null)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ class InvitationLink extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public function via(): array
|
public function via(): array
|
||||||
{
|
{
|
||||||
return [TransactionalEmailChannel::class];
|
return [TransactionalEmailChannel::class];
|
||||||
|
@ -12,6 +12,7 @@ class Test extends Notification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 5;
|
||||||
public function __construct(public string $emails)
|
public function __construct(public string $emails)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -57,9 +57,15 @@ function showBoarding(): bool
|
|||||||
{
|
{
|
||||||
return currentTeam()->show_boarding ?? false;
|
return currentTeam()->show_boarding ?? false;
|
||||||
}
|
}
|
||||||
function refreshSession(): void
|
function refreshSession(?Team $team = null): void
|
||||||
{
|
{
|
||||||
$team = Team::find(currentTeam()->id);
|
if (!$team) {
|
||||||
|
$team = Team::find(currentTeam()->id);
|
||||||
|
}
|
||||||
|
Cache::forget('team:' . auth()->user()->id);
|
||||||
|
Cache::remember('team:' . auth()->user()->id, 3600, function() use ($team) {
|
||||||
|
return $team;
|
||||||
|
});
|
||||||
session(['currentTeam' => $team]);
|
session(['currentTeam' => $team]);
|
||||||
}
|
}
|
||||||
function general_error_handler(Throwable | null $err = null, $that = null, $isJson = false, $customErrorMessage = null): mixed
|
function general_error_handler(Throwable | null $err = null, $that = null, $isJson = false, $customErrorMessage = null): mixed
|
||||||
|
@ -3,11 +3,11 @@
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
// @see https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
// @see https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
||||||
'dsn' => 'https://abe219b6573947128ecf523c835f5f38@o1082494.ingest.sentry.io/4505347448045568',
|
'dsn' => 'https://62de992090e4e0cb28f18231835ea006@o1082494.ingest.sentry.io/4505347448045568',
|
||||||
|
|
||||||
// The release version of your application
|
// The release version of your application
|
||||||
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
||||||
'release' => '4.0.0-beta.28',
|
'release' => '4.0.0-beta.29',
|
||||||
'server_name' => env('APP_ID', 'coolify'),
|
'server_name' => env('APP_ID', 'coolify'),
|
||||||
// When left empty or `null` the Laravel environment will be used
|
// When left empty or `null` the Laravel environment will be used
|
||||||
'environment' => config('app.env'),
|
'environment' => config('app.env'),
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return '4.0.0-beta.28';
|
return '4.0.0-beta.29';
|
||||||
|
@ -20,20 +20,31 @@
|
|||||||
id="team.discord_webhook_url" label="Webhook" />
|
id="team.discord_webhook_url" label="Webhook" />
|
||||||
</form>
|
</form>
|
||||||
@if (data_get($team, 'discord_enabled'))
|
@if (data_get($team, 'discord_enabled'))
|
||||||
<h3 class="mt-4">Subscribe to events</h3>
|
<h2 class="mt-4">Subscribe to events</h2>
|
||||||
<div class="w-64">
|
<div class="w-64">
|
||||||
|
|
||||||
|
|
||||||
@if (isDev())
|
@if (isDev())
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_test" label="Test" />
|
<h3 class="mt-4">Test</h3>
|
||||||
|
<div class="flex items-end gap-10">
|
||||||
|
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_test" label="Enabled" />
|
||||||
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<h4 class="mt-4">General</h4>
|
<h3 class="mt-4">Container Status Changes</h3>
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_status_changes"
|
<div class="flex items-end gap-10">
|
||||||
label="Container Status Changes" />
|
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_status_changes"
|
||||||
<h4 class="mt-4">Applications</h4>
|
label="Enabled" />
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_deployments"
|
</div>
|
||||||
label="Deployments" />
|
<h3 class="mt-4">Application Deployments</h3>
|
||||||
<h4 class="mt-4">Databases</h4>
|
<div class="flex items-end gap-10">
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_database_backups"
|
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_deployments"
|
||||||
label="Backup Statuses" />
|
label="Enabled" />
|
||||||
|
</div>
|
||||||
|
<h3 class="mt-4">Backup Status</h3>
|
||||||
|
<div class="flex items-end gap-10">
|
||||||
|
<x-forms.checkbox instantSave="saveModel" id="team.discord_notifications_database_backups"
|
||||||
|
label="Enabled" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
Copy from Instance Settings
|
Copy from Instance Settings
|
||||||
</x-forms.button>
|
</x-forms.button>
|
||||||
@endif
|
@endif
|
||||||
@if (isEmailEnabled($team) || data_get($team, 'use_instance_email_settings'))
|
@if (isEmailEnabled($team) && auth()->user()->isAdminFromSession())
|
||||||
<x-forms.button onclick="sendTestEmail.showModal()"
|
<x-forms.button onclick="sendTestEmail.showModal()"
|
||||||
class="text-white normal-case btn btn-xs no-animation btn-primary">
|
class="text-white normal-case btn btn-xs no-animation btn-primary">
|
||||||
Send Test Email
|
Send Test Email
|
||||||
@ -36,12 +36,11 @@ class="text-white normal-case btn btn-xs no-animation btn-primary">
|
|||||||
label="Use hosted email service" />
|
label="Use hosted email service" />
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="pb-4 w-96">
|
<div class="pb-4 w-96">
|
||||||
<x-forms.checkbox disabled id="team.use_instance_email_settings"
|
<x-forms.checkbox disabled id="team.use_instance_email_settings"
|
||||||
label="Use hosted email service (Pro+ subscription required)" />
|
label="Use hosted email service (Pro+ subscription required)" />
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<h3 class="pb-4">Custom Email Service</h3>
|
|
||||||
@if (!$team->use_instance_email_settings)
|
@if (!$team->use_instance_email_settings)
|
||||||
<form class="flex flex-col items-end gap-2 pb-4 xl:flex-row" wire:submit.prevent='submitFromFields'>
|
<form class="flex flex-col items-end gap-2 pb-4 xl:flex-row" wire:submit.prevent='submitFromFields'>
|
||||||
<x-forms.input required id="team.smtp_from_name" helper="Name used in emails." label="From Name" />
|
<x-forms.input required id="team.smtp_from_name" helper="Name used in emails." label="From Name" />
|
||||||
@ -110,19 +109,27 @@ class="text-white normal-case btn btn-xs no-animation btn-primary">
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
@if (isEmailEnabled($team) || data_get($team, 'use_instance_email_settings'))
|
@if (isEmailEnabled($team) || data_get($team, 'use_instance_email_settings'))
|
||||||
<h3 class="mt-4">Subscribe to events</h3>
|
<h2 class="mt-4">Subscribe to events</h2>
|
||||||
<div class="w-64">
|
<div class="w-64">
|
||||||
@if (isDev())
|
@if (isDev())
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_test" label="Test" />
|
<h3 class="mt-4">Test</h3>
|
||||||
|
<div class="flex items-end gap-10">
|
||||||
|
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_test" label="Enabled" />
|
||||||
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<h4 class="mt-4">General</h4>
|
<h3 class="mt-4">Container Status Changes</h3>
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_status_changes"
|
<div class="flex items-end gap-10">
|
||||||
label="Container Status Changes" />
|
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_status_changes" label="Enabled" />
|
||||||
<h4 class="mt-4">Applications</h4>
|
</div>
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_deployments" label="Deployments" />
|
<h3 class="mt-4">Application Deployments</h3>
|
||||||
<h4 class="mt-4">Databases</h4>
|
<div class="flex items-end gap-10">
|
||||||
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_database_backups"
|
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_deployments" label="Enabled" />
|
||||||
label="Backup Statuses" />
|
</div>
|
||||||
|
<h3 class="mt-4">Backup Status</h3>
|
||||||
|
<div class="flex items-end gap-10">
|
||||||
|
<x-forms.checkbox instantSave="saveModel" id="team.smtp_notifications_database_backups"
|
||||||
|
label="Enabled" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -22,12 +22,12 @@
|
|||||||
<x-forms.button type="submit">
|
<x-forms.button type="submit">
|
||||||
Save
|
Save
|
||||||
</x-forms.button>
|
</x-forms.button>
|
||||||
@if ($settings->resend_enabled || $settings->smtp_enabled)
|
@if (isEmailEnabled($settings))
|
||||||
<x-forms.button onclick="sendTestEmail.showModal()"
|
<x-forms.button onclick="sendTestEmail.showModal()"
|
||||||
class="text-white normal-case btn btn-xs no-animation btn-primary">
|
class="text-white normal-case btn btn-xs no-animation btn-primary">
|
||||||
Send Test Email
|
Send Test Email
|
||||||
</x-forms.button>
|
</x-forms.button>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
@ -67,14 +67,15 @@ class="text-white normal-case btn btn-xs no-animation btn-primary">
|
|||||||
<summary class="text-xl collapse-title">
|
<summary class="text-xl collapse-title">
|
||||||
<div>Resend</div>
|
<div>Resend</div>
|
||||||
<div class="w-32">
|
<div class="w-32">
|
||||||
<x-forms.checkbox instantSave='submitResend' id="settings.resend_enabled" label="Enabled" />
|
<x-forms.checkbox instantSave='instantSaveResend' id="settings.resend_enabled" label="Enabled" />
|
||||||
</div>
|
</div>
|
||||||
</summary>
|
</summary>
|
||||||
<div class="collapse-content">
|
<div class="collapse-content">
|
||||||
<form wire:submit.prevent='submitResend' class="flex flex-col">
|
<form wire:submit.prevent='submitResend' class="flex flex-col">
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
<div class="flex flex-col w-full gap-2 xl:flex-row">
|
<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" label="Host" />
|
<x-forms.input type="password" id="settings.resend_api_key" placeholder="API key"
|
||||||
|
label="Host" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end gap-4 pt-6">
|
<div class="flex justify-end gap-4 pt-6">
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"version": "3.12.36"
|
"version": "3.12.36"
|
||||||
},
|
},
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.28"
|
"version": "4.0.0-beta.29"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user