This package has been replaced by https://github.com/Nova-BI/nova-dashboard-manager
Provides ready-to-use Analytics Databoards for Laravel Nova
The Nova-Databoards metric classes are the container for all metric calculations. The calculations are adoptable to the supported visualisations, so e.g. within a Users
-metric you can calculate e.g. the total number of users for a Value-Visualisation or provide Trend-Data for a Trend-Visualisation.
With custom configurations you can make your Boards, Metrics, Filters and Visualisations re-usable - check out nova-bi/nova-databoards/src/Models/Datametricables/users.php
how to use the same metric to show the number of total users and users with verified email.
Thanks to laravel-schemaless-attributes you can add configuration options to your boards, metrics, filters and visualisations without changing the database schema.
By adding the Trait nova-bi/nova-databoards/src/Traits/DynamicMetricsTrait.php
the Nova-Metrics (or any custom metric card) become attributable.
Thumbs up to Muzaffer Dede for developing Nova Global Filter, which is essential for dynamic updates of the widgets on changing filters.
Data visualisation is a common business requirement. The default Nova Metrics are providing a simple way to display certain data from your application.
However the approach to bake metric calculation and visualisation into one file causes limitations if you e.g. want to re-use a metric for segments.
With Nova Metric you would require 3 files to visualize 3 filtered segments of the same KPI e.g.
In Nova Databoard you would develop 1 filterable datametric with configuration options and different visualisations like Value, Trend, Partition or custom visuals.
Once the datametrics are developed you can configure unlimited widgets and assign them to unlimited databoards.
Databoards are filterable and dynamic - so when changing a filter the widgets are reloads with the new data.
Add the package using composer
composer require nova-bi/nova-databoards
run Migrations
php artisan migrate
Add to the tools()
-method in your NovaServiceProvider.php
like this:
use NovaBI\NovaDataboards\NovaDataboards;
public function tools()
{
return [
new NovaDataboards()
];
}
Recommended: Publish Configuration File
php artisan vendor:publish --provider="NovaBI\NovaDataboards\NovaDataboardsServiceProvider" --tag="config"
with showToolMenu
you can configure if you want to use the Tool Menu default Resource Listing. Set to false
when using with Collapsible Resource Manager.
Optional: Publish Migrations
php artisan vendor:publish --provider="NovaBI\NovaDataboards\NovaDataboardsServiceProvider" --tag="migrations"
By default the Playground-Setup is configured, which will give you following basic metrics from you Nova installation:
Following visualisations are available (depending on the metric)
And these Filters are available.
The nice Collapsible Resource Manager package allows you to customize the menu structure.
With the following code the Databoards are directly accessible through the Menu (see know issues below - do you know how to solve this?)
use NovaBI\NovaDataboards\NovaDataboards;
use DigitalCreative\CollapsibleResourceManager\CollapsibleResourceManager;
use DigitalCreative\CollapsibleResourceManager\Resources\Group;
use DigitalCreative\CollapsibleResourceManager\Resources\NovaResource;
use DigitalCreative\CollapsibleResourceManager\Resources\TopLevelResource;
/**
* Get the tools that should be listed in the Nova sidebar.
*
* @return array
*/
public function tools()
{
$analyticsDataboards = [];
$databoards = \NovaBI\NovaDataboards\Models\Databoard::all();
$analyticsDataboards[] = NovaResource::make(\NovaBI\NovaDataboards\Nova\Databoard::class)->label(__('All Databoards'));
foreach ($databoards as $databoard) {
$analyticsDataboards[] = NovaResource::make(\NovaBI\NovaDataboards\Nova\Databoard::class)->detail($databoard->id)->label($databoard->name);
}
return [
new NovaDataboards(),
new CollapsibleResourceManager([
'navigation' => [
TopLevelResource::make([
'label' => 'Databoards',
'icon' => '<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor" class="sidebar-icon"><path d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path></svg>',
'resources' => $analyticsDataboards
]),
TopLevelResource::make([
'label' => 'Admin',
'icon' => '<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor"><path d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path><path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>',
'resources' => [
\App\Nova\User::class,
Group::make([
'label' => 'Databoard Configuration',
'expanded' => false,
'icon' => '',
'resources' =>
[
\NovaBI\NovaDataboards\Nova\DataboardConfiguration::class,
\NovaBI\NovaDataboards\Nova\Datafilter::class,
\NovaBI\NovaDataboards\Nova\Datawidget::class
]
]
)
]
]),
]
])
];
}
Separation of Metric Calculation and Visualisation
Nova Databoards follow the Nova concept of Resources to represent Models and are structured as following:
\Nova\Databoardables
-> \Models\Databoardables
\Nova\Datafilterables
-> \Models\Datafilterables
\Nova\Datametricables
-> \Models\Datametricables
\Nova\Datavisualables
-> \Models\Datavisualables
You can place your custom Resources and Models in any subdirectory. To make them available please register in the configuration file config/nova-databoards.php
. Please follow the Playground examples within the vendor/nova-bi/nova-databoards/src/
directory.
Open Development tasks on github
Sorting relation-ships (Widgets -> Boards) are not supported yet, the order of widgets on a dashboard is natural Nova Sortable, see https://github.com/optimistdigital/nova-sortable/issues/9
2nd level morphto using Inline MorphTo Field can be edited, but changes are not stored. Should it be read-only as well? See https://github.com/dcasia/nova-inline-morph-to/issues/16
custom filter not showing in global filter card, see https://github.com/nemrutco/nova-global-filter/issues/16
If you would like to contribute please fork the project and submit a PR.
Check out https://github.com/Nova-BI/nova-databoards/issues for open development tasks and issues.
This package is highly depending on following selection of packages from the huge range of excellent packages for laravel and nova.
This software is released under The MIT License (MIT).