diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php index 4677ff7a2..1082b48cd 100644 --- a/app/Livewire/Project/Application/Heading.php +++ b/app/Livewire/Project/Application/Heading.php @@ -142,8 +142,8 @@ class Heading extends Component { return view('livewire.project.application.heading', [ 'checkboxes' => [ - ['id' => 'docker_cleanup', 'label' => 'Docker cleanup will be run on the server which removes builder cache and unused images (the next deployment will take longer as the images have to be pulled again)'], - ] + ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], + ], ]); } } diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php index 51f38d2db..f6caa481e 100644 --- a/app/Livewire/Project/Service/Navbar.php +++ b/app/Livewire/Project/Service/Navbar.php @@ -21,6 +21,7 @@ class Navbar extends Component public $isDeploymentProgress = false; public $docker_cleanup = true; + public $title = 'Configuration'; public function mount() @@ -119,9 +120,8 @@ class Navbar extends Component { return view('livewire.project.service.navbar', [ 'checkboxes' => [ - ['id' => 'docker_cleanup', 'label' => 'Docker cleanup will be run on the server which removes builder cache and unused images (the next deployment will take longer as the images have to be pulled again)'], - ] + ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], + ], ]); } - } diff --git a/app/Livewire/Project/Service/ServiceApplicationView.php b/app/Livewire/Project/Service/ServiceApplicationView.php index feb6e7982..56b506043 100644 --- a/app/Livewire/Project/Service/ServiceApplicationView.php +++ b/app/Livewire/Project/Service/ServiceApplicationView.php @@ -3,9 +3,9 @@ namespace App\Livewire\Project\Service; use App\Models\ServiceApplication; -use Livewire\Component; -use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; +use Livewire\Component; class ServiceApplicationView extends Component { @@ -14,8 +14,8 @@ class ServiceApplicationView extends Component public $parameters; public $docker_cleanup = true; + public $delete_volumes = true; - protected $rules = [ 'application.human_name' => 'nullable', @@ -29,7 +29,7 @@ class ServiceApplicationView extends Component 'application.is_stripprefix_enabled' => 'nullable|boolean', ]; - public function updatedApplicationFqdn() + public function updatedApplicationFqdn() { $this->application->fqdn = str($this->application->fqdn)->replaceEnd(',', '')->trim(); $this->application->fqdn = str($this->application->fqdn)->replaceStart(',', '')->trim(); @@ -59,8 +59,9 @@ class ServiceApplicationView extends Component public function delete($password) { - if (!Hash::check($password, Auth::user()->password)) { + if (! Hash::check($password, Auth::user()->password)) { $this->addError('password', 'The provided password is incorrect.'); + return; } @@ -102,12 +103,12 @@ class ServiceApplicationView extends Component { return view('livewire.project.service.service-application-view', [ 'checkboxes' => [ - ['id' => 'delete_volumes', 'label' => 'All associated volumes with this resource will be permanently deleted'], - ['id' => 'docker_cleanup', 'label' => 'Docker cleanup will be run on the server which removes builder cache and unused images'], + ['id' => 'delete_volumes', 'label' => __('resource.delete_volumes')], + ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], // ['id' => 'delete_associated_backups_locally', 'label' => 'All backups associated with this Ressource will be permanently deleted from local storage.'], // ['id' => 'delete_associated_backups_s3', 'label' => 'All backups associated with this Ressource will be permanently deleted from the selected S3 Storage.'], // ['id' => 'delete_associated_backups_sftp', 'label' => 'All backups associated with this Ressource will be permanently deleted from the selected SFTP Storage.'] - ] + ], ]); } } diff --git a/app/Livewire/Project/Shared/Danger.php b/app/Livewire/Project/Shared/Danger.php index 609d61698..543e64539 100644 --- a/app/Livewire/Project/Shared/Danger.php +++ b/app/Livewire/Project/Shared/Danger.php @@ -4,24 +4,33 @@ namespace App\Livewire\Project\Shared; use App\Jobs\DeleteResourceJob; use App\Models\Service; -use App\Models\ServiceDatabase; use App\Models\ServiceApplication; +use App\Models\ServiceDatabase; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; use Livewire\Component; use Visus\Cuid2\Cuid2; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Auth; class Danger extends Component { public $resource; + public $resourceName; + public $projectUuid; + public $environmentName; + public bool $delete_configurations = true; + public bool $delete_volumes = true; + public bool $docker_cleanup = true; + public bool $delete_connected_networks = true; + public ?string $modalId = null; + public string $resourceDomain = ''; public function mount() @@ -42,11 +51,13 @@ class Danger extends Component if ($this->resource === null) { $this->resourceName = 'Unknown Resource'; + return; } - if (!method_exists($this->resource, 'type')) { + if (! method_exists($this->resource, 'type')) { $this->resourceName = 'Unknown Resource'; + return; } @@ -80,13 +91,15 @@ class Danger extends Component public function delete($password) { - if (!Hash::check($password, Auth::user()->password)) { + if (! Hash::check($password, Auth::user()->password)) { $this->addError('password', 'The provided password is incorrect.'); + return; } - if (!$this->resource) { + if (! $this->resource) { $this->addError('resource', 'Resource not found.'); + return; } @@ -113,14 +126,14 @@ class Danger extends Component { return view('livewire.project.shared.danger', [ 'checkboxes' => [ - ['id' => 'delete_volumes', 'label' => 'All associated volumes with this resource will be permanently deleted'], - ['id' => 'delete_connected_networks', 'label' => 'All connected networks with this resource will be permanently deleted (predefined networks will not be deleted)'], - ['id' => 'delete_configurations', 'label' => 'All configuration files will be permanently deleted form the server'], - ['id' => 'docker_cleanup', 'label' => 'Docker cleanup will be run on the server which removes builder cache and unused images'], + ['id' => 'delete_volumes', 'label' => __('resource.delete_volumes')], + ['id' => 'delete_connected_networks', 'label' => __('resource.delete_connected_networks')], + ['id' => 'delete_configurations', 'label' => __('resource.delete_configurations')], + ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], // ['id' => 'delete_associated_backups_locally', 'label' => 'All backups associated with this Ressource will be permanently deleted from local storage.'], // ['id' => 'delete_associated_backups_s3', 'label' => 'All backups associated with this Ressource will be permanently deleted from the selected S3 Storage.'], // ['id' => 'delete_associated_backups_sftp', 'label' => 'All backups associated with this Ressource will be permanently deleted from the selected SFTP Storage.'] - ] + ], ]); } } diff --git a/lang/en.json b/lang/en.json index 461a96e9a..e1603c303 100644 --- a/lang/en.json +++ b/lang/en.json @@ -26,5 +26,11 @@ "input.code": "One-time code", "input.recovery_code": "Recovery code", "button.save": "Save", - "repository.url": "Examples
For Public repositories, use https://....
For Private repositories, use git@....

https://github.com/coollabsio/coolify-examples main branch will be selected
https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify nodejs-fastify branch will be selected.
https://gitea.com/sedlav/expressjs.git main branch will be selected.
https://gitlab.com/andrasbacsai/nodejs-example.git main branch will be selected." + "repository.url": "Examples
For Public repositories, use https://....
For Private repositories, use git@....

https://github.com/coollabsio/coolify-examples main branch will be selected
https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify nodejs-fastify branch will be selected.
https://gitea.com/sedlav/expressjs.git main branch will be selected.
https://gitlab.com/andrasbacsai/nodejs-example.git main branch will be selected.", + "service.stop": "This service will be stopped.", + "resource.docker_cleanup": "Run Docker Cleanup (remove unused images and builder cache).", + "resource.non_persistent": "All non-persistent data will be deleted.", + "resource.delete_volumes": "All volumes associated with this resource will be permanently deleted.", + "resource.delete_connected_networks": "All non-predefined networks associated with this resource will be permanently deleted.", + "resource.delete_configurations": "All configuration files will be permanently deleted from the server." } diff --git a/resources/views/components/modal-confirmation.blade.php b/resources/views/components/modal-confirmation.blade.php index e31284e7c..529b4f0d2 100644 --- a/resources/views/components/modal-confirmation.blade.php +++ b/resources/views/components/modal-confirmation.blade.php @@ -1,25 +1,25 @@ @props([ -'title' => 'Are you sure?', -'isErrorButton' => false, -'buttonTitle' => 'Confirm Action', -'buttonFullWidth' => false, -'customButton' => null, -'disabled' => false, -'submitAction' => 'delete', -'content' => null, -'checkboxes' => [], -'actions' => [], -'confirmWithText' => true, -'confirmationText' => 'Confirm Deletion', -'confirmationLabel' => 'Please confirm the execution of the actions by entering the Name below', -'shortConfirmationLabel' => 'Name', -'confirmWithPassword' => true, -'step1ButtonText' => 'Continue Deletion', -'step2ButtonText' => 'Delete Permanently', -'step3ButtonText' => 'Confirm Permanent Deletion', -'dispatchEvent' => false, -'dispatchEventType' => 'success', -'dispatchEventMessage' => '', + 'title' => 'Are you sure?', + 'isErrorButton' => false, + 'buttonTitle' => 'Confirm Action', + 'buttonFullWidth' => false, + 'customButton' => null, + 'disabled' => false, + 'submitAction' => 'delete', + 'content' => null, + 'checkboxes' => [], + 'actions' => [], + 'confirmWithText' => true, + 'confirmationText' => 'Confirm Deletion', + 'confirmationLabel' => 'Please confirm the execution of the actions by entering the Name below', + 'shortConfirmationLabel' => 'Name', + 'confirmWithPassword' => true, + 'step1ButtonText' => 'Continue', + 'step2ButtonText' => 'Continue', + 'step3ButtonText' => 'Confirm', + 'dispatchEvent' => false, + 'dispatchEventType' => 'success', + 'dispatchEventMessage' => '', ])
+}" @keydown.escape.window="modalOpen = false; resetModal()" :class="{ 'z-40': modalOpen }" + class="relative w-auto h-auto"> @if ($customButton) - @if ($buttonFullWidth) - - {{ $customButton }} - + @if ($buttonFullWidth) + + {{ $customButton }} + + @else + + {{ $customButton }} + + @endif @else - - {{ $customButton }} - - @endif - @else - @if ($content) -
- {{ $content }} -
- @else - @if ($disabled) - @if ($buttonFullWidth) - - {{ $buttonTitle }} - - @else - - {{ $buttonTitle }} - - @endif - @elseif ($isErrorButton) - @if ($buttonFullWidth) - - {{ $buttonTitle }} - - @else - - {{ $buttonTitle }} - - @endif - @else - @if ($buttonFullWidth) - - {{ $buttonTitle }} - - @else - - {{ $buttonTitle }} - - @endif - @endif - @endif + @if ($content) +
+ {{ $content }} +
+ @else + @if ($disabled) + @if ($buttonFullWidth) + + {{ $buttonTitle }} + + @else + + {{ $buttonTitle }} + + @endif + @elseif ($isErrorButton) + @if ($buttonFullWidth) + + {{ $buttonTitle }} + + @else + + {{ $buttonTitle }} + + @endif + @else + @if ($buttonFullWidth) + + {{ $buttonTitle }} + + @else + + {{ $buttonTitle }} + + @endif + @endif + @endif @endif @@ -274,7 +307,9 @@