problems timeline: fix regions rendering in firefox
This commit is contained in:
@@ -63,44 +63,8 @@ export default class ProblemTimeline extends PureComponent<ProblemTimelineProps,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { events, timeRange, problemColor, okColor } = this.props;
|
const { events, timeRange, problemColor, okColor } = this.props;
|
||||||
const { timeFrom, timeTo } = timeRange;
|
|
||||||
const range = timeTo - timeFrom;
|
|
||||||
const width = this.state.width;
|
const width = this.state.width;
|
||||||
|
|
||||||
let firstItem;
|
|
||||||
if (events.length) {
|
|
||||||
const firstTs = events.length ? Number(events[0].clock) : timeTo;
|
|
||||||
const duration = (firstTs - timeFrom) / range;
|
|
||||||
const firstEventColor = events[0].value !== '1' ? this.props.problemColor : this.props.okColor;
|
|
||||||
const firstEventAttributes = {
|
|
||||||
width: duration * width,
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
fill: firstEventColor,
|
|
||||||
};
|
|
||||||
firstItem = (
|
|
||||||
<rect key='0' className="problem-event-interval" {...firstEventAttributes}></rect>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const eventsIntervalItems = events.map((event, index) => {
|
|
||||||
const ts = Number(event.clock);
|
|
||||||
const nextTs = index < events.length - 1 ? Number(events[index + 1].clock) : timeTo;
|
|
||||||
const duration = (nextTs - ts) / range;
|
|
||||||
const posLeft = (ts - timeFrom) / range * width;
|
|
||||||
const eventColor = event.value === '1' ? this.props.problemColor : this.props.okColor;
|
|
||||||
const attributes = {
|
|
||||||
width: duration * width,
|
|
||||||
x: posLeft,
|
|
||||||
y: 0,
|
|
||||||
fill: eventColor,
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<rect key={event.eventid} className="problem-event-interval" {...attributes} />
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="event-timeline" ref={this.setRootRef}>
|
<div className="event-timeline" ref={this.setRootRef}>
|
||||||
<TimelineInfoContainer className="timeline-info-container"
|
<TimelineInfoContainer className="timeline-info-container"
|
||||||
@@ -141,8 +105,13 @@ export default class ProblemTimeline extends PureComponent<ProblemTimelineProps,
|
|||||||
</defs>
|
</defs>
|
||||||
<g className="event-timeline-group">
|
<g className="event-timeline-group">
|
||||||
<g className="event-timeline-regions" filter="url(#boxShadow)">
|
<g className="event-timeline-regions" filter="url(#boxShadow)">
|
||||||
{firstItem}
|
<TimelineRegions
|
||||||
{eventsIntervalItems}
|
events={events}
|
||||||
|
timeRange={timeRange}
|
||||||
|
width={width}
|
||||||
|
okColor={okColor}
|
||||||
|
problemColor={problemColor}
|
||||||
|
/>
|
||||||
</g>
|
</g>
|
||||||
<g className="timeline-points" transform={`translate(0, 6)`}>
|
<g className="timeline-points" transform={`translate(0, 6)`}>
|
||||||
<TimelinePoints
|
<TimelinePoints
|
||||||
@@ -192,10 +161,61 @@ class TimelineInfoContainer extends PureComponent<TimelineInfoContainerProps> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function TimelineRegion(props) {
|
interface TimelineRegionsProps {
|
||||||
return (
|
events: ZBXEvent[];
|
||||||
<rect></rect>
|
timeRange: GFTimeRange;
|
||||||
|
width: number;
|
||||||
|
okColor: string;
|
||||||
|
problemColor: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimelineRegions extends PureComponent<TimelineRegionsProps> {
|
||||||
|
render() {
|
||||||
|
const { events, timeRange, width, okColor, problemColor } = this.props;
|
||||||
|
const { timeFrom, timeTo } = timeRange;
|
||||||
|
const range = timeTo - timeFrom;
|
||||||
|
|
||||||
|
let firstItem;
|
||||||
|
if (events.length) {
|
||||||
|
const firstTs = events.length ? Number(events[0].clock) : timeTo;
|
||||||
|
const duration = (firstTs - timeFrom) / range;
|
||||||
|
const firstEventColor = events[0].value !== '1' ? problemColor : okColor;
|
||||||
|
const firstEventAttributes = {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
width: duration * width,
|
||||||
|
height: 12,
|
||||||
|
fill: firstEventColor,
|
||||||
|
};
|
||||||
|
firstItem = (
|
||||||
|
<rect key='0' className="problem-event-region" {...firstEventAttributes}></rect>
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const eventsIntervalItems = events.map((event, index) => {
|
||||||
|
const ts = Number(event.clock);
|
||||||
|
const nextTs = index < events.length - 1 ? Number(events[index + 1].clock) : timeTo;
|
||||||
|
const duration = (nextTs - ts) / range;
|
||||||
|
const posLeft = (ts - timeFrom) / range * width;
|
||||||
|
const eventColor = event.value === '1' ? problemColor : okColor;
|
||||||
|
const attributes = {
|
||||||
|
x: posLeft,
|
||||||
|
y: 0,
|
||||||
|
width: duration * width,
|
||||||
|
height: 12,
|
||||||
|
fill: eventColor,
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<rect key={event.eventid} className="problem-event-region" {...attributes} />
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return [
|
||||||
|
firstItem,
|
||||||
|
eventsIntervalItems
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TimelinePointsProps {
|
interface TimelinePointsProps {
|
||||||
|
|||||||
@@ -358,16 +358,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
svg.event-timeline-canvas {
|
svg.event-timeline-canvas {
|
||||||
height: 40px;
|
// height: 40px;
|
||||||
|
|
||||||
g.event-timeline-group {
|
g.event-timeline-group {
|
||||||
height: 40px;
|
// height: 40px;
|
||||||
transform: translate(0px, 14px);
|
transform: translate(0px, 14px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.problem-event-interval {
|
.problem-event-region {
|
||||||
height: 12px;
|
|
||||||
// transition: all 0.2s ease-out;
|
// transition: all 0.2s ease-out;
|
||||||
// opacity: 0.7;
|
// opacity: 0.7;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user