@ukhomeoffice/cop-react-form-renderer 2.8.1 → 2.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +1 -1
- package/dist/components/FormRenderer/FormRenderer.js +29 -9
- package/dist/components/FormRenderer/FormRenderer.test.js +3 -2
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +10 -3
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +3 -3
- package/dist/components/SummaryList/SummaryList.js +1 -1
- package/dist/components/TaskList/Task.js +7 -1
- package/dist/components/TaskList/TaskList.scss +5 -3
- package/dist/json/group.json +1 -17
- package/dist/json/port.json +346 -0
- package/dist/json/sublocation.json +859 -0
- package/dist/json/terminal.json +81 -0
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +1 -0
- package/package.json +1 -1
|
@@ -416,7 +416,7 @@ describe('components', function () {
|
|
|
416
416
|
groupedComponent = cya.childNodes[10];
|
|
417
417
|
keyGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[0];
|
|
418
418
|
expect(keyGroup.tagName).toEqual('DT');
|
|
419
|
-
expect(keyGroup.textContent).toEqual('Address details
|
|
419
|
+
expect(keyGroup.textContent).toEqual('Address details');
|
|
420
420
|
valueGroup = groupedComponent.childNodes[0].childNodes[0].childNodes[1];
|
|
421
421
|
expect(valueGroup.childNodes.length).toEqual(4);
|
|
422
422
|
expect(valueGroup.tagName).toEqual('DD');
|
|
@@ -208,7 +208,7 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
208
208
|
components: components
|
|
209
209
|
}, _objectSpread(_objectSpread({}, data), patch), _models.EventTypes.SUBMIT);
|
|
210
210
|
|
|
211
|
-
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask);
|
|
211
|
+
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask, true);
|
|
212
212
|
|
|
213
213
|
if (patch) {
|
|
214
214
|
setData(submissionData);
|
|
@@ -256,6 +256,9 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
256
256
|
|
|
257
257
|
if (currentTask.state === _models.TaskStates.TYPES.COMPLETE) {
|
|
258
258
|
onPageChange(_models.FormPages.CYA);
|
|
259
|
+
} else if (currentTask.state === _models.TaskStates.TYPES.IN_PROGRESS) {
|
|
260
|
+
var currentPage = data.formStatus.tasks[currentTask.name].currentPage;
|
|
261
|
+
onPageChange(currentPage || currentTask.pages[0]);
|
|
259
262
|
} else {
|
|
260
263
|
onPageChange(currentTask.pages[0]);
|
|
261
264
|
}
|
|
@@ -274,7 +277,7 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
274
277
|
components: components
|
|
275
278
|
}, _objectSpread({}, data), _models.EventTypes.SUBMIT);
|
|
276
279
|
|
|
277
|
-
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action);
|
|
280
|
+
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask, true);
|
|
278
281
|
setData(submissionData); // Now submit the data to the backend...
|
|
279
282
|
|
|
280
283
|
hooks.onSubmit(action.type, submissionData, function () {
|
|
@@ -285,14 +288,14 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
285
288
|
}
|
|
286
289
|
}
|
|
287
290
|
|
|
288
|
-
if (action.type === _models.PageAction.TYPES.
|
|
291
|
+
if (action.type === _models.PageAction.TYPES.SAVE_AND_CONTINUE && hub === _models.HubFormats.TASK) {
|
|
289
292
|
if (_helpers.default.canCYASubmit(currentTask.fullPages, onError)) {
|
|
290
293
|
var _submissionData = _utils.default.Format.form({
|
|
291
294
|
pages: pages,
|
|
292
295
|
components: components
|
|
293
296
|
}, _objectSpread({}, data), _models.EventTypes.SUBMIT);
|
|
294
297
|
|
|
295
|
-
_submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, _submissionData, currentTask);
|
|
298
|
+
_submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, _submissionData, currentTask, true);
|
|
296
299
|
setData(_submissionData);
|
|
297
300
|
hooks.onSubmit(action.type, _submissionData, function () {
|
|
298
301
|
return onPageChange(_models.FormPages.HUB);
|
|
@@ -301,16 +304,33 @@ var FormRenderer = function FormRenderer(_ref) {
|
|
|
301
304
|
});
|
|
302
305
|
}
|
|
303
306
|
}
|
|
307
|
+
|
|
308
|
+
if (action.type === _models.PageAction.TYPES.SAVE_AND_RETURN) {
|
|
309
|
+
if (_helpers.default.canCYASubmit(currentTask.fullPages, onError)) {
|
|
310
|
+
var _submissionData2 = _utils.default.Format.form({
|
|
311
|
+
pages: pages,
|
|
312
|
+
components: components
|
|
313
|
+
}, _objectSpread({}, data), _models.EventTypes.SUBMIT);
|
|
314
|
+
|
|
315
|
+
_submissionData2.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, _submissionData2, currentTask);
|
|
316
|
+
setData(_submissionData2);
|
|
317
|
+
hooks.onSubmit(action.type, _submissionData2, function () {
|
|
318
|
+
if (type === _models.FormTypes.TASK) {
|
|
319
|
+
onPageChange(undefined);
|
|
320
|
+
} else {
|
|
321
|
+
onPageChange(_models.FormPages.HUB);
|
|
322
|
+
}
|
|
323
|
+
}, function (errors) {
|
|
324
|
+
return _handlers.default.submissionError(errors, onError);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|
|
304
328
|
};
|
|
305
329
|
|
|
306
330
|
var classes = _utils.default.classBuilder(classBlock, classModifiers, className);
|
|
307
331
|
|
|
308
332
|
if (hub === _models.HubFormats.TASK) {
|
|
309
|
-
cya.actions = [
|
|
310
|
-
type: _models.PageAction.TYPES.SAVE_AND_RETURN,
|
|
311
|
-
label: 'Submit',
|
|
312
|
-
validate: true
|
|
313
|
-
}];
|
|
333
|
+
cya.actions = [_models.PageAction.TYPES.SAVE_AND_CONTINUE, _models.PageAction.TYPES.SAVE_AND_RETURN];
|
|
314
334
|
}
|
|
315
335
|
|
|
316
336
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -633,7 +633,8 @@ describe('components', function () {
|
|
|
633
633
|
|
|
634
634
|
cyaPage = container.childNodes[0].childNodes[0];
|
|
635
635
|
expect(cyaPage.childNodes[0].textContent).toEqual('Check your answers');
|
|
636
|
-
expect(cyaPage.childNodes[5].textContent).toEqual('
|
|
636
|
+
expect(cyaPage.childNodes[5].childNodes[0].textContent).toEqual('Save and continue');
|
|
637
|
+
expect(cyaPage.childNodes[5].childNodes[1].textContent).toEqual('Save and return later');
|
|
637
638
|
|
|
638
639
|
_react.fireEvent.click(cyaPage.childNodes[5].childNodes[0], {}); //Should be back at task list
|
|
639
640
|
|
|
@@ -650,7 +651,7 @@ describe('components', function () {
|
|
|
650
651
|
expect(finalSubmit.mode).toEqual('sea');
|
|
651
652
|
expect(finalSubmit.formStatus.tasks['Date, location and mode details'].complete).toEqual(true);
|
|
652
653
|
|
|
653
|
-
case
|
|
654
|
+
case 39:
|
|
654
655
|
case "end":
|
|
655
656
|
return _context18.stop();
|
|
656
657
|
}
|
|
@@ -11,18 +11,25 @@ var _getNextPageId = _interopRequireDefault(require("./getNextPageId"));
|
|
|
11
11
|
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
|
|
14
|
-
var getSubmissionStatus = function getSubmissionStatus(formType, pages, currentPageId, action, formData, currentTask) {
|
|
14
|
+
var getSubmissionStatus = function getSubmissionStatus(formType, pages, currentPageId, action, formData, currentTask, isCompleted) {
|
|
15
15
|
if (formType === _models.FormTypes.TASK) {
|
|
16
16
|
var formStatus = formData.formStatus ? formData.formStatus : {};
|
|
17
17
|
formStatus.tasks = formStatus.tasks ? formStatus.tasks : {};
|
|
18
18
|
formStatus.tasks[currentTask.name] = formStatus.tasks[currentTask.name] ? formStatus.tasks[currentTask.name] : {};
|
|
19
19
|
|
|
20
|
-
if (currentPageId === _models.FormPages.CYA) {
|
|
20
|
+
if (currentPageId === (_models.FormPages.CYA || 'submitForm') && isCompleted) {
|
|
21
21
|
formStatus.tasks[currentTask.name].complete = true;
|
|
22
|
+
} else if ((action === null || action === void 0 ? void 0 : action.type) === _models.PageAction.TYPES.SAVE_AND_NAVIGATE) {
|
|
23
|
+
console.log('pg action sc');
|
|
24
|
+
formStatus.tasks[currentTask.name] = {
|
|
25
|
+
complete: false,
|
|
26
|
+
currentPage: (0, _getNextPageId.default)(formType, pages, currentPageId, action, formData)
|
|
27
|
+
};
|
|
22
28
|
} else {
|
|
29
|
+
console.log('got to else stmt');
|
|
23
30
|
formStatus.tasks[currentTask.name] = {
|
|
24
31
|
complete: false,
|
|
25
|
-
currentPage:
|
|
32
|
+
currentPage: currentPageId
|
|
26
33
|
};
|
|
27
34
|
}
|
|
28
35
|
|
|
@@ -210,19 +210,19 @@ describe('components', function () {
|
|
|
210
210
|
});
|
|
211
211
|
describe("when the form type is '".concat(_models.FormTypes.TASK, "'"), function () {
|
|
212
212
|
var FORM_TYPE = _models.FormTypes.TASK;
|
|
213
|
-
it("should mark the current task as complete if the current page is '".concat(_models.FormPages.CYA, "'"), function () {
|
|
213
|
+
it("should mark the current task as complete if the current page is '".concat(_models.FormPages.CYA, "' and it is marked as complete"), function () {
|
|
214
214
|
var CURRENT_PAGE_ID = _models.FormPages.CYA;
|
|
215
215
|
var TASK_NAME = 'taskName';
|
|
216
216
|
var CURRENT_TASK = {
|
|
217
217
|
name: TASK_NAME
|
|
218
218
|
};
|
|
219
|
-
expect((0, _getSubmissionStatus.default)(FORM_TYPE, PAGES, CURRENT_PAGE_ID, undefined, {}, CURRENT_TASK)).toMatchObject({
|
|
219
|
+
expect((0, _getSubmissionStatus.default)(FORM_TYPE, PAGES, CURRENT_PAGE_ID, undefined, {}, CURRENT_TASK, true)).toMatchObject({
|
|
220
220
|
tasks: _defineProperty({}, TASK_NAME, {
|
|
221
221
|
complete: true
|
|
222
222
|
})
|
|
223
223
|
});
|
|
224
224
|
});
|
|
225
|
-
it("should update the current task with the
|
|
225
|
+
it("should update the current task with the current page and a false complete flag if the next page is not '".concat(_models.FormPages.CYA, "'"), function () {
|
|
226
226
|
var CURRENT_PAGE_ID = 'eventDate';
|
|
227
227
|
var TASK_NAME = 'taskName';
|
|
228
228
|
var CURRENT_TASK = {
|
|
@@ -53,7 +53,7 @@ var SummaryList = function SummaryList(_ref) {
|
|
|
53
53
|
className: classes('row')
|
|
54
54
|
}, /*#__PURE__*/_react.default.createElement("dt", {
|
|
55
55
|
className: classes('key')
|
|
56
|
-
}, row.key, !((_row$component = row.component) !== null && _row$component !== void 0 && _row$component.required) && " (optional)"), /*#__PURE__*/_react.default.createElement("dd", {
|
|
56
|
+
}, row.key, !row.hasOwnProperty('required') && !((_row$component = row.component) !== null && _row$component !== void 0 && _row$component.required) && " (optional)", !row.hasOwnProperty('component') && row.hasOwnProperty('required') && !(row !== null && row !== void 0 && row.required) && " (optional)"), /*#__PURE__*/_react.default.createElement("dd", {
|
|
57
57
|
className: classes('value')
|
|
58
58
|
}, row.value), !noChangeAction && /*#__PURE__*/_react.default.createElement("dd", {
|
|
59
59
|
className: classes('actions')
|
|
@@ -65,7 +65,13 @@ var Task = function Task(_ref) {
|
|
|
65
65
|
}, linkActive ? /*#__PURE__*/_react.default.createElement(_copReactComponents.Link, {
|
|
66
66
|
onClick: function onClick() {
|
|
67
67
|
return _onClick(task);
|
|
68
|
-
}
|
|
68
|
+
},
|
|
69
|
+
onKeyPress: function onKeyPress(event) {
|
|
70
|
+
if (event.key === 'Enter') {
|
|
71
|
+
_onClick(task);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
tabIndex: "0"
|
|
69
75
|
}, task.name) : task.name), /*#__PURE__*/_react.default.createElement(_TaskState.default, {
|
|
70
76
|
state: currentState
|
|
71
77
|
}));
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
min-width: 550px;
|
|
12
12
|
}
|
|
13
13
|
.hods-task-list__items {
|
|
14
|
-
|
|
14
|
+
font-size: 19px;
|
|
15
15
|
@include govuk-responsive-margin(9, 'bottom');
|
|
16
16
|
list-style: none;
|
|
17
17
|
padding-left: 0;
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
.hods-task-list__section {
|
|
23
23
|
display: table;
|
|
24
|
-
|
|
24
|
+
font-size: 24px;
|
|
25
|
+
font-weight: bold;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
.hods-task-list__section-number {
|
|
@@ -46,10 +47,11 @@
|
|
|
46
47
|
|
|
47
48
|
.hods-task-list__task-name {
|
|
48
49
|
display: block;
|
|
49
|
-
cursor:
|
|
50
|
+
cursor: auto;
|
|
50
51
|
@include govuk-media-query($from: 450px) {
|
|
51
52
|
float: left;
|
|
52
53
|
}
|
|
54
|
+
font-weight: normal;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
.hods-task-reference-description{
|
package/dist/json/group.json
CHANGED
|
@@ -175,23 +175,6 @@
|
|
|
175
175
|
"field": "addressDetails.town"
|
|
176
176
|
}
|
|
177
177
|
},
|
|
178
|
-
{
|
|
179
|
-
"id": "postCode",
|
|
180
|
-
"fieldId": "postCode",
|
|
181
|
-
"label": "Postcode",
|
|
182
|
-
"type": "text",
|
|
183
|
-
"required": true,
|
|
184
|
-
"groupId": "addressDetails",
|
|
185
|
-
"custom_errors": [
|
|
186
|
-
{
|
|
187
|
-
"type": "required",
|
|
188
|
-
"message": "Please enter postcode"
|
|
189
|
-
}
|
|
190
|
-
],
|
|
191
|
-
"source": {
|
|
192
|
-
"field": "addressDetails.postCode"
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
178
|
{
|
|
196
179
|
"id": "postCode",
|
|
197
180
|
"fieldId": "postCode",
|
|
@@ -378,6 +361,7 @@
|
|
|
378
361
|
{
|
|
379
362
|
"id": "address",
|
|
380
363
|
"label": "Address details",
|
|
364
|
+
"required": true,
|
|
381
365
|
"components": ["firstLineOfTheAddress", "town", "city", "postCode"]
|
|
382
366
|
}
|
|
383
367
|
],
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": [
|
|
3
|
+
{
|
|
4
|
+
"id": 5,
|
|
5
|
+
"countryid": 234,
|
|
6
|
+
"commandid": 27,
|
|
7
|
+
"locationid": null,
|
|
8
|
+
"name": "Abbotsbury",
|
|
9
|
+
"addressid": null,
|
|
10
|
+
"subdivision": "DOR",
|
|
11
|
+
"municipality": null,
|
|
12
|
+
"geolong": null,
|
|
13
|
+
"geolat": null,
|
|
14
|
+
"air": false,
|
|
15
|
+
"land": false,
|
|
16
|
+
"sea": true,
|
|
17
|
+
"rail": false,
|
|
18
|
+
"iata": null,
|
|
19
|
+
"icao": null,
|
|
20
|
+
"localcode": null,
|
|
21
|
+
"unlocode": "AOT",
|
|
22
|
+
"helipad": false,
|
|
23
|
+
"fixedpcp": null,
|
|
24
|
+
"portablepcp": null,
|
|
25
|
+
"egates": null,
|
|
26
|
+
"nonoperational": false,
|
|
27
|
+
"portsizeid": 3,
|
|
28
|
+
"juxtaposed": false,
|
|
29
|
+
"freightparcelposthub": false,
|
|
30
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
31
|
+
"validto": null,
|
|
32
|
+
"updatedby": null
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": 7947,
|
|
36
|
+
"countryid": 234,
|
|
37
|
+
"commandid": null,
|
|
38
|
+
"locationid": null,
|
|
39
|
+
"name": "Whitehall",
|
|
40
|
+
"addressid": null,
|
|
41
|
+
"subdivision": "NA",
|
|
42
|
+
"municipality": null,
|
|
43
|
+
"geolong": "-1.14934",
|
|
44
|
+
"geolat": "51.79353",
|
|
45
|
+
"air": true,
|
|
46
|
+
"land": false,
|
|
47
|
+
"sea": false,
|
|
48
|
+
"rail": false,
|
|
49
|
+
"iata": null,
|
|
50
|
+
"icao": null,
|
|
51
|
+
"localcode": null,
|
|
52
|
+
"unlocode": null,
|
|
53
|
+
"helipad": false,
|
|
54
|
+
"fixedpcp": null,
|
|
55
|
+
"portablepcp": null,
|
|
56
|
+
"egates": null,
|
|
57
|
+
"nonoperational": false,
|
|
58
|
+
"portsizeid": 3,
|
|
59
|
+
"juxtaposed": false,
|
|
60
|
+
"freightparcelposthub": false,
|
|
61
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
62
|
+
"validto": null,
|
|
63
|
+
"updatedby": null
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"id": 9887,
|
|
67
|
+
"countryid": 234,
|
|
68
|
+
"commandid": 20,
|
|
69
|
+
"locationid": null,
|
|
70
|
+
"name": "The Manor House Castle Combe",
|
|
71
|
+
"addressid": null,
|
|
72
|
+
"subdivision": "NA",
|
|
73
|
+
"municipality": null,
|
|
74
|
+
"geolong": "-2.23211",
|
|
75
|
+
"geolat": "51.49378",
|
|
76
|
+
"air": true,
|
|
77
|
+
"land": false,
|
|
78
|
+
"sea": false,
|
|
79
|
+
"rail": false,
|
|
80
|
+
"iata": null,
|
|
81
|
+
"icao": null,
|
|
82
|
+
"localcode": null,
|
|
83
|
+
"unlocode": null,
|
|
84
|
+
"helipad": true,
|
|
85
|
+
"fixedpcp": null,
|
|
86
|
+
"portablepcp": null,
|
|
87
|
+
"egates": null,
|
|
88
|
+
"nonoperational": false,
|
|
89
|
+
"portsizeid": 3,
|
|
90
|
+
"juxtaposed": false,
|
|
91
|
+
"freightparcelposthub": false,
|
|
92
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
93
|
+
"validto": null,
|
|
94
|
+
"updatedby": null
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": 13418,
|
|
98
|
+
"countryid": 14,
|
|
99
|
+
"commandid": null,
|
|
100
|
+
"locationid": null,
|
|
101
|
+
"name": "Ballast Head",
|
|
102
|
+
"addressid": null,
|
|
103
|
+
"subdivision": "SA",
|
|
104
|
+
"municipality": null,
|
|
105
|
+
"geolong": null,
|
|
106
|
+
"geolat": null,
|
|
107
|
+
"air": false,
|
|
108
|
+
"land": false,
|
|
109
|
+
"sea": true,
|
|
110
|
+
"rail": false,
|
|
111
|
+
"iata": null,
|
|
112
|
+
"icao": null,
|
|
113
|
+
"localcode": null,
|
|
114
|
+
"unlocode": "BAH",
|
|
115
|
+
"helipad": null,
|
|
116
|
+
"fixedpcp": null,
|
|
117
|
+
"portablepcp": null,
|
|
118
|
+
"egates": null,
|
|
119
|
+
"nonoperational": false,
|
|
120
|
+
"portsizeid": null,
|
|
121
|
+
"juxtaposed": false,
|
|
122
|
+
"freightparcelposthub": false,
|
|
123
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
124
|
+
"validto": null,
|
|
125
|
+
"updatedby": null
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": 17391,
|
|
129
|
+
"countryid": 22,
|
|
130
|
+
"commandid": null,
|
|
131
|
+
"locationid": null,
|
|
132
|
+
"name": "Thuin",
|
|
133
|
+
"addressid": null,
|
|
134
|
+
"subdivision": "WHT",
|
|
135
|
+
"municipality": null,
|
|
136
|
+
"geolong": "4.28333",
|
|
137
|
+
"geolat": "50.33333",
|
|
138
|
+
"air": false,
|
|
139
|
+
"land": false,
|
|
140
|
+
"sea": true,
|
|
141
|
+
"rail": false,
|
|
142
|
+
"iata": null,
|
|
143
|
+
"icao": null,
|
|
144
|
+
"localcode": null,
|
|
145
|
+
"unlocode": "THU",
|
|
146
|
+
"helipad": null,
|
|
147
|
+
"fixedpcp": null,
|
|
148
|
+
"portablepcp": null,
|
|
149
|
+
"egates": null,
|
|
150
|
+
"nonoperational": false,
|
|
151
|
+
"portsizeid": null,
|
|
152
|
+
"juxtaposed": false,
|
|
153
|
+
"freightparcelposthub": false,
|
|
154
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
155
|
+
"validto": null,
|
|
156
|
+
"updatedby": null
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": 27077,
|
|
160
|
+
"countryid": 47,
|
|
161
|
+
"commandid": null,
|
|
162
|
+
"locationid": null,
|
|
163
|
+
"name": "Pudongxinqu Pt",
|
|
164
|
+
"addressid": null,
|
|
165
|
+
"subdivision": "31",
|
|
166
|
+
"municipality": null,
|
|
167
|
+
"geolong": null,
|
|
168
|
+
"geolat": null,
|
|
169
|
+
"air": false,
|
|
170
|
+
"land": false,
|
|
171
|
+
"sea": true,
|
|
172
|
+
"rail": false,
|
|
173
|
+
"iata": null,
|
|
174
|
+
"icao": null,
|
|
175
|
+
"localcode": null,
|
|
176
|
+
"unlocode": "PDX",
|
|
177
|
+
"helipad": null,
|
|
178
|
+
"fixedpcp": null,
|
|
179
|
+
"portablepcp": null,
|
|
180
|
+
"egates": null,
|
|
181
|
+
"nonoperational": false,
|
|
182
|
+
"portsizeid": null,
|
|
183
|
+
"juxtaposed": false,
|
|
184
|
+
"freightparcelposthub": false,
|
|
185
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
186
|
+
"validto": null,
|
|
187
|
+
"updatedby": null
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"id": 52061,
|
|
191
|
+
"countryid": 80,
|
|
192
|
+
"commandid": null,
|
|
193
|
+
"locationid": null,
|
|
194
|
+
"name": "Jouques",
|
|
195
|
+
"addressid": null,
|
|
196
|
+
"subdivision": "13",
|
|
197
|
+
"municipality": null,
|
|
198
|
+
"geolong": "5.63333",
|
|
199
|
+
"geolat": "43.63333",
|
|
200
|
+
"air": false,
|
|
201
|
+
"land": false,
|
|
202
|
+
"sea": true,
|
|
203
|
+
"rail": false,
|
|
204
|
+
"iata": null,
|
|
205
|
+
"icao": null,
|
|
206
|
+
"localcode": null,
|
|
207
|
+
"unlocode": "QUU",
|
|
208
|
+
"helipad": null,
|
|
209
|
+
"fixedpcp": null,
|
|
210
|
+
"portablepcp": null,
|
|
211
|
+
"egates": null,
|
|
212
|
+
"nonoperational": false,
|
|
213
|
+
"portsizeid": null,
|
|
214
|
+
"juxtaposed": false,
|
|
215
|
+
"freightparcelposthub": false,
|
|
216
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
217
|
+
"validto": null,
|
|
218
|
+
"updatedby": null
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": 63838,
|
|
222
|
+
"countryid": 107,
|
|
223
|
+
"commandid": null,
|
|
224
|
+
"locationid": null,
|
|
225
|
+
"name": "Panjang",
|
|
226
|
+
"addressid": null,
|
|
227
|
+
"subdivision": null,
|
|
228
|
+
"municipality": null,
|
|
229
|
+
"geolong": null,
|
|
230
|
+
"geolat": null,
|
|
231
|
+
"air": false,
|
|
232
|
+
"land": false,
|
|
233
|
+
"sea": true,
|
|
234
|
+
"rail": false,
|
|
235
|
+
"iata": null,
|
|
236
|
+
"icao": null,
|
|
237
|
+
"localcode": null,
|
|
238
|
+
"unlocode": "PNJ",
|
|
239
|
+
"helipad": null,
|
|
240
|
+
"fixedpcp": null,
|
|
241
|
+
"portablepcp": null,
|
|
242
|
+
"egates": null,
|
|
243
|
+
"nonoperational": false,
|
|
244
|
+
"portsizeid": null,
|
|
245
|
+
"juxtaposed": false,
|
|
246
|
+
"freightparcelposthub": false,
|
|
247
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
248
|
+
"validto": null,
|
|
249
|
+
"updatedby": null
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"id": 78550,
|
|
253
|
+
"countryid": 155,
|
|
254
|
+
"commandid": null,
|
|
255
|
+
"locationid": null,
|
|
256
|
+
"name": "Hoek van Holland",
|
|
257
|
+
"addressid": null,
|
|
258
|
+
"subdivision": null,
|
|
259
|
+
"municipality": null,
|
|
260
|
+
"geolong": null,
|
|
261
|
+
"geolat": null,
|
|
262
|
+
"air": false,
|
|
263
|
+
"land": false,
|
|
264
|
+
"sea": true,
|
|
265
|
+
"rail": false,
|
|
266
|
+
"iata": null,
|
|
267
|
+
"icao": null,
|
|
268
|
+
"localcode": null,
|
|
269
|
+
"unlocode": "HVH",
|
|
270
|
+
"helipad": null,
|
|
271
|
+
"fixedpcp": null,
|
|
272
|
+
"portablepcp": null,
|
|
273
|
+
"egates": null,
|
|
274
|
+
"nonoperational": false,
|
|
275
|
+
"portsizeid": null,
|
|
276
|
+
"juxtaposed": false,
|
|
277
|
+
"freightparcelposthub": false,
|
|
278
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
279
|
+
"validto": null,
|
|
280
|
+
"updatedby": null
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": 102163,
|
|
284
|
+
"countryid": 238,
|
|
285
|
+
"commandid": null,
|
|
286
|
+
"locationid": null,
|
|
287
|
+
"name": "Lolita",
|
|
288
|
+
"addressid": null,
|
|
289
|
+
"subdivision": "TX",
|
|
290
|
+
"municipality": null,
|
|
291
|
+
"geolong": "-96.53333",
|
|
292
|
+
"geolat": "28.83333",
|
|
293
|
+
"air": false,
|
|
294
|
+
"land": false,
|
|
295
|
+
"sea": true,
|
|
296
|
+
"rail": false,
|
|
297
|
+
"iata": null,
|
|
298
|
+
"icao": null,
|
|
299
|
+
"localcode": null,
|
|
300
|
+
"unlocode": "OIT",
|
|
301
|
+
"helipad": null,
|
|
302
|
+
"fixedpcp": null,
|
|
303
|
+
"portablepcp": null,
|
|
304
|
+
"egates": null,
|
|
305
|
+
"nonoperational": false,
|
|
306
|
+
"portsizeid": null,
|
|
307
|
+
"juxtaposed": false,
|
|
308
|
+
"freightparcelposthub": false,
|
|
309
|
+
"validfrom": "2019-01-01T00:01:00.000Z",
|
|
310
|
+
"validto": null,
|
|
311
|
+
"updatedby": null
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"id": 113626,
|
|
315
|
+
"countryid": 234,
|
|
316
|
+
"commandid": 6,
|
|
317
|
+
"locationid": null,
|
|
318
|
+
"name": "Rotterdam Central Station",
|
|
319
|
+
"addressid": null,
|
|
320
|
+
"subdivision": "ZH",
|
|
321
|
+
"municipality": null,
|
|
322
|
+
"geolong": "4.469093",
|
|
323
|
+
"geolat": "51.92468",
|
|
324
|
+
"air": false,
|
|
325
|
+
"land": false,
|
|
326
|
+
"sea": false,
|
|
327
|
+
"rail": true,
|
|
328
|
+
"iata": null,
|
|
329
|
+
"icao": null,
|
|
330
|
+
"localcode": null,
|
|
331
|
+
"unlocode": "RTM",
|
|
332
|
+
"helipad": null,
|
|
333
|
+
"fixedpcp": null,
|
|
334
|
+
"portablepcp": null,
|
|
335
|
+
"egates": null,
|
|
336
|
+
"nonoperational": false,
|
|
337
|
+
"portsizeid": 2,
|
|
338
|
+
"juxtaposed": true,
|
|
339
|
+
"freightparcelposthub": false,
|
|
340
|
+
"validfrom": "2022-01-11T00:00:01.000Z",
|
|
341
|
+
"validto": null,
|
|
342
|
+
"updatedby": "Mohammed Abdul Odud"
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
}
|
|
346
|
+
|