31 Commits

Author SHA1 Message Date
asantibanez
802416ee7a v3.0.0 released 2023-07-25 17:14:18 -05:00
asantibanez
d957e698bb Updated build 2023-07-25 17:10:45 -05:00
asantibanez
46d82cf6bc Refactored how event was triggered 2023-07-25 17:07:51 -05:00
asantibanez
1f26a9ed39 Updated README 2023-07-25 16:58:00 -05:00
asantibanez
55d76bcecd Fixed error dispatching 2023-07-25 16:51:53 -05:00
asantibanez
5034771e57 Added helper methods 2023-07-25 16:51:45 -05:00
asantibanez
6b2667f590 Changed properties visibility 2023-07-25 16:51:35 -05:00
asantibanez
c5784b0ced Added helper methods for PieChartModel 2023-07-25 16:28:59 -05:00
asantibanez
2d9bcfe480 Fixed event dispatching. Added tests. 2023-07-25 16:19:04 -05:00
asantibanez
aa822000af Made properties private so everything is accessed via methods 2023-07-25 16:18:48 -05:00
asantibanez
682b282fe8 Updated dependencies 2023-07-25 16:18:19 -05:00
asantibanez
de936c77d6 Fixed arguments 2023-07-25 16:18:03 -05:00
asantibanez
17efda3ed0 Merge branch 'master' of github.com:asantibanez/livewire-charts 2023-07-25 13:50:56 -05:00
Andrés Santibáñez
25b13b3573 Merge pull request #50 from syntaxlexx/theme-mods
Feat: added theme setting options - dark mode, palette
2023-07-25 14:48:22 -04:00
asantibanez
30eae50c04 Bumped up CI 2023-07-25 13:43:41 -05:00
asantibanez
c79dfeb0ab Refactored tests with new Testable class 2023-07-25 13:42:43 -05:00
asantibanez
3dcc97bef3 Started Livewire v3 support 2023-07-25 13:42:29 -05:00
/SyntaxLexx
c408b639e9 Merge branch 'master' into theme-mods 2023-06-10 03:44:07 +03:00
asantibanez
ac1e6130d4 Updated export 2023-02-01 18:32:57 -05:00
asantibanez
756781c3a9 Added ability to add custom configs to pie charts 2023-02-01 18:32:06 -05:00
asantibanez
93dbaffc61 Added custom configs to Column Chart 2023-02-01 18:28:06 -05:00
asantibanez
6926a504b1 Added deepmerge dependency 2023-02-01 18:24:15 -05:00
asantibanez
40828df23e Added ability to specify custom json config to charts 2023-02-01 18:23:53 -05:00
asantibanez
9f9554314e v2.5.0 released 2023-02-01 13:16:56 -05:00
asantibanez
c7997758bd Added ability to format value via "extras.formatted" 2023-02-01 13:13:28 -05:00
asantibanez
5bc85376a3 Extracted title 2023-02-01 13:13:28 -05:00
Andrés Santibáñez
e6c34e2d49 Merge pull request #83 from laravel-shift/l10-compatibility
Laravel 10.x Compatibility
2023-02-01 12:40:17 -05:00
Shift
d1ce67f9e5 Bump dependencies for Laravel 10 2023-01-31 19:47:59 +00:00
Lexx YungCarter
1e04ebf6d9 feat: merged with master 2022-10-17 16:02:42 +03:00
Lexx YungCarter
9ad481000c fix: typo in palette 2021-08-01 05:16:16 +03:00
Lexx YungCarter
fe0c62be75 feat: added theme setting options - dark mode, pallates 2021-08-01 05:13:49 +03:00
30 changed files with 16621 additions and 2045 deletions

View File

@@ -15,7 +15,7 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.0' php-version: '8.1'
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd, exif, imagick, bcmath extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd, exif, imagick, bcmath
coverage: none coverage: none

View File

