InfluxOW/laravel_ddd_ecommerce

View on GitHub
app/Domains/Common/Classes/Excel/ExportColumn.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Domains\Common\Classes\Excel;

use App\Domains\Common\Utils\LangUtils;
use BackedEnum;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;

final readonly class ExportColumn
{
    private function __construct(private BackedEnum $key, private string $format)
    {
    }

    public static function create(BackedEnum $key, string $format = NumberFormat::FORMAT_TEXT): self
    {
        return new self($key, $format);
    }

    public function value(Model $model): mixed
    {
        return Arr::get($model, $this->key->value);
    }

    public function heading(): string
    {
        /** @var string $translation */
        $translation = LangUtils::translateEnum($this->key);

        return $translation;
    }

    public function format(): string
    {
        return $this->format;
    }
}