Livewire Charts
Neat Livewire Charts for your Laravel projects.
Preview
Installation
You can install the package via composer:
composer require asantibanez/livewire-charts
Requirements
This package requires the following packages/libraries to work:
Laravel Livewire v2(https://laravel-livewire.com/)Alpine Js(https://github.com/alpinejs/alpine)Apex Charts(https://apexcharts.com/)
Please follow each package/library instructions on how to set them properly in your project.
Note: At the moment,
Apex Chartsis only supported for drawing charts.
Usage
Livewire Charts supports out of the box the following types of charts
- Line Chart (
LivewireLineChartcomponent) - Pie Chart (
LivewirePieChartcomponent) - Column Chart (
LivewireColumnChartcomponent)
Each one comes with its own "model" class that allows you to define the chart's data and render behavior.
LivewireLineChartusesLineChartModelto set up data points, markers, events and other ui customizations.LivewirePieChartusesPieChartModelto set up data slices, events and other ui customizations.LivewireColumnChartusesColumnChartModelto set up data columns, events and other ui customizations.
For example, to render a column chart, we can create an instance of ColumnChartModel and add some data to it
$columnChartModel =
(new ColumnChartModel())
->setTitle('Expenses by Type')
->addColumn('Food', 100, '#f6ad55')
->addColumn('Shopping', 200, '#fc8181')
->addColumn('Travel', 300, '#90cdf4')
;
Note: Chart model methods are chainable 💪
With $columnChartModel at hand, we pass it to our LivewireColumnChart component in our Blade template.
<livewire:livewire-column-chart
:column-chart-model="$columnChartModel"
/>
And that's it! You have a beautiful rendered chart in seconds. 👌
Note: You can use these charts inside other Livewire components too. Just render them in your Blade template and you are good to go. 👍
Enabling Interactions
To enable click events, you must use the with[XXX]ClickEvent($eventName) method present in every model class and
define a custom $eventName that will be fired with the corresponding data when a column/marker/slice is clicked.
$columnChartModel =
(new ColumnChartModel())
->setTitle('Expenses by Type')
->withOnColumnClickEventName('onColumnClick')
;
Here we define an onColumnClick event that will be fired when a column is clicked in our chart.
We can listen to the onClickEvent registering a listener in any other Livewire component.
protected $listeners = [
'onColumnClick' => 'handleOnColumnClick',
];
Charts "Reactivity"
You can use livewire-charts components as nested components in you Livewire components. Once rendered, charts will
not automatically react to changes in the $model passed in. This is just how Livewire works.
However, to enable "reactivity" when data passed in changes, you can define a special $key
to your components so they are fully re-rendered each time the chart data changes.
Each model class comes with a reactiveKey() method that returns a string based on its data. If any of the properties
are changed, this key will update accordingly and re-render the chart again.
In the following example, a parent component houses both column chart and pie chart and defines a $model for each one.
The parent component renders the charts as follows
<livewire:livewire-column-chart
key="{{ $columnChartModel->reactiveKey() }}"
:column-chart-model="$columnChartModel"
/>
<livewire:livewire-pie-chart
key="{{ $pieChartModel->reactiveKey() }}"
:pie-chart-model="$pieChartModel"
/>
When the parent component changes their respective models, charts will automatically re-render itself.
Charts API
Testing
composer test
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email santibanez.andres@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.