@@ -1,5 +1,13 @@
# Changelog # Changelog
## 3.0.0 - 2023-07-25
- Added Livewire v3 support
- Added ability to set chart theme (thanks to @syntaxlexx)
- Added ability to configure chart via JSON properties
## 2.5.0 - 2023-02-01
- Added tooltip override via `extras.tooltip`
## 2.4.2 - 2023-02-01 ## 2.4.2 - 2023-02-01
- Fixed hover title on column chart - Fixed hover title on column chart

View File

@@ -19,21 +19,19 @@ You can install the package via composer:
composer require asantibanez/livewire-charts composer require asantibanez/livewire-charts
``` ```
Next, you must export the package public scripts. To do this run `php artisan vendor:publish` Next, you must export the package public scripts. To do this run
and export `livewire-charts:public`. This command will export a `vendor/livewire-charts` folder under the
`public` directory of your app.
```bash ```bash
php artisan vendor:publish --tag=livewire-charts:public php artisan livewire-charts:install
``` ```
> Note: This last step can also be done using `livewire-charts:install` command in the artisan console. This command will export a `vendor/livewire-charts` folder under the `public` directory of your app which is used
by the `@livewireChartsScripts` directive. More on this topic later.
## Requirements ## Requirements
This package requires the following packages/libraries to work: This package requires the following packages/libraries to work:
- `Laravel Livewire v2` (https://laravel-livewire.com/) - `Laravel Livewire v3` (https://livewire.laravel.com/)
- `Alpine Js` (https://github.com/alpinejs/alpine)
- `Apex Charts` (https://apexcharts.com/) - `Apex Charts` (https://apexcharts.com/)
Please follow each package/library instructions on how to set them properly in your project. Please follow each package/library instructions on how to set them properly in your project.
@@ -75,9 +73,11 @@ With `$columnChartModel` at hand, we pass it to our `LivewireColumnChart` compon
```blade ```blade
<livewire:livewire-column-chart <livewire:livewire-column-chart
{{-- key="{{ $columnChartModel->reactiveKey() }}" --}}
:column-chart-model="$columnChartModel" :column-chart-model="$columnChartModel"
/> />
``` ```
>Note: Optionally add "key" to enable props reactivity if needed 💪
Next, include the `@livewireChartsScripts` directive next to your other app scripts Next, include the `@livewireChartsScripts` directive next to your other app scripts
@@ -126,10 +126,12 @@ $columnChartModel =
We can listen to the `onClickEvent` registering a listener in any other Livewire component. We can listen to the `onClickEvent` registering a listener in any other Livewire component.
```php ```php
protected $listeners = [ #[On('onColumnClick')]
'onColumnClick' => 'handleOnColumnClick', public function handleOnColumnClick($event)
]; {
``` // Handle event
}
```
## "Reactive" Charts ## "Reactive" Charts
@@ -196,25 +198,28 @@ for each type of chart.
### LivewireColumnChart ### LivewireColumnChart
| Method | Description | | Method | Description |
|--------|-------------| |---------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| setOpacity(int $opacity) | Sets columns' opacity | | setOpacity(int $opacity) | Sets columns' opacity |
| setColumnWidth(int $columnWidth) | Sets columns' width | | setColumnWidth(int $columnWidth) | Sets columns' width |
| setHorizontal(boolean $value) | Sets columns or bars | | setHorizontal() | Displays columns horizontally |
| multiColumn() | Sets chart to display multiple column series | | setVertical() | Displays columns vertically |
| singleColumn() | Sets chart to display a single column series | | multiColumn() | Sets chart to display multiple column series |
| stacked() | Sets chart to display column series stacked | | singleColumn() | Sets chart to display a single column series |
| addColumn(string $title, double $value, string $color, array $extras = []) | Adds a column to the chart with the specified color. `$extras` is forwarded on click event | | stacked() | Sets chart to display column series stacked |
| addSeriesColumn(string $seriesName, string $title, double $value, array $extras = []) | Adds a column to a multicolumn chart. `$extras` is forwarded on click event | | addColumn(string $title, double $value, string $color, array $extras = []) | Adds a column to the chart with the specified color. `$extras` is forwarded on click event |
| onColumnClickEventName(string $eventName) | Event Name that will be fired when a column of the chart is clicked | | addSeriesColumn(string $seriesName, string $title, double $value, array $extras = []) | Adds a column to a multicolumn chart. `$extras` is forwarded on click event |
| onColumnClickEventName(string $eventName) | Event Name that will be fired when a column of the chart is clicked |
### LivewirePieChart ### LivewirePieChart
| Method | Description | | Method | Description |
|--------|-------------| |---------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| setOpacity(int $opacity) | Sets slices' opacity | | setOpacity(int $opacity) | Sets slices' opacity |
| asPie() | Displays chart as pie |
| asDonut() | Displays chart as donut |
| addSlice(string $title, double $value, string $color, array $extras = []) | Adds a slice to the chart with the specified color. `$extras` is forwarded on click event | | addSlice(string $title, double $value, string $color, array $extras = []) | Adds a slice to the chart with the specified color. `$extras` is forwarded on click event |
| withOnSliceClickEvent(string $eventName) | Event Name that will be fired when a column of the chart is clicked | | withOnSliceClickEvent(string $eventName) | Event Name that will be fired when a column of the chart is clicked |
### LivewireAreaChart ### LivewireAreaChart

View File

@@ -17,12 +17,12 @@
], ],
"require": { "require": {
"php": "^7.2|^7.3|^7.4|^8.0", "php": "^7.2|^7.3|^7.4|^8.0",
"illuminate/support": "^7.0|^8.0|^9.0", "illuminate/support": "^7.0|^8.0|^9.0|^10.0",
"livewire/livewire": "^2.3" "livewire/livewire": "^3.0"
}, },
"require-dev": { "require-dev": {
"orchestra/testbench": "^5.0|^6.0|^7.0", "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0",
"phpunit/phpunit": "^8.0" "phpunit/phpunit": "^8.0|^9.5.10"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@@ -37,7 +37,6 @@
"scripts": { "scripts": {
"test": "vendor/bin/phpunit", "test": "vendor/bin/phpunit",
"test-coverage": "vendor/bin/phpunit --coverage-html coverage" "test-coverage": "vendor/bin/phpunit --coverage-html coverage"
}, },
"config": { "config": {
"sort-packages": true "sort-packages": true
@@ -51,5 +50,7 @@
"LivewireCharts": "Asantibanez\\LivewireCharts\\LivewireChartsFacade" "LivewireCharts": "Asantibanez\\LivewireCharts\\LivewireChartsFacade"
} }
} }
} },
"minimum-stability": "dev",
"prefer-stable": true
} }

