-
-
Notifications
You must be signed in to change notification settings - Fork 300
Expand file tree
/
Copy pathnavButtons.js
More file actions
128 lines (116 loc) · 4.09 KB
/
navButtons.js
File metadata and controls
128 lines (116 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { featureCollection } from '@turf/helpers';
import { FormattedMessage, useIntl } from 'react-intl';
import messages from './messages';
import { Button } from '../button';
import { useAsync } from '../../hooks/UseAsync';
import { removeFeaturesById } from '../../utils/terrawDraw';
const clearParamsStep = (props) => {
switch (props.index) {
case 2: //clear Tasks
props.mapObj.map.getSource('grid').setData(featureCollection([]));
props.updateMetadata({ ...props.metadata, tasksNumber: 0 });
break;
case 3:
props.mapObj.map.getSource('tiny-tasks').setData(featureCollection([]));
props.updateMetadata({
...props.metadata,
taskGrid: props.metadata.tempTaskGrid,
tasksNumber: props.metadata.tempTaskGrid.features.length,
});
break;
case 4:
props.setErr({ error: false, message: '' });
break;
default:
break;
}
let prevStep = props.index - 1;
// If task is arbitrary. Jump to review.
if (props.metadata.arbitraryTasks === true) {
props.updateMetadata({ ...props.metadata, tasksNumber: 0 });
if (props.metadata.geom.features) {
props.updateMetadata({ ...props.metadata, tasksNumber: props.metadata.geom.features.length });
}
prevStep = 1;
}
props.setStep(prevStep);
};
const NavButtons = (props) => {
const intl = useIntl();
const createProjectFn = () => {
return new Promise((resolve, reject) => props.handleCreate());
};
const createProjectAsync = useAsync(createProjectFn);
const validateStep = (props) => {
switch (props.index) {
case 1: // Set Project AOI.
if (props.metadata.area >= props.maxArea) {
const message = intl.formatMessage(messages.areaOverLimitError, { n: props.maxArea });
return { error: true, message: message };
} else if (props.metadata.area === 0) {
const message = intl.formatMessage(messages.noGeometry);
return { error: true, message: message };
} else {
const id = props.metadata.geom.features[0].id;
const drawInstance = props.mapObj.draw.getTerraDrawInstance();
removeFeaturesById(drawInstance, [id]);
props.mapObj.map.getSource('aoi').setData(props.metadata.geom);
props.updateMetadata({
...props.metadata,
tasksNumber: props.metadata.arbitraryTasks
? props.metadata.geom.features.length
: props.metadata.taskGrid.features.length,
});
// clear the otherProjects source before passing to step 2
props.mapObj.map.getSource('otherProjects').setData(featureCollection([]));
}
break;
case 2: // Set Task grid.
const taskGrid = props.mapObj.map.getSource('grid')._data;
props.updateMetadata({ ...props.metadata, taskGrid: taskGrid, tempTaskGrid: taskGrid });
break;
case 3: // Trim Project.
break;
default:
return;
}
let nextStep = props.index + 1;
// If task is arbitrary. Jump to review.
if (props.metadata.arbitraryTasks === true) {
nextStep = 4;
}
props.setStep(nextStep);
return { error: false, message: '' };
};
const stepHandler = (event) => {
const resp = validateStep(props);
props.setErr(resp);
};
return (
<div className="pt2">
{props.index === 1 ? null : (
<Button onClick={() => clearParamsStep(props)} className="blue-dark bg-white mr3">
<FormattedMessage {...messages.backToPrevious} />
</Button>
)}
{props.index === 4 ? (
<Button
onClick={() => createProjectAsync.execute()}
className="white bg-red"
loading={createProjectAsync.status === 'pending'}
>
{props.cloneProjectData.name === null ? (
<FormattedMessage {...messages.create} />
) : (
<FormattedMessage {...messages.clone} />
)}
</Button>
) : (
<Button onClick={stepHandler} className="white bg-red">
<FormattedMessage {...messages.next} />
</Button>
)}
</div>
);
};
export default NavButtons;