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 <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager; namespace Ceetrox\Managers\ChartManager;
Class ChartDataManager { Class ChartDataManager {
private array $categories; private array $categories;
private Series $series; private Series $series;
private ?int $numberOfCharts; private ?int $numberOfCharts;
private array $titles;
private array $colors; private array $colors;
private ?bool $hasBoundaryGap;
private ?bool $isInverted;
private ?bool $hasDataZoom;
private ?int $animationDuration; private ?int $animationDuration;
private ?string $yAxisLabelValueFormat; private ?string $yAxisLabelValueFormat;
private ?string $rawData; private ?string $rawData;
private ?bool $showPointValues;
private ?bool $isStacked; private ?bool $isStacked;
private ?bool $isArea;
private ?bool $markLine; private ?bool $markLine;
public function __construct() public function __construct()
...@@ -26,106 +20,19 @@ Class ChartDataManager { ...@@ -26,106 +20,19 @@ Class ChartDataManager {
$this->series = new Series(); $this->series = new Series();
$this->numberOfCharts = null; $this->numberOfCharts = null;
$this->colors = []; $this->colors = [];
$this->titles = [];
$this->hasBoundaryGap = null;
$this->isInverted = null;
$this->hasDataZoom = null;
$this->animationDuration = null; $this->animationDuration = null;
$this->yAxisLabelValueFormat = null; $this->yAxisLabelValueFormat = null;
$this->rawData = null; $this->rawData = null;
$this->showPointValues = null;
$this->isStacked = null; $this->isStacked = null;
$this->isArea = null;
$this->markLine = null; $this->markLine = null;
} }
public static function getInstance(): ChartDataManager
{
return new self;
}
public static function getSeriesDataInstance(): SeriesData public static function getSeriesDataInstance(): SeriesData
{ {
return new 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 public function setColors($color) : ChartDataManager
{ {
if(is_array($color)) { if(is_array($color)) {
...@@ -137,24 +44,6 @@ Class ChartDataManager { ...@@ -137,24 +44,6 @@ Class ChartDataManager {
return $this; 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 public function setAnimationDuration(int $value) : ChartDataManager
{ {
$this->animationDuration = $value; $this->animationDuration = $value;
...@@ -173,24 +62,12 @@ Class ChartDataManager { ...@@ -173,24 +62,12 @@ Class ChartDataManager {
return $this; return $this;
} }
public function setShowPointValues(bool $value) : ChartDataManager
{
$this->showPointValues = $value;
return $this;
}
public function setIsStacked(bool $value) : ChartDataManager public function setIsStacked(bool $value) : ChartDataManager
{ {
$this->isStacked = $value; $this->isStacked = $value;
return $this; return $this;
} }
public function setIsArea(bool $value) : ChartDataManager
{
$this->isArea = $value;
return $this;
}
public function setMarkLine(string $value) : ChartDataManager public function setMarkLine(string $value) : ChartDataManager
{ {
$this->markLine = $value; $this->markLine = $value;
...@@ -215,36 +92,24 @@ Class ChartDataManager { ...@@ -215,36 +92,24 @@ Class ChartDataManager {
return $this; return $this;
} }
public function toJson(): string public function getParentData(): array
{
return json_encode($this->toArray());
}
public function toArray(): array
{ {
// set if conditions so we can only pass attributes that are set. // 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 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->series) > 0) $data['series'] = $this->series->toArray();
if(count($this->categories) > 0) $data['categories'] = $this->categories; 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(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->animationDuration)) $data['animationDuration'] = $this->animationDuration;
if(!is_null($this->yAxisLabelValueFormat)) $data['yAxisLabelValueFormat'] = $this->yAxisLabelValueFormat; 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->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->isStacked)) $data['stacked'] = $this->isStacked;
if(!is_null($this->isArea)) $data['isArea'] = $this->isArea;
if(!is_null($this->markLine)) $data['markLine'] = $this->markLine; if(!is_null($this->markLine)) $data['markLine'] = $this->markLine;
return $data ?? []; return $data;
} }
} }
\ No newline at end of file
<?php <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager; namespace Ceetrox\Managers\ChartManager;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
......
<?php <?php
namespace Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager; namespace Ceetrox\Managers\ChartManager;
class SeriesData class SeriesData
{ {
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
*/ */
use Ceetrox\Providers\CommandServiceProvider\CommandServiceProvider; use Ceetrox\Providers\CommandServiceProvider\CommandServiceProvider;
use Ceetrox\Providers\PicassoServiceProvider\PicassoServiceProvider; 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 Ceetrox\Sidekick\Views\Limitless\Linechart\ChartManager\ChartDataManager;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\AliasLoader; use Illuminate\Foundation\AliasLoader;
...@@ -57,11 +59,16 @@ ...@@ -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() { $this->app->booting(function() {
$loader = AliasLoader::getInstance(); $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 @@ ...@@ -5,7 +5,7 @@
@php @php
$chartDataManager = SidekickChartDataManager::getInstance(); $chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Barchart\Attachments\BarChartData::getInstance();
// or $chartDataManager = new SidekickChartDataManager(); // or $chartDataManager = new SidekickChartDataManager();
// accepts string or array. // accepts string or array.
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
$chartDataManager->addSeries($sd); $chartDataManager->addSeries($sd);
// $chartDataManager->setIsStacked(false); $chartDataManager->setIsHorizontal(true);
// $chartDataManager->setShowPointValues(true); $chartDataManager->setShowBarValues(true);
$dataObject = $chartDataManager->toJson(); $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) { ...@@ -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 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 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 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 colors = objectData?.colors ?? (JSON.parse(elementObject.attr('colors')) ?? defaultColors);
let animationDuration = objectData?.animationDuration ?? (elementObject.attr('animation-duration') ?? 750); let animationDuration = objectData?.animationDuration ?? (elementObject.attr('animation-duration') ?? 750);
...@@ -89,7 +89,6 @@ function set_data(objectData, elementObject, numberOfCharts, callback) { ...@@ -89,7 +89,6 @@ function set_data(objectData, elementObject, numberOfCharts, callback) {
let yAxisLabelValueFormat = objectData?.yAxisLabelValueFormat ?? (elementObject.attr('y-axis-label-value-format') ?? null); 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 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 markLine = objectData?.markLine ?? (elementObject.attr('mark-line') ?? null); // min | max | average - series data options
let categories = objectData?.categories ?? (JSON.parse(elementObject.attr('categories')) ?? null); let categories = objectData?.categories ?? (JSON.parse(elementObject.attr('categories')) ?? null);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
@php @php
$chartDataManager = SidekickChartDataManager::getInstance(); $chartDataManager = \Ceetrox\Sidekick\Views\Limitless\Linechart\Attachments\LineChartData::getInstance();
// or $chartDataManager = new SidekickChartDataManager(); // or $chartDataManager = new SidekickChartDataManager();
// accepts string or array. // 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