Commit 2496e2ab authored by Kevin Yumang's avatar Kevin Yumang

SERV-2286 - added line and bar chart object. refactored main class to be extended

parent 5714e34e
<?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
namespace Ceetrox\Managers\ChartManager;
Class ChartDataManager {
private array $categories;
private Series $series;
private ?int $numberOfCharts;
private array $titles;
private array $colors;
private ?bool $hasBoundaryGap;
private ?bool $isInverted;
private ?bool $hasDataZoom;
private ?int $animationDuration;
private ?string $yAxisLabelValueFormat;
private ?string $rawData;
private ?bool $showPointValues;
private ?bool $isStacked;
private ?bool $isArea;
private ?bool $markLine;
public function __construct()
......@@ -26,106 +20,19 @@ Class ChartDataManager {
$this->series = new Series();
$this->numberOfCharts = null;
$this->colors = [];
$this->titles = [];
$this->hasBoundaryGap = null;
$this->isInverted = null;
$this->hasDataZoom = null;
$this->animationDuration = null;
$this->yAxisLabelValueFormat = null;
$this->rawData = null;
$this->showPointValues = null;
$this->isStacked = null;
$this->isArea = null;
$this->markLine = null;
}
public static function getInstance(): ChartDataManager
{
return new self;
}
public static function getSeriesDataInstance(): SeriesData
{
return new SeriesData();
}
private function getNumberOfCharts() : int
{
return $this->series->numberOfCharts();
}
private function getTitles() : array
{
return $this->titles;
}
private function getColors() : array
{
return $this->colors;
}
private function getHasBoundaryGap() : ?bool
{
return $this->hasBoundaryGap;
}
private function getIsInverted() : ?bool
{
return $this->isInverted;
}
private function getHasDataZoom() : ?bool
{
return $this->hasDataZoom;
}
private function getAnimationDuration() : ?int
{
return $this->animationDuration;
}
private function getYAxisLabelValueFormat() : ?string
{
return $this->yAxisLabelValueFormat;
}
private function getRawData() : ?string
{
return $this->rawData;
}
private function getShowPointValues() : ?bool
{
return $this->showPointValues;
}
private function getIsStacked() : ?bool
{
return $this->isStacked;
}
private function getIsArea() : ?bool
{
return $this->isArea;
}
private function getMarkLine() : ?string
{
return $this->markLine;
}
public function setTitle($title) : ChartDataManager
{
if(is_array($title)) {
$this->titles = array_merge($this->titles, $title);
} else {
$this->titles[] = $title;
}
return $this;
}
public function setColors($color) : ChartDataManager
{
if(is_array($color)) {
......@@ -137,24 +44,6 @@ Class ChartDataManager {
return $this;
}
public function setHasBoundaryGap(bool $value) : ChartDataManager
{
$this->hasBoundaryGap = $value;
return $this;
}
public function setIsInverted(bool $value) : ChartDataManager
{
$this->isInverted = $value;
return $this;
}
public function setHasDataZoom(bool $value) : ChartDataManager
{
$this->hasDataZoom = $value;
return $this;
}
public function setAnimationDuration(int $value) : ChartDataManager
{
$this->animationDuration = $value;
......@@ -173,24 +62,12 @@ Class ChartDataManager {
return $this;
}
public function setShowPointValues(bool $value) : ChartDataManager
{
$this->showPointValues = $value;
return $this;
}
public function setIsStacked(bool $value) : ChartDataManager
{
$this->isStacked = $value;
return $this;
}
public function setIsArea(bool $value) : ChartDataManager
{
$this->isArea = $value;
return $this;
}
public function setMarkLine(string $value) : ChartDataManager
{
$this->markLine = $value;
......@@ -215,36 +92,24 @@ Class ChartDataManager {
return $this;
}
public function toJson(): string
{
return json_encode($this->toArray());
}
public function toArray(): array
public function getParentData(): array
{
// set if conditions so we can only pass attributes that are set.
// if attributes are not set then we can check and use the manual parameters of the charts.
if(!is_null($this->numberOfCharts)) $data['charts'] = $this->numberOfCharts;
$data = [];
if(!is_null($this->numberOfCharts)) $data['charts'] = $this->numberOfCharts;
if(count($this->series) > 0) $data['series'] = $this->series->toArray();
if(count($this->categories) > 0) $data['categories'] = $this->categories;
if(count($this->titles) > 0) $data['titles'] = $this->titles;
if(count($this->colors) > 0) $data['colors'] = $this->colors;
if(!is_null($this->hasBoundaryGap)) $data['boundaryGap'] = $this->hasBoundaryGap;
if(!is_null($this->isInverted)) $data['inverted'] = $this->isInverted;
if(!is_null($this->hasDataZoom)) $data['dataZoom'] = $this->hasDataZoom;
if(!is_null($this->animationDuration)) $data['animationDuration'] = $this->animationDuration;
if(!is_null($this->yAxisLabelValueFormat)) $data['yAxisLabelValueFormat'] = $this->yAxisLabelValueFormat;
if(!is_null($this->rawData)) $data['raw'] = json_encode(json_decode($this->rawData));
if(!is_null($this->showPointValues)) $data['pointValues'] = $this->showPointValues;
if(!is_null($this->isStacked)) $data['stacked'] = $this->isStacked;
if(!is_null($this->isArea)) $data['isArea'] = $this->isArea;
if(!is_null($this->markLine)) $data['markLine'] = $this->markLine;
return $data ?? [];
return $data;
}
}
\ No newline at end of file
<?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
namespace Ceetrox\Managers\ChartManager;
use Illuminate\Support\Collection;
......
<?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager;
namespace Ceetrox\Managers\ChartManager;
class SeriesData
{
......
......@@ -23,6 +23,8 @@
*/
use Ceetrox\Providers\CommandServiceProvider\CommandServiceProvider;
use Ceetrox\Providers\PicassoServiceProvider\PicassoServiceProvider;
use Ceetrox\Sidekick\Views\Limitless\Barchart\Attachments\BarChartData;
use Ceetrox\Sidekick\Views\Limitless\Linechart\Attachments\LineChartData;
use Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager\ChartDataManager;
use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\AliasLoader;
......@@ -57,11 +59,16 @@
/*
|----------------------------------------------------------------------------------------
| Set the alias of the chart data manager class.
| Set the aliases of the chart data manager classes.
*/
$this->app->booting(function() {
$loader = AliasLoader::getInstance();
$loader->alias('SidekickChartDataManager', ChartDataManager::class);
$loader->alias('SidekickLineChartDataManager', LineChartData::class);
});
$this->app->booting(function() {
$loader = AliasLoader::getInstance();
$loader->alias('SidekickBarChartDataManager', BarChartData::class);
});
}
......
<?php
namespace Ceetrox\Sidekick\Views\Limitless\Barchart\Attachments;
use Ceetrox\Managers\ChartManager\ChartDataManager;
Class BarChartData extends ChartDataManager {
private ?string $title;
private ?bool $isHorizontal;
private ?bool $showBarValues;
public function __construct()
{
parent::__construct();
$this->title = null;
$this->isHorizontal = null;
$this->showBarValues = null;
}
public static function getInstance(): BarChartData
{
return new self;
}
public function setTitle(string $value) : BarChartData
{
$this->title = $value;
return $this;
}
public function setIsHorizontal(bool $value) : BarChartData
{
$this->isHorizontal = $value;
return $this;
}
public function setShowBarValues(bool $value) : BarChartData
{
$this->showBarValues = $value;
return $this;
}
public function toJson(): string
{
return json_encode($this->toArray());
}
public function toArray(): array
{
// set if conditions so we can only pass attributes that are set.
// if attributes are not set then we can check and use the manual parameters of the charts.
$data = [];
if(!is_null($this->title)) $data['title'] = $this->title;
if(!is_null($this->isHorizontal)) $data['horizontal'] = $this->isHorizontal;
if(!is_null($this->showBarValues)) $data['barValues'] = $this->showBarValues;
$data = array_merge($data, $this->getParentData());
return $data;
}
}
\ No newline at end of file
......@@ -5,7 +5,7 @@
@php
$chartDataManager = SidekickChartDataManager::getInstance();
$chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Barchart\Attachments\BarChartData::getInstance();
// or $chartDataManager = new SidekickChartDataManager();
// accepts string or array.
......@@ -27,8 +27,8 @@
$chartDataManager->addSeries($sd);
// $chartDataManager->setIsStacked(false);
// $chartDataManager->setShowPointValues(true);
$chartDataManager->setIsHorizontal(true);
$chartDataManager->setShowBarValues(true);
$dataObject = $chartDataManager->toJson();
......
<?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\Attachments;
use Ceetrox\Managers\ChartManager\ChartDataManager;
Class LineChartData extends ChartDataManager {
private array $titles;
private ?bool $hasBoundaryGap;
private ?bool $isInverted;
private ?bool $hasDataZoom;
private ?bool $showPointValues;
private ?bool $isArea;
public function __construct()
{
parent::__construct();
$this->titles = [];
$this->hasBoundaryGap = null;
$this->isInverted = null;
$this->hasDataZoom = null;
$this->showPointValues = null;
$this->isArea = null;
}
public static function getInstance(): LineChartData
{
return new self;
}
public function setTitle($value) : LineChartData
{
if(is_array($value)) {
$this->titles = array_merge($this->titles, $value);
} else {
$this->titles[] = $value;
}
return $this;
}
public function setHasBoundaryGap(bool $value) : LineChartData
{
$this->hasBoundaryGap = $value;
return $this;
}
public function setIsInverted(bool $value) : LineChartData
{
$this->isInverted = $value;
return $this;
}
public function setHasDataZoom(bool $value) : LineChartData
{
$this->hasDataZoom = $value;
return $this;
}
public function setRawData(string $value) : LineChartData
{
$this->rawData = $value;
return $this;
}
public function setShowPointValues(bool $value) : LineChartData
{
$this->showPointValues = $value;
return $this;
}
public function setIsArea(bool $value) : LineChartData
{
$this->isArea = $value;
return $this;
}
public function toJson(): string
{
return json_encode($this->toArray());
}
public function toArray(): array
{
// set if conditions so we can only pass attributes that are set.
// if attributes are not set then we can check and use the manual parameters of the charts.
$data = [];
if(count($this->titles) > 0) $data['titles'] = $this->titles;
if(!is_null($this->hasBoundaryGap)) $data['boundaryGap'] = $this->hasBoundaryGap;
if(!is_null($this->isInverted)) $data['inverted'] = $this->isInverted;
if(!is_null($this->hasDataZoom)) $data['dataZoom'] = $this->hasDataZoom;
if(!is_null($this->showPointValues)) $data['pointValues'] = $this->showPointValues;
if(!is_null($this->isArea)) $data['isArea'] = $this->isArea;
$data = array_merge($data, $this->getParentData());
return $data;
}
}
\ No newline at end of file
......@@ -81,7 +81,7 @@ function set_data(objectData, elementObject, numberOfCharts, callback) {
let inverted = objectData?.inverted ?? (elementObject.attr('inverted') == 'true' || elementObject.attr('inverted') == true); // default false
let showDataZoom = objectData?.dataZoom ?? (elementObject.attr('data-zoom') == 'true' || elementObject.attr('data-zoom') == true); // default false
let showPointValues = objectData?.pointValues ?? ((elementObject.attr('point-values') == 'true' || elementObject.attr('point-values') == true) ?? false); // series data option
let isArea = objectData?.isArea ?? ((elementObject.attr('is-area') == 'true' || elementObject.attr('is-area') == true) ?? false); // series data options
let colors = objectData?.colors ?? (JSON.parse(elementObject.attr('colors')) ?? defaultColors);
let animationDuration = objectData?.animationDuration ?? (elementObject.attr('animation-duration') ?? 750);
......@@ -89,7 +89,6 @@ function set_data(objectData, elementObject, numberOfCharts, callback) {
let yAxisLabelValueFormat = objectData?.yAxisLabelValueFormat ?? (elementObject.attr('y-axis-label-value-format') ?? null);
let stacked = objectData?.stacked ?? ((elementObject.attr('stacked') == 'true' || elementObject.attr('stacked') == true) ?? false); // series data options
let isArea = objectData?.isArea ?? ((elementObject.attr('is-area') == 'true' || elementObject.attr('is-area') == true) ?? false); // series data options
let markLine = objectData?.markLine ?? (elementObject.attr('mark-line') ?? null); // min | max | average - series data options
let categories = objectData?.categories ?? (JSON.parse(elementObject.attr('categories')) ?? null);
......
......@@ -5,7 +5,7 @@
@php
$chartDataManager = SidekickChartDataManager::getInstance();
$chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Linechart\Attachments\LineChartData::getInstance();
// or $chartDataManager = new SidekickChartDataManager();
// accepts string or array.
......
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