@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
81 lines (70 loc) • 2.7 kB
text/typescript
// (C) 2020 GoodData Corporation
import { AFM, Execution } from "@gooddata/typings";
import { TypeGuards } from "@gooddata/gooddata-js";
import { IColorAssignment, IColorMapping, IColorPalette } from "../../../interfaces/Config";
import { getColorByGuid, getRgbStringFromRGB } from "../utils/color";
import { IColorStrategy, ICreateColorAssignmentReturnValue } from "./colorFactory";
abstract class ColorStrategy implements IColorStrategy {
protected palette: string[];
protected fullColorAssignment: IColorAssignment[];
protected outputColorAssignment: IColorAssignment[];
constructor(
colorPalette: IColorPalette,
colorMapping: IColorMapping[],
viewByAttribute: any,
stackByAttribute: any,
executionResponse: Execution.IExecutionResponse,
afm: AFM.IAfm,
occupiedMeasureBucketsLocalIdentifiers?: string[],
) {
const { fullColorAssignment, outputColorAssignment } = this.createColorAssignment(
colorPalette,
colorMapping,
viewByAttribute,
stackByAttribute,
executionResponse,
afm,
occupiedMeasureBucketsLocalIdentifiers,
);
this.fullColorAssignment = fullColorAssignment;
this.outputColorAssignment = outputColorAssignment ? outputColorAssignment : fullColorAssignment;
this.palette = this.createPalette(
colorPalette,
this.fullColorAssignment,
viewByAttribute,
stackByAttribute,
);
}
public getColorByIndex(index: number): string {
return this.palette[index];
}
public getColorAssignment() {
return this.outputColorAssignment;
}
public getFullColorAssignment() {
return this.fullColorAssignment;
}
protected createPalette(
colorPalette: IColorPalette,
colorAssignment: IColorAssignment[],
_viewByAttribute: any,
_stackByAttribute: any,
): string[] {
return colorAssignment.map((map, index: number) => {
const color = TypeGuards.isGuidColorItem(map.color)
? getColorByGuid(colorPalette, map.color.value, index)
: map.color.value;
return getRgbStringFromRGB(color);
});
}
protected abstract createColorAssignment(
colorPalette: IColorPalette,
colorMapping: IColorMapping[],
viewByAttribute: any,
stackByAttribute: any,
executionResponse: Execution.IExecutionResponse,
afm: AFM.IAfm,
occupiedMeasureBucketsLocalIdentifiers?: string[],
): ICreateColorAssignmentReturnValue;
}
export default ColorStrategy;