18182
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,5 +12,8 @@
"cross-env": "^7.0.2", "cross-env": "^7.0.2",
"laravel-mix": "^5.0.9", "laravel-mix": "^5.0.9",
"vue-template-compiler": "^2.6.12" "vue-template-compiler": "^2.6.12"
},
"dependencies": {
"deepmerge": "^2.2.1"
} }
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* ApexCharts v3.22.2 * ApexCharts v3.41.0
* (c) 2018-2020 Juned Chhipa * (c) 2018-2023 ApexCharts
* Released under the MIT License. * Released under the MIT License.
*/ */

View File

@@ -83,6 +83,9 @@ const areaChart = () => {
bottom: 0, bottom: 0,
} }
}, },
theme: component.get('areaChartModel.theme') || {},
}; };
this.chart = new ApexCharts(this.$refs.container, options); this.chart = new ApexCharts(this.$refs.container, options);

View File

@@ -1,3 +1,4 @@
import { mergedOptionsWithJsonConfig } from './helpers'
const columnChart = () => { const columnChart = () => {
return { return {
@@ -14,7 +15,7 @@ const columnChart = () => {
this.chart.destroy() this.chart.destroy()
} }
const title = component.get('columnChartModel.title'); const title = component.get('columnChartModel.title')
const animated = component.get('columnChartModel.animated') || false; const animated = component.get('columnChartModel.animated') || false;
const onColumnClickEventName = component.get('columnChartModel.onColumnClickEventName') const onColumnClickEventName = component.get('columnChartModel.onColumnClickEventName')
const dataLabels = component.get('columnChartModel.dataLabels') || {}; const dataLabels = component.get('columnChartModel.dataLabels') || {};
@@ -23,6 +24,7 @@ const columnChart = () => {
const grid = component.get('columnChartModel.grid'); const grid = component.get('columnChartModel.grid');
const columnWidth = component.get('columnChartModel.columnWidth'); const columnWidth = component.get('columnChartModel.columnWidth');
const horizontal = component.get('columnChartModel.horizontal'); const horizontal = component.get('columnChartModel.horizontal');
const jsonConfig = component.get('columnChartModel.jsonConfig');
const data = component.get('columnChartModel.data'); const data = component.get('columnChartModel.data');
const series = [{ const series = [{
@@ -84,13 +86,24 @@ const columnChart = () => {
yaxis: { yaxis: {
title: { title: {
text: component.get('columnChartModel.title'), text: title,
} }
}, },
fill: { fill: {
opacity: component.get('columnChartModel.opacity') || 0.5 opacity: component.get('columnChartModel.opacity') || 0.5
}, },
theme: component.get('columnChartModel.theme') || {},
tooltip: {
y: {
formatter: function(value, series) {
return data[series.dataPointIndex].extras.tooltip || value;
}
}
},
}; };
const colors = component.get('columnChartModel.colors'); const colors = component.get('columnChartModel.colors');
@@ -99,7 +112,7 @@ const columnChart = () => {
options['colors'] = colors options['colors'] = colors
} }
this.chart = new ApexCharts(this.$refs.container, options); this.chart = new ApexCharts(this.$refs.container, mergedOptionsWithJsonConfig(options, jsonConfig));
this.chart.render(); this.chart.render();
} }
} }

27
resources/js/helpers.js Normal file
View File

@@ -0,0 +1,27 @@
import deepmerge from 'deepmerge'
export const addPathToObjectWithValue = (obj, path, value) => {
const pList = path.split('.');
const key = pList.pop();
const pointer = pList.reduce((accumulator, currentValue) => {
if (accumulator[currentValue] === undefined) accumulator[currentValue] = {};
return accumulator[currentValue];
}, obj);
pointer[key] = value;
return obj;
}
export const mergedOptionsWithJsonConfig = (options, jsonConfig) => {
const customOptions = Object.keys(jsonConfig)
.reduce(function (obj, key) {
const value = jsonConfig[key]
if (typeof value === 'string' && value.includes('function')) {
return addPathToObjectWithValue(obj, key, eval('(' + value + ')'))
}
return addPathToObjectWithValue(obj, key, eval(value))
}, {})
return deepmerge(options, customOptions)
}

View File

@@ -61,6 +61,8 @@ const lineChart = () => {
stroke: component.get('lineChartModel.stroke') || {}, stroke: component.get('lineChartModel.stroke') || {},
theme: component.get('lineChartModel.theme') || {},
title: { title: {
text: title, text: title,
align: 'center' align: 'center'
@@ -96,6 +98,14 @@ const lineChart = () => {
} }
) )
}, },
tooltip: {
y: {
formatter: function(value, series) {
return data[series.dataPointIndex].extras.tooltip || value;
}
}
},
}; };
this.chart = new ApexCharts(this.$refs.container, options); this.chart = new ApexCharts(this.$refs.container, options);

