@util-co/sdg-wheel
Version:
Wheel chart showing positive and negative impact on 17 SDGs (Sustainable Development Goals)
132 lines (131 loc) • 3.63 kB
TypeScript
import { Dispatch, MouseEventHandler, SetStateAction } from 'react';
import { Arc, Pie, PieArcDatum } from 'd3';
import { RangeLabel } from './constants';
export interface WheelDataRaw {
id: string;
scorePositive?: number;
scoreNegative?: number;
}
export interface WheelData {
id: string;
scorePositive?: number;
scoreNegative?: number;
label: string;
icon: string;
}
export interface WheelSegmentData {
id?: string;
score?: number;
label?: string;
width?: number;
color?: string;
}
export interface WheelProps {
data: WheelDataRaw[];
handleSegmentClick?: (e: MouseEventHandler<HTMLElement>, segmentData: WheelSegmentData) => void;
handleCenterClick?: (e: MouseEventHandler<HTMLElement>, segmentData: WheelSegmentData) => void;
selectSegments?: string[];
}
export interface WheelPie {
width?: number;
icon: string;
}
export interface WheelDataTransformed extends WheelPie {
id?: string;
weight?: number;
score?: number;
color?: string;
label?: string;
}
export type ClassNameType = string;
export type RadiusType = number;
export type ArcType = Arc<unknown, PieArcDatum<WheelPie>>;
export type PieTypeWheel = Pie<unknown, WheelPie>;
export type PieTypeTransformed = Pie<unknown, WheelDataTransformed>;
export type OnClickType = (e: MouseEventHandler<HTMLElement>, segmentData: WheelSegmentData) => void;
export type SetSelectedType = Dispatch<SetStateAction<string | undefined>>;
export type SegmentType = {
data: WheelSegmentData;
};
export interface WheelCirclesProps {
className: ClassNameType;
radius: RadiusType;
strokeColor: string;
strokeWidth: number;
fill: string;
onClick?: OnClickType;
setSelected?: SetSelectedType;
transform?: string;
isCenter?: boolean;
selectSegments?: string[];
}
export interface WheelIconsProps {
className: ClassNameType;
pie: PieTypeWheel;
data: WheelDataTransformed[];
imageSize: number;
offsetAngle: number;
radius: RadiusType;
arc: ArcType;
handleSegmentClick: OnClickType;
setSelected: SetSelectedType;
transform?: string;
}
export interface WheelPathsProps {
className: ClassNameType;
pie: PieTypeTransformed;
data: WheelDataTransformed[];
fill: string;
stroke: string;
arc: ArcType;
selectSegments?: string[];
isImages?: boolean;
transform?: string;
hoverSelected?: string;
}
export interface WheelRangeLabelsProps {
className: ClassNameType;
data: RangeLabel[];
fill: string;
transform?: string;
}
export interface WheelSegmentLabelsProps {
className: ClassNameType;
pie: PieTypeTransformed;
data: WheelDataTransformed[];
segmentValuesArc: Arc<unknown, PieArcDatum<WheelDataTransformed>>;
selectSegments: string[];
transform?: string;
}
export interface WheelSegmentsProps {
className: ClassNameType;
pie: PieTypeWheel;
data: WheelDataTransformed[];
onClick: OnClickType;
setSelected: SetSelectedType;
arc: ArcType;
selectSegments: string[];
onMouseOver?: (data: WheelSegmentData | null) => void;
hoverSelected?: WheelSegmentData | null;
transform?: string;
overlay?: boolean;
}
export declare enum SDG {
Sdg01 = "SDG-01",
Sdg02 = "SDG-02",
Sdg03 = "SDG-03",
Sdg04 = "SDG-04",
Sdg05 = "SDG-05",
Sdg06 = "SDG-06",
Sdg07 = "SDG-07",
Sdg08 = "SDG-08",
Sdg09 = "SDG-09",
Sdg10 = "SDG-10",
Sdg11 = "SDG-11",
Sdg12 = "SDG-12",
Sdg13 = "SDG-13",
Sdg14 = "SDG-14",
Sdg15 = "SDG-15",
Sdg16 = "SDG-16",
Sdg17 = "SDG-17"
}