Commit 501e01f2 authored by Kevin Yumang's avatar Kevin Yumang

SERV-2286 - data chart manager object (series & categories implemented) WIP

parent 70f706df
...@@ -28,7 +28,10 @@ function init_chart(chartId) { ...@@ -28,7 +28,10 @@ function init_chart(chartId) {
if (chartElement) { if (chartElement) {
let elementObject = $(chartElement); let elementObject = $(chartElement);
let numberOfCharts = elementObject.attr('charts') ?? 1;
let objectData = elementObject.attr('data') ? JSON.parse(elementObject.attr('data')) : null;
let numberOfCharts = (objectData && objectData.charts) ?? elementObject.attr('charts') ?? 1;
set_chart_height(numberOfCharts, chartElement) set_chart_height(numberOfCharts, chartElement)
let chartInstance = echarts.init(chartElement); let chartInstance = echarts.init(chartElement);
...@@ -41,7 +44,7 @@ function init_chart(chartId) { ...@@ -41,7 +44,7 @@ function init_chart(chartId) {
fontSize: 15 fontSize: 15
}); });
set_data(elementObject, numberOfCharts, function(options) { set_data(objectData, elementObject, numberOfCharts, function(options) {
chartInstance.hideLoading(); chartInstance.hideLoading();
chartInstance.setOption(options); chartInstance.setOption(options);
setResizeEvent(chartElement, chartInstance); setResizeEvent(chartElement, chartInstance);
...@@ -49,7 +52,7 @@ function init_chart(chartId) { ...@@ -49,7 +52,7 @@ function init_chart(chartId) {
} }
} }
function set_data(elementObject, numberOfCharts, callback) { function set_data(objectData, elementObject, numberOfCharts, callback) {
setTimeout(function() { setTimeout(function() {
...@@ -79,9 +82,11 @@ function set_data(elementObject, numberOfCharts, callback) { ...@@ -79,9 +82,11 @@ function set_data(elementObject, numberOfCharts, callback) {
let animationDuration = elementObject.attr('animation-duration') ?? 750; let animationDuration = elementObject.attr('animation-duration') ?? 750;
// ex '{value} users' - https://echarts.apache.org/en/option.html#yAxis.axisLabel.formatter // ex '{value} users' - https://echarts.apache.org/en/option.html#yAxis.axisLabel.formatter
let yAxisLabelValueFormat = elementObject.attr('y-axis-label-value-format') ?? null; let yAxisLabelValueFormat = elementObject.attr('y-axis-label-value-format') ?? null;
let categories = JSON.parse(elementObject.attr('categories')) ?? null;
let series = JSON.parse(elementObject.attr('series')) ?? null; // priority is objectData.
let categories = (objectData && objectData.categories) ?? JSON.parse(elementObject.attr('categories')) ?? null;
let series = (objectData && objectData.series) ?? JSON.parse(elementObject.attr('series')) ?? null;
let seriesNames = series && series.map(function(item){ return item.name }); let seriesNames = series && series.map(function(item){ return item.name });
let seriesObject = setSeries(series, elementObject); let seriesObject = setSeries(series, elementObject);
...@@ -226,8 +231,6 @@ function setXAxis(categories, boundaryGap = true, numberOfCharts = 1) { ...@@ -226,8 +231,6 @@ function setXAxis(categories, boundaryGap = true, numberOfCharts = 1) {
xAxisArray.push(x); xAxisArray.push(x);
} }
console.log('xaxisarray', xAxisArray);
return xAxisArray; return xAxisArray;
} }
...@@ -314,8 +317,6 @@ function setTitles(titles, numberOfCharts = 1) { ...@@ -314,8 +317,6 @@ function setTitles(titles, numberOfCharts = 1) {
arrayTitles.push(title); arrayTitles.push(title);
} }
console.log('titles', arrayTitles);
return arrayTitles; return arrayTitles;
} }
...@@ -388,8 +389,6 @@ function setGrid(showDataZoom = false, numberOfCharts = 1) { ...@@ -388,8 +389,6 @@ function setGrid(showDataZoom = false, numberOfCharts = 1) {
arrayGrids.push(grid); arrayGrids.push(grid);
} }
console.log('grids', arrayGrids);
return arrayGrids; return arrayGrids;
} }
......
<?php <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\DataManager; namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
Class ChartDataManager { Class ChartDataManager {
...@@ -58,6 +58,7 @@ Class ChartDataManager { ...@@ -58,6 +58,7 @@ Class ChartDataManager {
{ {
$data['series'] = $this->getSeries()->toArray(); $data['series'] = $this->getSeries()->toArray();
$data['categories'] = $this->getCategories(); $data['categories'] = $this->getCategories();
$data['charts'] = $this->getSeries()->numberOfCharts();
return $data; return $data;
} }
......
<?php <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\DataManager; namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class Series extends Collection class Series extends Collection
{ {
/**
* @return array
*/
public function toArray(): array public function toArray(): array
{ {
$return = []; $return = [];
...@@ -18,5 +15,12 @@ class Series extends Collection ...@@ -18,5 +15,12 @@ class Series extends Collection
return $return; return $return;
} }
public function numberOfCharts(): int
{
$count = $this->unique(function (SeriesData $entry) {
return $entry->getIndex();
})->count();
return $count;
}
} }
<?php <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\DataManager; namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
class SeriesData class SeriesData
{ {
...@@ -23,7 +23,7 @@ class SeriesData ...@@ -23,7 +23,7 @@ class SeriesData
return $this->categoryValues; return $this->categoryValues;
} }
private function getIndex() : int public function getIndex() : int
{ {
return $this->index; return $this->index;
} }
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
->withMarkLine($parameters['mark-line'] ?? null) ->withMarkLine($parameters['mark-line'] ?? null)
->withCategories($parameters['categories'] ?? null) ->withCategories($parameters['categories'] ?? null)
->withSeries($parameters['series'] ?? null) ->withSeries($parameters['series'] ?? null)
->withData($parameters['data'] ?? null)
->withRaw($parameters['raw'] ?? null); ->withRaw($parameters['raw'] ?? null);
} }
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
@php @php
$chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Linechart\DataManager\ChartDataManager::getInstance(); $chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager\ChartDataManager::getInstance();
// or $chartDataManager = new \Ceetrox\Sidekick\Views\Limitless\Linechart\DataManager\ChartDataManager(); // or $chartDataManager = new \Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager\ChartDataManager();
// accepts string or array. // accepts string or array.
$chartDataManager->addCategories('Mon'); $chartDataManager->addCategories('Mon');
...@@ -16,17 +16,21 @@ ...@@ -16,17 +16,21 @@
$sd->setName('ONC'); $sd->setName('ONC');
$sd->setCategoryValues(100); $sd->setCategoryValues(100);
$sd->setCategoryValues([200, 300, 400, 500]); $sd->setCategoryValues([200, 300, 400, 500]);
$sd->setIndex(0); // 0 as default.
$chartDataManager->addSeries($sd); $chartDataManager->addSeries($sd);
$sd = $chartDataManager::getSeriesDataInstance(); $sd = $chartDataManager::getSeriesDataInstance();
$sd->setName('APR'); $sd->setName('APR');
$sd->setCategoryValues([10,20,30,40,50]); $sd->setCategoryValues([10,20,30,40,50]);
$sd->setIndex(0);
$chartDataManager->addSeries($sd); $chartDataManager->addSeries($sd);
$output = $chartDataManager->toArray(); $dataObject = $chartDataManager->toJson();
// if data manager object is used, should only pass the main object to the chart parameter 'data' // if data manager object is used, should only pass the main object to the chart parameter 'data'
// automatically detects if the chart is multiple by number of unique indexes.
// sample backend data // sample backend data
$categories = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; $categories = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
...@@ -157,10 +161,16 @@ ...@@ -157,10 +161,16 @@
@endphp @endphp
@Limitless::CardStart(['title' => "Basic Setup using Chart Manager Object", 'icon' => 'icon-info22' ] )
@Limitless::LineChart([
'data' => $dataObject
])
@Limitless::CardStop
@Limitless::CardStart(['title' => "Basic Setup", 'icon' => 'icon-info22' ] ) @Limitless::CardStart(['title' => "Basic Setup", 'icon' => 'icon-info22' ] )
@Limitless::LineChart([ @Limitless::LineChart([
'categories' => $output['categories'], 'categories' => $categories,
'series' => $output['series'], 'series' => $seriesData,
]) ])
@Limitless::CardStop @Limitless::CardStop
...@@ -168,8 +178,7 @@ ...@@ -168,8 +178,7 @@
@Limitless::LineChart([ @Limitless::LineChart([
'is-area' => true, 'is-area' => true,
'stacked' => true, 'stacked' => true,
'categories' => $categories, 'data' => $dataObject
'series' => $seriesData,
]) ])
@Limitless::CardStop @Limitless::CardStop
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
@if($markLine != null) mark-line="{{ $markLine }}" @endif @if($markLine != null) mark-line="{{ $markLine }}" @endif
categories="{{ json_encode($categories) }}" categories="{{ json_encode($categories) }}"
series="{{ json_encode($series) }}" series="{{ json_encode($series) }}"
data="{{ $data }}"
raw="{{ json_encode(json_decode($raw)) }}" raw="{{ json_encode(json_decode($raw)) }}"
> >
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment