between(start: now()->startOfMonth(), end: now()->endOfMonth()) ->perDay() ->count(); $cancelledOrder = Trend::query(UserOrder::cancelled()) ->between(start: now()->startOfMonth(), end: now()->endOfMonth()) ->perDay() ->count(); $completedOrder = Trend::query(UserOrder::completed()) ->between(start: now()->startOfMonth(), end: now()->endOfMonth()) ->perDay() ->count(); $datasets = [ $this->getDataset($pendingOrder, __('filament::resources.stats.orders_chart.pending'), '#fbbf24', '#f59e0b'), $this->getDataset($cancelledOrder, __('filament::resources.stats.orders_chart.cancelled'), '#dc2626', '#b91c1c'), $this->getDataset($completedOrder, __('filament::resources.stats.orders_chart.completed'), '#10b981', '#059669'), ]; $data = $pendingOrder->map(fn (TrendValue $value) => $value->date)->merge( $cancelledOrder->map(fn (TrendValue $value) => $value->date), )->merge( $completedOrder->map(fn (TrendValue $value) => $value->date), )->unique()->sort()->flatten(); return [ 'datasets' => $datasets, 'labels' => $data, ]; } protected function getDataset($data, $label, string $backgroundColor, string $borderColor): array { return [ 'label' => $label, 'data' => $data->map(fn (TrendValue $value) => $value->aggregate), 'backgroundColor' => $backgroundColor, 'borderColor' => $borderColor, ]; } protected function getType(): string { return 'bar'; } }