View File

@@ -89,6 +89,9 @@ const multiColumnChart = () => {
fill: { fill: {
opacity: component.get('columnChartModel.opacity'), opacity: component.get('columnChartModel.opacity'),
}, },
theme: component.get('columnChartModel.theme') || {},
}; };
const colors = component.get('columnChartModel.colors'); const colors = component.get('columnChartModel.colors');

View File

@@ -74,6 +74,8 @@ const multiLineChart = () => {
}, },
yaxis: component.get('lineChartModel.yAxis') || {}, yaxis: component.get('lineChartModel.yAxis') || {},
theme: component.get('lineChartModel.theme') || {},
}; };
const colors = component.get('lineChartModel.colors'); const colors = component.get('lineChartModel.colors');

View File

@@ -1,3 +1,4 @@
import {mergedOptionsWithJsonConfig} from './helpers'
const pieChart = () => { const pieChart = () => {
return { return {
@@ -21,6 +22,7 @@ const pieChart = () => {
const data = component.get('pieChartModel.data') const data = component.get('pieChartModel.data')
const sparkline = component.get('pieChartModel.sparkline') const sparkline = component.get('pieChartModel.sparkline')
const type = component.get('pieChartModel.type') const type = component.get('pieChartModel.type')
const jsonConfig = component.get('pieChartModel.jsonConfig');
const options = { const options = {
series: data.map(item => item.value), series: data.map(item => item.value),
@@ -73,6 +75,16 @@ const pieChart = () => {
], ],
legend: component.get('pieChartModel.legend') || {}, legend: component.get('pieChartModel.legend') || {},
theme: component.get('pieChartModel.theme') || {},
tooltip: {
y: {
formatter: function(value, series) {
return data[series.dataPointIndex].extras.tooltip || value;
}
}
},
}; };
const colors = component.get('pieChartModel.colors'); const colors = component.get('pieChartModel.colors');
@@ -81,7 +93,7 @@ const pieChart = () => {
options['colors'] = colors options['colors'] = colors
} }
this.chart = new ApexCharts(this.$refs.container, options); this.chart = new ApexCharts(this.$refs.container, mergedOptionsWithJsonConfig(options, jsonConfig));
this.chart.render(); this.chart.render();
} }
} }

