Spaces:
Running
Running
import SeriesData from '../data/SeriesData'; | |
/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
/** | |
* LegendVisualProvider is an bridge that pick encoded color from data and | |
* provide to the legend component. | |
*/ | |
class LegendVisualProvider { | |
private _getDataWithEncodedVisual: () => SeriesData; | |
private _getRawData: () => SeriesData; | |
constructor( | |
// Function to get data after filtered. It stores all the encoding info | |
getDataWithEncodedVisual: () => SeriesData, | |
// Function to get raw data before filtered. | |
getRawData: () => SeriesData | |
) { | |
this._getDataWithEncodedVisual = getDataWithEncodedVisual; | |
this._getRawData = getRawData; | |
} | |
getAllNames(): string[] { | |
const rawData = this._getRawData(); | |
// We find the name from the raw data. In case it's filtered by the legend component. | |
// Normally, the name can be found in rawData, but can't be found in filtered data will display as gray. | |
return rawData.mapArray(rawData.getName); | |
} | |
containName(name: string): boolean { | |
const rawData = this._getRawData(); | |
return rawData.indexOfName(name) >= 0; | |
} | |
indexOfName(name: string): number { | |
// Only get data when necessary. | |
// Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet. | |
// Invoking Series#getData immediately will throw an error. | |
const dataWithEncodedVisual = this._getDataWithEncodedVisual(); | |
return dataWithEncodedVisual.indexOfName(name); | |
} | |
getItemVisual(dataIndex: number, key: string): any { | |
// Get encoded visual properties from final filtered data. | |
const dataWithEncodedVisual = this._getDataWithEncodedVisual(); | |
return dataWithEncodedVisual.getItemVisual(dataIndex, key as any); | |
} | |
} | |
export default LegendVisualProvider; | |