fix(LabellingFlow): Measurement's table "re-label" overflows screen and other issues (#627)
* fix(LabellingFlow): Fixes search items Includes a function to add the items related to root element fix #508 * fix(LabellingManager): Fixes z-index problem with header menu Fixes z-index problem with header menu fix #508 * fix(LabellingFlow): Includes overlay for select tree when open fix #508 * fix(LabellingManager): Changes backgroud color to highlight the modal text fix #508 * fix(LabellingFlow): Adjusts relabel position in the page fix #508 * fix(LabellingFlow): Fixes select tree position and include calculation to put at the center of mouse fix #508 * fix(LabellingFlow): Fixes autofocus and refresh page after hitting enter fix #508
This commit is contained in:
parent
36952c401a
commit
cac911f08e
@ -72,7 +72,8 @@ export default class EditDescriptionDialog extends Component {
|
|||||||
this.props.onCancel();
|
this.props.onCancel();
|
||||||
};
|
};
|
||||||
|
|
||||||
onConfirm = () => {
|
onConfirm = e => {
|
||||||
|
e.preventDefault();
|
||||||
this.props.onUpdate(this.state.description);
|
this.props.onUpdate(this.state.description);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -12,10 +12,10 @@ export default class LabellingFlow extends Component {
|
|||||||
static propTypes = {
|
static propTypes = {
|
||||||
eventData: PropTypes.object.isRequired,
|
eventData: PropTypes.object.isRequired,
|
||||||
measurementData: PropTypes.object.isRequired,
|
measurementData: PropTypes.object.isRequired,
|
||||||
|
|
||||||
labellingDoneCallback: PropTypes.func.isRequired,
|
labellingDoneCallback: PropTypes.func.isRequired,
|
||||||
updateLabelling: PropTypes.func.isRequired,
|
updateLabelling: PropTypes.func.isRequired,
|
||||||
|
|
||||||
|
initialTopDistance: PropTypes.number,
|
||||||
skipAddLabelButton: PropTypes.bool,
|
skipAddLabelButton: PropTypes.bool,
|
||||||
editLocation: PropTypes.bool,
|
editLocation: PropTypes.bool,
|
||||||
editDescription: PropTypes.bool,
|
editDescription: PropTypes.bool,
|
||||||
@ -52,6 +52,9 @@ export default class LabellingFlow extends Component {
|
|||||||
|
|
||||||
componentDidUpdate = () => {
|
componentDidUpdate = () => {
|
||||||
this.repositionComponent();
|
this.repositionComponent();
|
||||||
|
if (this.state.editDescription) {
|
||||||
|
this.descriptionInput.current.focus();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@ -62,7 +65,22 @@ export default class LabellingFlow extends Component {
|
|||||||
|
|
||||||
const style = Object.assign({}, this.state.componentStyle);
|
const style = Object.assign({}, this.state.componentStyle);
|
||||||
if (this.state.skipAddLabelButton) {
|
if (this.state.skipAddLabelButton) {
|
||||||
style.left -= 160;
|
if (style.left - 160 < 0) {
|
||||||
|
style.left = 0;
|
||||||
|
} else {
|
||||||
|
style.left -= 160;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.state.editLocation) {
|
||||||
|
style.maxHeight = '70vh';
|
||||||
|
if (!this.initialTopDistance) {
|
||||||
|
this.initialTopDistance = window.innerHeight - window.innerHeight * 0.3;
|
||||||
|
style.top = `${this.state.componentStyle.top -
|
||||||
|
this.initialTopDistance / 2}px`;
|
||||||
|
} else {
|
||||||
|
style.top = `${this.state.componentStyle.top}px`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -70,15 +88,18 @@ export default class LabellingFlow extends Component {
|
|||||||
displayComponent={this.state.displayComponent}
|
displayComponent={this.state.displayComponent}
|
||||||
onTransitionExit={this.props.labellingDoneCallback}
|
onTransitionExit={this.props.labellingDoneCallback}
|
||||||
>
|
>
|
||||||
<div
|
<>
|
||||||
className={mainElementClassName}
|
<div className="labellingComponent-overlay"></div>
|
||||||
style={style}
|
<div
|
||||||
ref={this.mainElement}
|
className={mainElementClassName}
|
||||||
onMouseLeave={this.fadeOutAndLeave}
|
style={style}
|
||||||
onMouseEnter={this.clearFadeOutTimer}
|
ref={this.mainElement}
|
||||||
>
|
onMouseLeave={this.fadeOutAndLeave}
|
||||||
{this.labellingStateFragment()}
|
onMouseEnter={this.clearFadeOutTimer}
|
||||||
</div>
|
>
|
||||||
|
{this.labellingStateFragment()}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
</LabellingTransition>
|
</LabellingTransition>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -173,9 +194,15 @@ export default class LabellingFlow extends Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
relabel = () => {
|
relabel = event => {
|
||||||
|
const viewportTopPosition = this.mainElement.current.offsetParent.offsetTop;
|
||||||
|
const componentStyle = {
|
||||||
|
top: event.nativeEvent.y - viewportTopPosition - 55,
|
||||||
|
left: event.nativeEvent.x,
|
||||||
|
};
|
||||||
this.setState({
|
this.setState({
|
||||||
editLocation: true,
|
editLocation: true,
|
||||||
|
componentStyle,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -213,7 +240,7 @@ export default class LabellingFlow extends Component {
|
|||||||
const viewportTopPosition = this.mainElement.current.offsetParent.offsetTop;
|
const viewportTopPosition = this.mainElement.current.offsetParent.offsetTop;
|
||||||
const componentStyle = {
|
const componentStyle = {
|
||||||
top: event.nativeEvent.y - viewportTopPosition - 25,
|
top: event.nativeEvent.y - viewportTopPosition - 25,
|
||||||
left: this.state.componentStyle.left,
|
left: event.nativeEvent.x,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -263,10 +290,28 @@ export default class LabellingFlow extends Component {
|
|||||||
clearTimeout(this.fadeOutTimer);
|
clearTimeout(this.fadeOutTimer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
calculateTopDistance = () => {
|
||||||
|
const height = window.innerHeight - window.innerHeight * 0.3;
|
||||||
|
let top = this.state.componentStyle.top - height / 2 + 55;
|
||||||
|
if (top < 0) {
|
||||||
|
top = 0;
|
||||||
|
} else {
|
||||||
|
if (top + height > window.innerHeight) {
|
||||||
|
top -= top + height - window.innerHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return top;
|
||||||
|
};
|
||||||
|
|
||||||
repositionComponent = () => {
|
repositionComponent = () => {
|
||||||
// SetTimeout for the css animation to end.
|
// SetTimeout for the css animation to end.
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
bounding(this.mainElement);
|
bounding(this.mainElement);
|
||||||
|
if (this.state.editLocation) {
|
||||||
|
this.mainElement.current.style.maxHeight = '70vh';
|
||||||
|
const top = this.calculateTopDistance();
|
||||||
|
this.mainElement.current.style.top = `${top}px`;
|
||||||
|
}
|
||||||
}, 200);
|
}, 200);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,17 @@
|
|||||||
|
.labellingComponent-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
.labellingComponent {
|
.labellingComponent {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
z-index: 300;
|
z-index: 999;
|
||||||
transition: all 200ms linear;
|
transition: all 200ms linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class SimpleDialog extends Component {
|
|||||||
ref={this.props.componentRef}
|
ref={this.props.componentRef}
|
||||||
style={this.props.componentStyle}
|
style={this.props.componentStyle}
|
||||||
>
|
>
|
||||||
<form>
|
<form onSubmit={this.props.onConfirm}>
|
||||||
<div className="header">
|
<div className="header">
|
||||||
<span className="closeBtn" onClick={this.props.onClose}>
|
<span className="closeBtn" onClick={this.props.onClose}>
|
||||||
<span className="closeIcon">x</span>
|
<span className="closeIcon">x</span>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user