View File

@@ -54,7 +54,7 @@ const treeMapChart = () => {
const block = data[series[seriesIndex].name][dataPointIndex] const block = data[series[seriesIndex].name][dataPointIndex]
component.emit(onBlockClickEventName, block) component.call('onBlockClick', block)
}, },
} }
}, },

View File

@@ -26,7 +26,7 @@ class LivewireColumnChart extends Component
return; return;
} }
$this->emit($onColumnClickEventName, $column); $this->dispatch($onColumnClickEventName, $column);
} }
public function render() public function render()

View File

@@ -26,7 +26,7 @@ class LivewirePieChart extends Component
return; return;
} }
$this->emit($onSliceClickEventName, $slice); $this->dispatch($onSliceClickEventName, $slice);
} }
public function render() public function render()

View File

@@ -18,6 +18,17 @@ class LivewireTreeMapChart extends Component
$this->treeMapChartModel = $treeMapChartModel->toArray(); $this->treeMapChartModel = $treeMapChartModel->toArray();
} }
public function onBlockClick($block)
{
$onBlockClickEventName = data_get($this->treeMapChartModel, 'onBlockClickEventName');
if ($onBlockClickEventName === null) {
return;
}
$this->dispatch($onBlockClickEventName, $block);
}
public function render() public function render()
{ {
return view('livewire-charts::livewire-tree-map-chart'); return view('livewire-charts::livewire-tree-map-chart');

View File

@@ -18,6 +18,8 @@ class BaseChartModel
use HasSparkline; use HasSparkline;
use HasGrid; use HasGrid;
use HasColors; use HasColors;
use HasTheme;
use HasJsonConfig;
public function __construct() public function __construct()
{ {
@@ -30,6 +32,8 @@ class BaseChartModel
$this->initSparkline(); $this->initSparkline();
$this->initGrid(); $this->initGrid();
$this->initColors(); $this->initColors();
$this->initTheme();
$this->initJsonConfig();
} }
public function reactiveKey() public function reactiveKey()
@@ -48,7 +52,9 @@ class BaseChartModel
$this->dataLabelsToArray(), $this->dataLabelsToArray(),
$this->sparklineToArray(), $this->sparklineToArray(),
$this->gridToArray(), $this->gridToArray(),
$this->colorsToArray() $this->colorsToArray(),
$this->themeToArray(),
$this->jsonConfigToArray(),
); );
} }
@@ -63,5 +69,7 @@ class BaseChartModel
$this->sparklineFromArray($array); $this->sparklineFromArray($array);
$this->gridFromArray($array); $this->gridFromArray($array);
$this->colorsFromArray($array); $this->colorsFromArray($array);
$this->themeFromArray($array);
$this->jsonConfigFromArray($array);
} }
} }

