mooxphp/moox

View on GitHub
packages/core/src/Traits/HasDynamicTabs.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Moox\Core\Traits;

use Filament\Resources\Components\Tab;
use Illuminate\Support\Facades\Config;

trait HasDynamicTabs
{
    use QueriesInConfig;

    public function getDynamicTabs(string $configKey, string $modelClass): array
    {
        $tabsConfig = Config::get($configKey, []);
        $tabs = [];

        foreach ($tabsConfig as $key => $tabConfig) {
            $tab = Tab::make($tabConfig['label'])
                ->icon($tabConfig['icon']);

            $queryConditions = $tabConfig['query'];

            if (empty($queryConditions)) {
                $tab->modifyQueryUsing(fn ($query) => $query)
                    ->badge($modelClass::query()->count());
            } else {
                $tab->modifyQueryUsing(function ($query) use ($queryConditions) {
                    return $this->applyConditions($query, $queryConditions);
                });

                $badgeCountQuery = $modelClass::query();
                $badgeCountQuery = $this->applyConditions($badgeCountQuery, $queryConditions);

                $tab->badge($badgeCountQuery->count());
            }

            $tabs[$key] = $tab;
        }

        return $tabs;
    }
}