Skip to content

Commit 3033b51

Browse files
committed
fix(editor): improve pattern shape editing
1 parent e16b063 commit 3033b51

File tree

5 files changed

+44
-33
lines changed

5 files changed

+44
-33
lines changed

lib/editor/actions/map/index.js

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,18 @@ export function handleControlPointDragEnd (index, controlPoint, evt, pattern) {
3333
}
3434
}
3535

36-
export function handleControlPointDrag (index, latlng, previous, next, pattern) {
36+
export function handleControlPointDrag (controlPoints, index, latlng, patternShape) {
3737
return function (dispatch, getState) {
38-
const { followStreets, patternCoordinates } = getState().editor.editSettings
39-
const defaultToStraightLine = false
40-
recalculatePatternCoordinates(latlng, previous, next, pattern, followStreets, patternCoordinates, defaultToStraightLine)
38+
const {followStreets} = getState().editor.editSettings
39+
recalculatePatternCoordinates(
40+
controlPoints,
41+
'update',
42+
index,
43+
followStreets,
44+
latlng,
45+
patternShape,
46+
false
47+
)
4148
.then(coords => {
4249
if (coords) {
4350
dispatch(updatePatternCoordinates(coords))
@@ -50,13 +57,11 @@ export function handleControlPointDrag (index, latlng, previous, next, pattern)
5057
}
5158
}
5259

53-
export function removingControlPoint (pattern, index, begin, end) {
60+
export function removingControlPoint (pattern, index) {
5461
return {
5562
type: 'REMOVE_CONTROL_POINT',
5663
pattern,
57-
index,
58-
begin,
59-
end
64+
index
6065
}
6166
}
6267

@@ -93,14 +98,25 @@ export function updatePatternCoordinates (coordinates) {
9398
}
9499
}
95100

96-
export function removeControlPoint (pattern, index, begin, end) {
101+
export function removeControlPoint (controlPoints, index, pattern) {
97102
return async function (dispatch, getState) {
98-
const { followStreets, patternCoordinates } = getState().editor.editSettings
99-
const coordinates = await recalculatePatternCoordinates(null, begin, end, pattern, followStreets, patternCoordinates)
103+
const {followStreets} = getState().editor.editSettings
104+
const coordinates = await recalculatePatternCoordinates(
105+
controlPoints,
106+
'delete',
107+
index,
108+
followStreets,
109+
null,
110+
pattern.shape
111+
)
100112
// update pattern
101-
dispatch(updateActiveGtfsEntity(pattern, 'trippattern', {shape: {type: 'LineString', coordinates}}))
113+
dispatch(
114+
updateActiveGtfsEntity(pattern, 'trippattern', {
115+
shape: {type: 'LineString', coordinates}
116+
})
117+
)
102118
// remove controlPoint
103-
dispatch(removingControlPoint(pattern, index, begin, end))
119+
dispatch(removingControlPoint(pattern, index))
104120
}
105121
}
106122

lib/editor/actions/map/stopStrategies.js

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -238,25 +238,18 @@ export function removeStopFromPattern (pattern, stop, index, controlPoints) {
238238
controlPointStopIdx === index
239239
)
240240
})
241-
// if not the first stop, use the previous control point as beginning of slice
242-
const begin = controlPoints[cpIndex - 2]
243-
? controlPoints[cpIndex - 1].point
244-
: null
245-
// if not last stop, use previous control point as end of slice
246-
const end = controlPoints[cpIndex + 2]
247-
? controlPoints[cpIndex + 1].point
248-
: null
249-
const {followStreets, patternCoordinates} = getState().editor.editSettings
241+
242+
const {followStreets} = getState().editor.editSettings
250243

251244
let coordinates
252245
try {
253246
coordinates = await recalculatePatternCoordinates(
254-
null,
255-
begin,
256-
end,
257-
pattern,
247+
controlPoints,
248+
'delete',
249+
cpIndex,
258250
followStreets,
259-
patternCoordinates
251+
null,
252+
pattern.shape
260253
)
261254
} catch (err) {
262255
console.log(err)

lib/editor/components/map/ControlPoint.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export default class ControlPoint extends Component {
77
static propTypes = {
88
activePattern: PropTypes.object,
99
controlPoint: PropTypes.object,
10+
controlPoints: PropTypes.array,
1011
editSettings: PropTypes.object,
1112
icon: PropTypes.object,
1213
index: PropTypes.number,
@@ -34,18 +35,18 @@ export default class ControlPoint extends Component {
3435
}
3536

3637
_onClick = (e) => {
37-
const {permanent, removeControlPoint, activePattern, index, previous, next} = this.props
38+
const {controlPoints, permanent, removeControlPoint, activePattern, index} = this.props
3839
// only remove controlPoint if it's not based on pattern stop (i.e., has permanent prop)
3940
if (!permanent) {
40-
removeControlPoint(activePattern, index, previous, next)
41+
removeControlPoint(controlPoints, index, activePattern)
4142
}
4243
}
4344

4445
handleDrag = (e) => {
45-
const {activePattern, handleControlPointDrag, index, next, previous} = this.props
46+
const {activePattern, controlPoints, handleControlPointDrag, index} = this.props
4647
const latlng = e.latlng
4748
this.setState({latlng})
48-
handleControlPointDrag(index, latlng, previous, next, activePattern)
49+
handleControlPointDrag(controlPoints, index, latlng, activePattern.shape)
4950
}
5051

5152
_onDragEnd = (e) => {

lib/editor/containers/ActiveGtfsEditor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,11 @@ const mapDispatchToProps = (dispatch, ownProps) => {
218218
addStopAtIntersection: (latlng, activePattern) => dispatch(addStopAtIntersection(latlng, activePattern)),
219219
addControlPoint: (controlPoint, index) => dispatch(addControlPoint(controlPoint, index)),
220220
setActiveStop: ({id, index}) => dispatch(setActiveStop({id, index})),
221-
removeControlPoint: (pattern, index, begin, end) => dispatch(removeControlPoint(pattern, index, begin, end)),
221+
removeControlPoint: (controlPoints, index, pattern) => dispatch(removeControlPoint(controlPoints, index, pattern)),
222222
updateControlPoint: (index, point, distance) => dispatch(updateControlPoint(index, point, distance)),
223223
constructControlPoint: (pattern, latlng, controlPoints) => dispatch(constructControlPoint(pattern, latlng, controlPoints)),
224224
handleControlPointDragEnd: (index, controlPoint, evt, pattern) => dispatch(handleControlPointDragEnd(index, controlPoint, evt, pattern)),
225-
handleControlPointDrag: (index, latlng, previous, next, pattern) => dispatch(handleControlPointDrag(index, latlng, previous, next, pattern)),
225+
handleControlPointDrag: (controlPoints, index, latlng, patternShape) => dispatch(handleControlPointDrag(controlPoints, index, latlng, patternShape)),
226226

227227
// EDITOR UI
228228
setTutorialHidden: (value) => dispatch(setTutorialHidden(value))

lib/editor/util/map.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export async function recalculatePatternCoordinates (
146146

147147
/**
148148
* Convenience function to return the coordinates from a lineSliceAlong operation
149+
*
149150
* @param {Number} startDistance
150151
* @param {Number} endDistance
151152
* @return {Coordinate[]}

0 commit comments

Comments
 (0)