View File

@@ -11,19 +11,19 @@ namespace Asantibanez\LivewireCharts\Models;
*/ */
class ColumnChartModel extends BaseChartModel class ColumnChartModel extends BaseChartModel
{ {
public $opacity; private $opacity;
public $columnWidth; private $columnWidth;
public $horizontal; private $horizontal;
public $isMultiColumn; private $isMultiColumn;
public $isStacked; private $isStacked;
public $onColumnClickEventName; private $onColumnClickEventName;
public $data; private $data;
public function __construct() public function __construct()
{ {
@@ -65,9 +65,16 @@ class ColumnChartModel extends BaseChartModel
return $this; return $this;
} }
public function setHorizontal($value) public function setHorizontal()
{ {
$this->horizontal = $value; $this->horizontal = true;
return $this;
}
public function setVertical()
{
$this->horizontal = false;
return $this; return $this;
} }

View File

@@ -0,0 +1,39 @@
<?php
namespace Asantibanez\LivewireCharts\Models;
trait HasJsonConfig
{
private $jsonConfig;
public function setJsonConfig($jsonConfig)
{
$this->jsonConfig = $jsonConfig;
return $this;
}
protected function initJsonConfig()
{
$this->jsonConfig = [];
}
private function defaultJsonConfig()
{
return [];
}
protected function jsonConfigFromArray($array)
{
$this->jsonConfig = data_get($array, 'jsonConfig', $this->defaultJsonConfig());
}
protected function jsonConfigToArray()
{
return [
'jsonConfig' => $this->jsonConfig,
];
}
}

125
src/Models/HasTheme.php Normal file
View File

@@ -0,0 +1,125 @@
<?php
namespace Asantibanez\LivewireCharts\Models;
trait HasTheme
{
private $theme;
private $mode;
private $palette;
/**
* Initialize
*/
public function initTheme()
{
$this->theme = $this->defaultTheme();
}
/**
* set default theme
*
* @return array $theme
*/
private function defaultTheme()
{
return [
'mode' => 'light',
'palette' => 'palette1'
];
}
/**
* set theme mode
*
* @param string $mode
*
* @return $this
*/
public function setThemeMode(string $mode)
{
data_set($this->theme, 'mode', $mode);
return $this;
}
/**
* set theme mode to dark theme
*
* @return $this
*/
public function darkMode()
{
data_set($this->theme, 'mode', 'dark');
return $this;
}
/**
* set theme mode to light theme
*
* @return $this
*/
public function lightMode()
{
data_set($this->theme, 'mode', 'light');
return $this;
}
/**
* set the dark mode option to on or off
*
* @param bool $status = true
*
* @return $this
*/
public function setDarkMode(bool $status = true)
{
data_set($this->theme, 'mode', $status ? 'dark' : 'light');
return $this;
}
/**
* set theme pallete
*
* @param string $pallete
*
* @return $this
*/
public function setThemePalette(string $palette)
{
data_set($this->theme, 'palette', $palette);
return $this;
}
/**
* convert the theme to array
*
* @param string $mode
*
* @return $this
*/
protected function themeToArray()
{
return [
'theme' => $this->theme,
];
}
/**
* set theme from array
*
* @param string $mode
*
* @return $this
*/
protected function themeFromArray($array)
{
$this->theme = data_get($array, 'theme', $this->defaultTheme());
}
}

View File

@@ -9,13 +9,13 @@ namespace Asantibanez\LivewireCharts\Models;
*/ */
class PieChartModel extends BaseChartModel class PieChartModel extends BaseChartModel
{ {
public $onSliceClickEventName; private $onSliceClickEventName;
public $opacity; private $opacity;
public $type; private $type;
public $data; private $data;
public function __construct() public function __construct()
{ {
@@ -44,6 +44,16 @@ class PieChartModel extends BaseChartModel
return $this; return $this;
} }
public function asPie()
{
return $this->setType('pie');
}
public function asDonut()
{
return $this->setType('donut');
}
public function withOnSliceClickEvent($onSliceClickEventName) public function withOnSliceClickEvent($onSliceClickEventName)
{ {
$this->onSliceClickEventName = $onSliceClickEventName; $this->onSliceClickEventName = $onSliceClickEventName;

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewireAreaChart; use Asantibanez\LivewireCharts\Charts\LivewireAreaChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewireAreaChartTest extends TestCase class LivewireAreaChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewireAreaChart::class); return Livewire::test(LivewireAreaChart::class);
} }

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewireColumnChart; use Asantibanez\LivewireCharts\Charts\LivewireColumnChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewireColumnChartTest extends TestCase class LivewireColumnChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewireColumnChart::class); return Livewire::test(LivewireColumnChart::class);
} }
@@ -22,4 +22,23 @@ class LivewireColumnChartTest extends TestCase
//Assert //Assert
$this->assertNotNull($component); $this->assertNotNull($component);
} }
/** @test */
public function should_emit_event_if_present()
{
//Arrange
$component = $this->buildComponent();
$columnChartModel = $component->columnChartModel;
data_set($columnChartModel, 'onColumnClickEventName', 'custom-event');
$component->set('columnChartModel', $columnChartModel);
//Act
$component->runAction('onColumnClick', []);
//Assert
$component->assertDispatched('custom-event');
}
} }

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewireLineChart; use Asantibanez\LivewireCharts\Charts\LivewireLineChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewireLineChartTest extends TestCase class LivewireLineChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewireLineChart::class); return Livewire::test(LivewireLineChart::class);
} }

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewirePieChart; use Asantibanez\LivewireCharts\Charts\LivewirePieChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewirePieChartTest extends TestCase class LivewirePieChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewirePieChart::class); return Livewire::test(LivewirePieChart::class);
} }
@@ -22,4 +22,23 @@ class LivewirePieChartTest extends TestCase
//Assert //Assert
$this->assertNotNull($component); $this->assertNotNull($component);
} }
/** @test */
public function should_emit_event_if_present()
{
//Arrange
$component = $this->buildComponent();
$pieChartModel = $component->pieChartModel;
data_set($pieChartModel, 'onSliceClickEventName', 'custom-event');
$component->set('pieChartModel', $pieChartModel);
//Act
$component->runAction('onSliceClick', []);
//Assert
$component->assertDispatched('custom-event');
}
} }

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewireRadarChart; use Asantibanez\LivewireCharts\Charts\LivewireRadarChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewireRadarChartTest extends TestCase class LivewireRadarChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewireRadarChart::class); return Livewire::test(LivewireRadarChart::class);
} }

