triggering on-something-changed

This commit is contained in:
muerwre 2018-09-03 17:09:00 +07:00
parent 2dab345fe8
commit 1ca2691a15
6 changed files with 35 additions and 7 deletions

View file

@ -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} />
{ {

View file

@ -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>
); );

View file

@ -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
}); });

View file

@ -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();
}; };

View file

@ -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();

View file

@ -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);