HEX
Server: nginx/1.24.0
System: Linux prod-btpayments-io 6.14.0-1018-aws #18~24.04.1-Ubuntu SMP Mon Nov 24 19:46:27 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: /var/www/BtPayments/BtPayments-platform/app/Libraries/LaravelKit/ChartJS.php
<?php

namespace App\Libraries\LaravelKit;

use Carbon\Carbon;

class ChartJS
{
    public Carbon $startDate;
    public Carbon $endDate;
    public array $dates;

    public array $datasets;

    public function __construct(Carbon $startDate, Carbon $endDate, array $datasets)
    {
        $this->startDate = $startDate;
        $this->endDate = $endDate;
        $this->datasets = $datasets;

        for ($date = $startDate; $date <= $endDate; $date->addDay()) {
            $this->dates[] = $date->format('Y-m-d');
        }
    }

    public static function makeData(Carbon $startDate, Carbon $endDate, $data)
    {
        $instance = new self($startDate, $endDate, $data);

        return $instance->handler();
    }

    public function handler()
    {
        $datasets = [];
        foreach ($this->datasets as $label => $data) {
            $dataset = [
                'label'     =>  $label,
                'data'      =>  $this->formatChartDataByDates($data),
            ];

            if (array_key_first($this->datasets) !== $label) $dataset['hidden'] = true;

            $datasets[] = $dataset;
        }

        return [
            'labels'    =>  array_map(fn($date) => substr($date, 5), $this->dates),
            'datasets'  =>  $datasets,
        ];
    }

    /**
     * 按日期格式化图表数据
     */
    protected function formatChartDataByDates($data)
    {
        $result = [];

        foreach ($this->dates as $date) {
            $result[] = $data->get($date, 0);
        }

        return $result;
    }
}