53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\View\Components\Services;
 | 
						|
 | 
						|
use App\Models\Service;
 | 
						|
use Closure;
 | 
						|
use Illuminate\Contracts\View\View;
 | 
						|
use Illuminate\Support\Collection;
 | 
						|
use Illuminate\View\Component;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
 | 
						|
class Links extends Component
 | 
						|
{
 | 
						|
    public Collection $links;
 | 
						|
    public function __construct(public Service $service)
 | 
						|
    {
 | 
						|
        $this->links = collect([]);
 | 
						|
        $service->applications()->get()->map(function ($application) {
 | 
						|
            $type = $application->serviceType();
 | 
						|
            if ($type) {
 | 
						|
                $links = generateServiceSpecificFqdns($application, false);
 | 
						|
                $this->links = $this->links->merge($links);
 | 
						|
            } else {
 | 
						|
                if ($application->fqdn) {
 | 
						|
                    $fqdns = collect(Str::of($application->fqdn)->explode(','));
 | 
						|
                    $fqdns->map(function ($fqdn) {
 | 
						|
                        $this->links->push(getFqdnWithoutPort($fqdn));
 | 
						|
                    });
 | 
						|
                }
 | 
						|
                if ($application->ports) {
 | 
						|
                    $portsCollection = collect(Str::of($application->ports)->explode(','));
 | 
						|
                    $portsCollection->map(function ($port) {
 | 
						|
                        if (Str::of($port)->contains(':')) {
 | 
						|
                            $hostPort = Str::of($port)->before(':');
 | 
						|
                        } else {
 | 
						|
                            $hostPort = $port;
 | 
						|
                        }
 | 
						|
                        $this->links->push(base_url(withPort: false) . ":{$hostPort}");
 | 
						|
                    });
 | 
						|
                }
 | 
						|
            }
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the view / contents that represent the component.
 | 
						|
     */
 | 
						|
    public function render(): View|Closure|string
 | 
						|
    {
 | 
						|
        return view('components.services.links');
 | 
						|
    }
 | 
						|
}
 |