View File

@@ -3,12 +3,12 @@
namespace Asantibanez\LivewireCharts\Tests; namespace Asantibanez\LivewireCharts\Tests;
use Asantibanez\LivewireCharts\Charts\LivewireTreeMapChart; use Asantibanez\LivewireCharts\Charts\LivewireTreeMapChart;
use Livewire\Features\SupportTesting\Testable;
use Livewire\Livewire; use Livewire\Livewire;
use Livewire\Testing\TestableLivewire;
class LivewireTreeMapChartTest extends TestCase class LivewireTreeMapChartTest extends TestCase
{ {
private function buildComponent() : TestableLivewire private function buildComponent() : Testable
{ {
return Livewire::test(LivewireTreeMapChart::class); return Livewire::test(LivewireTreeMapChart::class);
} }
@@ -22,4 +22,23 @@ class LivewireTreeMapChartTest extends TestCase
//Assert //Assert
$this->assertNotNull($component); $this->assertNotNull($component);
} }
/** @test */
public function should_emit_event_if_present()
{
//Arrange
$component = $this->buildComponent();
$treeMapChartModel = $component->treeMapChartModel;
data_set($treeMapChartModel, 'onBlockClickEventName', 'custom-event');
$component->set('treeMapChartModel', $treeMapChartModel);
//Act
$component->runAction('onBlockClick', []);
//Assert
$component->assertDispatched('custom-event');
}
} }