Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/Data/Label.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public function __construct(
public string $name,
public string $color,
public ?string $description,
public bool $default = false,
) {}

public static function fromArray(array $data): self
Expand All @@ -20,6 +21,7 @@ public static function fromArray(array $data): self
name: $data['name'],
color: $data['color'],
description: $data['description'] ?? null,
default: $data['default'] ?? false,
);
}

Expand All @@ -30,6 +32,29 @@ public function toArray(): array
'name' => $this->name,
'color' => $this->color,
'description' => $this->description,
'default' => $this->default,
];
}

/**
* Get full hex color with #
*/
public function hexColor(): string
{
return '#'.$this->color;
}

/**
* Check if color is light or dark
*/
public function isLightColor(): bool
{
$r = hexdec(substr($this->color, 0, 2));
$g = hexdec(substr($this->color, 2, 2));
$b = hexdec(substr($this->color, 4, 2));

$brightness = (($r * 299) + ($g * 587) + ($b * 114)) / 1000;

return $brightness > 155;
}
}
33 changes: 33 additions & 0 deletions src/Requests/IssueLabels/AddIssueLabelsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\IssueLabels;

use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;

class AddIssueLabelsRequest extends Request implements HasBody
{
use HasJsonBody;

protected Method $method = Method::POST;

public function __construct(
protected readonly string $fullName,
protected readonly int $issueNumber,
protected readonly array $labels,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/issues/{$this->issueNumber}/labels";
}

protected function defaultBody(): array
{
return ['labels' => $this->labels];
}
}
23 changes: 23 additions & 0 deletions src/Requests/IssueLabels/ClearIssueLabelsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\IssueLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class ClearIssueLabelsRequest extends Request
{
protected Method $method = Method::DELETE;

public function __construct(
protected readonly string $fullName,
protected readonly int $issueNumber,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/issues/{$this->issueNumber}/labels";
}
}
23 changes: 23 additions & 0 deletions src/Requests/IssueLabels/ListIssueLabelsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\IssueLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class ListIssueLabelsRequest extends Request
{
protected Method $method = Method::GET;

public function __construct(
protected readonly string $fullName,
protected readonly int $issueNumber,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/issues/{$this->issueNumber}/labels";
}
}
24 changes: 24 additions & 0 deletions src/Requests/IssueLabels/RemoveIssueLabelRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\IssueLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class RemoveIssueLabelRequest extends Request
{
protected Method $method = Method::DELETE;

public function __construct(
protected readonly string $fullName,
protected readonly int $issueNumber,
protected readonly string $label,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/issues/{$this->issueNumber}/labels/{$this->label}";
}
}
33 changes: 33 additions & 0 deletions src/Requests/IssueLabels/SetIssueLabelsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\IssueLabels;

use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;

class SetIssueLabelsRequest extends Request implements HasBody
{
use HasJsonBody;

protected Method $method = Method::PUT;

public function __construct(
protected readonly string $fullName,
protected readonly int $issueNumber,
protected readonly array $labels,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/issues/{$this->issueNumber}/labels";
}

protected function defaultBody(): array
{
return ['labels' => $this->labels];
}
}
38 changes: 38 additions & 0 deletions src/Requests/RepositoryLabels/CreateLabelRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\RepositoryLabels;

use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;

class CreateLabelRequest extends Request implements HasBody
{
use HasJsonBody;

protected Method $method = Method::POST;

public function __construct(
protected readonly string $fullName,
protected readonly string $name,
protected readonly string $color,
protected readonly ?string $description = null,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/labels";
}

protected function defaultBody(): array
{
return [
'name' => $this->name,
'color' => $this->color,
'description' => $this->description,
];
}
}
23 changes: 23 additions & 0 deletions src/Requests/RepositoryLabels/DeleteLabelRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\RepositoryLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class DeleteLabelRequest extends Request
{
protected Method $method = Method::DELETE;

public function __construct(
protected readonly string $fullName,
protected readonly string $name,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/labels/{$this->name}";
}
}
23 changes: 23 additions & 0 deletions src/Requests/RepositoryLabels/GetLabelRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\RepositoryLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class GetLabelRequest extends Request
{
protected Method $method = Method::GET;

public function __construct(
protected readonly string $fullName,
protected readonly string $name,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/labels/{$this->name}";
}
}
22 changes: 22 additions & 0 deletions src/Requests/RepositoryLabels/ListLabelsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\RepositoryLabels;

use Saloon\Enums\Method;
use Saloon\Http\Request;

class ListLabelsRequest extends Request
{
protected Method $method = Method::GET;

public function __construct(
protected readonly string $fullName,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/labels";
}
}
33 changes: 33 additions & 0 deletions src/Requests/RepositoryLabels/UpdateLabelRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace ConduitUI\Issue\Requests\RepositoryLabels;

use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;

class UpdateLabelRequest extends Request implements HasBody
{
use HasJsonBody;

protected Method $method = Method::PATCH;

public function __construct(
protected readonly string $fullName,
protected readonly string $name,
protected readonly array $attributes,
) {}

public function resolveEndpoint(): string
{
return "/repos/{$this->fullName}/labels/{$this->name}";
}

protected function defaultBody(): array
{
return $this->attributes;
}
}
Loading
Loading