mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 19:16:41 +07:00
triggering on-something-changed
This commit is contained in:
parent
2dab345fe8
commit
1ca2691a15
6 changed files with 35 additions and 7 deletions
|
@ -29,7 +29,7 @@ export class EditorPanel extends React.PureComponent {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
mode, routerPoints, editor, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address,
|
mode, routerPoints, editor, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address, changed,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -49,6 +49,7 @@ export class EditorPanel extends React.PureComponent {
|
||||||
<LogoPreview logo={logo} />
|
<LogoPreview logo={logo} />
|
||||||
|
|
||||||
<div className="control-dist">
|
<div className="control-dist">
|
||||||
|
{changed && '(ch) '}
|
||||||
{totalDistance} км
|
{totalDistance} км
|
||||||
<Icon icon="icon-cycle" size={32} />
|
<Icon icon="icon-cycle" size={32} />
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@ export class App extends React.Component {
|
||||||
},
|
},
|
||||||
title: '',
|
title: '',
|
||||||
address: '',
|
address: '',
|
||||||
|
changed: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
@ -61,12 +62,15 @@ export class App extends React.Component {
|
||||||
this.editor.startEditing();
|
this.editor.startEditing();
|
||||||
|
|
||||||
this.hideLoader();
|
this.hideLoader();
|
||||||
|
|
||||||
|
this.setState({ changed: false });
|
||||||
};
|
};
|
||||||
|
|
||||||
setTitle = title => this.setState({ title });
|
setTitle = title => this.setState({ title });
|
||||||
setAddress = address => this.setState({ address });
|
setAddress = address => this.setState({ address });
|
||||||
|
|
||||||
setDataOnLoad = data => {
|
setDataOnLoad = data => {
|
||||||
|
this.setState({ changed: false });
|
||||||
this.editor.setData(data);
|
this.editor.setData(data);
|
||||||
this.hideLoader();
|
this.hideLoader();
|
||||||
};
|
};
|
||||||
|
@ -104,6 +108,12 @@ export class App extends React.Component {
|
||||||
|
|
||||||
getUser = () => this.state.user;
|
getUser = () => this.state.user;
|
||||||
|
|
||||||
|
triggerOnChange = () => {
|
||||||
|
if (!this.state.editing) return;
|
||||||
|
console.log('CHANGED!');
|
||||||
|
this.setState({ changed: true });
|
||||||
|
};
|
||||||
|
|
||||||
editor = new Editor({
|
editor = new Editor({
|
||||||
container: 'map',
|
container: 'map',
|
||||||
mode: this.state.mode,
|
mode: this.state.mode,
|
||||||
|
@ -116,6 +126,7 @@ export class App extends React.Component {
|
||||||
setTitle: this.setTitle,
|
setTitle: this.setTitle,
|
||||||
setAddress: this.setAddress,
|
setAddress: this.setAddress,
|
||||||
getUser: this.getUser,
|
getUser: this.getUser,
|
||||||
|
triggerOnChange: this.triggerOnChange,
|
||||||
});
|
});
|
||||||
|
|
||||||
authInit = () => {
|
authInit = () => {
|
||||||
|
@ -176,7 +187,7 @@ export class App extends React.Component {
|
||||||
const {
|
const {
|
||||||
editor,
|
editor,
|
||||||
state: {
|
state: {
|
||||||
mode, routerPoints, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address
|
mode, routerPoints, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address, changed,
|
||||||
},
|
},
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
|
@ -206,6 +217,7 @@ export class App extends React.Component {
|
||||||
editing={editing}
|
editing={editing}
|
||||||
title={title}
|
title={title}
|
||||||
address={address}
|
address={address}
|
||||||
|
changed={changed}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -22,6 +22,7 @@ export class Editor {
|
||||||
setTitle,
|
setTitle,
|
||||||
setAddress,
|
setAddress,
|
||||||
getUser,
|
getUser,
|
||||||
|
triggerOnChange,
|
||||||
}) {
|
}) {
|
||||||
this.logo = DEFAULT_LOGO;
|
this.logo = DEFAULT_LOGO;
|
||||||
this.owner = null;
|
this.owner = null;
|
||||||
|
@ -32,9 +33,9 @@ export class Editor {
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
this.poly = new Poly({
|
this.poly = new Poly({
|
||||||
map, routerMoveStart, lockMapClicks, setTotalDist
|
map, routerMoveStart, lockMapClicks, setTotalDist, triggerOnChange
|
||||||
});
|
});
|
||||||
this.stickers = new Stickers({ map, lockMapClicks });
|
this.stickers = new Stickers({ map, lockMapClicks, triggerOnChange });
|
||||||
this.router = new Router({
|
this.router = new Router({
|
||||||
map, lockMapClicks, setRouterPoints, changeMode, pushPolyPoints
|
map, lockMapClicks, setRouterPoints, changeMode, pushPolyPoints
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,7 +12,7 @@ const polyStyle = {
|
||||||
|
|
||||||
export class Poly {
|
export class Poly {
|
||||||
constructor({
|
constructor({
|
||||||
map, routerMoveStart, lockMapClicks, setTotalDist
|
map, routerMoveStart, lockMapClicks, setTotalDist, triggerOnChange,
|
||||||
}) {
|
}) {
|
||||||
this.poly = L.polyline([], polyStyle);
|
this.poly = L.polyline([], polyStyle);
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ export class Poly {
|
||||||
|
|
||||||
this.routerMoveStart = routerMoveStart;
|
this.routerMoveStart = routerMoveStart;
|
||||||
this.setTotalDist = setTotalDist;
|
this.setTotalDist = setTotalDist;
|
||||||
|
this.triggerOnChange = triggerOnChange;
|
||||||
this.lockMapClicks = lockMapClicks;
|
this.lockMapClicks = lockMapClicks;
|
||||||
this.bindEvents();
|
this.bindEvents();
|
||||||
|
|
||||||
|
@ -63,7 +64,10 @@ export class Poly {
|
||||||
|
|
||||||
this.setTotalDist(kilometers);
|
this.setTotalDist(kilometers);
|
||||||
this.routerMoveStart();
|
this.routerMoveStart();
|
||||||
|
|
||||||
this.drawArrows();
|
this.drawArrows();
|
||||||
|
|
||||||
|
if (coords.length > 1) this.triggerOnChange();
|
||||||
};
|
};
|
||||||
|
|
||||||
bindEvents = () => {
|
bindEvents = () => {
|
||||||
|
@ -148,6 +152,7 @@ export class Poly {
|
||||||
clearAll = () => {
|
clearAll = () => {
|
||||||
this.poly.setLatLngs([]);
|
this.poly.setLatLngs([]);
|
||||||
this.poly.disableEdit();
|
this.poly.disableEdit();
|
||||||
|
|
||||||
this.updateMarks();
|
this.updateMarks();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ import stickers from '$sprites/stickers.svg';
|
||||||
|
|
||||||
export class Sticker {
|
export class Sticker {
|
||||||
constructor({
|
constructor({
|
||||||
latlng, deleteSticker, map, lockMapClicks, sticker, angle = 2.2
|
latlng, deleteSticker, map, lockMapClicks, sticker, triggerOnChange, angle = 2.2
|
||||||
}) {
|
}) {
|
||||||
this.latlng = latlng;
|
this.latlng = latlng;
|
||||||
this.angle = angle;
|
this.angle = angle;
|
||||||
|
@ -15,6 +15,7 @@ export class Sticker {
|
||||||
this.map = map;
|
this.map = map;
|
||||||
this.sticker = sticker;
|
this.sticker = sticker;
|
||||||
this.editable = true;
|
this.editable = true;
|
||||||
|
this.triggerOnChange = triggerOnChange;
|
||||||
|
|
||||||
this.deleteSticker = deleteSticker;
|
this.deleteSticker = deleteSticker;
|
||||||
this.lockMapClicks = lockMapClicks;
|
this.lockMapClicks = lockMapClicks;
|
||||||
|
@ -49,9 +50,14 @@ export class Sticker {
|
||||||
|
|
||||||
this.element.addEventListener('mouseup', this.preventPropagations);
|
this.element.addEventListener('mouseup', this.preventPropagations);
|
||||||
this.stickerDelete.addEventListener('click', this.onDelete);
|
this.stickerDelete.addEventListener('click', this.onDelete);
|
||||||
|
|
||||||
|
this.marker.addEventListener('dragend', this.triggerOnChange);
|
||||||
|
|
||||||
|
this.triggerOnChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
onDelete = () => {
|
onDelete = () => {
|
||||||
|
this.triggerOnChange();
|
||||||
if (!this.isDragging) this.deleteSticker(this);
|
if (!this.isDragging) this.deleteSticker(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,6 +83,7 @@ export class Sticker {
|
||||||
onDragStop = e => {
|
onDragStop = e => {
|
||||||
this.preventPropagations(e);
|
this.preventPropagations(e);
|
||||||
|
|
||||||
|
this.triggerOnChange();
|
||||||
this.isDragging = false;
|
this.isDragging = false;
|
||||||
this.marker.enableEdit();
|
this.marker.enableEdit();
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,10 @@ import { layerGroup } from 'leaflet';
|
||||||
import { Sticker } from '$modules/Sticker';
|
import { Sticker } from '$modules/Sticker';
|
||||||
|
|
||||||
export class Stickers {
|
export class Stickers {
|
||||||
constructor({ map, lockMapClicks }) {
|
constructor({ map, lockMapClicks, triggerOnChange }) {
|
||||||
this.map = map;
|
this.map = map;
|
||||||
this.layer = layerGroup();
|
this.layer = layerGroup();
|
||||||
|
this.triggerOnChange = triggerOnChange;
|
||||||
|
|
||||||
this.lockMapClicks = lockMapClicks;
|
this.lockMapClicks = lockMapClicks;
|
||||||
this.stickers = [];
|
this.stickers = [];
|
||||||
|
@ -27,6 +28,7 @@ export class Stickers {
|
||||||
map: this.map,
|
map: this.map,
|
||||||
lockMapClicks: this.lockMapClicks,
|
lockMapClicks: this.lockMapClicks,
|
||||||
sticker,
|
sticker,
|
||||||
|
triggerOnChange: this.triggerOnChange,
|
||||||
});
|
});
|
||||||
this.stickers.push(marker);
|
this.stickers.push(marker);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue