kevinkhill/lavacharts

Dashboard / ChartWrapper missing functionality

am-css opened this issue · 1 comments

What Version? 3.1.14

Issue

Trying to build a dashboard with a data set
[ 'date', 'item', 'value' ]
Want a drop down selection with 'item' and to display 'date' & 'value' in a chart (any chart will do)

Google Charts API says that the ChartWrapper needs to define the data set (see https://developers.google.com/chart/interactive/docs/gallery/controls)
// The chart will use the columns 'date' and 'value'
// out of all the available ones.
'view': {'columns': [0, 2]}

I have been able to get this to work by editing Dashboards\Wrappers\ChartWrapper.php to hard code the relevant item to the json, overriding jsonSerialize from the parent:

public function jsonSerialize()
{
    return [
        'options'     => $this->contents,
        'containerId' => (string) $this->elementId,
        $this->contents->getWrapType() => $this->contents->getType(),
    'view' => [ 'columns' => [0,2], ],
    ];
}

I think there is additional code required to add a customize function to the Wrapper class (like the Chart class) to support this, unless someone can suggest a different mechanism

I fixed this by allowing Wrapper to extend Customizable, and then this allows setOptions() to be called on the Wrapper
With this I can do this
$cw = Lava::ChartWrapper($chart, 'chart')
->setOption('view', [ 'columns' => [0,2], ]);

Not sure what the implication of extending Customizable like this is, but it works for me

If I have time I may pull the code, create a branch and submit the changes