From c115be1deed8fcf6aba5dc8d22d69f3c8bda279b Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Sat, 15 Dec 2018 22:58:49 +0300 Subject: [PATCH] problems timeline: use SVG --- .../components/ProblemTimeline.tsx | 111 +++++++++++++++--- src/sass/_panel-problems.scss | 37 +++--- 2 files changed, 117 insertions(+), 31 deletions(-) diff --git a/src/panel-triggers/components/ProblemTimeline.tsx b/src/panel-triggers/components/ProblemTimeline.tsx index de2b5d4..e00deb9 100644 --- a/src/panel-triggers/components/ProblemTimeline.tsx +++ b/src/panel-triggers/components/ProblemTimeline.tsx @@ -42,6 +42,7 @@ export default class ProblemTimeline extends PureComponent; } + const { events, timeRange } = this.props; const { timeFrom, timeTo } = timeRange; const range = timeTo - timeFrom; @@ -52,13 +53,14 @@ export default class ProblemTimeline extends PureComponent + ); } @@ -68,14 +70,15 @@ export default class ProblemTimeline extends PureComponent + ); }); @@ -83,23 +86,97 @@ export default class ProblemTimeline extends PureComponent + ); }); return (
- {firstItem} - {eventsIntervalItems} - {eventsItems} + + + + + + + + + + + + + + + + + + + + + + + + {firstItem} + {eventsIntervalItems} + + + {eventsItems} + + +
); } } + +function TimelineRegion(props) { + return ( + + ); +} + +interface TimelinePointProps { + x: number; + r: number; + color: string; + className?: string; +} + +class TimelinePoint extends PureComponent { + constructor(props) { + super(props); + this.state = { r: this.props.r }; + } + + handleMouseOver = () => { + this.setState({ r: this.props.r * 1.2 }); + } + + handleMouseLeave = () => { + this.setState({ r: this.props.r }); + } + + render() { + const { x, color, className } = this.props; + const r = this.state.r; + const cx = x + this.props.r; + const rInner = Math.floor(r * 0.6); + return ( + + + + + ); + } +} diff --git a/src/sass/_panel-problems.scss b/src/sass/_panel-problems.scss index 7c82672..06c991d 100644 --- a/src/sass/_panel-problems.scss +++ b/src/sass/_panel-problems.scss @@ -343,32 +343,41 @@ margin: 1.6rem 0; // margin-top: auto; + svg.event-timeline-canvas { + height: 40px; + + g.event-timeline-group { + height: 40px; + transform: translate(0px, 14px); + } + } + .problem-event-interval { height: 12px; - position: absolute; + // transition: all 0.2s ease-out; // opacity: 0.7; &:hover { // opacity: 1; - border: 1px solid $blue; - box-shadow: 0px 0px 5px rgba($blue, 0.5); + stroke: $zbx-text-highlighted; + filter: url(#glowShadow); } } .problem-event-item { - position: absolute; - width: 16px; - height: 16px; - // transform: translate(0px, -2px); - background: $problem-statusbar-background; - border: 4px solid $blue; - border-radius: 16px; - z-index: 10; + circle { + transition: all 0.2s ease-out; + } &:hover { - box-shadow: 0px 0px 6px 1px rgba($orange, 1); - background-color: $zbx-text-highlighted; - z-index: 11; + circle.point-border { + stroke: $zbx-text-highlighted; + stroke-width: 1; + filter: url(#glowShadow); + } + .point-core { + fill: $zbx-text-highlighted; + } } } }