From 64278877074ba42b1f79ecd69afbb0724da1a89e Mon Sep 17 00:00:00 2001 From: Lilit Karapetyan Date: Thu, 7 Dec 2023 10:00:11 +0400 Subject: [PATCH] remove PlanningChannel --- .../playerUi/playerUi_ActionCreators.ts | 17 +- .../playerUi/playerUi_Reducer.ts | 7 +- .../Components/local/map-control/README.md | 27 - .../__snapshots__/index.spec.tsx.snap | 3 - .../local/map-control/helpers/item/README.md | 27 - .../item/__snapshots__/index.spec.tsx.snap | 9 - .../map-control/helpers/item/index.spec.tsx | 13 - .../helpers/item/index.stories.tsx | 37 - .../local/map-control/helpers/item/index.tsx | 30 - .../helpers/item/styles.module.scss | 42 - .../helpers/item/styles.module.scss.d.ts | 9 - .../map-control/helpers/item/types/props.d.ts | 5 - .../local/map-control/index.spec.tsx | 14 - .../local/map-control/index.stories.tsx | 33 - .../Components/local/map-control/index.tsx | 84 - .../local/map-control/styles.module.scss.d.ts | 7 - .../local/map-control/types/props.d.ts | 23 - .../json-editor/index.stories-inc.tsx | 187 +- .../organisms/setting-channels/index.tsx | 8 +- .../local/organisms/view-as/README.md | 29 - .../view-as/__snapshots__/index.spec.tsx.snap | 119 - .../local/organisms/view-as/index.spec.tsx | 16 - .../local/organisms/view-as/index.stories.tsx | 49 - .../local/organisms/view-as/index.tsx | 41 - .../organisms/view-as/styles.module.scss | 0 .../organisms/view-as/styles.module.scss.d.ts | 9 - .../local/organisms/view-as/types/props.d.ts | 12 - .../local/symbol-asset-icon/README.md | 29 - .../__snapshots__/index.spec.tsx.snap | 19 - .../local/symbol-asset-icon/index.spec.tsx | 13 - .../local/symbol-asset-icon/index.tsx | 61 - .../symbol-asset-icon/styles.module.scss | 48 - .../symbol-asset-icon/styles.module.scss.d.ts | 11 - .../local/symbol-asset-icon/types/props.d.ts | 14 - .../__snapshots__/index.spec.tsx.snap | 1092 - .../helpers/getNextInteraction.spec.ts | 59 - .../helpers/getNextInteraction.ts | 68 - .../helpers/istar-helper.ts | 191 - .../types/props.d.ts | 16 - .../pf-planning/apply-filter/README.md | 29 - .../__snapshots__/index.spec.tsx.snap | 19 - .../pf-planning/apply-filter/index.spec.tsx | 13 - .../apply-filter/index.stories.tsx | 38 - .../pf-planning/apply-filter/index.tsx | 23 - .../apply-filter/styles.module.scss | 0 .../apply-filter/styles.module.scss.d.ts | 9 - .../pf-planning/apply-filter/types/props.d.ts | 6 - .../pf-planning/map-planning-orders/README.md | 29 - .../__snapshots__/index.spec.tsx.snap | 3 - .../map-planning-orders/index.spec.tsx | 42 - .../map-planning-orders/index.stories-inc.tsx | 43 - .../pf-planning/map-planning-orders/index.tsx | 212 - .../map-planning-orders/styles.module.scss | 0 .../styles.module.scss.d.ts | 9 - .../map-planning-orders/types/props.d.ts | 30 - .../pf-planning/planning-assets/README.md | 29 - .../helpers/collate-assets.spec.ts | 134 - .../helpers/collate-assets.tsx | 472 - .../helpers/custom-filter-row.tsx | 56 - .../planning-assets/index.non-spec.tsx | 44 - .../planning-assets/index.stories.tsx | 118 - .../pf-planning/planning-assets/index.tsx | 310 - .../short-index.stories-inc.tsx | 114 - .../planning-assets/styles.module.scss | 10 - .../planning-assets/styles.module.scss.d.ts | 8 - .../planning-assets/types/props.d.ts | 54 - .../pf-planning/planning-channel/README.md | 29 - .../planning-channel/helpers/AreaPlotter.tsx | 48 - .../helpers/CustomTranslation.ts | 71 - .../planning-channel/helpers/OrderDrawing.tsx | 349 - .../planning-channel/helpers/OrderEditing.tsx | 218 - .../planning-channel/helpers/OrderPlotter.tsx | 368 - .../helpers/PlanningActitivityMenu.tsx | 91 - .../helpers/RangeRingPlotter.tsx | 45 - .../planning-channel/helpers/Ruler.tsx | 39 - .../helpers/SharedOrderRenderer.tsx | 58 - .../helpers/StandardAreaMenu.tsx | 97 - .../planning-channel/helpers/Timeline.tsx | 82 - .../helpers/collate-plans-helper.ts | 33 - .../helpers/gen-test-mapping-data.ts | 478 - .../helpers/gen-test-mapping.spec.ts | 51 - .../helpers/spatial-helpers.ts | 50 - .../index-bulk.stories-inc.tsx | 295 - .../planning-channel/index.non-spec.tsx | 85 - .../planning-channel/index.stories-inc.tsx | 431 - .../pf-planning/planning-channel/index.tsx | 1197 - .../planning-channel/styles.module.scss | 40 - .../planning-channel/styles.module.scss.d.ts | 12 - .../planning-channel/types/props.d.ts | 48 - .../pf-planning/planning-channel/typings.d.ts | 104 - .../pf-planning/planning-force/README.md | 29 - .../pf-planning/planning-force/index.tsx | 351 - .../planning-force/styles.module.scss | 55 - .../planning-force/styles.module.scss.d.ts | 12 - .../planning-force/types/props.d.ts | 28 - .../helpers/collapse-location.ts | 57 - .../helpers/genData.tsx | 23 - .../planning-messages-list/types/props.d.ts | 22 - .../pf-planning/support-mapping/README.md | 29 - .../__snapshots__/index.spec.tsx.snap | 3 - .../support-mapping/helper/Coordinates.tsx | 48 - .../support-mapping/helper/MapConstants.ts | 30 - .../helper/PolylineDecorator.tsx | 59 - .../support-mapping/index.spec.tsx | 40 - .../support-mapping/index.stories-inc.tsx | 38 - .../pf-planning/support-mapping/index.tsx | 66 - .../support-mapping/styles.module.scss | 0 .../support-mapping/styles.module.scss.d.ts | 7 - .../support-mapping/types/props.d.ts | 26 - .../pf-planning/support-panel/README.md | 29 - .../pf-planning/support-panel/constants.ts | 31 - .../support-panel/helpers/TurnFilter.tsx | 62 - .../support-panel/helpers/caching-utils.ts | 21 - .../helpers/customise-activities.ts | 40 - .../support-panel/helpers/customise-assets.ts | 23 - .../support-panel/helpers/customise-cards.ts | 35 - .../helpers/customise-date.spec.ts | 71 - .../support-panel/helpers/customise-date.ts | 68 - .../helpers/customise-live-orders.ts | 17 - .../helpers/customise-location.ts | 21 - .../helpers/customise-missiles.ts | 39 - .../support-panel/helpers/gen-order-data.ts | 1182 - .../support-panel/helpers/material-icons.tsx | 21 - .../helpers/shape-intersects.spec.ts | 271 - .../support-panel/helpers/shape-intersects.ts | 300 - .../helpers/update-location-timings.ts | 28 - .../support-panel/index.non-spec.tsx | 55 - .../support-panel/index.stories-inc.tsx | 215 - .../pf-planning/support-panel/index.tsx | 542 - .../support-panel/styles.module.scss | 144 - .../support-panel/styles.module.scss.d.ts | 20 - .../support-panel/types/props.d.ts | 86 - client/src/Helpers/find-asset.ts | 26 +- client/src/Helpers/find-perceived-as-types.ts | 41 - client/src/Helpers/geometry-helpers.ts | 111 - client/src/Helpers/index.ts | 6 +- client/src/Helpers/participant-states.ts | 11 +- client/src/Helpers/platform-icons.ts | 18 - .../src/Helpers/sort-dictionary-by-value.ts | 21 - .../tests/find-perceived-as-types.spec.ts | 79 - .../playerUI/data/set_all_messages_mock.ts | 34 - .../data/set_latest_wargame_message_mock.ts | 34 - .../playerUI/handleSetWargameMessages.test.ts | 1 - .../ChannelTabsContainer.tsx | 4 +- .../ChannelTabsContainer/helpers/factory.tsx | 70 +- .../helpers/mock-message-data.ts | 3380 -- client/src/api/db/index.tsx | 18 +- client/src/api/db/types.d.ts | 8 +- client/src/api/wargames_api/index.ts | 10 +- client/src/config/action-constants.ts | 1 - client/src/config/enums.ts | 7 - client/src/config/globals.ts | 12 - client/src/custom-types/asset.d.ts | 7 +- client/src/custom-types/index.d.ts | 4 - client/src/custom-types/index.ts | 6 +- client/src/custom-types/perceived-types.d.ts | 23 - .../src/custom-types/player-ui-actions.d.ts | 8 - client/src/custom-types/player-ui.d.ts | 5 - client/src/custom-types/turn-period.d.ts | 10 - client/src/mocks/index.ts | 4 - .../pf-planning/p9-message-templates.mock.ts | 5749 ---- .../pf-planning/p9b-short-wargame.mock.ts | 15517 --------- client/src/mocks/planning-activities.mock.ts | 161 - .../src/mocks/planning-messages-bulk.mock.ts | 26058 ---------------- client/src/mocks/turn-period.mock.ts | 30 - .../styles.module.scss => server/.config.json | 0 server/providers/couchdb.js | 36 - server/providers/pouchdb.js | 36 - 168 files changed, 26 insertions(+), 64415 deletions(-) delete mode 100644 client/src/Components/local/map-control/README.md delete mode 100644 client/src/Components/local/map-control/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/local/map-control/helpers/item/README.md delete mode 100644 client/src/Components/local/map-control/helpers/item/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/local/map-control/helpers/item/index.spec.tsx delete mode 100644 client/src/Components/local/map-control/helpers/item/index.stories.tsx delete mode 100644 client/src/Components/local/map-control/helpers/item/index.tsx delete mode 100644 client/src/Components/local/map-control/helpers/item/styles.module.scss delete mode 100644 client/src/Components/local/map-control/helpers/item/styles.module.scss.d.ts delete mode 100644 client/src/Components/local/map-control/helpers/item/types/props.d.ts delete mode 100644 client/src/Components/local/map-control/index.spec.tsx delete mode 100644 client/src/Components/local/map-control/index.stories.tsx delete mode 100644 client/src/Components/local/map-control/index.tsx delete mode 100644 client/src/Components/local/map-control/styles.module.scss.d.ts delete mode 100644 client/src/Components/local/map-control/types/props.d.ts delete mode 100644 client/src/Components/local/organisms/view-as/README.md delete mode 100644 client/src/Components/local/organisms/view-as/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/local/organisms/view-as/index.spec.tsx delete mode 100644 client/src/Components/local/organisms/view-as/index.stories.tsx delete mode 100644 client/src/Components/local/organisms/view-as/index.tsx delete mode 100644 client/src/Components/local/organisms/view-as/styles.module.scss delete mode 100644 client/src/Components/local/organisms/view-as/styles.module.scss.d.ts delete mode 100644 client/src/Components/local/organisms/view-as/types/props.d.ts delete mode 100644 client/src/Components/local/symbol-asset-icon/README.md delete mode 100644 client/src/Components/local/symbol-asset-icon/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/local/symbol-asset-icon/index.spec.tsx delete mode 100644 client/src/Components/local/symbol-asset-icon/index.tsx delete mode 100644 client/src/Components/local/symbol-asset-icon/styles.module.scss delete mode 100644 client/src/Components/local/symbol-asset-icon/styles.module.scss.d.ts delete mode 100644 client/src/Components/local/symbol-asset-icon/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/adjudication-messages-list/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.spec.ts delete mode 100644 client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.ts delete mode 100644 client/src/Components/pf-planning/adjudication-messages-list/helpers/istar-helper.ts delete mode 100644 client/src/Components/pf-planning/adjudication-messages-list/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/apply-filter/README.md delete mode 100644 client/src/Components/pf-planning/apply-filter/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/pf-planning/apply-filter/index.spec.tsx delete mode 100644 client/src/Components/pf-planning/apply-filter/index.stories.tsx delete mode 100644 client/src/Components/pf-planning/apply-filter/index.tsx delete mode 100644 client/src/Components/pf-planning/apply-filter/styles.module.scss delete mode 100644 client/src/Components/pf-planning/apply-filter/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/apply-filter/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/map-planning-orders/README.md delete mode 100644 client/src/Components/pf-planning/map-planning-orders/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/pf-planning/map-planning-orders/index.spec.tsx delete mode 100644 client/src/Components/pf-planning/map-planning-orders/index.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/map-planning-orders/index.tsx delete mode 100644 client/src/Components/pf-planning/map-planning-orders/styles.module.scss delete mode 100644 client/src/Components/pf-planning/map-planning-orders/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/map-planning-orders/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/planning-assets/README.md delete mode 100644 client/src/Components/pf-planning/planning-assets/helpers/collate-assets.spec.ts delete mode 100644 client/src/Components/pf-planning/planning-assets/helpers/collate-assets.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/helpers/custom-filter-row.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/index.non-spec.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/index.stories.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/index.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/short-index.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/planning-assets/styles.module.scss delete mode 100644 client/src/Components/pf-planning/planning-assets/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/planning-assets/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/README.md delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/AreaPlotter.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/CustomTranslation.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/OrderDrawing.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/OrderEditing.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/OrderPlotter.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/PlanningActitivityMenu.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/RangeRingPlotter.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/Ruler.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/SharedOrderRenderer.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/StandardAreaMenu.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/Timeline.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/collate-plans-helper.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/gen-test-mapping-data.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/gen-test-mapping.spec.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/helpers/spatial-helpers.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/index-bulk.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/index.non-spec.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/index.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/index.tsx delete mode 100644 client/src/Components/pf-planning/planning-channel/styles.module.scss delete mode 100644 client/src/Components/pf-planning/planning-channel/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/planning-channel/typings.d.ts delete mode 100644 client/src/Components/pf-planning/planning-force/README.md delete mode 100644 client/src/Components/pf-planning/planning-force/index.tsx delete mode 100644 client/src/Components/pf-planning/planning-force/styles.module.scss delete mode 100644 client/src/Components/pf-planning/planning-force/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/planning-force/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/planning-messages-list/helpers/collapse-location.ts delete mode 100644 client/src/Components/pf-planning/planning-messages-list/helpers/genData.tsx delete mode 100644 client/src/Components/pf-planning/planning-messages-list/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/support-mapping/README.md delete mode 100644 client/src/Components/pf-planning/support-mapping/__snapshots__/index.spec.tsx.snap delete mode 100644 client/src/Components/pf-planning/support-mapping/helper/Coordinates.tsx delete mode 100644 client/src/Components/pf-planning/support-mapping/helper/MapConstants.ts delete mode 100644 client/src/Components/pf-planning/support-mapping/helper/PolylineDecorator.tsx delete mode 100644 client/src/Components/pf-planning/support-mapping/index.spec.tsx delete mode 100644 client/src/Components/pf-planning/support-mapping/index.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/support-mapping/index.tsx delete mode 100644 client/src/Components/pf-planning/support-mapping/styles.module.scss delete mode 100644 client/src/Components/pf-planning/support-mapping/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/support-mapping/types/props.d.ts delete mode 100644 client/src/Components/pf-planning/support-panel/README.md delete mode 100644 client/src/Components/pf-planning/support-panel/constants.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/TurnFilter.tsx delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/caching-utils.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-activities.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-assets.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-cards.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-date.spec.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-date.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-live-orders.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-location.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/customise-missiles.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/gen-order-data.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/material-icons.tsx delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/shape-intersects.spec.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/shape-intersects.ts delete mode 100644 client/src/Components/pf-planning/support-panel/helpers/update-location-timings.ts delete mode 100644 client/src/Components/pf-planning/support-panel/index.non-spec.tsx delete mode 100644 client/src/Components/pf-planning/support-panel/index.stories-inc.tsx delete mode 100644 client/src/Components/pf-planning/support-panel/index.tsx delete mode 100644 client/src/Components/pf-planning/support-panel/styles.module.scss delete mode 100644 client/src/Components/pf-planning/support-panel/styles.module.scss.d.ts delete mode 100644 client/src/Components/pf-planning/support-panel/types/props.d.ts delete mode 100644 client/src/Helpers/find-perceived-as-types.ts delete mode 100644 client/src/Helpers/geometry-helpers.ts delete mode 100644 client/src/Helpers/platform-icons.ts delete mode 100644 client/src/Helpers/sort-dictionary-by-value.ts delete mode 100644 client/src/Helpers/tests/find-perceived-as-types.spec.ts delete mode 100644 client/src/Views/ChannelTabsContainer/helpers/mock-message-data.ts delete mode 100644 client/src/custom-types/perceived-types.d.ts delete mode 100644 client/src/custom-types/turn-period.d.ts delete mode 100644 client/src/mocks/pf-planning/p9-message-templates.mock.ts delete mode 100644 client/src/mocks/pf-planning/p9b-short-wargame.mock.ts delete mode 100644 client/src/mocks/planning-messages-bulk.mock.ts delete mode 100644 client/src/mocks/turn-period.mock.ts rename client/src/Components/local/map-control/styles.module.scss => server/.config.json (100%) diff --git a/client/src/ActionsAndReducers/playerUi/playerUi_ActionCreators.ts b/client/src/ActionsAndReducers/playerUi/playerUi_ActionCreators.ts index 34696fee02..c01b3706dd 100644 --- a/client/src/ActionsAndReducers/playerUi/playerUi_ActionCreators.ts +++ b/client/src/ActionsAndReducers/playerUi/playerUi_ActionCreators.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/ban-types */ import { - CLOSE_MESSAGE, CLOSE_MODAL, FEEDBACK_MESSAGE, MARK_ALL_AS_READ, MARK_ALL_AS_UNREAD, MARK_UNREAD, OPEN_MESSAGE, OPEN_MODAL, OPEN_TOUR, SET_ALL_MESSAGES, SET_ALL_TEMPLATES_PLAYERUI, SET_ALL_TURN_PERIOD, SET_CURRENT_WARGAME_PLAYER, SET_FEEDBACK_MESSAGES, SET_FORCE, SET_LATEST_FEEDBACK_MESSAGE, + CLOSE_MESSAGE, CLOSE_MODAL, FEEDBACK_MESSAGE, MARK_ALL_AS_READ, MARK_ALL_AS_UNREAD, MARK_UNREAD, OPEN_MESSAGE, OPEN_MODAL, OPEN_TOUR, SET_ALL_MESSAGES, SET_ALL_TEMPLATES_PLAYERUI, SET_CURRENT_WARGAME_PLAYER, SET_FEEDBACK_MESSAGES, SET_FORCE, SET_LATEST_FEEDBACK_MESSAGE, SET_LATEST_WARGAME_MESSAGE, SET_ROLE, SHOW_HIDE_OBJECTIVES, UPDATE_MESSAGE_STATE } from 'src/config' import React from 'react' @@ -8,7 +8,7 @@ import * as wargamesApi from '../../api/wargames_api' import isError from '../../Helpers/isError' import { addNotification } from '../Notification/Notification_ActionCreators' -import { ChatMessage, Message, MessageChannel, MessageCustom, MessageDetails, MessageDetailsFrom, MessageFeedback, MessageInfoType, PlayerUiActionTypes, Role, TemplateBodysByKey, TurnPeriod, Wargame } from 'src/custom-types' +import { ChatMessage, Message, MessageChannel, MessageCustom, MessageDetails, MessageDetailsFrom, MessageFeedback, MessageInfoType, PlayerUiActionTypes, Role, TemplateBodysByKey, Wargame } from 'src/custom-types' export const setCurrentWargame = (wargame: Wargame): PlayerUiActionTypes => ({ type: SET_CURRENT_WARGAME_PLAYER, @@ -57,11 +57,6 @@ export const setWargameMessages = (messages: Array) : PlayerUiActionTypes => ({ - type: SET_ALL_TURN_PERIOD, - payload: turnPeriod -}) - export const openMessage = (channel: string, message: MessageChannel): PlayerUiActionTypes => ({ type: OPEN_MESSAGE, payload: { channel, message } @@ -150,14 +145,6 @@ export const failedLoginFeedbackMessage = (dbName: string, password: string, tur } } -/** get an updated list of turn start and end times */ -export const turnPeriods = (dbName: string): Function => { - return async (dispatch: React.Dispatch): Promise => { - const turnPeriod = await wargamesApi.getTurnPeriodsList(dbName) - dispatch(seTAllTurnPeriod(turnPeriod)) - } -} - export const saveMessage = (dbName: string, details: MessageDetails, message: object): Function => { return async (): Promise => { // the following block of commented out code was used in the past diff --git a/client/src/ActionsAndReducers/playerUi/playerUi_Reducer.ts b/client/src/ActionsAndReducers/playerUi/playerUi_Reducer.ts index eff4992d7b..19b4bc4718 100644 --- a/client/src/ActionsAndReducers/playerUi/playerUi_Reducer.ts +++ b/client/src/ActionsAndReducers/playerUi/playerUi_Reducer.ts @@ -1,6 +1,6 @@ import { CLOSE_MESSAGE, CLOSE_MODAL, MARK_ALL_AS_READ, CHAT_CHANNEL_ID, - MARK_ALL_AS_UNREAD, MARK_UNREAD, OPEN_MESSAGE, OPEN_MODAL, OPEN_TOUR, SET_ALL_MESSAGES, SET_ALL_TEMPLATES_PLAYERUI, SET_ALL_TURN_PERIOD, SET_CURRENT_WARGAME_PLAYER, SET_FEEDBACK_MESSAGES, SET_FORCE, SET_LATEST_FEEDBACK_MESSAGE, + MARK_ALL_AS_UNREAD, MARK_UNREAD, OPEN_MESSAGE, OPEN_MODAL, OPEN_TOUR, SET_ALL_MESSAGES, SET_ALL_TEMPLATES_PLAYERUI, SET_CURRENT_WARGAME_PLAYER, SET_FEEDBACK_MESSAGES, SET_FORCE, SET_LATEST_FEEDBACK_MESSAGE, SET_LATEST_WARGAME_MESSAGE, SET_ROLE, SHOW_HIDE_OBJECTIVES, TurnFormats, UPDATE_MESSAGE_STATE } from 'src/config' import { PlayerUi, PlayerUiActionTypes, Wargame, WargameData, MessagePlanning } from 'src/custom-types' @@ -44,7 +44,6 @@ export const initialState: PlayerUi = { allChannels: [], allForces: [], markerIcons: [], - allPeriods: [], allTemplatesByKey: {}, allPlatformTypes: [], showObjective: false, @@ -199,10 +198,6 @@ export const playerUiReducer = (state: PlayerUi = initialState, action: PlayerUi newState.playerMessageLog = changedAllMesagesState.playerMessageLog break - case SET_ALL_TURN_PERIOD: - newState.allPeriods = action.payload - break - case OPEN_MESSAGE: newState.channels[action.payload.channel] = openMessage(action.payload.channel, action.payload.message, newState) break diff --git a/client/src/Components/local/map-control/README.md b/client/src/Components/local/map-control/README.md deleted file mode 100644 index b52ac37498..0000000000 --- a/client/src/Components/local/map-control/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Planned Route documentation - -This is an example readme file for the 'MapControl' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import -```js -import MapControl from './form-elements/map-control' -``` - -### CommonJS - -```js -const MapControl = require('./form-elements/map-control') diff --git a/client/src/Components/local/map-control/__snapshots__/index.spec.tsx.snap b/client/src/Components/local/map-control/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index 81e0de805c..0000000000 --- a/client/src/Components/local/map-control/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`MapControl renders correctly 1`] = `null`; diff --git a/client/src/Components/local/map-control/helpers/item/README.md b/client/src/Components/local/map-control/helpers/item/README.md deleted file mode 100644 index 1ac53322b0..0000000000 --- a/client/src/Components/local/map-control/helpers/item/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Planned Route documentation - -This is an example readme file for the 'MapControlItem' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import -```js -import MapControlItem from './form-elements/MapControlItem' -``` - -### CommonJS - -```js -const MapControlItem = require('./form-elements/MapControlItem') diff --git a/client/src/Components/local/map-control/helpers/item/__snapshots__/index.spec.tsx.snap b/client/src/Components/local/map-control/helpers/item/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index 6c81848528..0000000000 --- a/client/src/Components/local/map-control/helpers/item/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`MapControlItem renders correctly 1`] = ` - - ) -} - -export default MapControlItem diff --git a/client/src/Components/local/map-control/helpers/item/styles.module.scss b/client/src/Components/local/map-control/helpers/item/styles.module.scss deleted file mode 100644 index 9ebed03763..0000000000 --- a/client/src/Components/local/map-control/helpers/item/styles.module.scss +++ /dev/null @@ -1,42 +0,0 @@ -.main { - display: block; - text-align: center; - text-decoration: none; - color: #54667c; - width: 24px; - height: 24px; - line-height: 24px; - margin: 0; - font-weight: 300; - font-family: "Roboto", "Helvetica", "Arial", sans-serif; - cursor: pointer; - border: 2px solid #ccc; - border-top-width: 0; - border-bottom-width: 1px; - box-sizing: content-box; - padding: 2px; - - &:first-child { - border-radius: 2px 2px 0 0; - border-top-width: 2px; - } - &:last-child { - border-bottom-width: 2px; - border-radius: 0 0 2px 2px; - } -} - -.light-content { - background-color: #333e; - border-color: #222; - color: #fff; - &:hover { - background-color: #222; - } -} -.dark-content { - background-color: #fffe; - &:hover { - background-color: #f4f4f4; - } -} diff --git a/client/src/Components/local/map-control/helpers/item/styles.module.scss.d.ts b/client/src/Components/local/map-control/helpers/item/styles.module.scss.d.ts deleted file mode 100644 index cd59f438e3..0000000000 --- a/client/src/Components/local/map-control/helpers/item/styles.module.scss.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'dark-content': string; - 'light-content': string; - 'main': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/local/map-control/helpers/item/types/props.d.ts b/client/src/Components/local/map-control/helpers/item/types/props.d.ts deleted file mode 100644 index 7d7144db38..0000000000 --- a/client/src/Components/local/map-control/helpers/item/types/props.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default interface PropTypes { - onClick?: any - contentTheme?: 'light' | 'dark' - title?: string -} diff --git a/client/src/Components/local/map-control/index.spec.tsx b/client/src/Components/local/map-control/index.spec.tsx deleted file mode 100644 index c3ca2ea25e..0000000000 --- a/client/src/Components/local/map-control/index.spec.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import renderer from 'react-test-renderer' -import MapControl from './index' - -jest.mock('react-leaflet-v4', () => ({ - useMap: (): jest.Mock => jest.fn() -})) - -it('MapControl renders correctly', () => { - const tree = renderer - .create() - .toJSON() - expect(tree).toMatchSnapshot() -}) diff --git a/client/src/Components/local/map-control/index.stories.tsx b/client/src/Components/local/map-control/index.stories.tsx deleted file mode 100644 index 09368449f5..0000000000 --- a/client/src/Components/local/map-control/index.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' - -// Import component files -import { withKnobs } from '@storybook/addon-knobs' -import MapControl from './index' -import docs from './README.md' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -export default { - title: 'local/form-elements/MapControl', - component: MapControl, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - } - } -} - -export const Default: React.FC = () => - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore TS believes the 'story' property doesn't exist but it does. -Default.story = { - parameters: { - options: { - // This story requires addons but other stories in this component do not - showPanel: true - } - } -} diff --git a/client/src/Components/local/map-control/index.tsx b/client/src/Components/local/map-control/index.tsx deleted file mode 100644 index df89e49529..0000000000 --- a/client/src/Components/local/map-control/index.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import AddIcon from '@material-ui/icons/Add' -import HomeIcon from '@material-ui/icons/Home' -import RemoveIcon from '@material-ui/icons/Remove' - -/* Import proptypes */ -import cx from 'classnames' -import { DomEvent, LatLngBounds } from 'leaflet' -import React, { useEffect, useState } from 'react' -import PropTypes from './types/props' - -import { useMap } from 'react-leaflet-v4' -import Item from './helpers/item' - -export const MapControl: React.FC = ({ - /* main */ - map, - children, - /* home */ - showHome = true, - bounds, - /* zoom */ - showZoom = true, - zoomStepSize = 0.5, - mapVer = 'v2' -}) => { - const [originalBounds, setOriginalBounds] = useState(undefined) - - const localMap = mapVer === 'v4' ? useMap() : map - - /** the forces from props has changed */ - useEffect(() => { - if (originalBounds === undefined) { - setOriginalBounds(bounds) - } - }, [bounds]) - - /* - * disable map scroll and click events to allow - * to use map control as usual html - */ - const disableMapClickAndScrolll = (ref: any): void => { - if (ref) { - DomEvent.disableClickPropagation(ref).disableScrollPropagation(ref) - } - } - /* change map zoom level */ - const handleZoomChange = (changeValue: number): void => { - if (!localMap) { - return - } - const currentZoom = localMap.getZoom() - if (currentZoom) localMap.setZoom(currentZoom + changeValue) - } - - /* set map to overall view */ - const handleHome = (): void => { - if (!localMap || !originalBounds) { - return - } - try { - localMap.flyToBounds(originalBounds, { duration: 0.75 }) - } catch (err) { - console.log('Problem with flyToBounds in MapControl') - console.error(err) - } - } - - if (!localMap) return null - - return ( -
-
-
- {showZoom && { handleZoomChange(zoomStepSize) }}>} - {showHome && { handleHome() }}>} - {showZoom && { handleZoomChange(-1 * zoomStepSize) }}>} -
- {children} -
-
- ) -} - -export default MapControl diff --git a/client/src/Components/local/map-control/styles.module.scss.d.ts b/client/src/Components/local/map-control/styles.module.scss.d.ts deleted file mode 100644 index 132b232e89..0000000000 --- a/client/src/Components/local/map-control/styles.module.scss.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/local/map-control/types/props.d.ts b/client/src/Components/local/map-control/types/props.d.ts deleted file mode 100644 index 447c14c963..0000000000 --- a/client/src/Components/local/map-control/types/props.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { LatLng, LatLngBounds } from 'leaflet' -import React from 'react' - -export default interface PropTypes { - // main - map?: any - /** - * Optional child components - */ - children?: React.ReactElement - // whether to show home control - showHome?: boolean - // current map centre - home?: LatLng - // outer bounds of whole map - bounds?: LatLngBounds - // whether to show zoom control - showZoom?: boolean - // size of zoom in/out increment - zoomStepSize?: number - - mapVer?: 'v2' | 'v4' -} diff --git a/client/src/Components/local/molecules/json-editor/index.stories-inc.tsx b/client/src/Components/local/molecules/json-editor/index.stories-inc.tsx index 8f36d9eeed..bb2ae1ccfa 100644 --- a/client/src/Components/local/molecules/json-editor/index.stories-inc.tsx +++ b/client/src/Components/local/molecules/json-editor/index.stories-inc.tsx @@ -1,4 +1,4 @@ -import * as turf from '@turf/turf' +// import * as turf from '@turf/turf' import React from 'react' // Import component files @@ -7,29 +7,9 @@ import JsonEditor from './index' import docs from './README.md' // Import mock -import { - messageDataCollaborativeEditing, messageDataCollaborativeResponding, - MessageTemplatesMoskByTitle, P9BMock, planningMessages as planningChannelMessages, WargameMock -} from 'src/mocks' +import { messageDataCollaborativeEditing, messageDataCollaborativeResponding, MessageTemplatesMoskByTitle, P9BMock, WargameMock } from 'src/mocks' import { Story } from '@storybook/react/types-6-0' - -import { PLANNING_MESSAGE } from 'src/config' -import { - Asset, GroupedActivitySet, MessageInfoTypeClipped, MessageInteraction, - MessagePlanning, MessageStructure, PlanningActivity -} from 'src/custom-types' -import { deepCopy } from 'src/Helpers' -import { AssetRow } from '../../../pf-planning/planning-assets/types/props' -import { collapseLocation } from '../../../pf-planning/planning-messages-list/helpers/collapse-location' -import { customiseActivities } from '../../../pf-planning/support-panel/helpers/customise-activities' -import { customiseAssets } from '../../../pf-planning/support-panel/helpers/customise-assets' -import { customiseLiveOrders } from '../../../pf-planning/support-panel/helpers/customise-live-orders' -import { customiseLocation } from '../../../pf-planning/support-panel/helpers/customise-location' -import { generateAllTemplates, generateTemplate } from './helpers/generate-p9-templates' -import { coreTemplate } from './helpers/p9-core' -import { otherTemplate } from './helpers/p9-other' import Props from './types/props' -import { interactsWith } from '../../../pf-planning/support-panel/helpers/gen-order-data' const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
@@ -51,29 +31,9 @@ export default { } } } -const storeNewValue = (_value: { [property: string]: any }): void => { - console.log('store test', _value) - const data = generateAllTemplates() - console.log('activities', data.activities) - console.log('templates', data.templates) - const activities = data.activities - activities.forEach((force1) => { - force1.groupedActivities.forEach((group1) => { - group1.activities.forEach((act1) => { - activities.forEach((force2) => { - force2.groupedActivities.forEach((group2) => { - group2.activities.forEach((act2) => { - interactsWith(act1, act2, true) - }) - }) - }) - }) - }) - }) -} const template = MessageTemplatesMoskByTitle[messageDataCollaborativeEditing[0].details.messageType] -const channel = P9BMock.data.channels.channels[0] +const channel = P9BMock.data.channels.channels[1] const templateMessageCreator = { details: MessageTemplatesMoskByTitle[messageDataCollaborativeEditing[0].details.messageType].details, _id: channel.uniqid @@ -82,7 +42,7 @@ const templateMessageCreator = { const Template: Story = ({ messageId, disabled, template, messageContent, modifyForEdit, customiseTemplate }) => { return ( msg.messageType === PLANNING_MESSAGE) as MessagePlanning[] -const landActivityTemplate = templates.find((template) => template.title === planningMessages[0].details.messageType) -const landMessage = planningMessages[0] - -const activities = P9BMock.data.activities ? P9BMock.data.activities.activities : [] - -const localCustomise = (_document: MessageStructure | undefined, schema: Record): Record => { - const forces = P9BMock.data.forces.forces - const blueAssets = forces[1].assets ? forces[1].assets : [] - const redAssets = forces[2].assets ? forces[2].assets : [] - const toRow = (asset: Asset): AssetRow => { - const subType = asset.attributes ? asset.attributes.a_Type as string : 'n/a' - const row: AssetRow = { - id: asset.uniqid, - icon: 'icon', - name: asset.name, - platformType: asset.platformTypeId, - subType: subType, - health: 100, - c4: 'Operational', - domain: 'Land', - attributes: { word: 'text', number: 123 }, - taskGroup: '' - } - return row - } - const blueRows = blueAssets.map((asset) => toRow(asset)) - const redRows = redAssets.map((asset) => toRow(asset)) - - // and the activities - const isBlue = _document && _document.Reference && _document.Reference.includes('Blue') - - const forceActivities = isBlue ? activities[0] : activities[1] - const acts: Array<{ id: string, name: string }> = [] - forceActivities.groupedActivities.forEach((val: GroupedActivitySet) => { - val.activities.forEach((val2: string | PlanningActivity) => { - if (typeof (val) === 'string') { - throw Error('Should not have string in planning activities') - } - const plan = val2 as PlanningActivity - acts.push({ id: plan.uniqid, name: val.category + '-' + plan.name }) - }) - }) - // const overview = P9BMock.data.overview - - const liveOrders: MessagePlanning[] = planningMessages - - const customisers: Array<{ (_document: MessageStructure | undefined, schema: Record): Record }> = [ - (document, template) => customiseAssets(document, template, blueRows, redRows), - (document, template) => customiseActivities(document, template, []), - (document, template) => customiseLiveOrders(document, template, liveOrders), - (document, template) => customiseLocation(document, template) - ] - - let res: Record = { ...schema } - customisers.forEach((fn) => { - res = fn(document, res) - }) - return res -} - -export const PlanningMessage = Template.bind({}) -PlanningMessage.args = { - customiseTemplate: localCustomise, - template: landActivityTemplate, - messageContent: landMessage.message, - messageId: 'id_2b', - disabled: false, - gameDate: WargameMock.data.overview.gameDate -} - -// const land = generateTemplate('first', coreTemplate, landTemplate) -// const maritime2 = generateTemplate('first', true, coreTemplate, maritimeTemplate, 'ISTAR') -const maritime = generateTemplate('first', true, coreTemplate, otherTemplate, 'ISTAR') -// const air = generateTemplate('first', coreTemplate, airTemplate) -// const other = generateTemplate('first', coreTemplate, otherTemplate, transit) - -// generateAllTemplates() - -// helper code to inject perceived locations, including some that aren't the actual locations -const injectPerceivedLocations = !7 -if (injectPerceivedLocations) { - P9BMock.data.forces.forces.forEach((force) => { - if (force.assets) { - force.assets.forEach((asset) => { - const loc = asset.location - if (loc) { - const pers = asset.perceptions - pers.forEach((perc) => { - const rnd = Math.random() - if (rnd > 0.6) { - perc.position = deepCopy(loc) - } else if (rnd > 0.4) { - const randBrg = Math.random() * 360 - const randDistKm = Math.random() * 50 - const origin = turf.point([loc[1], loc[0]]) - const newPt = turf.destination(origin, randDistKm, -180 + randBrg, { units: 'kilometers' }) - const newLocation = newPt.geometry.coordinates - const newLat = Math.floor(newLocation[1] * 10000) / 10000 - const newLong = Math.floor(newLocation[0] * 10000) / 10000 - const newLoc: [number, number] = [newLat, newLong] - perc.position = newLoc - } else { - delete perc.position - } - }) - } - }) - } - }) - console.log('force with percept', P9BMock.data.forces.forces) -} - -export const P9Message = Template.bind({}) -P9Message.args = { - customiseTemplate: localCustomise, - modifyForEdit: (document) => collapseLocation(document), - template: maritime, - messageContent: landMessage.message, - messageId: 'id_2b', - disabled: false, - gameDate: WargameMock.data.overview.gameDate -} - -export const P9MessageWithoutLocation = Template.bind({}) -const msg = deepCopy(landMessage.message) -delete msg.location -P9MessageWithoutLocation.args = { - // customiseTemplate: localCustomise, - modifyForEdit: (document) => collapseLocation(document), - template: maritime, - messageContent: msg, - messageId: 'id_2b', - disabled: false, - gameDate: WargameMock.data.overview.gameDate -} diff --git a/client/src/Components/local/organisms/setting-channels/index.tsx b/client/src/Components/local/organisms/setting-channels/index.tsx index 3cba860361..9d80035f30 100644 --- a/client/src/Components/local/organisms/setting-channels/index.tsx +++ b/client/src/Components/local/organisms/setting-channels/index.tsx @@ -7,11 +7,7 @@ import MenuList from '@material-ui/core/MenuList' import Paper from '@material-ui/core/Paper' import Popper from '@material-ui/core/Popper' import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown' -import { - CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM, - // CHANNEL_MAPPING, - CHANNEL_PLANNING, SpecialChannelTypes -} from 'src/config' +import { CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM, SpecialChannelTypes } from 'src/config' import { ChannelChat, ChannelCollab, ChannelCore, ChannelCustom // ChannelMapping @@ -93,8 +89,6 @@ export const SettingChannels: React.FC = ({ forces={forces} onChange={onChannelDataChange} /> - case CHANNEL_PLANNING: - return
Editor not yet provided for planning channel. Waiting for data model to mature. Channel:
{JSON.stringify(selectedChannelState)}
case undefined: return
Channels empty. Please create a channel.
default: diff --git a/client/src/Components/local/organisms/view-as/README.md b/client/src/Components/local/organisms/view-as/README.md deleted file mode 100644 index 17f402ed97..0000000000 --- a/client/src/Components/local/organisms/view-as/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Planning Force documentation - -This is an example readme file for the 'View As' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import ViewAs from "./view-as"; -``` - -### CommonJS - -```js -const ViewAs = require("./view-as"); -``` diff --git a/client/src/Components/local/organisms/view-as/__snapshots__/index.spec.tsx.snap b/client/src/Components/local/organisms/view-as/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index fbba727507..0000000000 --- a/client/src/Components/local/organisms/view-as/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,119 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Planning Force component: renders component correctly 1`] = ` -
- - - - - -
-`; diff --git a/client/src/Components/local/organisms/view-as/index.spec.tsx b/client/src/Components/local/organisms/view-as/index.spec.tsx deleted file mode 100644 index 8b2e905d80..0000000000 --- a/client/src/Components/local/organisms/view-as/index.spec.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { P9Mock } from 'src/mocks' -import { noop } from 'lodash' -import React from 'react' -import renderer from 'react-test-renderer' -import ViewAs from './index' - -const forces = P9Mock.data.forces.forces - -describe('Planning Force component: ', () => { - it('renders component correctly', () => { - const tree = renderer - .create() - .toJSON() - expect(tree).toMatchSnapshot() - }) -}) diff --git a/client/src/Components/local/organisms/view-as/index.stories.tsx b/client/src/Components/local/organisms/view-as/index.stories.tsx deleted file mode 100644 index c25e0de464..0000000000 --- a/client/src/Components/local/organisms/view-as/index.stories.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { P9Mock } from 'src/mocks' -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import { noop } from 'lodash' -import React from 'react' - -import ViewAs from './index' -import docs from './README.md' -import ViewAsProps from './types/props' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -const forces = P9Mock.data.forces.forces - -export default { - title: 'local/organisms/ViewAs', - component: ViewAs, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - } -} - -const Template: Story = (props) => { - const isUmpire = props.isUmpire - return -} - -export const NotUmpire = Template.bind({}) -NotUmpire.args = { - isUmpire: false -} - -export const Umpire = Template.bind({}) -Umpire.args = { - isUmpire: true -} diff --git a/client/src/Components/local/organisms/view-as/index.tsx b/client/src/Components/local/organisms/view-as/index.tsx deleted file mode 100644 index a5df378dcb..0000000000 --- a/client/src/Components/local/organisms/view-as/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import cx from 'classnames' -import React from 'react' - -import PublicIcon from '@material-ui/icons/Public' -import { UMPIRE_FORCE } from 'src/config' -import Item from '../../map-control/helpers/item' -import PropTypes from './types/props' - -export const ViewAs: React.FC = ({ - forces = [], - viewAsCallback, - viewAsForce, - isUmpire -}) => { - /* set view as force */ - const viewAs = (force: string): void => { - viewAsCallback(force) - } - - /* utilty method for whether to show view-as button as selected */ - const showAsSelected = (force: string): 'light' | 'dark' | undefined => { - return viewAsForce !== undefined ? viewAsForce === force ? 'light' : 'dark' : 'dark' - } - - return <> - {isUmpire && forces.length > 0 &&
- { forces.filter((force) => force.umpire || (force.assets && force.assets.length)).map((force: any): React.ReactElement => ( - { viewAs(force.uniqid) }} - title={`View As ${force.name}`} - > - - - ))} -
} - -} - -export default ViewAs diff --git a/client/src/Components/local/organisms/view-as/styles.module.scss b/client/src/Components/local/organisms/view-as/styles.module.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/Components/local/organisms/view-as/styles.module.scss.d.ts b/client/src/Components/local/organisms/view-as/styles.module.scss.d.ts deleted file mode 100644 index bf7791c7c4..0000000000 --- a/client/src/Components/local/organisms/view-as/styles.module.scss.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'iconbase': string; - 'pulse': string; - 'selected': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/local/organisms/view-as/types/props.d.ts b/client/src/Components/local/organisms/view-as/types/props.d.ts deleted file mode 100644 index bd3d1dfa3c..0000000000 --- a/client/src/Components/local/organisms/view-as/types/props.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ForceData } from 'src/custom-types' - -export default interface PropTypes { - // current set of forces - forces: ForceData[] - /** callback for umpire clicking on view-as button */ - viewAsCallback: { (force: ForceData['uniqid']): void } - /** current value of `view as` */ - viewAsForce: string - /** whether current player is from umpire force */ - isUmpire: boolean -} diff --git a/client/src/Components/local/symbol-asset-icon/README.md b/client/src/Components/local/symbol-asset-icon/README.md deleted file mode 100644 index fd5a597476..0000000000 --- a/client/src/Components/local/symbol-asset-icon/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Symbol Asset Icon documentation - -This is an example readme file for the 'Symbol Asset Icon' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import SymbolAssetIcon from "./symbol-asset-icon"; -``` - -### CommonJS - -```js -const SymbolAssetIcon = require("./symbol-asset-icon"); -``` diff --git a/client/src/Components/local/symbol-asset-icon/__snapshots__/index.spec.tsx.snap b/client/src/Components/local/symbol-asset-icon/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index 746314a672..0000000000 --- a/client/src/Components/local/symbol-asset-icon/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`renders correctly SymbolAssetIcon 1`] = ` -
-
- - - - -
-
-`; diff --git a/client/src/Components/local/symbol-asset-icon/index.spec.tsx b/client/src/Components/local/symbol-asset-icon/index.spec.tsx deleted file mode 100644 index 39e2d1a904..0000000000 --- a/client/src/Components/local/symbol-asset-icon/index.spec.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/* global it expect */ -import LRU from 'lru-cache' -import React from 'react' -import renderer from 'react-test-renderer' -import { LRU_CACHE_OPTION } from '../../pf-planning/support-panel/constants' -import SymbolAssetIcon from './index' - -it('renders correctly SymbolAssetIcon', () => { - const tree = renderer - .create() - .toJSON() - expect(tree).toMatchSnapshot() -}) diff --git a/client/src/Components/local/symbol-asset-icon/index.tsx b/client/src/Components/local/symbol-asset-icon/index.tsx deleted file mode 100644 index 6c8f1a61d4..0000000000 --- a/client/src/Components/local/symbol-asset-icon/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { SymbolForces } from 'src/config' -import cx from 'classnames' -import ms from 'milsymbol' -import React from 'react' -import styles from './styles.module.scss' -import AssetIconProps from './types/props' - -const setCharAt = (str: string, index: number, chr: string): string => { - if (index > str.length - 1) return str - return str.substring(0, index) + chr + str.substring(index + 1) -} - -const forceFor = (force?: string): SymbolForces | undefined => { - if (force) { - switch (force) { - case 'Blue': - return SymbolForces.Friend - case 'Red': - return SymbolForces.Hostile - case 'Green': - return SymbolForces.Neutral - default: - return SymbolForces.Unknown - } - } else { - return undefined - } -} - -const SymbolAssetIcon: React.FC = ({ onClick, sidc, options = {}, iconName, health, force, isSelected, assetsCache, hideName }) => { - // update the forc color, if we know it - const forceVal = forceFor(force) - const sidc2 = forceVal ? setCharAt(sidc, 1, forceVal) : sidc - - // check if we have cached symbol - const key = `${sidc2}-${JSON.stringify(options)}` - let iconDataUrl = assetsCache.get(key) - - if (!iconDataUrl) { - const icon = new ms.Symbol(sidc2).setOptions(options) - iconDataUrl = icon.toDataURL() - assetsCache.set(key, iconDataUrl) - } - - // note: health may (mistakenly) be a string - const healthAny = health as any - const healthNum = +healthAny - - return
-
- - {(!hideName || isSelected) && {iconName}} -
- { - healthNum === 0 - ? : null - } -
-} - -export default SymbolAssetIcon diff --git a/client/src/Components/local/symbol-asset-icon/styles.module.scss b/client/src/Components/local/symbol-asset-icon/styles.module.scss deleted file mode 100644 index 5390f453ce..0000000000 --- a/client/src/Components/local/symbol-asset-icon/styles.module.scss +++ /dev/null @@ -1,48 +0,0 @@ -.asset-icon-background { - position: relative; - border-radius: 100%; - width: 35px; - height: 35px; -} - -.img { - width: 100%; - height: 100%; - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; -} - -.asset-icon-with-image { - box-sizing: border-box; - width: 100%; - height: 100%; - position: relative; - - img { - width: 100%; - display: block; - } - span { - color: #000; - font-weight: bold; - } -} - -.corner-line { - background: rgb(0, 0, 0); - height: 5px; - width: 100%; - transform: rotate(45deg); - margin: auto; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} - -.selected { - width: 16px; - height: 16px; -} diff --git a/client/src/Components/local/symbol-asset-icon/styles.module.scss.d.ts b/client/src/Components/local/symbol-asset-icon/styles.module.scss.d.ts deleted file mode 100644 index a889170b26..0000000000 --- a/client/src/Components/local/symbol-asset-icon/styles.module.scss.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'asset-icon-background': string; - 'asset-icon-with-image': string; - 'corner-line': string; - 'img': string; - 'selected': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/local/symbol-asset-icon/types/props.d.ts b/client/src/Components/local/symbol-asset-icon/types/props.d.ts deleted file mode 100644 index 968ce34197..0000000000 --- a/client/src/Components/local/symbol-asset-icon/types/props.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import LRUCache from 'lru-cache' -import ms from 'milsymbol' - -export default interface PropTypes { - onClick?: VoidFunction - sidc: string - iconName: string - options?: ms.SymbolOptions - isSelected?: boolean - assetsCache: LRUCache - force?: string - health?: number - hideName?: boolean -} diff --git a/client/src/Components/pf-planning/adjudication-messages-list/__snapshots__/index.spec.tsx.snap b/client/src/Components/pf-planning/adjudication-messages-list/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index 7a16e592bb..0000000000 --- a/client/src/Components/pf-planning/adjudication-messages-list/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,1092 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`AdjudicationMessagesList component: renders component correctly 1`] = ` -
-
-
- - pending - -
-
-
-
-
-
- Adjudication -
-
-
-
-
-
- - ​ - - - - -
- -
- -
-
-
-
-
-
- - - - -
- - - -
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - -
- -
- - Reference - - - - - - - -
-
-
- - Complete - - - - - - - -
-
-
- - Important - - - - - - - -
-
-
- - Owner - - - - - - - -
-
-
- - Activity - - - - - - - -
-
-
- - Duration - - - - - - - -
-
- No records to display -
-
-
-
-
- - - - - - -
-
-
-

- Rows per page: -

-
- - - - - -
-

- 0-0 of 0 -

-
- - - - - - - - - - - - -
-
-
-
-
-`; diff --git a/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.spec.ts b/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.spec.ts deleted file mode 100644 index 0b87d2be75..0000000000 --- a/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.spec.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Asset } from 'src/custom-types' -import { P9BMock } from 'src/mocks' -import { istarSearchRate, findActivityFromCompositeString, TurnTimes, trimPeriod } from './getNextInteraction' - -const wargame = P9BMock.data -const forces = wargame.forces.forces -const activities = P9BMock.data.activities ? P9BMock.data.activities.activities : [] - -it('calculates search rate', () => { - const istarAssets: Asset[] = [] - forces.some((force) => { - if (force.assets) { - const istar = force.assets.filter((asset) => asset.platformTypeId.toLowerCase().includes('istar')) - if (istar.length) { - istarAssets.push(...istar) - } - } - }) - const list = istarAssets.slice(0, 4) - let ctr = 2 - const items: Array<{ asset: Asset['uniqid'], number: number, missileType?: string }> = list.map((item) => { - return { - asset: item.uniqid, - number: ctr++ - } - }) - const emptyRate = istarSearchRate([], forces, 1000) - expect(emptyRate).toEqual(1000) - const rate = istarSearchRate(items, forces, 1000) - expect(rate).toEqual(1400) // TODO investigte, it should be 1540 -}) - -// ++ -it('extracts activity', () => { - const testStr = 'f-blue-Maritime-Transit' - const force = 'f-blue' - const forceActs = activities.find((set) => set.force === force) - expect(forceActs).toBeTruthy() - if (forceActs) { - const activity = findActivityFromCompositeString(testStr, forceActs) - expect(activity).toBeTruthy() - if (activity) { - expect(activity.name).toEqual('Transit') - } - } -}) - -it('trims period', () => { - const p1: TurnTimes = { start: 100, end: 200 } - const p2: TurnTimes = { start: 50, end: 250 } - const p3: TurnTimes = { start: 150, end: 180 } - const t1 = trimPeriod(p1, p2) - expect(t1.start).toEqual(100) - expect(t1.end).toEqual(200) - - const t2 = trimPeriod(p1, p3) - expect(t2.start).toEqual(150) - expect(t2.end).toEqual(180) -}) diff --git a/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.ts b/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.ts deleted file mode 100644 index eed73495ba..0000000000 --- a/client/src/Components/pf-planning/adjudication-messages-list/helpers/getNextInteraction.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { ForceData, Asset, PerForcePlanningActivitySet, PlanningActivity } from 'src/custom-types' -import { findAsset } from 'src/Helpers' - -/** the start and end time for a turn */ -export type TurnTimes = { - start: number - end: number -} - -export const istarSearchRate = (own: Array<{ asset: Asset['uniqid'], number: number, missileType?: string }>, forces: ForceData[], defaultRate: number): number => { - if (own && own.length > 0) { - interface AssetWithCount { - asset: Asset - count: number - rate: number - } - const assetsWithCount = own.map((item): AssetWithCount => { - const asset = findAsset(forces, item.asset) - const attrs = asset.attributes - const rate = (attrs && attrs.a_Search_Rate) ? attrs.a_Search_Rate as number : defaultRate - return { asset: asset, count: item.number, rate: rate } - }) - const searchRates = assetsWithCount.map((item): number => { - const rate = (item.asset.attributes && item.asset.attributes.a_Search_Rate) ? item.asset.attributes.a_Search_Rate as number : defaultRate - const assetRate = item.count > 0 ? item.count * rate : rate - return assetRate - }) - const res = searchRates.reduce((a: number, b: number) => a + b, 0) - console.table(assetsWithCount.map((item) => { - return { - id: item.asset.uniqid, - name: item.asset.name, - count: item.count, - rate: (item.asset.attributes && item.asset.attributes.a_Search_Rate) || 'Default:' + defaultRate - } - })) - console.log('ISTAR Calculated search rate:' + res) - return res - } - return defaultRate -} - -export const findActivityFromCompositeString = (name: string, activities: PerForcePlanningActivitySet): PlanningActivity | undefined => { - const separator = '-' - const last = name.lastIndexOf(separator) - const actName = name.slice(last + 1) - const forceGroup = name.slice(0, last) - const first = forceGroup.lastIndexOf(separator) - const groupName = forceGroup.slice(first + 1) - const forceName = forceGroup.slice(0, first) - if (forceName !== activities.force) { - console.warn('Warning: findActivitiy received activities for wrong force', forceName, activities.force) - } - const groupActivities = activities.groupedActivities.find((group) => group.category === groupName) - if (groupActivities) { - const activity = groupActivities.activities.find((act) => act.name === actName) - if (activity) { - return activity - } - } - console.warn('Failed to find group activities for this activity:', name) - console.warn('find act', name, last, actName, forceGroup, first, groupName, forceName, activities) - return undefined -} - -export const trimPeriod = (period: TurnTimes, turn: TurnTimes): TurnTimes => { - return { start: Math.max(period.start, turn.start), end: Math.min(period.end, turn.end) } -} diff --git a/client/src/Components/pf-planning/adjudication-messages-list/helpers/istar-helper.ts b/client/src/Components/pf-planning/adjudication-messages-list/helpers/istar-helper.ts deleted file mode 100644 index 1e176b5055..0000000000 --- a/client/src/Components/pf-planning/adjudication-messages-list/helpers/istar-helper.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { Asset, ForceData, InteractionDetails, MessageAdjudicationOutcomes, PerceptionOutcome, PerceptionOutcomes, PlannedActivityGeometry, PlannedProps, PlanningActivity, PlanningActivityGeometry } from 'src/custom-types' -import { findForceAndAsset } from 'src/Helpers' -import * as turf from '@turf/turf' -import { booleanPointInPolygon, buffer } from '@turf/turf' -import { Feature, Geometry, Polygon } from 'geojson' -import { shuffle } from 'lodash' -import moment from 'moment' -import { shortDate } from '../../planning-messages-list/helpers/genData' -import { GeomWithOrders } from '../../support-panel/helpers/gen-order-data' -import { istarSearchRate } from './getNextInteraction' - -export const DEFAULT_SEARCH_RATE = 2000 - -/** check if the point provided is in the polygon provided */ -export const checkInArea = (area: Feature, point: [number, number]): boolean => { - const otherPt = turf.point([point[1], point[0]]) - return booleanPointInPolygon(otherPt, area) -} - -const bufferShape = (geom: Geometry, bufferKM: number): Polygon => { - const poly = buffer(geom, bufferKM, { units: 'kilometers' }) - return poly.geometry as Polygon -} - -export const calculateDetections = (ownFor: ForceData['uniqid'], forces: ForceData[], areaGeometry: Geometry, - startD: number, endD: number, searchRateKm2perHour: number, narrative: string, targetForces: string[]): PerceptionOutcomes => { - const box = areaGeometry.type === 'Polygon' ? areaGeometry as Geometry as Polygon : bufferShape(areaGeometry, 30) - const coords = box.coordinates - // calculate prob of detecting sometghing - // convert the boundary to a turn object - const mePoly = turf.polygon(coords) - const areaM2 = turf.area(mePoly) - const areaKM2 = areaM2 / 1000000 - const durationMillis = endD - startD - const durationHrs = durationMillis / 1000 / 60 / 60 - const searchProb = (searchRateKm2perHour * durationHrs) / areaKM2 - // find all asset in the area - const assetsInArea: Array<{ force: ForceData, asset: Asset }> = [] - forces.forEach((force: ForceData) => { - if (force.uniqid !== ownFor && targetForces.includes(force.uniqid)) { - if (force.assets) { - force.assets.forEach((asset: Asset) => { - // check it's not fixed infrastructure - if (asset.platformTypeId !== '_land_asset') { - if (asset.location) { - if (checkInArea(mePoly, asset.location)) { - assetsInArea.push({ force, asset }) - } - if (asset.comprising) { - // check child assets - asset.comprising.forEach((asset2: Asset) => { - if (asset2.location) { - if (checkInArea(mePoly, asset2.location)) { - assetsInArea.push({ force, asset: asset2 }) - } - } - }) - } - } - } - }) - } - } - }) - // randomly include some - const randomised = shuffle(assetsInArea) - const numToTake = Math.floor(randomised.length * searchProb) - const observedAssets = randomised.slice(0, numToTake) - const twoDP = (val: number) => { - return Math.floor(val * 100) / 100 - } - const timePeriod = '[' + shortDate(moment.utc(startD).toISOString()) + ' - ' + shortDate(moment.utc(endD).toISOString()) + ']' - console.log('ISTAR detection calc', ' area (km2):', twoDP(areaKM2), ' time:', timePeriod, ' duration (hrs):', twoDP(durationHrs), - ' rate:', twoDP(searchRateKm2perHour), ' prob:', twoDP(searchProb), ' in area:', assetsInArea.length, ' detected:', numToTake) - - // create the perceptions - const perceptions = observedAssets.map((item: {force: ForceData, asset: Asset}): PerceptionOutcome => { - return { - force: ownFor, - asset: item.asset.uniqid, - perceivedLocation: JSON.stringify(item.asset.location), - perceivedType: item.asset.platformTypeId, - perceivedHealth: item.asset.health, - perceivedName: item.asset.name, - perceivedForce: item.force.uniqid, - narrative: narrative - } - }) - - console.log('ISTAR Calc', { - a_narrative: narrative, - areaKM2: areaKM2.toFixed(0), - durationHrs: durationHrs.toFixed(2), - searchRateKM2h: searchRateKm2perHour.toFixed(2), - searchProb: searchProb.toFixed(2), - totalInArea: assetsInArea.length, - observed: observedAssets.length - }) - - return perceptions -} - -export const istarBoundingBox = (plan: PlannedActivityGeometry[]): PlannedActivityGeometry | undefined => { - return plan.length === 4 ? plan[2] : undefined -} - -export const insertIstarInteractionOutcomes = (interaction: InteractionDetails, geom: GeomWithOrders, geom2: GeomWithOrders | undefined, - outcomes: MessageAdjudicationOutcomes, thisG: PlanningActivityGeometry | undefined, - activity: PlanningActivity, forces: ForceData[]): void => { - // was this the observation polygon? - const g1Props = geom.geometry.properties as PlannedProps - const conductingObvs = (activity.geometries && activity.geometries[2].uniqid === g1Props.geomId) - const observationFudgeFactor = conductingObvs ? 1.5 : 0.75 - // ok, sort out the interaction area & period - const interGeom = interaction.geometry - if (!interGeom) { - console.warn('Cannot create ISTAR interaction without interaction geometry') - return - } - const tStart = moment.utc(interaction.startTime).valueOf() - const tEnd = moment.utc(interaction.endTime).valueOf() - !7 && console.log('istar inter outcomes', geom, geom2, outcomes, thisG, activity, forces, observationFudgeFactor, tStart, tEnd, interGeom) - - const ownFor = geom.force - - // calculate the search rate - const combinedSearchRate = istarSearchRate(geom.plan.message.ownAssets || [], forces, DEFAULT_SEARCH_RATE) - - // run the calculator - const targetForces: Array = (ownFor === 'f-red') ? ['f-blue', 'f-green'] : ['f-red'] - - const inAreaPerceptions = calculateDetections(ownFor, forces, interGeom, tStart, tEnd, combinedSearchRate, 'In interaction area', targetForces) - - const targetPerceptions: PerceptionOutcomes = [] - - // also generate perceptions for the op-for - if (geom2) { - const oppAssets = geom2.plan.message.ownAssets - if (oppAssets) { - // ok, generate perceptions for them - if (conductingObvs) { - // asset is conducting obvs, it will see them - const oppIDs = oppAssets.map((item: { asset: Asset['uniqid'], number?: number, missileType?: string }) => item.asset) - const detIDs = inAreaPerceptions.map((det): Asset['uniqid'] => det.asset) - const notDetected = oppIDs.filter((id: Asset['uniqid']) => { - return !detIDs.includes(id) - }) - const oppPerceptions = notDetected.map((assetId: string): PerceptionOutcome => { - const item = findForceAndAsset(forces, assetId) - return { - force: ownFor, - asset: item.asset.uniqid, - perceivedLocation: JSON.stringify(item.asset.location), - perceivedType: item.asset.platformTypeId, - perceivedHealth: item.asset.health, - perceivedName: item.asset.name, - perceivedForce: item.force.uniqid, - narrative: 'Op-for asset travelling through obvs area' - } - }) - if (oppPerceptions.length > 0) { - targetPerceptions.push(...oppPerceptions) - } - } - } - } - - // have we spotted any in the subject area? - if (inAreaPerceptions.length) { - // we found some inter - const targetIDs = targetPerceptions.map((per) => per.asset) - const inAreaIds = inAreaPerceptions.map((per) => per.asset) - // check which in-area ids aren't in target ids - const notInTarget = inAreaIds.filter((id) => !targetIDs.includes(id)) - if (notInTarget.length) { - if (!interaction.otherAssets) { - interaction.otherAssets = [] - } - interaction.otherAssets.push(...notInTarget) - } - } - - // push in the target perceptions first - if (targetPerceptions.length > 0) { - outcomes.perceptionOutcomes.push(...targetPerceptions) - } - // then the in-area perceptions - if (inAreaPerceptions.length > 0) { - outcomes.perceptionOutcomes.push(...inAreaPerceptions) - } -} diff --git a/client/src/Components/pf-planning/adjudication-messages-list/types/props.d.ts b/client/src/Components/pf-planning/adjudication-messages-list/types/props.d.ts deleted file mode 100644 index 3be62f1052..0000000000 --- a/client/src/Components/pf-planning/adjudication-messages-list/types/props.d.ts +++ /dev/null @@ -1,16 +0,0 @@ - -export type AdjudicationRow = { - id: string - reference: string - complete: boolean - /** turn when adjudication generated */ - turn: number - /** whether outcome is flagged as important */ - important: string - owner: string - order1: string - order2: string - activity: string - period: string - tableData?: { showDetailPanel: any } -} diff --git a/client/src/Components/pf-planning/apply-filter/README.md b/client/src/Components/pf-planning/apply-filter/README.md deleted file mode 100644 index bf6a711902..0000000000 --- a/client/src/Components/pf-planning/apply-filter/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Planning Force documentation - -This is an example readme file for the 'Apply Filter' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import ApplyFilter from "./view-as"; -``` - -### CommonJS - -```js -const ApplyFilter = require("./view-as"); -``` diff --git a/client/src/Components/pf-planning/apply-filter/__snapshots__/index.spec.tsx.snap b/client/src/Components/pf-planning/apply-filter/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index ba0656d374..0000000000 --- a/client/src/Components/pf-planning/apply-filter/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Planning Force component: renders component correctly 1`] = ` -
- -
-`; diff --git a/client/src/Components/pf-planning/apply-filter/index.spec.tsx b/client/src/Components/pf-planning/apply-filter/index.spec.tsx deleted file mode 100644 index c4ad0198af..0000000000 --- a/client/src/Components/pf-planning/apply-filter/index.spec.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { noop } from 'lodash' -import React from 'react' -import renderer from 'react-test-renderer' -import ApplyFilter from './index' - -describe('Planning Force component: ', () => { - it('renders component correctly', () => { - const tree = renderer - .create() - .toJSON() - expect(tree).toMatchSnapshot() - }) -}) diff --git a/client/src/Components/pf-planning/apply-filter/index.stories.tsx b/client/src/Components/pf-planning/apply-filter/index.stories.tsx deleted file mode 100644 index fd98c1e719..0000000000 --- a/client/src/Components/pf-planning/apply-filter/index.stories.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import { noop } from 'lodash' -import React from 'react' - -import ApplyFilter from './index' -import docs from './README.md' -import ApplyFilterProps from './types/props' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -export default { - title: 'local/organisms/ApplyFilter', - component: ApplyFilter, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - } -} - -const Template: Story = () => { - return -} - -export const Default = Template.bind({}) -Default.args = {} diff --git a/client/src/Components/pf-planning/apply-filter/index.tsx b/client/src/Components/pf-planning/apply-filter/index.tsx deleted file mode 100644 index 084979a4fb..0000000000 --- a/client/src/Components/pf-planning/apply-filter/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import cx from 'classnames' -import React from 'react' - -import { faFilter } from '@fortawesome/free-solid-svg-icons' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import Item from '../../local/map-control/helpers/item' -import PropTypes from './types/props' - -export const ApplyFilter: React.FC = ({ - setFilterApplied, - filterApplied -}) => { - return <> -
- { setFilterApplied(!filterApplied) }} - contentTheme={!filterApplied ? 'dark' : 'light'} > - - -
- -} - -export default ApplyFilter diff --git a/client/src/Components/pf-planning/apply-filter/styles.module.scss b/client/src/Components/pf-planning/apply-filter/styles.module.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/Components/pf-planning/apply-filter/styles.module.scss.d.ts b/client/src/Components/pf-planning/apply-filter/styles.module.scss.d.ts deleted file mode 100644 index bf7791c7c4..0000000000 --- a/client/src/Components/pf-planning/apply-filter/styles.module.scss.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'iconbase': string; - 'pulse': string; - 'selected': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/pf-planning/apply-filter/types/props.d.ts b/client/src/Components/pf-planning/apply-filter/types/props.d.ts deleted file mode 100644 index 2a45b66494..0000000000 --- a/client/src/Components/pf-planning/apply-filter/types/props.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default interface PropTypes { - /** callback for filter status being changed */ - setFilterApplied: { (applied: boolean): void } - /** current value of `filter applied` */ - filterApplied: boolean -} diff --git a/client/src/Components/pf-planning/map-planning-orders/README.md b/client/src/Components/pf-planning/map-planning-orders/README.md deleted file mode 100644 index bbc1144206..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Planning Force documentation - -This is an example readme file for the 'Planning Prders' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import PlanningOrders from "./planning-force"; -``` - -### CommonJS - -```js -const PlanningOrders = require("./planning-force"); -``` diff --git a/client/src/Components/pf-planning/map-planning-orders/__snapshots__/index.spec.tsx.snap b/client/src/Components/pf-planning/map-planning-orders/__snapshots__/index.spec.tsx.snap deleted file mode 100644 index c093c8e023..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/__snapshots__/index.spec.tsx.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Planning Force component: renders component correctly 1`] = `null`; diff --git a/client/src/Components/pf-planning/map-planning-orders/index.spec.tsx b/client/src/Components/pf-planning/map-planning-orders/index.spec.tsx deleted file mode 100644 index cb88902079..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/index.spec.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { forceColors } from 'src/Helpers' -import { P9Mock } from 'src/mocks' -import { noop } from 'lodash' -import React from 'react' -import renderer from 'react-test-renderer' -import MapPlanningOrders from './index' - -const forces = P9Mock.data.forces.forces -const forceCols = forceColors(forces, true) - -jest.mock('react-leaflet-v4', () => ({ - LayerGroup: (): React.ReactElement => <>, - GeoJSON: (): React.ReactElement => <> -})) - -jest.mock('leaflet', () => { - const leafletModule = jest.requireActual('leaflet') - const mockLeafletModule = { - ...leafletModule, - Symbol: { - arrowHead: jest.fn() - } - } - return mockLeafletModule -}) - -jest.mock('react-leaflet-v4', () => ({ - useMap: (): jest.Mock => jest.fn() -})) - -jest.mock('react-leaflet-geoman-v2', () => ({ - GeomanControls: (): React.ReactElement => <> -})) - -describe('Planning Force component: ', () => { - it('renders component correctly', () => { - const tree = renderer - .create( noop()} orders={[]}/>) - .toJSON() - expect(tree).toMatchSnapshot() - }) -}) diff --git a/client/src/Components/pf-planning/map-planning-orders/index.stories-inc.tsx b/client/src/Components/pf-planning/map-planning-orders/index.stories-inc.tsx deleted file mode 100644 index 092b30519b..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/index.stories-inc.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { forceColors } from 'src/Helpers' -import { P9Mock } from 'src/mocks' -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import { noop } from 'lodash' -import React from 'react' - -import MapPlanningOrders from './index' -import docs from './README.md' -import PlanningOrdersProps from './types/props' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -const forces = P9Mock.data.forces.forces -const forceCols = forceColors(forces, true) - -export default { - title: 'local/organisms/PlanningOrders', - component: MapPlanningOrders, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - } -} - -const Template: Story = () => { - return -} - -export const Default = Template.bind({}) -Default.args = {} diff --git a/client/src/Components/pf-planning/map-planning-orders/index.tsx b/client/src/Components/pf-planning/map-planning-orders/index.tsx deleted file mode 100644 index 546710c766..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/index.tsx +++ /dev/null @@ -1,212 +0,0 @@ - -import { MessageInteraction, MessagePlanning, PlannedActivityGeometry, PlanningActivity, PlanningActivityGeometry } from 'src/custom-types' -import { ForceStyle } from 'src/Helpers' -import { Feature } from 'geojson' -import { Layer } from 'leaflet' -import _ from 'lodash' -import React, { useEffect, useState } from 'react' -import { LayerGroup } from 'react-leaflet-v4' -import { shapeFor } from '../planning-channel/helpers/SharedOrderRenderer' -import PropTypes, { ReplayFeature } from './types/props' - -const localFindActivity = (activities: PlanningActivity[], uniqid: PlanningActivityGeometry['uniqid']): PlanningActivity | undefined => { - const activity = activities.find((value: PlanningActivity) => { - if (value.geometries) { - return value.geometries.find((geom: PlanningActivityGeometry) => geom.uniqid === uniqid) - } - return false - }) - return activity -} - -export const MapPlanningOrders: React.FC = ({ orders, activities, selectedOrders, forceColors, interactions, selectedInteraction, features }) => { - const [interactionGeometries, setInteractionGeometries] = useState([]) - const [interactionLayersToDelete] = useState([]) - const [orderGeometries, setOrderGeometries] = useState([]) - const [orderLayersToDelete] = useState([]) - const [featureGeometries, setFeatureGeometries] = useState([]) - const [featureLayersToDelete] = useState([]) - - /** produce a list of features for the geometries in this message */ - const featuresForPlanningMessage = (msg: MessagePlanning): Feature[] => { - if (msg.message.location) { - const fromForce = msg.details.from.forceId - const color: ForceStyle = forceColors.find((force: ForceStyle) => force.forceId === fromForce) - const geoms = msg.message.location.map((act: PlannedActivityGeometry) => { - const res = { ...act.geometry } - if (res.properties) { - res.properties.uniqid = act.uniqid - } else { - res.properties = { uniqid: act.uniqid } - } - res.properties.forceColor = color.color - const activity = localFindActivity(activities, act.uniqid) - if (activity && activity.geometries) { - const geometry = activity.geometries.find((geom: PlanningActivityGeometry) => geom.uniqid === act.uniqid) - if (geometry) { - res.properties.name = activity.name + ' - ' + geometry.name - } - } else { - console.warn('failed to find activity for 3', act.uniqid, activities) - } - return res - }) - return geoms - } else { - throw Error('Location missing ' + msg.message.title) - } - } - - useEffect(() => { - if (interactions) { - // clear existing data - while (interactionLayersToDelete.length > 0) { - const layer = interactionLayersToDelete.shift() - layer && layer.remove() - } - - if (!selectedInteraction) { - setInteractionGeometries([]) - } else { - const interMsg = interactions.find((val: MessageInteraction) => val.message.Reference === selectedInteraction) - if (!interMsg) { - console.warn('failed to find interaction with id:', selectedInteraction) - return - } - const details = interMsg.details.interaction - if (!details) { - console.warn('Failed to find interaction details for id:', selectedInteraction) - return - } - // get the ids - const iOrdersIds = details.orders2 ? [details.orders1, details.orders2] : [details.orders1] - // get the actual orders - const iOrders = orders.filter((plan: MessagePlanning) => iOrdersIds.includes(plan._id)) - const withLocation = iOrders.filter((msg: MessagePlanning) => msg.message && (msg.message.location !== undefined) && Array.isArray(msg.message.location)) - const geometries = withLocation.map((msg: MessagePlanning): Feature[] => { - return featuresForPlanningMessage(msg) - }) - const flatGeom = _.flatten(geometries) - - // handler to store layer references - const storeRef = (polyline: Layer): void => { - interactionLayersToDelete.push(polyline) - } - - const elements = flatGeom.map((feature: Feature, index: number) => { - if (feature.properties) { - const color = feature.properties.forceColor - return shapeFor(feature, color, feature.properties.name || 'unknown', storeRef, index) - } else { - return <> - } - }) - - // also see if there is an interaction geomertry - if (details.geometry) { - // create the feature - const feature: Feature = { - type: 'Feature', - geometry: details.geometry, - properties: {} - } - const color = '#FF0' // make it yellow - const shape = shapeFor(feature, color, 'interaction', storeRef, elements.length) - elements.push(shape) - } - setInteractionGeometries(elements) - } - } - }, [interactions, selectedInteraction]) - - useEffect(() => { - if (orders) { - // clear existing data - while (orderLayersToDelete.length > 0) { - const layer = orderLayersToDelete.shift() - layer && layer.remove() - } - - // sort out what to render - // note: we were failing on the next line because incomplete messages had an empty string in for location - const withLocation = orders.filter((msg: MessagePlanning) => msg.message && (msg.message.location !== undefined) && Array.isArray(msg.message.location)) - const isSelected = withLocation.filter((msg: MessagePlanning) => selectedOrders && selectedOrders.includes(msg._id)) - const geometries = isSelected.map((msg: MessagePlanning): Feature[] => { - return featuresForPlanningMessage(msg) - }) - const flatGeom = _.flatten(geometries) - - // handler to store layer references - const storeRef = (polyline: Layer): void => { - orderLayersToDelete.push(polyline) - } - - const elements = flatGeom.map((feature: Feature, index: number) => { - if (feature.properties) { - const color = feature.properties.forceColor - return shapeFor(feature, color, feature.properties.name || 'unknown', storeRef, index) - } else { - return <> - } - }) - - setOrderGeometries(elements) - } - }, [orders, selectedOrders]) - - useEffect(() => { - if (features) { - // clear existing data - while (featureLayersToDelete.length > 0) { - const layer = featureLayersToDelete.shift() - layer && layer.remove() - } - - // // sort out what to render - // // note: we were failing on the next line because incomplete messages had an empty string in for location - // const withLocation = orders.filter((msg: MessagePlanning) => msg.message && (msg.message.location !== undefined) && Array.isArray(msg.message.location)) - // const isSelected = withLocation.filter((msg: MessagePlanning) => selectedOrders && selectedOrders.includes(msg._id)) - // const geometries = isSelected.map((msg: MessagePlanning): Feature[] => { - // return featuresForPlanningMessage(msg) - // }) - // const flatGeom = _.flatten(geometries) - - // handler to store layer references - const storeRef = (polyline: Layer): void => { - featureLayersToDelete.push(polyline) - } - - const elements = features.map((feature: ReplayFeature, index: number) => { - return shapeFor(feature.feature.geometry, feature.color, feature.name || 'unknown', storeRef, index) - }) - setFeatureGeometries(elements) - } - }, [features]) - - useEffect(() => { - const outputOrderTimings = false - if (orders && outputOrderTimings) { - const timings = orders.map((msg: MessagePlanning) => { - return '' + msg.message.title + ',' + msg.message.startDate + ', ' + msg.message.endDate - }) - console.log('timings', timings) - } - }, [orders]) - - return <> - {orderGeometries && orderGeometries.length > 0 && - - {orderGeometries} - } - {featureGeometries && featureGeometries.length > 0 && - - {featureGeometries} - } - {interactionGeometries && interactionGeometries.length > 0 && - - {interactionGeometries} - } - -} - -export default MapPlanningOrders diff --git a/client/src/Components/pf-planning/map-planning-orders/styles.module.scss b/client/src/Components/pf-planning/map-planning-orders/styles.module.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/client/src/Components/pf-planning/map-planning-orders/styles.module.scss.d.ts b/client/src/Components/pf-planning/map-planning-orders/styles.module.scss.d.ts deleted file mode 100644 index bf7791c7c4..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/styles.module.scss.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'iconbase': string; - 'pulse': string; - 'selected': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/pf-planning/map-planning-orders/types/props.d.ts b/client/src/Components/pf-planning/map-planning-orders/types/props.d.ts deleted file mode 100644 index 3756cf7ce9..0000000000 --- a/client/src/Components/pf-planning/map-planning-orders/types/props.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ForceData, ForceStyle, MessageInteraction, MessagePlanning, PlanningActivity, PlannedActivityGeometry } from 'src/custom-types' -import React from 'react' - -/** helper object, to allow clustering of assets by force */ -export type ReplayFeature = { - feature: PlannedActivityGeometry - color: string - name: string -} - -export default interface PropTypes { - /** the full set of orders */ - orders: MessagePlanning[] - /** reference list of interactions */ - interactions?: MessageInteraction[] - /** the currently selected set of ordres */ - selectedOrders?: string[] - /** currently selected interaction */ - selectedInteraction?: string | undefined - /** a reference list of plannign activiites (used to get color/styling) */ - activities: PlanningActivity[] - /** handler for a set of orders being clicked */ - setSelectedOrders: React.Dispatch> - /** default color to use for this force */ - forceColor?: ForceData['color'] - /** set of force colors */ - forceColors: ForceStyle[] - /** a set of planned features to display */ - features?: ReplayFeature[] -} diff --git a/client/src/Components/pf-planning/planning-assets/README.md b/client/src/Components/pf-planning/planning-assets/README.md deleted file mode 100644 index e5909c1057..0000000000 --- a/client/src/Components/pf-planning/planning-assets/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Planning Assets documentation - -This is an example readme file for the 'Planning Assets' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import PlanningAssets from "./planning-assets"; -``` - -### CommonJS - -```js -const PlanningAssets = require("./planning-assets"); -``` diff --git a/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.spec.ts b/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.spec.ts deleted file mode 100644 index e529eea3a5..0000000000 --- a/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.spec.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { UNKNOWN_TYPE } from 'src/config' -import { Asset } from 'src/custom-types' -import { deepCopy, forceColors, platformIcons } from 'src/Helpers' -import { P9Mock } from 'src/mocks' -import LRUCache from 'lru-cache' -import moment from 'moment' -import { LRU_CACHE_OPTION } from '../../support-panel/constants' -import { collateItem, getColumns, getOppAssets, getOwnAssets } from './collate-assets' - -const forces = P9Mock.data.forces.forces -const umpireForce = forces[0] -const blueForce = forces[1] -const redForce = forces[2] -const redZeroAsset = redForce.assets && redForce.assets[0] -// const redOneAsset = redForce.assets && redForce.assets[1] -const greenForce = forces[3] - -if (redZeroAsset) { - redZeroAsset.perceptions[0] = { by: blueForce.uniqid, typeId: redZeroAsset.platformTypeId } -} -const redAssetWithUnknown: Asset = deepCopy(redZeroAsset) -redAssetWithUnknown.perceptions[0] = { by: blueForce.uniqid, typeId: undefined } - -false && console.log('get working:', greenForce, getColumns, collateItem, UNKNOWN_TYPE, redZeroAsset) - -const forceCols = forceColors(forces) -const platformStyles = P9Mock.data.platformTypes ? platformIcons(P9Mock.data.platformTypes.platformTypes) : [] - -const platformTypes = P9Mock.data.platformTypes ? P9Mock.data.platformTypes.platformTypes : [] - -const attributeTypes = P9Mock.data.attributeTypes ? P9Mock.data.attributeTypes.attributes : [] - -const assetsCache = new LRUCache(LRU_CACHE_OPTION) - -const tNow = moment.utc('2022-05-01T00:55:00.000Z').valueOf() - -describe('check collating assets', () => { - it('handles collate item for opfor', () => { - if (redZeroAsset) { - const item = collateItem(true, redZeroAsset, blueForce, redForce, forceCols, platformStyles, [], platformTypes, attributeTypes, tNow, undefined) - expect(item).toBeTruthy() - expect(item.length).toEqual(1) - const first = item[0] - expect(first.id).toEqual(redZeroAsset.uniqid) - expect(first.platformType).toEqual(redZeroAsset.platformTypeId) - } - }) - - it('handles collate item for opfor with lots of unknowns', () => { - if (redAssetWithUnknown) { - const item = collateItem(true, redAssetWithUnknown, blueForce, redForce, forceCols, platformStyles, [], platformTypes, attributeTypes, tNow, undefined) - expect(item).toBeTruthy() - expect(item.length).toEqual(1) - const first = item[0] - expect(first.id).toEqual(redAssetWithUnknown.uniqid) - expect(first.platformType).toEqual(redAssetWithUnknown.platformTypeId) - expect(first.force).toEqual(redForce.name) - expect(first.name).toEqual(redAssetWithUnknown.name) - } - }) - - it('handles collate item for opfor wwith unknown type', () => { - if (redAssetWithUnknown) { - const item = collateItem(true, redAssetWithUnknown, blueForce, redForce, forceCols, platformStyles, [], platformTypes, attributeTypes, tNow, undefined) - expect(item).toBeTruthy() - expect(item.length).toEqual(1) - const first = item[0] - expect(first.id).toEqual(redAssetWithUnknown.uniqid) - expect(first.platformType).toEqual(redAssetWithUnknown.platformTypeId) - } - }) - - it('handles own-forces tab', () => { - const umpireColumns = getColumns(false, forces, blueForce.uniqid, platformStyles, assetsCache) - expect(umpireColumns).toBeTruthy() - expect(umpireColumns.length).toEqual(9) - - const pTypeCol = umpireColumns[2] - expect(pTypeCol.lookup).toBeTruthy() - expect(pTypeCol.lookup && Object.keys(pTypeCol.lookup).length).toEqual(10) - - const umpireRows = getOwnAssets(forces, forceCols, platformStyles, umpireForce, platformTypes, attributeTypes, tNow, []) - expect(umpireRows).toBeTruthy() - expect(umpireRows.length).toEqual(39) - - const blueRows = getOwnAssets(forces, forceCols, platformStyles, blueForce, platformTypes, attributeTypes, tNow, []) - expect(blueRows).toBeTruthy() - expect(blueRows.length).toEqual(17) - - // do some parent/child checking - // TOOD: generate test data wuth child assets - // const firstParent = blueRows[0] - // const firstChild = blueRows[1] - // expect(firstChild.parentId).toEqual(firstParent.id) - }) - - it('handles NEW ownFor', () => { - const umpireOwnForces = getOwnAssets(forces, forceCols, platformStyles, umpireForce, platformTypes, attributeTypes, tNow, []) - expect(umpireOwnForces).toBeTruthy() - expect(umpireOwnForces.length).toEqual(39) - - const blueOwnForces = getOwnAssets(forces, forceCols, platformStyles, blueForce, platformTypes, attributeTypes, tNow, []) - expect(blueOwnForces).toBeTruthy() - expect(blueOwnForces.length).toEqual(17) - }) - - it('handles NEW oppFor', () => { - const umpireOppForces = getOppAssets(forces, forceCols, platformStyles, umpireForce, platformTypes, attributeTypes, tNow, []) - expect(umpireOppForces).toBeTruthy() - expect(umpireOppForces.length).toEqual(0) - - const blueOppForces = getOppAssets(forces, forceCols, platformStyles, blueForce, platformTypes, attributeTypes, tNow, []) - expect(blueOppForces).toBeTruthy() - expect(blueOppForces.length).toEqual(22) - }) - - it('handles opFor tab', () => { - const umpireColumns = getColumns(true, [], umpireForce.uniqid, platformStyles, assetsCache) - expect(umpireColumns).toBeTruthy() - expect(umpireColumns.length).toEqual(7) - - const blueColumns = getColumns(true, [], blueForce.uniqid, platformStyles, assetsCache) - expect(blueColumns).toBeTruthy() - expect(blueColumns.length).toEqual(7) - - const umpireRows = getOppAssets(forces, forceCols, platformStyles, umpireForce, platformTypes, attributeTypes, tNow, []) - expect(umpireRows).toBeTruthy() - expect(umpireRows.length).toEqual(0) - - const blueRows = getOppAssets(forces, forceCols, platformStyles, blueForce, platformTypes, attributeTypes, tNow, []) - expect(blueRows).toBeTruthy() - expect(blueRows.length).toEqual(22) - }) -}) diff --git a/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.tsx b/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.tsx deleted file mode 100644 index dae0293fd8..0000000000 --- a/client/src/Components/pf-planning/planning-assets/helpers/collate-assets.tsx +++ /dev/null @@ -1,472 +0,0 @@ -import { Column } from '@material-table/core' -import { ATTRIBUTE_TYPE_ENUM, ATTRIBUTE_TYPE_NUMBER, ATTRIBUTE_TYPE_STRING, UNKNOWN_TYPE } from 'src/config' -import { Asset, AttributeTypes, ForceData, NumberAttributeType, PerceivedTypes, PlatformTypeData, Role } from 'src/custom-types' -import { findPerceivedAsTypes, ForceStyle, PlatformStyle, sortDictionaryByValue } from 'src/Helpers' -import { latLng } from 'leaflet' -import sortBy from 'lodash/sortBy' -import LRUCache from 'lru-cache' -import React from 'react' -import AssetIcon from '../../../local/asset-icon' -import SymbolAssetIcon from '../../../local/symbol-asset-icon' -import styles from '../styles.module.scss' -import { AssetRow } from '../types/props' - -type SummaryData = { - roles: Record - platformTypes: Record - subTypes: string[] - statuses: string[] - conditions: string[] - forces: string[] - taskGroups: string[] -} - -const storePlatformType = (pType: PlatformTypeData['uniqid'], platformStyles: PlatformStyle[], - platformTypesDict: Record): void => { - if (!platformTypesDict[pType] && platformStyles.length) { - const thisP = platformStyles.find((plat: PlatformStyle) => plat.uniqid === pType) - if (thisP) { - platformTypesDict[pType] = thisP.name - } else { - if (pType === UNKNOWN_TYPE) { - platformTypesDict[UNKNOWN_TYPE] = UNKNOWN_TYPE - } else { - console.error('Platform type not found', pType, UNKNOWN_TYPE, platformStyles) - } - } - } -} - -export const getOwnAssets = (forces: ForceData[], forceColors: ForceStyle[], platformIcons: PlatformStyle[], playerForce: ForceData, platformTypes: PlatformTypeData[], - attributeTypes: AttributeTypes, gameTime: number, selectedAssets: string[]): AssetRow[] => { - const rows: AssetRow[] = [] - forces.forEach((force: ForceData) => { - force.assets && force.assets.forEach((asset: Asset) => { - const assets = collateItem(false, asset, playerForce, force, forceColors, platformIcons, selectedAssets, platformTypes, attributeTypes, gameTime, undefined) - rows.push(...assets) - } - ) - }) - return rows -} - -export const getOppAssets = (forces: ForceData[], forceColors: ForceStyle[], platformIcons: PlatformStyle[], playerForce: ForceData, platformTypes: PlatformTypeData[], - attributeTypes: AttributeTypes, gameTime: number, selectedAssets: string[]): AssetRow[] => { - const rows: AssetRow[] = [] - forces.forEach((force: ForceData) => { - // don't generate op-for for umpire - if (!force.umpire) { - force.assets && force.assets.forEach((asset: Asset) => { - const assets = collateItem(true, asset, playerForce, force, forceColors, platformIcons, selectedAssets, platformTypes, attributeTypes, gameTime, undefined) - rows.push(...assets) - }) - } - }) - return rows -} - -export const getColumnSummary = (forces: ForceData[], playerForce: ForceData['uniqid'], - opFor: boolean, platformStyles: PlatformStyle[]): SummaryData => { - const roleDict: Record = {} - const platformTypesDict: Record = {} - const statuses: string[] = [] - const conditions: string[] = [] - const forcesNames: string[] = [] - const taskGroups: string[] = [] - const subTypes: string[] = [] - const isUmpireForce = forces.find((force: ForceData) => force.uniqid === playerForce && force.umpire) - forces.forEach((force: ForceData) => { - if (opFor) { - const visibleToThisForce = (force.visibleTo && force.visibleTo.includes(playerForce)) || force.uniqid === playerForce - // only produce for other forces - if (force.uniqid !== playerForce) { - force.assets && force.assets.forEach((asset: Asset) => { - const perception: PerceivedTypes | null = findPerceivedAsTypes(playerForce, asset.name, !!visibleToThisForce, asset.contactId, force.uniqid, asset.platformTypeId || '', asset.perceptions) - if (perception) { - // we can perceive this force, capture the name - if (!forcesNames.includes(force.name)) { - forcesNames.push(force.name) - } - if (perception.condition) { - const condition = perception.condition - if (!conditions.includes(condition)) { - conditions.push(condition) - } - } - if (perception.typeId) { - const pType = perception.typeId - storePlatformType(pType, platformStyles, platformTypesDict) - } - if (asset.attributes) { - const subType = asset.attributes.a_Type as string - if (!subTypes.includes(subType)) { - subTypes.push(subType) - } - } - } - }) - } - } else { - // we store roles for own force, or all for an umpire - if (isUmpireForce || (force.uniqid === playerForce)) { - force.roles.forEach((role: Role) => { roleDict[role.roleId] = role.name }) - // capture all force names for umpire - if (isUmpireForce && !forcesNames.includes(force.name)) { - forcesNames.push(force.name) - } - - force.assets && force.assets.forEach((asset: Asset) => { - if (asset.status) { - const state = asset.status.state - if (!statuses.includes(state)) { - statuses.push(state) - } - } - if (asset.condition) { - if (!conditions.includes(asset.condition)) { - conditions.push(asset.condition) - } - } - if (asset.attributes) { - const subType = asset.attributes.a_Type as string - if (!subTypes.includes(subType)) { - subTypes.push(subType) - } - const group = asset.attributes.a_TaskGroup as string - if (group !== undefined && group !== '' && !taskGroups.includes(group)) { - taskGroups.push(group) - } - } - storePlatformType(asset.platformTypeId, platformStyles, platformTypesDict) - }) - } - } - }) - - // NOTE: we're getting a localCompare exception thrown. See if it's in this sort block - let sortedSubTypes: string[] = [] - let sortedTaskGroups: string[] = [] - let sortedPlatforms = {} - try { - // sort sub-types - sortedSubTypes = subTypes.length ? subTypes.slice().sort() : [] - sortedTaskGroups = taskGroups.length ? taskGroups.slice().sort() : [] - sortedPlatforms = sortDictionaryByValue(platformTypesDict) - } catch (err) { - console.log('Exception caught, data:', subTypes, taskGroups, platformTypesDict, sortedSubTypes, sortedTaskGroups, sortedPlatforms) - console.error(err) - } - - const res: SummaryData = { - roles: roleDict, - platformTypes: sortedPlatforms, - subTypes: sortedSubTypes, - conditions: conditions, - statuses: statuses, - forces: forcesNames, - taskGroups: sortedTaskGroups - } - return res -} - -const renderIcon = (row: AssetRow, assetsCache: LRUCache): React.ReactElement => { - if (!row.icon) return <> - const icons = row.icon.split(',') - if (icons.length === 3) { - return {icons[2]} - } - - // test new asset icon component - if (row.sidc) { - // SGG*UCIN-- - return {row.name} - } - // end - - return {icons[2]} ({row.id}) -} - -export const arrToDict = (arr: string[]): any => { - if (arr && arr.length > 0) { - const res = {} - const sorted = sortBy(arr, function (name) { return name }) - sorted.forEach((item: string) => { - res[item] = item - }) - return res - } else { - return undefined - } -} - -const renderPlatformType = (row: AssetRow, platformTypes: Record): React.ReactElement => { - const match = row.platformType && platformTypes[row.platformType] - if (match) { - return <>{match} - } else { - return <> - } -} - -export const renderOwner = (row: AssetRow, roles: Record): React.ReactElement => { - const match = row.owner && roles[row.owner] - if (match) { - return <>{match} - } else { - return <> - } -} - -export const renderAttributes = (row: AssetRow): React.ReactElement => { - const keys = Object.keys(row.attributes) - if (keys.length) { - return
    - {keys.map((key: string, index: number) => { - return
  • {key}: {row.attributes[key]}
  • - })} -
- } else { - return <> - } -} - -// type ColumnType = { -// title: string -// field: string -// render: any -// lookup: any -// } - -/** - * Helper function to provide the columns for the table - * @param opFor whether we're displaying perceived other platforms - * @param playerForce the force of the current player - * @returns - */ -export const getColumns = (opFor: boolean, forces: ForceData[], playerForce: ForceData['uniqid'], platformStyles: PlatformStyle[], assetsCache: LRUCache): Column[] => { - const summaryData = getColumnSummary(forces, playerForce, opFor, platformStyles) - const fixedColWidth = 100 - const fixedColWidth2 = 200 - - const nameWidth = opFor ? fixedColWidth2 : fixedColWidth - - const ownAssets = !!(playerForce && !opFor) - - const columns: Column[] = [ - { title: 'Icon', field: 'icon', render: (row: AssetRow) => renderIcon(row, assetsCache), width: nameWidth, minWidth: nameWidth }, - { title: 'Force', field: 'force', width: 'auto', hidden: ownAssets, lookup: arrToDict(summaryData.forces) }, - { title: 'Type', field: 'platformType', width: 'auto', render: (row: AssetRow): React.ReactElement => renderPlatformType(row, summaryData.platformTypes), lookup: summaryData.platformTypes }, - { title: 'SubType', type: 'string', width: 'auto', field: 'subType', hidden: false, lookup: arrToDict(summaryData.subTypes) }, - { title: 'Domain', type: 'string', field: 'domain', width: fixedColWidth, minWidth: fixedColWidth, lookup: arrToDict(['Land', 'Maritime', 'Air']) }, - { title: 'Health', type: 'numeric', field: 'health', width: fixedColWidth, minWidth: fixedColWidth }, - { title: 'C4', type: 'string', field: 'c4', width: fixedColWidth, minWidth: fixedColWidth } - ] - - // show attributes for own forces (or if we're umpire) - if (ownAssets) { - columns.push({ title: 'Task Group', field: 'taskGroup', width: 'auto', hidden: false, lookup: arrToDict(summaryData.taskGroups) }) - columns.push({ title: 'Attributes', field: 'attributes', width: 'auto', hidden: true, render: renderAttributes }) - } - - return columns -} - -const getModernAttributes = (asset: Asset, attributeTypes: AttributeTypes, skipThese: string[]): Record => { - const attrDict = {} - const ids = asset.attributes || {} - Object.keys(ids).forEach((attrId: string) => { - if (skipThese && skipThese.includes(attrId)) { - return - } - const aType = attributeTypes.find((aType) => aType.attrId === attrId) - if (aType) { - switch (aType.attrType) { - case ATTRIBUTE_TYPE_NUMBER: { - const nType = aType as NumberAttributeType - const units = nType.units ? ' ' + nType.units : '' - attrDict[nType.name] = ids[attrId] + units - break - } - case ATTRIBUTE_TYPE_STRING: { - // trim the field, if necessary - let val = ids[attrId] - if (typeof (val) === 'string') { - const str = val as string - if (str.length > 30) { - val = str.substring(0, 30) + '...' - } - } - attrDict[aType.name] = val - break - } - case ATTRIBUTE_TYPE_ENUM: { - attrDict[aType.name] = ids[attrId] - break - } - default: { - console.warn('Haven\'t handled attribute', attrId) - } - } - } else { - // just shoe-horn the value in - const name = attrId - const prefix = name.indexOf('a_') - if (prefix === 0) { - const name2 = name.substring('a_'.length) - const name3 = name2.replace('_', ' ') - // yes, it's an attribute - attrDict[name3] = ids[attrId] - } - } - }) - return attrDict -} - -/** helper function, so we can apply to assets and child assets - * - * @param opFor if we're providing a list of opFor assets - * @param asset the asset to process (including children) - * @param playerForce the force for the current player (or undefined to see all assets) - * @param assetForce the force for the asset - * @param parentId the (optional) parent for this asset - * @returns a list of rows, representing the asset and it's children - */ -export const collateItem = (opFor: boolean, asset: Asset, playerForce: ForceData, assetForce: ForceData, - forceColors: ForceStyle[], platformIcons: PlatformStyle[], selectedAssets: string[], - platformTypes: PlatformTypeData[], attributeTypes: AttributeTypes, gameTime: number, parentId?: string): AssetRow[] => { - const itemRows: AssetRow[] = [] - const iconFor = (platformType: string): string => { - const pType = platformIcons.find((value: PlatformStyle) => value.uniqid === platformType) - return (platformType === UNKNOWN_TYPE) ? 'unknown.svg' : (pType && pType.icon) || '' - } - const colorFor = (forceId: string): string => { - const colorMatch = forceColors.find((value: ForceStyle) => value.forceId === forceId) - return (forceId === UNKNOWN_TYPE) ? '#999' : (colorMatch && colorMatch.color) || '' - } - - const isUmpire = playerForce.umpire - const platformType = platformTypes && platformTypes.find((plat) => plat.uniqid === asset.platformTypeId) - - const nationsWithGodsEyeView = ['f-blue', 'f-green'] - const hasGodsEyeView = nationsWithGodsEyeView.includes(playerForce.uniqid.toLowerCase()) - - const domainFor = (travelMode?: string): string => { - if (travelMode) { - switch (travelMode) { - case 'sea': - return 'Maritime' - case 'air': - return 'Air' - case 'land': - return 'Land' - default: - console.warn('Unexpected travel mode encountered:', travelMode) - return 'ERR' - } - } - return 'Unk' - } - const domain = platformType ? domainFor(platformType.travelMode) : 'Unk' - const subType = asset.attributes ? asset.attributes.a_Type as string : 'n/a' - // we don't show some attributes, since they are shown in other columns - const attributesToSkip = ['a_Type', 'a_C4_Status', 'a_TaskGroup', 'a_SIDC'] - if (opFor && !isUmpire) { - // all assets of this force may be visible to player, or player - // may be from umpire force (so no player force shown) - if (assetForce.uniqid !== playerForce.uniqid) { - const visibleToThisForce = !!(assetForce.visibleTo && assetForce.visibleTo.includes(playerForce.uniqid)) - const perceptionTypes = findPerceivedAsTypes(playerForce.uniqid, asset.name, visibleToThisForce, asset.contactId, assetForce.uniqid, asset.platformTypeId || '', asset.perceptions) - const perception = asset.perceptions.find((perc) => perc.by === playerForce.uniqid) - // as a performance measure, we don't create attributes for OpFor assets - // const modernAttrDict = platformType ? getModernAttributes(asset, attributeTypes, attributesToSkip) : {} - const modernAttrDict = getModernAttributes(asset, attributeTypes, attributesToSkip) - const health = hasGodsEyeView ? asset.health : (perception && (perception.health !== undefined)) ? perception.health : undefined - const c4 = hasGodsEyeView ? ((asset.attributes && asset.attributes.a_C4_Status as string) || 'Unk') : 'Unk' - if ((perceptionTypes && perception) || hasGodsEyeView) { - const forceStyle = perceptionTypes ? forceColors.find((value: ForceStyle) => value.forceId === perceptionTypes.forceId) : '' - - // note: we used to use perceived location, but it was hassle to maintain, so we provide red with actual location - // const position = hasGodsEyeView ? (asset.location && latLng(asset.location[0], asset.location[1])) : (perception && perception.position && latLng(perception.position[0], perception.position[1])) - const position = asset.location && latLng(asset.location[0], asset.location[1]) - - const res: AssetRow = { - id: asset.uniqid, - icon: hasGodsEyeView ? iconFor(asset.platformTypeId) + ',' + assetForce.color + ',' + asset.name + ',' + health : perceptionTypes ? iconFor(perceptionTypes.typeId) + ',' + colorFor(perceptionTypes.forceId) + ',' + perceptionTypes.name + ',' + health : '', - force: hasGodsEyeView ? assetForce.name : forceStyle ? forceStyle.force : UNKNOWN_TYPE, - name: hasGodsEyeView ? asset.name : perceptionTypes ? perceptionTypes.name : '', - platformType: hasGodsEyeView ? asset.platformTypeId : perceptionTypes ? perceptionTypes.typeId : '', - subType: subType, - position: position, - tableData: { checked: selectedAssets.includes(asset.uniqid) }, - health: health, - c4: c4, - domain: domain, - attributes: modernAttrDict, - taskGroup: '' - } - - if (asset.attributes && asset.attributes.a_SIDC) { - res.sidc = asset.attributes.a_SIDC as string - } else { - const perceivedPlatformType = perception && perception.typeId && platformTypes.find((pType: PlatformTypeData) => pType.uniqid === perception.typeId) - if (perceivedPlatformType && perceivedPlatformType.sidc) { - res.sidc = perceivedPlatformType.sidc - } else if (platformType && platformType.sidc) { - res.sidc = platformType.sidc - } - } - - itemRows.push(res) - } - } - } else { - const visibleToThisForce = !!(assetForce.visibleTo && assetForce.visibleTo.includes(playerForce.uniqid)) - const myForce = assetForce.uniqid === playerForce.uniqid - const umpireInOwnFor = (isUmpire && !opFor) - const modernAttrDict = platformType ? getModernAttributes(asset, attributeTypes, attributesToSkip) : {} - const health = asset.health === 0 ? 0 : (asset.health || 100) - const c4 = asset.attributes ? asset.attributes.a_C4_Status : 'Unk' - const tg = asset.attributes ? asset.attributes.a_TaskGroup as string : '' - if (umpireInOwnFor || myForce || visibleToThisForce) { - const res: AssetRow = { - id: asset.uniqid, - icon: iconFor(asset.platformTypeId) + ',' + assetForce.color + ',' + asset.name + ',' + health, - force: assetForce.name, - name: asset.name, - platformType: asset.platformTypeId || '', - subType: subType, - owner: asset.owner ? asset.owner : '', - position: asset.location && latLng(asset.location[0], asset.location[1]), - tableData: { checked: selectedAssets.includes(asset.uniqid) }, - health: health, - c4: '' + c4, - domain: domain, - attributes: modernAttrDict, - taskGroup: tg - } - - // check if we have an SIDC for this asset - if (asset.attributes && asset.attributes.a_SIDC) { - res.sidc = asset.attributes.a_SIDC as string - } else { - if (platformType && platformType.sidc) { - res.sidc = platformType.sidc - } - } - - // if we're handling the child of an asset, we need to specify the parent - if (parentId) { - res.parentId = parentId - } - itemRows.push(res) - } - } - - // also sort out the comprising entries - if (asset.comprising) { - asset.comprising.forEach((asset2: Asset) => { - itemRows.push(...collateItem(opFor, asset2, playerForce, assetForce, forceColors, platformIcons, selectedAssets, platformTypes, attributeTypes, gameTime, asset.uniqid)) - }) - } - return itemRows -} diff --git a/client/src/Components/pf-planning/planning-assets/helpers/custom-filter-row.tsx b/client/src/Components/pf-planning/planning-assets/helpers/custom-filter-row.tsx deleted file mode 100644 index bcfa145399..0000000000 --- a/client/src/Components/pf-planning/planning-assets/helpers/custom-filter-row.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Column, MTableFilterRow } from '@material-table/core' -import { SUPPORT_PANEL_LAYOUT } from 'src/config' -import { cloneDeep } from 'lodash' -import React, { useEffect, useMemo, useState } from 'react' -import { FilterObject, getFilterApplied } from '../../support-panel/helpers/caching-utils' - -type CustomFilterRowProps = { - columns: Column[] - onFilterChanged: (columnId: number, value: string[]) => void - cacheKey: string - onSupportPanelLayoutChange: (key: string, value: string) => void - getSupportPanelState: () => void -} - -const CustomFilterRow: React.FC = (props): React.ReactElement => { - const [localProps, setLocalProps] = useState(props) - - const panelState = useMemo(() => props.getSupportPanelState(), []) - - useEffect(() => { - const filters: FilterObject = getFilterApplied(panelState) - if (filters[props.cacheKey]) { - filters[props.cacheKey].forEach(f => { - props.columns.some(col => { - if ((col as any).tableData.id === f.id && f.filterValue.length) { - props.onFilterChanged(f.id, f.filterValue) - return true - } - return false - }) - }) - } - }, []) - - const onFilterChanged = (columnId: number, filter: string[]) => { - const filterApplied = props.columns.map(col => { - if ((col as any).tableData.id === columnId) { - return ({ id: (col as any).tableData.id, filterValue: filter }) - } - return ({ id: (col as any).tableData.id, filterValue: (col as any).tableData.filterValue || [] }) - }) - const filters: FilterObject = getFilterApplied(panelState) - if (props.onSupportPanelLayoutChange) { - filters[props.cacheKey] = filterApplied - props.onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.FILTER_APPLIED, JSON.stringify(filters)) - } - props.onFilterChanged(columnId, filter) - setTimeout(() => { - setLocalProps(cloneDeep(props)) - }, 500) - } - - return -} - -export default CustomFilterRow diff --git a/client/src/Components/pf-planning/planning-assets/index.non-spec.tsx b/client/src/Components/pf-planning/planning-assets/index.non-spec.tsx deleted file mode 100644 index 56f1b8e17e..0000000000 --- a/client/src/Components/pf-planning/planning-assets/index.non-spec.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* global it expect */ -import { forceColors, platformIcons } from 'src/Helpers' -import { P9BMock } from 'src/mocks' -import { noop } from 'lodash' -import React from 'react' -import renderer from 'react-test-renderer' -import { PlanningAssets } from './index' - -const forces = P9BMock.data.forces.forces -const blueForce = forces[1] - -const forceCols = forceColors(forces) -const platformStyles = (P9BMock.data.platformTypes && platformIcons(P9BMock.data.platformTypes.platformTypes)) || [] -const platformTypes = P9BMock.data.platformTypes ? P9BMock.data.platformTypes.platformTypes : [] -const attributeTypes = P9BMock.data.attributeTypes ? P9BMock.data.attributeTypes.attributes : [] - -jest.mock('leaflet', () => { - const leaflet = jest.requireActual('leaflet') - return { - ...leaflet, - Symbol: { - ...leaflet.Symbol, - arrowHead: jest.fn() - } - } -}) - -jest.mock('react-leaflet-v4', () => ({ - useMap: (): jest.Mock => jest.fn() -})) - -jest.mock('react-leaflet-geoman-v2', () => ({ - GeomanControls: (): React.ReactElement => <> -})) - -describe('Planning Assets component: ', () => { - it('renders component correctly', () => { - const tree = renderer - .create() - .toJSON() - expect(tree).toMatchSnapshot() - }) -}) diff --git a/client/src/Components/pf-planning/planning-assets/index.stories.tsx b/client/src/Components/pf-planning/planning-assets/index.stories.tsx deleted file mode 100644 index d26b5ff304..0000000000 --- a/client/src/Components/pf-planning/planning-assets/index.stories.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import React from 'react' - -import { ChannelPlanning, ForceData } from 'src/custom-types' -import { deepCopy, forceColors, platformIcons } from 'src/Helpers' -import { P9BMock } from 'src/mocks' -import { noop } from 'lodash' -import { generateTestData2 } from '../planning-channel/helpers/gen-test-mapping-data' -import { getOppAssets, getOwnAssets } from './helpers/collate-assets' -import PlanningAssets from './index' -import docs from './README.md' -import MessageListPropTypes from './types/props' -import moment from 'moment' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -const game = P9BMock.data -const gameDate = game.overview.gameDate -const gameTime = moment(gameDate).valueOf() -const forces = game.forces.forces - -const forceIds = forces.map((force: ForceData): string => force.uniqid) - -const platformTypes = game.platformTypes ? game.platformTypes.platformTypes : [] -const attributeTypes = P9BMock.data.attributeTypes ? P9BMock.data.attributeTypes.attributes : [] - -const channels = game.channels.channels -const planningChannelTmp = channels.find((channel) => channel.channelType === 'ChannelPlanning') as ChannelPlanning -const planningChannel = deepCopy(planningChannelTmp) as ChannelPlanning - -export default { - title: 'local/organisms/PlanningAssets', - component: PlanningAssets, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - playerForce: { - name: 'Player force', - defaultValue: forceIds[1], - control: { - type: 'select', - options: forceIds - } - } - } -} - -const forceCols = forceColors(forces) -const platformStyles = (game.platformTypes && platformIcons(game.platformTypes.platformTypes)) || [] -const platIcons = platformIcons(platformTypes) - -const Template: Story = (args) => { - const { forces, playerForce, render, opFor, assets } = args - - let assetsToUse - let forcesToUse - if (assets.length) { - assetsToUse = assets - forcesToUse = forces - } else { - // put data generation into this `if` side to only generate it if necessary - const bulkData = generateTestData2(2000, planningChannel.constraints, forces, platformTypes, attributeTypes || []) - assetsToUse = getOwnAssets(bulkData, forceCols, platIcons, bulkData[1], platformTypes, attributeTypes, gameTime, []) - forcesToUse = bulkData - } - - return -} - -export const Default = Template.bind({}) -Default.args = { - forces: forces, - assets: getOwnAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []), - playerForce: forces[0], - render: noop, - opFor: false -} -export const OpFor = Template.bind({}) -OpFor.args = { - forces: forces, - assets: getOppAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []), - playerForce: forces[0], - render: noop, - opFor: true -} - -export const Bulk = Template.bind({}) -Bulk.args = { - forces: forces, - // supplying empty array is trigger to generate mock data - assets: [], - playerForce: forces[1], - render: noop, - opFor: false -} diff --git a/client/src/Components/pf-planning/planning-assets/index.tsx b/client/src/Components/pf-planning/planning-assets/index.tsx deleted file mode 100644 index 297194cfd7..0000000000 --- a/client/src/Components/pf-planning/planning-assets/index.tsx +++ /dev/null @@ -1,310 +0,0 @@ -import { faBan, faSearchMinus, faSearchPlus, faSkull } from '@fortawesome/free-solid-svg-icons' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import MaterialTable, { Action, Column, EditCellColumnDef, MTableBody, MTableBodyRow } from '@material-table/core' -import { SUPPORT_PANEL_LAYOUT } from 'src/config' -import cx from 'classnames' -import { isEqual, uniq } from 'lodash' -import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' -import { needToUpdate } from '../planning-messages-list/helpers/genData' -import { OrderRow } from '../planning-messages-list/types/props' -import { SupportPanelContext } from '../support-panel' -import { TAB_MY_FORCE, TAB_OPP_FOR } from '../support-panel/constants' -import { getFilterApplied, getIsFilterState } from '../support-panel/helpers/caching-utils' -import { materialIcons } from '../support-panel/helpers/material-icons' -import { getColumns } from './helpers/collate-assets' -import CustomFilterRow from './helpers/custom-filter-row' -import styles from './styles.module.scss' -import PropTypes, { AssetRow } from './types/props' - -export const PlanningAssets: React.FC = ({ - assets, forces, playerForce, opFor, platformStyles, - onSelectionChange, onVisibleRowsChange, onVisibleColumnsChange -}: PropTypes) => { - const [initialised, setInitialised] = useState(false) - const [rows, setRows] = useState([]) - const [columns, setColumns] = useState[]>([]) - - const [showColumnFilters, setFilter] = useState(true) - const [showDead, setShowDead] = useState(false) - const preventScroll = useRef(false) - const { selectedAssets, assetsCache, onSupportPanelLayoutChange, getSupportPanelState } = useContext(SupportPanelContext) - - const [visibleRows, setVisibleRows] = useState([]) - const [visibleRowsCache, setVisibleRowsCache] = useState([]) - - const [selectedAssetsInThisTable, setSelectedAssetsInThisTable] = useState(false) - const [toolbarActions, setToolbarActions] = useState[]>([]) - - const currentColumnsData = useRef[]>([]) - - // reference to table, we use it to clear the selection - const tableRef = useRef(null) - - const panelState = useMemo(() => getSupportPanelState(), []) - - useEffect(() => { - const key = opFor ? TAB_OPP_FOR : TAB_MY_FORCE - const isFilterState = getIsFilterState(panelState) - if (isFilterState[key] && isFilterState[key] !== showColumnFilters) { - setTimeout(() => { - setFilter(isFilterState[key]) - }) - } - }, []) - - useEffect(() => { - const res: Action[] = - [ - { - icon: () => , - iconProps: { color: 'action' }, - tooltip: 'Clear seleced assets', - isFreeAction: false, - disabled: !selectedAssetsInThisTable, - onClick: (): void => clearSelectedAssets() - }, - { - icon: () => , - iconProps: { color: 'action' }, - tooltip: 'Clear seleced assets', - isFreeAction: true, - disabled: false, - onClick: (): void => clearSelectedAssets() - }, - { - icon: () => , - iconProps: showDead ? { color: 'action' } : { color: 'disabled' }, - tooltip: !showDead ? 'Show dead assets' : 'Hide dead assets', - isFreeAction: true, - onClick: (): void => setShowDead(!showDead) - }, - { - icon: () => , - iconProps: showColumnFilters ? { color: 'action' } : { color: 'disabled' }, - tooltip: !showColumnFilters ? 'Show filter controls' : 'Hide filter controls', - isFreeAction: true, - onClick: (): void => { - setFilter(!showColumnFilters) - const key = opFor ? TAB_OPP_FOR : TAB_MY_FORCE - const isFilterState = getIsFilterState(panelState) - isFilterState[key] = !showColumnFilters - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.IS_FILTER, JSON.stringify(isFilterState)) - // reset filters applied when toggle off filter state - if (showColumnFilters) { - const filtersApplied = getFilterApplied(panelState) - delete filtersApplied[key] - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.FILTER_APPLIED, JSON.stringify(filtersApplied)) - } - } - } - ] - - setToolbarActions(res) - }, [showColumnFilters, showDead, selectedAssetsInThisTable, opFor]) - - useEffect(() => { - // we're getting too many visibleRows updates, plus - // the content of visible rows will change if - // set of ids - const visibleRowIds = visibleRows.map((item) => item.id) - if (!isEqual(visibleRowIds, visibleRowsCache)) { - console.log('update visible rows', visibleRowIds.length) - // fire the change - setVisibleRowsCache(visibleRowIds) - // fire the change - onVisibleRowsChange && onVisibleRowsChange(visibleRows) - - // also update the filters - // BIG PICTURE: for columns that have a filter, we will ensure it contains the full set of possible values for - // that column, so the user can expand the selection. But, if the column does not have a filter applied, - // then restrict it to current values in the dataset. - console.time('LLOG_UpdateAssetSearchFields') - const allColumns = getColumns(opFor, forces, playerForce.uniqid, platformStyles, assetsCache) - console.timeEnd('LLOG_UpdateAssetSearchFields') - // const cached = cachedColumns - // // see if any filters have been relaxed. If they have, we need to relax the filters in other columns - // const relaxedColumns = columns.filter((column) => { - // const currentColDef = column as EditCellColumnDef - // const currentFilter = currentColDef.tableData.filterValue - // const currentFiltersApplied = Array.isArray(currentFilter) ? (currentFilter as string[]).length : undefined - // const cachedColumn = cached.find((item) => item.field === column.field) - // if (cachedColumn) { - // const cachedColDef = cachedColumn as EditCellColumnDef - // const cachedFilter = cachedColDef.tableData.filterValue - // const cachedFiltersApplied = Array.isArray(cachedFilter) ? (cachedFilter as string[]).length : undefined - // console.log('column', column.field, currentFilter, currentFiltersApplied, cachedFiltersApplied) - // if (currentFiltersApplied !== undefined && cachedFiltersApplied !== undefined) { - // return cachedFiltersApplied > currentFiltersApplied - // } - // } - // return false - // }) - // const relaxedColumnIDs = relaxedColumns.map((item) => item.field) - // console.log('relaxed filters', relaxedColumnIDs) - - // log current table lookups and filters - // console.table(columns.map((column) => { - // const colDef = column as EditCellColumnDef - // return { - // id: column.field, - // lookup: column.lookup ? Object.keys(column.lookup as {}).length : 'n/a', - // filter: colDef.tableData.filterValue - // } - // })) - - columns.forEach((column) => { - const safeCol = allColumns.find((item) => item.field === column.field) - if (safeCol) { - // is filter applied? - const colDef = column as EditCellColumnDef - if (column.lookup) { - const filter = colDef.tableData.filterValue - const filterApplied = Array.isArray(filter) && (filter as string[]).length > 0 - // this is a lookup column, sort out the values - if (filterApplied) { - // leave it as - is - // // only relax it if it is not one of the ones that got relaxed - // if (!relaxedColumnIDs.includes(column.field)) { - // // ok, this column should have the full list, so it can be extended - // console.log('restoring', column.field, relaxedColumnIDs, safeCol.lookup) - // column.lookup = safeCol.lookup - // } - } else { - // ok, no filter is applied - const colId = colDef.field as string - // ok, filter this column according to current rows - const vals = visibleRows.map((row: AssetRow) => row[colId]) - if (vals.length) { - const uniqueVals = uniq(vals) - if (safeCol.lookup) { - const newDict = {} - Object.keys(safeCol.lookup).forEach((value) => { - if (safeCol.lookup) { - if (uniqueVals.includes(value)) { - newDict[value] = safeCol.lookup[value] - } - } - }) - // trim lookup - column.lookup = newDict - } - } - } - } - } - }) - setColumns(columns) - } - }, [visibleRows]) - - useEffect(() => { - const columns = getColumns(opFor, forces, playerForce.uniqid, platformStyles, assetsCache) - const needUpdate = needToUpdate(currentColumnsData.current, columns) - if (!columns.length || !showColumnFilters || needUpdate) { - const cachedColumns = panelState[SUPPORT_PANEL_LAYOUT.VISIBLE_COLUMNS] - if (cachedColumns) { - const parsedCols: { [x: string]: { field: string, hidden: string }[] } = JSON.parse(cachedColumns) - const key = opFor ? TAB_OPP_FOR : TAB_MY_FORCE; - (parsedCols[key] || []).map(mapCol => { - columns.some(col => { - if (col.field === mapCol.field) { - col.hidden = Boolean(mapCol.hidden) - return true - } - return false - }) - }) - } - currentColumnsData.current = columns - setColumns(columns) - } - }, [playerForce, forces, showColumnFilters]) - - useEffect(() => { - if (!showColumnFilters || !initialised) { - const assetsOfInterest = showDead ? assets : assets.filter((asset) => (asset.health && asset.health > 0) || (asset.health === undefined)) - setInitialised(false) - setRows(assetsOfInterest) - } - }, [assets, showColumnFilters, showDead, initialised]) - - useEffect(() => { - if (selectedAssets.length) { - // if it's not all assets, scroll to the last one - if (selectedAssets.length !== visibleRows.length) { - const lastSelectedAssetId = selectedAssets[selectedAssets.length - 1] - const elmRow = document.getElementById(lastSelectedAssetId) - if (elmRow && !preventScroll.current) { - const smoothScroll: ScrollIntoViewOptions = { block: 'start', behavior: 'smooth' } - elmRow.scrollIntoView(smoothScroll) - } - } - const assetsInSelection = assets.some((row) => selectedAssets.includes(row.id)) - // see if any of the selected assets in in this table - setSelectedAssetsInThisTable(assetsInSelection) - } else { - setSelectedAssetsInThisTable(false) - } - preventScroll.current = false - }, [selectedAssets, assets]) - - const onSelectionChangeLocal = (rows: AssetRow[]) => { - preventScroll.current = !!rows.length - onSelectionChange && onSelectionChange(rows) - } - - const clearSelectedAssets = (): void => { - // clear the table selection - this will also fire the - // selection handler in the parent - if (tableRef.current) { - const table = tableRef.current as any - table.onAllSelected(false) - } - } - - const TableData = useMemo(() => { - return { - if (props.columns.length) { - setTimeout(() => { - setVisibleRows(props.data) - onVisibleColumnsChange && onVisibleColumnsChange(props.columns) - }) - } - return () - }, - Row: props => , - FilterRow: props => - }} - /> - }, [rows, showColumnFilters, columns, toolbarActions]) - - return TableData -} - -export default PlanningAssets diff --git a/client/src/Components/pf-planning/planning-assets/short-index.stories-inc.tsx b/client/src/Components/pf-planning/planning-assets/short-index.stories-inc.tsx deleted file mode 100644 index 2692b4506b..0000000000 --- a/client/src/Components/pf-planning/planning-assets/short-index.stories-inc.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import React from 'react' - -import { ChannelPlanning, ForceData } from 'src/custom-types' -import { deepCopy, forceColors, platformIcons } from 'src/Helpers' -import { P9BShort } from 'src/mocks' -import { noop } from 'lodash' -// import { generateTestData2 } from '../../mapping/helpers/gen-test-mapping-data' -import { generateTestData2 } from '../planning-channel/helpers/gen-test-mapping-data' -import { getOppAssets, getOwnAssets } from './helpers/collate-assets' -import PlanningAssets from './index' -import docs from './README.md' -import MessageListPropTypes, { AssetRow } from './types/props' -import moment from 'moment' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -const game = P9BShort.data -const gameDate = game.overview.gameDate -const gameTime = moment(gameDate).valueOf() -const forces = game.forces.forces - -const forceIds = forces.map((force: ForceData): string => force.uniqid) - -const platformTypes = game.platformTypes ? game.platformTypes.platformTypes : [] -const attributeTypes = P9BShort.data.attributeTypes ? P9BShort.data.attributeTypes.attributes : [] - -const channels = game.channels.channels -const planningChannelTmp = channels.find((channel) => channel.channelType === 'ChannelPlanning') as ChannelPlanning -const planningChannel = deepCopy(planningChannelTmp) as ChannelPlanning - -export default { - title: 'local/organisms/PlanningAssetsShort', - component: PlanningAssets, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - playerForce: { - name: 'Player force', - defaultValue: forceIds[1], - control: { - type: 'select', - options: forceIds - } - } - } -} - -const forceCols = forceColors(forces) -const platformStyles = (game.platformTypes && platformIcons(game.platformTypes.platformTypes)) || [] -const platIcons = platformIcons(platformTypes) - -const onVisibleRowsChange = (rows: AssetRow[]) => { - console.log('Story - vis rows updated', rows.length) -} - -const Template: Story = (args) => { - const { forces, playerForce, render, opFor, assets } = args - - let assetsToUse - let forcesToUse - if (assets.length) { - assetsToUse = assets - forcesToUse = forces - } else { - // put data generation into this `if` side to only generate it if necessary - const bulkData = generateTestData2(2000, planningChannel.constraints, forces, platformTypes, attributeTypes || []) - assetsToUse = getOwnAssets(bulkData, forceCols, platIcons, bulkData[1], platformTypes, attributeTypes, gameTime, []) - forcesToUse = bulkData - } - - return -} - -export const Default = Template.bind({}) -Default.args = { - forces: forces, - assets: getOwnAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []), - playerForce: forces[0], - render: noop, - opFor: false -} -export const OpFor = Template.bind({}) -OpFor.args = { - forces: forces, - assets: getOppAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []), - playerForce: forces[0], - render: noop, - opFor: true -} diff --git a/client/src/Components/pf-planning/planning-assets/styles.module.scss b/client/src/Components/pf-planning/planning-assets/styles.module.scss deleted file mode 100644 index 9dcae923cb..0000000000 --- a/client/src/Components/pf-planning/planning-assets/styles.module.scss +++ /dev/null @@ -1,10 +0,0 @@ -@import "../../../themes/dependencies/variables"; - -.cell-icon { - width: 35px; - height: 35px; -} - -.selected { - color: rgb(37, 37, 37); -} diff --git a/client/src/Components/pf-planning/planning-assets/styles.module.scss.d.ts b/client/src/Components/pf-planning/planning-assets/styles.module.scss.d.ts deleted file mode 100644 index ed6af277f3..0000000000 --- a/client/src/Components/pf-planning/planning-assets/styles.module.scss.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'cell-icon': string; - 'selected': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/pf-planning/planning-assets/types/props.d.ts b/client/src/Components/pf-planning/planning-assets/types/props.d.ts deleted file mode 100644 index 5fa42fead7..0000000000 --- a/client/src/Components/pf-planning/planning-assets/types/props.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { AttributeTypes, ForceData, PlatformTypeData } from 'src/custom-types' -import { ForceStyle, PlatformStyle } from 'src/Helpers' -import { Column } from '@material-table/core' -import { LatLng } from 'leaflet' - -export type AssetRow = { - id: string - icon: string - /* the milSymbol for this asset type */ - sidc?: string - name: string - platformType: string - subType: string - parentId?: string - force?: string - owner?: string - position?: LatLng - /* note - the tableData object is - injected by material-table */ - tableData?: { checked: boolean } - health?: number - c4: string - attributes: Record - domain: string - taskGroup: string -} - -export default interface PropTypes { - /** data for this game */ - forces: ForceData[] - /** the force to display */ - playerForce: ForceData - /** now sure what this one is for */ - render: (assets: string[][]) => void - /** whether to show player perspective of other forces */ - opFor: boolean - /** list of force color codes */ - forceColors: ForceStyle[] - /** list of platforms & styles */ - platformStyles: PlatformStyle[] - /** selection rows callback */ - onSelectionChange?: (rows: AssetRow[]) => void - /** visible rows change callback */ - onVisibleRowsChange?: (row: AssetRow[]) => void - onVisibleColumnsChange?: (columns: Column[]) => void - /** - * set of assets visible to me - */ - assets: AssetRow[] - /** platform type definitions */ - platformTypes: PlatformTypeData[] - /** generic attribute types */ - attributeTypes: AttributeTypes -} diff --git a/client/src/Components/pf-planning/planning-channel/README.md b/client/src/Components/pf-planning/planning-channel/README.md deleted file mode 100644 index b052f1c1b4..0000000000 --- a/client/src/Components/pf-planning/planning-channel/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Planning Channel documentation - -This is an example readme file for the 'Planning Channel' component. - -## UI Example - - - -## Code example - - - -## Props - - - -## Usage - -### ES6 Import - -```js -import PlanningChannel from "./planning-channel"; -``` - -### CommonJS - -```js -const PlanningChannel = require("./planning-channel"); -``` diff --git a/client/src/Components/pf-planning/planning-channel/helpers/AreaPlotter.tsx b/client/src/Components/pf-planning/planning-channel/helpers/AreaPlotter.tsx deleted file mode 100644 index ddd1bd3976..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/AreaPlotter.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { AreaCategory } from 'src/custom-types' -import { Position } from 'geojson' -import { divIcon, latLng, LatLng, PathOptions, polygon } from 'leaflet' -import React from 'react' -import { LayerGroup, Marker, Polygon } from 'react-leaflet-v4' -import styles from '../styles.module.scss' - -export interface AreaPlotterProps { - areas: AreaCategory[] -} - -export const AreaPlotter: React.FC = ({ areas }) => { - const positionsFor = (coords: Position[]): LatLng[] => { - return coords.map((pt: number[]) => latLng(pt[1], pt[0])) - } - - const centreFor = (coords: Position[]): LatLng => { - const lCoords = coords.map((pt: number[]) => latLng(pt[1], pt[0])) - return polygon(lCoords).getBounds().getCenter() - } - - const polygonNameIcon = (name: string) => { - return divIcon({ iconSize: [60, 20], html: `
${name}
`, className: styles['area-name'] }) - } - - const polyStyle: PathOptions = { - color: '#333', - opacity: 0.7 - } - - return <> - { - areas.length > 0 && - - {areas.map((category, index1) => - category.areas.map((area, index2) => - - - - )) - } - - } - - -} - -export default AreaPlotter diff --git a/client/src/Components/pf-planning/planning-channel/helpers/CustomTranslation.ts b/client/src/Components/pf-planning/planning-channel/helpers/CustomTranslation.ts deleted file mode 100644 index 4620cf8380..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/CustomTranslation.ts +++ /dev/null @@ -1,71 +0,0 @@ -export type CustomTranslationType = { - tooltips: { - placeMarker: string - firstVertex: string - continueLine: string - finishLine: string - finishPoly: string - finishRect: string - startCircle: string - finishCircle: string - placeCircleMarker: string - placeText: string - } - actions: { - finish: string - cancel: string - removeLastVertex: string - } - buttonTitles: { - drawMarkerButton: string - drawPolyButton: string - drawLineButton: string - drawCircleButton: string - drawRectButton: string - editButton: string - dragButton: string - cutButton: string - deleteButton: string - drawCircleMarkerButton: string - snappingButton: string - pinningButton: string - rotateButton: string - drawTextButton: string - } -} - -export const CustomTranslation: CustomTranslationType = { - tooltips: { - placeMarker: 'Click to place marker a', - firstVertex: 'Click to place first vertex b', - continueLine: 'Click to continue drawing c', - finishLine: 'Click any existing marker to finish d', - finishPoly: 'Click first marker to finish e', - finishRect: 'Click to finish f', - startCircle: 'Click to place circle center g', - finishCircle: 'Click to finish circle h', - placeCircleMarker: 'Click to place circle marker i', - placeText: 'Click to place text j' - }, - actions: { - finish: 'Finish', - cancel: 'Cancel', - removeLastVertex: 'Remove Last Vertex' - }, - buttonTitles: { - drawMarkerButton: 'Draw Marker', - drawPolyButton: 'Draw Polygons', - drawLineButton: 'Draw Polyline', - drawCircleButton: 'Draw Circle', - drawRectButton: 'Draw Rectangle', - editButton: 'Edit Layers', - dragButton: 'Drag Layers', - cutButton: 'Cut Layers', - deleteButton: 'Remove Layers', - drawCircleMarkerButton: 'Draw Circle Marker', - snappingButton: 'Snap dragged marker to other layers and vertices', - pinningButton: 'Pin shared vertices together', - rotateButton: 'Rotate Layers', - drawTextButton: 'Draw Text' - } -} diff --git a/client/src/Components/pf-planning/planning-channel/helpers/OrderDrawing.tsx b/client/src/Components/pf-planning/planning-channel/helpers/OrderDrawing.tsx deleted file mode 100644 index c1715a1f96..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/OrderDrawing.tsx +++ /dev/null @@ -1,349 +0,0 @@ -import { faPlaneSlash } from '@fortawesome/free-solid-svg-icons' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { GeometryType } from 'src/config' -import { Area, AreaCategory, PlannedActivityGeometry, PlanningActivity, PlanningActivityGeometry } from 'src/custom-types' -import { deepCopy } from 'src/Helpers' -import { Geometry, Position } from 'geojson' -import L, { LatLng, Layer, PM } from 'leaflet' -import 'leaflet-notifications' -import _ from 'lodash' -import React, { useEffect, useRef, useState } from 'react' -import * as ReactDOMServer from 'react-dom/server' -import { GeomanControls } from 'react-leaflet-geoman-v2' -import { useMap } from 'react-leaflet-v4' -import AssetIcon from '../../../local/asset-icon' -import Item from '../../../local/map-control/helpers/item' -import styles from '../styles.module.scss' -import { Select } from '../typings' -import { CustomTranslation } from './CustomTranslation' -import StandardAreaMenu from './StandardAreaMenu' - -interface OrderDrawingProps { - activity: PlanningActivity | undefined - cancelled: { (): void } - planned: { (geometries: PlannedActivityGeometry[]): void } - // set of standard areas - areas?: AreaCategory[] -} - -interface PendingItem { - shape: PM.SUPPORTED_SHAPES - layer: Layer -} - -/* Render component */ -export const OrderDrawing: React.FC = ({ activity, planned, cancelled, areas }) => { - const [plannedGeometries, setPlannedGeometries] = useState([]) - const [geoLayers, setGeoLayers] = useState([]) - const [currentGeometry, setCurrentGeometry] = useState(-1) - const [planningGeometries, setPlanningGeometries] = useState([]) - const [pendingGeometry, setPendingGeometry] = useState(undefined) - const [drawOptions, setDrawOptions] = useState({}) - const [globalOptions, setGlobalOptions] = useState({}) - - const [standardPolygons, setStandardPolygons] = useState(undefined) - - const [workingLayer, setWorkingLayer] = useState() - const selectedPolygonLayer = useRef() - - // this next state is a workaround, to prevent GeoMan calling - // onCreate multiple times - const [lastPendingGeometry, setLastPendingGeometry] = useState(undefined) - - const standardAreaBtn = useRef(undefined) - - const separator = '////' - - const handleClick = (value: string): void => { - const parts = value.split(separator) - const group = parts[0] - const activity = parts[1] - handler && handler(group, activity) - } - - /** generate the tree of activities */ - const getItems = (activities: PerForcePlanningActivitySet): SelectItem[] => { - return activities.groupedActivities.map((group: GroupedActivitySet) => { - const realItems = group.activities.filter((act: string | PlanningActivity) => typeof act !== 'string') - return { - label: group.category, - value: group.category, - items: realItems.map((item: string | PlanningActivity) => { - const theAct = item as PlanningActivity - return { - label: theAct.name, - value: group.category + separator + theAct.uniqid - } - }) - } - }) - } - - useEffect(() => { - if (planningActivities) { - if (!controlButton) { - const items = getItems(planningActivities) - const selectControl = L.control.select({ - position: 'topleft', - iconMain: '📝', - iconGroupChecked: '⊳', - iconGroupUnchecked: '⊳', - items: items, - onSelect: (item: any) => { - handleClick(item) - } - }) - setControlButton(selectControl) - } - if (controlButton) { - if (showControl) { - controlButton.addTo(map) - } else { - controlButton.remove() - } - } - } - }, [planningActivities, showControl, controlButton]) - - return <> -} - -export default PlanningActitivityMenu diff --git a/client/src/Components/pf-planning/planning-channel/helpers/RangeRingPlotter.tsx b/client/src/Components/pf-planning/planning-channel/helpers/RangeRingPlotter.tsx deleted file mode 100644 index d7c41c189a..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/RangeRingPlotter.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { ForceStyle } from 'src/Helpers' -import { latLng } from 'leaflet' -import React, { useEffect, useState } from 'react' -import { Circle, LayerGroup } from 'react-leaflet-v4' -import { AssetRow } from '../../planning-assets/types/props' - -export interface OrderPlotterProps { - /** key to use for layer group */ - title: string - /** list of assets to plot */ - assets: AssetRow[] - /** per force colors */ - forceCols: Array -} - -export const RangeRingPlotter: React.FC = ({ title, assets, forceCols }) => { - const [rangeRings, setRangeRings] = useState([]) - useEffect(() => { - const rings: React.ReactElement[] = [] - assets.forEach((asset: AssetRow) => { - const attrs = asset.attributes - // try for the two range attributes - const range: string = attrs['MEZ Range'] // just use mez range || attrs.Range - // only plot range rings for SAM sites - const isSAM = asset.platformType.indexOf('sam') >= 0 - if (range && isSAM) { - const index = range.indexOf(' km') - const rangeKm = index > 0 ? parseFloat(range.substring(0, index)) : parseFloat(range) - const forceCol = forceCols.find((style: ForceStyle) => style.force === asset.force) - const centre = asset.position ? asset.position : latLng([0, 0]) - const rad = rangeKm * 1000 - if (rad > 0) { - rings.push() - } - } - }) - setRangeRings(rings) - }, [assets]) - - return - {rangeRings} - -} - -export default RangeRingPlotter diff --git a/client/src/Components/pf-planning/planning-channel/helpers/Ruler.tsx b/client/src/Components/pf-planning/planning-channel/helpers/Ruler.tsx deleted file mode 100644 index 38934e99ff..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/Ruler.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import * as L from 'leaflet' -import React, { useEffect, useState } from 'react' -import { useMap } from 'react-leaflet-v4' -import { Ruler as RulerType, RulerOption } from '../typings' -import 'leaflet-ruler' - -type RulerProps = { - showControl: boolean -} - -const Ruler: React.FC = ({ showControl }) => { - const map = useMap() - - const [rulerControl, setRulerControl] = useState() - - useEffect(() => { - if (!rulerControl) { - const options: RulerOption = { - position: 'bottomright' - } - const rulerControl = L.control.ruler(options) - setRulerControl(rulerControl) - } - }, []) - - useEffect(() => { - if (rulerControl) { - if (showControl) { - rulerControl.addTo(map) - } else { - rulerControl.remove() - } - } - }, [showControl, rulerControl]) - - return <> -} - -export default Ruler diff --git a/client/src/Components/pf-planning/planning-channel/helpers/SharedOrderRenderer.tsx b/client/src/Components/pf-planning/planning-channel/helpers/SharedOrderRenderer.tsx deleted file mode 100644 index 42ea9ac7c9..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/SharedOrderRenderer.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { PerForcePlanningActivitySet } from 'src/custom-types' -import { ForceStyle } from 'src/Helpers' -import { Position } from '@turf/turf' -import { Feature, LineString, Point, Polygon } from 'geojson' -import L, { latLng, LatLng, Layer } from 'leaflet' -import React from 'react' -import { CircleMarker, Marker, Polygon as RPolygon, Tooltip } from 'react-leaflet-v4' -import PolylineDecorator from '../../support-mapping/helper/PolylineDecorator' -import { findPlanningGeometry, GeomWithOrders } from '../../support-panel/helpers/gen-order-data' -import styles from '../styles.module.scss' - -/** produce a shape for this feature */ -export const shapeFor = (feature: Feature, color: string, label: string, storeRef: { (polyline: Layer): void }, index: number): React.ReactElement => { - let res: React.ReactElement | undefined - switch (feature.geometry.type) { - case 'LineString': { - const ls = feature.geometry as LineString - const coords: LatLng[] = ls.coordinates.map((pos: Position) => latLng(pos[1], pos[0])) - res = - break - } - case 'Polygon': { - const poly = feature.geometry as Polygon - const coords: LatLng[] = poly.coordinates[0].map((pos: Position) => latLng(pos[1], pos[0])) - const center = L.polygon(coords).getBounds().getCenter() - const polygonNameIcon = L.divIcon({ html: `
${label}
`, className: styles['polygon-name'] }) - - res = - <> - {label && {label}} - - - - break - } - case 'Point': { - const poly = feature.geometry as Point - const centre: LatLng = latLng(poly.coordinates[1], poly.coordinates[0]) - res = - {label && - {label} - } - - break - } - } - return res || <> -} - -export const shapeForGeomWithOrders = (geom: GeomWithOrders, forceCols: ForceStyle[], - activities: PerForcePlanningActivitySet[], storeRef: { (polyline: Layer): void }, index: number): React.ReactElement => { - const geometry = geom.geometry - const force = geom.plan.details.from.forceId - const activity = findPlanningGeometry(geom.uniqid, force || '', activities) - const color = forceCols.find((value: ForceStyle) => value.forceId === force) - console.log('force', force, color) - return shapeFor(geometry, (color && color.color) || '', activity, storeRef, index) -} diff --git a/client/src/Components/pf-planning/planning-channel/helpers/StandardAreaMenu.tsx b/client/src/Components/pf-planning/planning-channel/helpers/StandardAreaMenu.tsx deleted file mode 100644 index 4f2a4b38ed..0000000000 --- a/client/src/Components/pf-planning/planning-channel/helpers/StandardAreaMenu.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { Area, AreaCategory } from 'src/custom-types' -import L from 'leaflet' -import React, { useEffect, useState } from 'react' -import { useMap } from 'react-leaflet-v4' -import { Select, SelectItem } from '../typings' - -type StandardAreaMenuProps = { - /** - * the set of standard areas - */ - areas?: AreaCategory[] - /** - * handler for new orders being selected - */ - handler: { (area: Area): void } - /** - * flag for whether to show select menu. - * Note: because we add the control to the map ourself, we we're adding ourselves each time this control - * Note: was included/remove from the map. To prevent repeatedly being added, we have `showControl` prop. - * Note: which means the component only gets generated once, and we add/remove a single instance of the - * Note: control from the map - * */ - showControl: boolean - - onMount: (control: Select) => void - - additionalClass?: string -} - -const StandardAreaMenu: React.FC = ({ areas, handler, showControl, onMount, additionalClass }) => { - const map = useMap() - - const [controlButton, setControlButton] = useState - All turns - {labelledTurns.map(turn => {turn.label})} - -
- } else { - return - } -} - -export default TurnFilter diff --git a/client/src/Components/pf-planning/support-panel/helpers/caching-utils.ts b/client/src/Components/pf-planning/support-panel/helpers/caching-utils.ts deleted file mode 100644 index 93c9cd7264..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/caching-utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { SUPPORT_PANEL_LAYOUT } from 'src/config' - -export type FilterStateByKey = { [x: string]: boolean } -export type FilterObject = { [x: string]: { id: number, filterValue: string[] }[] } - -export const getIsFilterState = (panelState: any): FilterStateByKey => { - const showFilterFromCache = panelState[SUPPORT_PANEL_LAYOUT.IS_FILTER] - if (showFilterFromCache) { - return JSON.parse(showFilterFromCache) - } - return {} -} - -export const getFilterApplied = (panelState: any): { [x: string]: { id: number, filterValue: string[] }[] } => { - const filterFromCache = panelState[SUPPORT_PANEL_LAYOUT.FILTER_APPLIED] - if (filterFromCache) { - return JSON.parse(filterFromCache) - } - return {} -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-activities.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-activities.ts deleted file mode 100644 index f3eb5e4e77..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-activities.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ForceData, GroupedActivitySet, MessageStructure, PerForcePlanningActivitySet, PlanningActivity } from 'src/custom-types' - -export const customiseActivities = (_document: MessageStructure | undefined, schema: Record, - activities: PerForcePlanningActivitySet[], force?: ForceData): Record => { - const res = { ...schema } - if (schema) { - const oldActivity = res.properties?.activity - if (oldActivity && activities.length) { - let myActivities: PerForcePlanningActivitySet - if (force && force.umpire) { - // need full list - myActivities = { force: force.uniqid, groupedActivities: [] } - activities.forEach((force) => { - force.groupedActivities.forEach((group) => { - myActivities.groupedActivities.push(group) - }) - }) - } else { - // activities for just this force - const forceActivities = force && activities.find((act) => act.force === force.uniqid) - const isBlue = _document && _document.Reference && _document.Reference.includes('Blue') - myActivities = forceActivities || (isBlue ? activities[0] : activities[1]) - } - - const acts: Array<{id: string, name: string}> = [] - myActivities.groupedActivities.map((val: GroupedActivitySet) => { - val.activities.forEach((val2: string | PlanningActivity) => { - if (typeof (val) === 'string') { - throw Error('Should not have string in planning activities') - } - const plan = val2 as PlanningActivity - acts.push({ id: plan.uniqid, name: val.category + '-' + plan.name }) - }) - }) - oldActivity.enum = acts.map((val) => val.id) - oldActivity.options.enum_titles = acts.map((val) => val.name) - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-assets.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-assets.ts deleted file mode 100644 index 5bb9c3fb0d..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-assets.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { MessageStructure } from 'src/custom-types' -import { AssetRow } from '../../planning-assets/types/props' - -export const customiseAssets = (_document: MessageStructure | undefined, schema: Record, - ownAssets: AssetRow[], otherAssets: AssetRow[]): Record => { - const res = { ...schema } - const oldOwnAssets = res.properties?.ownAssets?.items?.properties?.asset - if (schema && oldOwnAssets) { - const isAlive = (asset: AssetRow) => { return (asset.health === undefined) || asset.health > 0 } - const liveOwnAssets = ownAssets.filter(isAlive) - oldOwnAssets.enum = liveOwnAssets.map((asset: AssetRow) => asset.id) - oldOwnAssets.options.enum_titles = liveOwnAssets.map((asset: AssetRow) => asset.name) - const oldTargets = res.properties?.otherAssets?.items?.properties?.asset - if (oldTargets) { - // note. if this is an umpire, there aren't any other assets - const liveOtherAssets = otherAssets.filter(isAlive) - const assetList = liveOtherAssets.length > 0 ? liveOtherAssets : liveOwnAssets - oldTargets.enum = assetList.map((asset: AssetRow) => asset.id) - oldTargets.options.enum_titles = assetList.map((asset: AssetRow) => asset.name) - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-cards.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-cards.ts deleted file mode 100644 index a1a8a9cf93..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-cards.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ForceData, ForceTemplateData, MessageStructure } from 'src/custom-types' -import _ from 'lodash' - -const umpireCards = (forceTemplateData: ForceTemplateData[]): ForceTemplateData => { - const cards: string[] = [] - forceTemplateData.forEach((item) => { - if (item.cards) { - cards.push(...item.cards) - } - }) - const uniqCards = _.uniq(cards) - return { - force: 'any', - cards: uniqCards - } -} - -export const customiseCyberCards = (_document: MessageStructure | undefined, schema: Record, - forceId: ForceData['uniqid'], isUmpire: boolean, forceTemplateData?: ForceTemplateData[]): Record => { - const res = { ...schema } - if (schema) { - if (forceId && forceTemplateData && forceTemplateData.length) { - const cards = res.properties?.activityCard - if (cards) { - const myData = isUmpire ? umpireCards(forceTemplateData) : forceTemplateData.find((data) => data.force === forceId) - if (myData && myData.cards) { - const withNone = ['None'] - const withCards = withNone.concat(myData.cards) - cards.enum = withCards - } - } - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-date.spec.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-date.spec.ts deleted file mode 100644 index b1ad497f1d..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-date.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { MilliTurns, MonthTurns } from 'src/custom-types' -import moment from 'moment' -import { customiseDate, getDateSlots } from './customise-date' - -const startTime = '2022-11-12T00:00:00.000Z' - -it('creates two-hour slots for 8 hour period', () => { - const eightHours: MilliTurns = { unit: 'millis', millis: 28800000 } - const start = moment(startTime) - const slots = getDateSlots(start.valueOf(), eightHours) - expect(slots).toBeTruthy() - expect(slots.length).toEqual(4) - expect(slots[0].label).toEqual('120000Z') - expect(slots[0].value).toEqual(startTime) -}) - -it('creates two-hour slots for 3 days period', () => { - const tmp = moment(startTime) - const end = moment(startTime).add(3, 'days').valueOf() - const timeDiff = end - tmp.valueOf() - const threeDays: MilliTurns = { unit: 'millis', millis: timeDiff } - const start = moment(startTime) - const slots = getDateSlots(start.valueOf(), threeDays) - expect(slots).toBeTruthy() - expect(slots.length).toEqual(36) - expect(slots[0].label).toEqual('120000Z') - expect(slots[0].value).toEqual(startTime) -}) - -it('creates one day slots', () => { - const tmp = moment(startTime) - const end = moment(startTime).add(8, 'days').valueOf() - const timeDiff = end - tmp.valueOf() - - const eightDays: MilliTurns = { unit: 'millis', millis: timeDiff } - const start = moment(startTime) - const slots = getDateSlots(start.valueOf(), eightDays) - expect(slots).toBeTruthy() - expect(slots.length).toEqual(8) - expect(slots[0].label).toEqual('Nov 12') - expect(slots[0].value).toEqual(startTime) -}) - -it('creates slots for months', () => { - const eightDays: MonthTurns = { unit: 'months', months: 3 } - const start = moment(startTime) - const slots = getDateSlots(start.valueOf(), eightDays) - expect(slots).toBeTruthy() - expect(slots.length).toEqual(92) - expect(slots[0].label).toEqual('Nov 12') - expect(slots[0].value).toEqual(startTime) -}) - -it('returns cloned copy', () => { - const eightDays: MonthTurns = { unit: 'months', months: 3 } - const start = moment(startTime) - const schema = { properties: { obj: { val2: 3, val3: 43 } } } - const res = customiseDate(undefined, schema, start.valueOf(), eightDays) - // check the contents aren't modified - expect(res).toEqual(schema) - // check it's a different object - expect(res).not.toBe(schema) -}) - -it('gets modified', () => { - const eightDays: MonthTurns = { unit: 'months', months: 3 } - const start = moment(startTime) - const schema = { properties: { dumbDate: { options: {} }, obj: { val2: 3, val3: 43 } } } - const res = customiseDate(undefined, schema, start.valueOf(), eightDays) - expect(res).not.toBe(schema) -}) diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-date.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-date.ts deleted file mode 100644 index b4069f760e..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-date.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { MessageStructure, MilliTurns, MonthTurns, TurnLengthType } from 'src/custom-types' -import moment from 'moment' - -export type TimeSlot = { - value: string - label: string -} - -const twoHours = 7200000 -const oneDay = 86400000 -const shortFormat = 'DDHHmm[Z]' -const longFormat = 'MMM DD' - -const getFinishTime = (gameTime: number, gameTurnTime: TurnLengthType): number => { - const time = moment(gameTime) - const isMillis = gameTurnTime.unit === 'millis' - if (isMillis) { - const millis = gameTurnTime as MilliTurns - time.add(millis.millis, 'milliseconds') - return time.valueOf() - } else { - const millis = gameTurnTime as MonthTurns - time.add(millis.months, 'months') - return time.valueOf() - } -} - -const isSmallSteps = (turnTime: TurnLengthType): boolean => { - const oneWeek = 604800000 - if (turnTime.unit === 'millis') { - const millis = turnTime as MilliTurns - return millis.millis <= oneWeek - } - return false -} - -export const getDateSlots = (gameTime: number, gameTurnTime: TurnLengthType): Array => { - const smallSteps = isSmallSteps(gameTurnTime) - const finishTime = getFinishTime(gameTime, gameTurnTime) - const timeStep = smallSteps ? twoHours : oneDay - const res: TimeSlot[] = [] - const formatStr = smallSteps ? shortFormat : longFormat - for (let time = gameTime; time < finishTime; time += timeStep) { - const tNow = moment.utc(time) - res.push({ value: tNow.toISOString(), label: tNow.format(formatStr) }) - } - return res -} - -/** note - this was used as a workaround while we waited to update to JSON-Editor - * release that correctly supported the FlatPickr editor - */ -export const customiseDate = (_document: MessageStructure | undefined, schema: Record, - gameTime: number, gameTurnTime: TurnLengthType): Record => { - const res = { ...schema } - if (schema) { - const slots = getDateSlots(gameTime, gameTurnTime) - const keys = Object.keys(res.properties) - keys.forEach((key: string) => { - if (key.endsWith('Date') && key !== 'Date') { - // ok, update it - res.properties[key].enum = slots.map((asset: TimeSlot) => asset.value) - res.properties[key].options.enum_titles = slots.map((asset: TimeSlot) => asset.label) - } - }) - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-live-orders.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-live-orders.ts deleted file mode 100644 index e44ad50302..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-live-orders.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { MessagePlanning, MessageStructure } from 'src/custom-types' -import { sortBy } from 'lodash' - -export const customiseLiveOrders = (_document: MessageStructure | undefined, schema: Record, - liveOrders: MessagePlanning[]): Record => { - // put the orders in alphabetical order - const sortedOrders = sortBy(liveOrders, function (message) { return message.message.title }) - const res = { ...schema } - if (schema) { - const oldOrders = res.properties?.synchronisedWith?.items - if (oldOrders) { - oldOrders.enum = sortedOrders.map((order: MessagePlanning) => order.message.Reference) - oldOrders.options.enum_titles = sortedOrders.map((order: MessagePlanning) => order.message.Reference + ' - ' + order.message.title) - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-location.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-location.ts deleted file mode 100644 index 7f03d921e1..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-location.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { MessageStructure } from 'src/custom-types' - -export const customiseLocation = (_document: MessageStructure | undefined, schema: Record): Record => { - const res = { ...schema } - if (schema) { - const location = res.properties?.location - if (location) { - // ok, create a hidden-store entry that can store raw - // location data while we mangle the data to make it easier to read - schema.properties.hiddenStore = { - type: 'string', - readonly: 'readonly', - options: { - hidden: true - }, - id: 'hiddenStore' - } - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/customise-missiles.ts b/client/src/Components/pf-planning/support-panel/helpers/customise-missiles.ts deleted file mode 100644 index f8cfaa2c5d..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/customise-missiles.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ForceData, ForceTemplateData, MessageStructure } from 'src/custom-types' -import _ from 'lodash' - -const umpireMissiles = (forceTemplateData: ForceTemplateData[]): ForceTemplateData => { - const missiles: string[] = [] - forceTemplateData.forEach((item) => { - if (item.missiles) { - missiles.push(...item.missiles) - } - }) - const uniqMissiles = _.uniq(missiles) - return { - force: 'any', - missiles: uniqMissiles - } -} - -export const customiseMissiles = (_document: MessageStructure | undefined, schema: Record, - forceId: ForceData['uniqid'], isUmpire: boolean, forceTemplateData?: ForceTemplateData[]): Record => { - const res = { ...schema } - if (schema) { - if (forceId && forceTemplateData && forceTemplateData.length) { - const ownMissiles = res.properties?.ownAssets?.items?.properties?.missileType - const oppMissiles = res.properties?.otherAssets?.items?.properties?.missileType - if (ownMissiles || oppMissiles) { - const myData = isUmpire ? umpireMissiles(forceTemplateData) : forceTemplateData.find((data) => data.force === forceId) - if (myData && myData.missiles) { - if (ownMissiles) { - ownMissiles.enum = myData.missiles - } - if (oppMissiles) { - oppMissiles.enum = myData.missiles - } - } - } - } - } - return res -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/gen-order-data.ts b/client/src/Components/pf-planning/support-panel/helpers/gen-order-data.ts deleted file mode 100644 index 947d2d82cd..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/gen-order-data.ts +++ /dev/null @@ -1,1182 +0,0 @@ -import { ADJUDICATION_OUTCOMES, GeometryType, INTERACTION_MESSAGE, PLANNING_MESSAGE } from 'src/config' -import { - Asset, ForceData, GroupedActivitySet, MessageDetails, MessageDetailsFrom, MessagePlanning, - PerceivedTypes, PerForcePlanningActivitySet, PlannedActivityGeometry, PlannedProps, PlanningActivity, PlanningActivityGeometry, Role, - InteractionDetails, MessageAdjudicationOutcomes, MessageInteraction, PlanningMessageStructureCore -} from 'src/custom-types' -import { deepCopy, findPerceivedAsTypes } from 'src/Helpers' -import * as turf from '@turf/turf' -import { Position } from '@turf/turf' -import { Feature, Geometry, MultiPolygon, Polygon } from 'geojson' -import L, { LatLngBounds } from 'leaflet' -import _, { cloneDeep } from 'lodash' -import moment from 'moment-timezone' -import { findActivityFromCompositeString } from '../../adjudication-messages-list/helpers/getNextInteraction' -import { lineLineContact, linePointContact, linePolyContact, ShapeInteraction, timeIntersect2, TimePeriod } from './shape-intersects' - -const msgContents: PlanningMessageStructureCore = { - Reference: 'Blue-12', - activity: 'point-recce', - title: 'Operation Bravo-12', - ownAssets: [], - otherAssets: [], - startDate: moment().toISOString(), - endDate: moment().toISOString() -} - -const sample: MessagePlanning = { - messageType: PLANNING_MESSAGE, - details: { - channel: 'channel-blue-planning', - from: { - force: 'Blue', - forceId: 'F-Blue', - forceColor: '#00F', - roleName: 'Mar-1', - roleId: 'rk116f5e', - iconURL: 'default_img/umpireDefault.png' - }, - messageType: 'Land Activity', - timestamp: '2022-09-21T13:15:09.106Z', - turnNumber: 6 - }, - message: msgContents, - hasBeenRead: false, - _id: 'idp_3a', - _rev: '2' -} - -interface PerForceData { - forceId: ForceData['uniqid'] - forceName: ForceData['name'] - forceColor: ForceData['color'] - roles: Role[] - ownAssets: Asset[] - otherAssets: Asset[] - opAsset: PerceivedTypes[] -} - -/** object that lets us put the parent orders object into - * a planned geometry - */ -export interface GeomWithOrders extends PlannedActivityGeometry { - /** - * the activity this geometry is part of - */ - activity: PlanningActivity - /** - * the set of orders this geometry relates to - */ - plan: MessagePlanning - /** - * the force these orders belong to - */ - force: ForceData['uniqid'] - /** - * id for this state/activity - */ - id: string -} - -/** an instance of one geometry interacting with another */ -export interface PlanningContact { - id: string - first: GeomWithOrders - second: GeomWithOrders - intersection?: Geometry - timeStart: number // unix millis - timeEnd: number // unix millis - /** optional set of default adjud outcomes for this contact (typically - * used when we short-circuit interaction generation) */ - outcomes?: MessageAdjudicationOutcomes -} - -const collateForceData = (forces: ForceData[], createFor: string[]): PerForceData[] => { - const res: PerForceData[] = createFor.map((forceId: string): PerForceData => { - const thisForce = forces.find((force: ForceData) => force.uniqid === forceId) - const opAssets: PerceivedTypes[] = [] - const realOpAssets: Asset[] = [] - forces.forEach((force: ForceData) => { - if (force.uniqid !== forceId) { - if (force.assets) { - force.assets.forEach((asset: Asset) => { - if (asset.location) { - const perceivedAsTypes: PerceivedTypes | null = findPerceivedAsTypes( - forceId, - asset.name, - !!(force.visibleTo && force.visibleTo.includes(forceId)), - asset.contactId, - force.uniqid, - asset.platformTypeId, - asset.perceptions - ) - if (perceivedAsTypes) { - opAssets.push(perceivedAsTypes) - realOpAssets.push(asset) - } - } - }) - } - } - }) - return { - forceId: forceId, - forceName: (thisForce && thisForce.name) || '', - forceColor: (thisForce && thisForce.color) || '', - roles: thisForce ? thisForce.roles : [], - ownAssets: (thisForce && thisForce.assets) || [], - opAsset: opAssets, - otherAssets: realOpAssets - } - }) - return res -} - -/** return a pseudo random number between 0 and 1 */ -const psora = (k: number): number => { - const m = Math.pow(3 + k, 2) - const r = Math.PI * m - const res = r - Math.floor(r) - return res -} - -export const randomArrayItem = (arr: Type[], ctr: number): Type => { - return arr[Math.floor(arr.length * psora(ctr))] -} - -const randomRole = (roles: Role[], ctr: number): Role => { - return randomArrayItem(roles, ctr) as Role -} - -const flipMe = (point: number[]): number[] => { - return [point[1], point[0]] -} - -/** generate the time intersection between the two geometries */ -export const timeIntersect = (me: GeomWithOrders, other: GeomWithOrders): number[] => { - const meProps = me.geometry.properties as PlannedProps - const otherProps = other.geometry.properties as PlannedProps - - if (meProps.startTime > otherProps.endTime || meProps.endTime < otherProps.startTime) { - typeof jest === 'undefined' && console.warn('Geometries do not overlap in time') - return [] - } - - const start = Math.max(meProps.startTime || -1, otherProps.startTime || -1) - const end = Math.min(meProps.endTime || -1, otherProps.endTime || -1) - return [start, end] -} - -export const timePeriodForGeom = (geom: GeomWithOrders): TimePeriod => { - const props = geom.geometry.properties as PlannedProps - return [props.startTime || -1, props.endTime || -1] -} - -const geometryFor = (own: Asset, ownForce: ForceData['uniqid'], target: Asset, geometry: PlanningActivityGeometry, seedIn: number, timeStart: string, timeFinish: string, - activity: PlanningActivity): Feature => { - const seed = psora(seedIn + 6) - const dummyLocation = [39.75, -104.994] - const dateProps: PlannedProps = { - id: activity.name + '//' + geometry.name, - startDate: timeStart, - endDate: timeFinish, - force: ownForce, - startTime: moment(timeStart).valueOf(), - endTime: moment(timeFinish).valueOf(), - geomId: geometry.uniqid, - name: ownForce + '//' + seedIn + '//' + geometry.name - } - switch (geometry.aType) { - case GeometryType.point: { - const loc = target.location || dummyLocation - return { - type: 'Feature', - properties: dateProps, - geometry: { - type: 'Point', - coordinates: flipMe(loc) - } - } - } - case GeometryType.polygon: { - // calculate the reference of cell immediately behind the origin - const leafPt = target.location || dummyLocation - const origin = turf.point([leafPt[1], leafPt[0]]) - const rangeKm = 30 + psora(seed) * 600 - const newTL = turf.destination(origin, rangeKm, 315).geometry.coordinates - const newBR = turf.destination(origin, rangeKm, 135).geometry.coordinates - const leafTL = L.latLng(newTL[0], newTL[1]) - const leafBR = L.latLng(newBR[0], newBR[1]) - const coords = [[[leafTL.lat, leafTL.lng], [leafTL.lat, leafBR.lng], [leafBR.lat, leafBR.lng], [leafBR.lat, leafTL.lng], [leafTL.lat, leafTL.lng]]] - return { - type: 'Feature', - properties: dateProps, - geometry: { - type: 'Polygon', - coordinates: coords - } - } - } - case GeometryType.polyline: - default: { - const ownPt = own.location || dummyLocation - const tgtPt = target.location || dummyLocation - const numBreaks = Math.floor(psora(seed) * 4) + 1 - const deltaLat = (tgtPt[0] - ownPt[0]) / numBreaks - const deltaLng = (tgtPt[1] - ownPt[1]) / numBreaks - const path = [flipMe(ownPt)] - for (let i = 1; i <= numBreaks; i++) { - const variance = 0.5 - const newPtLat = ownPt[0] + deltaLat * i - variance + psora(seed + i) * 2 * variance - const newPtLng = ownPt[1] + deltaLng * i - variance + psora(seed - i) * 2 * variance - const roundedLat = Math.trunc(newPtLat * 100) / 100 - const roundedLng = Math.trunc(newPtLng * 100) / 100 - const pt = [roundedLat, roundedLng] - path.push(flipMe(pt)) - } - path.push(flipMe(tgtPt)) - return { - type: 'Feature', - properties: dateProps, - geometry: { - type: 'LineString', - coordinates: path - } - } - } - } -} - -/** produce some planned geometries */ -export const geometriesFor = (ownAssets: Asset[], ownForce: ForceData['uniqid'], targets: Asset[], activity: PlanningActivity, ctr: number, timeNow: moment.Moment): PlannedActivityGeometry[] => { - const own = randomArrayItem(ownAssets, ctr++) - const other = randomArrayItem(targets, ctr++) - const geoms = activity.geometries - if (geoms) { - let lastEnd: moment.Moment = timeNow - let lastPlanning: PlanningActivityGeometry | undefined - const res: PlannedActivityGeometry[] = geoms.map((plan: PlanningActivityGeometry, index: number): PlannedActivityGeometry => { - const secondPoly = lastPlanning && lastPlanning.aType === GeometryType.polygon && plan.aType === GeometryType.polygon - timeNow = secondPoly ? timeNow : lastEnd - const minsOffset = Math.floor(psora(1 + index * ctr) * 20) * 10 - const timeEnd = secondPoly ? lastEnd as moment.Moment : timeNow.clone().add(minsOffset, 'm') - const lastItemIsLeg = geoms.length > 1 && index === geoms.length - 1 && GeometryType.polyline - const assetToUseAsOwn = lastItemIsLeg ? other : own - const assetToUseAsOther = lastItemIsLeg ? own : other - const planned: PlannedActivityGeometry = { - uniqid: plan.uniqid, - geometry: geometryFor(assetToUseAsOwn, ownForce, assetToUseAsOther, plan, ctr * (1 + index), timeNow.toISOString(), timeEnd.toISOString(), activity) - } - lastEnd = timeEnd - lastPlanning = plan - return planned - }) - return res - } - return [] -} - -const createMessage = (channelId: string, force: PerForceData, ctr: number, orderTypes: PerForcePlanningActivitySet[], timeNow: moment.Moment): MessagePlanning => { - let localCtr = ctr - - // details first - const from = randomRole(force.roles, 4 + localCtr) - const fromD: MessageDetailsFrom = { - force: force.forceName, - forceColor: force.forceColor, - roleName: from.name, - roleId: from.roleId, - iconURL: sample.details.from.iconURL, - forceId: force.forceId - } - - // get activities for this force - const thisForceActivities = orderTypes.find((orders) => orders.force === force.forceId) - const flatArray = thisForceActivities && thisForceActivities.groupedActivities.map((group) => group.activities) - const flatActivities = thisForceActivities ? _.flatten(flatArray) as unknown as PlanningActivity[] : [] - const activity = randomArrayItem(flatActivities, localCtr++) - - const needsMissiles = (activity.template && activity.template.includes('Strike')) - - const missileTypes = [ - 'SRBM', - 'MRBM', - 'IRBM', - 'Standard Cruise', - 'Low Obs Cruise', - 'Propellor OWA UAV', - 'Jet OWA UAV'] - - // assets - const numAssets = randomArrayItem([1, 2, 3, 4], localCtr + 5) - const assets: Asset[] = [] - for (let k = 0; k < numAssets; k++) { - let possAsset = randomArrayItem(force.ownAssets, 1 + k + localCtr + 3) - let ctr2 = localCtr - while (assets.includes(possAsset)) { - possAsset = randomArrayItem(force.ownAssets, ++ctr2) - } - assets.push(possAsset) - } - const assetsArr = assets.map((asset: Asset) => { - const res = { asset: asset.uniqid, number: Math.floor(Math.random() * 6) } as any - if (needsMissiles) { - res.missileType = randomArrayItem(missileTypes, ++localCtr) - } - return res - }) - - const numTargets = randomArrayItem([1, 2, 3], ++localCtr * 1.4) - const targets: Asset[] = [] - for (let m = 0; m < numTargets; m++) { - let possTarget = randomArrayItem(force.otherAssets, m + 3) - let ctr2 = localCtr - while (targets.find((asset: Asset) => asset.uniqid === possTarget.uniqid)) { - possTarget = randomArrayItem(force.otherAssets, ++ctr2) - } - targets.push(possTarget) - } - const targetsAarr = targets.map((asset: Asset) => { - const res = { asset: asset.uniqid } as any - if (needsMissiles) { - res.missileType = randomArrayItem(missileTypes, ++localCtr) - res.number = Math.floor(Math.random() * 6) - } - return res - }) - - const geometries = geometriesFor([randomArrayItem(force.ownAssets, localCtr++)], force.forceId, [randomArrayItem(force.otherAssets, localCtr++)], - activity, 5 * psora(4 * localCtr), timeNow) - - // sort out the overall time period - let startDate: moment.Moment | undefined - let endDate: moment.Moment | undefined - geometries.forEach((val: PlannedActivityGeometry) => { - const props = val.geometry.properties - if (props) { - const thisStart = moment(props.startDate) - const thisEnd = moment(props.endDate) - if (!startDate || thisStart.isBefore(startDate)) { - startDate = thisStart.clone() - } - if (!endDate || thisEnd.isAfter(endDate)) { - endDate = thisEnd.clone() - } - } - }) - - if (!startDate) { - const timeStart = timeNow - startDate = timeStart - } - - if (!endDate) { - const timeStart = timeNow - const minsOffset = Math.floor(psora(2 * localCtr) * 20) * 10 - const timeEnd = timeStart.clone().add(minsOffset, 'm') - endDate = timeEnd - } - - // sort out the start/stop time for the geometries - - const details: MessageDetails = { - channel: channelId, - from: fromD, - messageType: activity.template, - timestamp: moment('2022-09-21T13:15:09.106Z').add(psora(localCtr + 2) * 200, 'h').toISOString(), - turnNumber: 3 - } - - // create the message - const message: PlanningMessageStructureCore = { - Reference: force.forceName + '-' + ctr, - title: 'Order item ' + localCtr, - startDate: startDate && startDate.toISOString(), - endDate: endDate && endDate.toISOString(), - activity: activity.uniqid, - ownAssets: assetsArr, - otherAssets: targetsAarr - } - - // inject location, if necessary - if (geometries.length > 0) { - message.location = geometries - } - return { ...sample, details: details, message: message, _id: 'm_' + force.forceId + '_' + ctr } -} - -const findGeometryInGroup = (geomId: string, group: GroupedActivitySet): PlanningActivityGeometry | undefined => { - let activity: PlanningActivityGeometry | undefined - group.activities.forEach((act: string | PlanningActivity) => { - if (typeof act === 'string') { - throw new Error('Found string definition for activity. Should be real activity') - } else { - const match = act.geometries && act.geometries.find((val: PlanningActivityGeometry) => val.uniqid === geomId) - if (match) { - activity = match - } - } - }) - return activity -} - -/** find an activity if we don't know what group it's in */ -export const findActivityInGroup = (activityId: string, group: GroupedActivitySet): PlanningActivity => { - const activity = group.activities.find((act: string | PlanningActivity) => { - if (typeof act === 'string') { - throw new Error('Found string definition for activity. Should be real activity') - } else { - return act.uniqid === activityId - } - }) - if (activity === undefined) { - throw new Error('Found string definition for activity. Should be real activity') - } else { - return activity as PlanningActivity - } -} - -/** - * Decide if an interaction should be generated between two activities - * @param first the first activity - * @param second the second activity - * @param throwErrorOnUnbalanced whether to throw an error if the interactsWithRelationship is unbalanced - * @returns whether we should generate interaction between two activities - */ -export const interactsWith = (first: PlanningActivity, second: PlanningActivity, throwErrorOnUnbalanced?: boolean): boolean => { - const firstId = first.actId - const secondId = second.actId - const firstInteracts = first.interactsWith ? first.interactsWith.includes(secondId) : false - const secondInteracts = second.interactsWith ? second.interactsWith.includes(firstId) : false - if (firstInteracts !== secondInteracts) { - if (throwErrorOnUnbalanced) { - console.warn('Warning: Unbalanced interacts. Potentially valid if called from test-spec.', firstId, first.uniqid, secondId, second.uniqid, first.interactsWith, second.interactsWith) - throw Error('Unbalanced interacts') - } else { - console.error('Warning: Unbalanced interacts. Valid if called from test-spec.', firstId, secondId, first.interactsWith, second.interactsWith) - } - } - return first.interactsWith ? first.interactsWith.includes(secondId) : false -} - -export const findPlanningActivity = (id: string, forceId: string, activities: PerForcePlanningActivitySet[]): PlanningActivity => { - const force = activities.find((val: PerForcePlanningActivitySet) => val.force === forceId) - if (!force) { - console.log('activities', activities, forceId) - throw Error('Failed to find activities for this force:' + forceId + ' ' + activities.length) - } - // flatten the hierarchy, then do find - const activity = force.groupedActivities.map((group) => group.activities).flat().find((plan) => plan.template === id) - if (!activity) { - console.log('grouped activities', force.groupedActivities, forceId) - throw Error('Failed to find group activities for this activity 2:' + id) - } - return activity as any as PlanningActivity -} - -export const findPlanningGeometry = (id: string, forceId: string, - activities: PerForcePlanningActivitySet[], messageId?: string): string => { - const force = activities.find((val: PerForcePlanningActivitySet) => val.force === forceId) - if (!force) { - console.log('activities', activities, forceId) - throw Error('Failed to find activities for this force:' + forceId + ' ' + activities.length) - } - const group = force.groupedActivities.find((val: GroupedActivitySet) => { - return !!findGeometryInGroup(id, val) - }) - if (!group) { - console.log('Failed to find group in force 2', forceId, 'id:', id, ' message:', messageId) - force.groupedActivities.forEach((group) => { - console.table(group.activities.map((act) => { - return { - id: act.actId, - name: act.name, - uniqid: act.uniqid - } - })) - }) - throw Error('Failed to find group activities for this activity:' + id + ' message:' + messageId) - } - const activity = findGeometryInGroup(id, group) - if (!activity) { - throw Error('Failed to find group activities for this activity 2:' + id) - } - return activity.name -} - -/** on occasion we don't have all of these fields */ -export const findActivity2 = (id: string, category: GroupedActivitySet['category'], forceId: string, activities: PerForcePlanningActivitySet[]): PlanningActivity => { - const force = activities.find((val: PerForcePlanningActivitySet) => val.force === forceId) - if (!force) { - console.log('activities', activities) - throw Error('Failed to find activities for this force:' + forceId + ' ' + activities.length) - } - const group = force.groupedActivities.find((val: GroupedActivitySet) => val.category === category) - if (!group) { - throw Error('Failed to find group activities for this activity:' + id) - } - const activity = findActivityInGroup(id, group) - if (!activity) { - throw Error('Failed to find group activities for this activity:' + id) - } else { - return activity - } -} - -export const ordersStartingBeforeTime = (messages: MessagePlanning[], time: number): MessagePlanning[] => { - return messages.filter((msg) => { - const tStart = moment(msg.message.startDate).valueOf() - return tStart <= time - }) -} - -export const ordersEndingAfterTime = (messages: MessagePlanning[], time: number): MessagePlanning[] => { - return messages.filter((msg) => { - const tEnd = moment(msg.message.endDate).valueOf() - return tEnd >= time - }) -} - -export const ordersOverlappingTime = (messages: MessagePlanning[], time: number): MessagePlanning[] => { - const beforeTime = ordersStartingBeforeTime(messages, time) - const afterTime = ordersEndingAfterTime(beforeTime, time) - return afterTime -} - -// utility, since sometimes GeoMan doesn't close polys -const fixPoly = (coords: number[][]): Position[] => { - const tmpCoors = deepCopy(coords) as number[][] - // we occasionally get unclosed polygons, since GeoMan didn't close them - const data = tmpCoors[0] - const tLen = data.length - if (!_.isEqual(data[tLen - 1], data[0])) { - // pop the first one on the end - data.push(data[0]) - tmpCoors[0] = data - } - return tmpCoors as Position[] -} - -export const invertMessages = (messages: MessagePlanning[], activities: PerForcePlanningActivitySet[]): GeomWithOrders[] => { - const res: GeomWithOrders[] = [] - messages.forEach((messageOrig: MessagePlanning) => { - const message = cloneDeep(messageOrig) - if (message.message.location) { - const forceId = message.details.from.forceId || 'unknown' - message.message.location.forEach((plan: PlannedActivityGeometry) => { - if (plan.geometry.geometry.type === 'Polygon') { - const geom = plan.geometry.geometry as any - geom.coordinates = fixPoly(geom.coordinates) - } - const fromBit = message.details.from - const forceActivities = activities.find((set) => set.force === fromBit.forceId) - if (!forceActivities) { - console.warn('Failed to find activities for 1', fromBit.forceId) - return - } - const activity = findActivityFromCompositeString(message.message.activity, forceActivities) - if (!activity) { - console.warn('Failed to find activities for 2', message.message.activity) - return - } - const geometry = findPlanningGeometry(plan.uniqid, forceId, activities, message.message.Reference) // activity.geometries && activity.geometries.find((geom) => geom.uniqid === plan.uniqid) - // findPlanningGeometry(plan.uniqid, forceId, activities) - const id = message.message.Reference + '//' + message.message.title + '//' + geometry - const newItem: GeomWithOrders = { ...plan, activity: activity, plan: message, force: fromBit.forceId || fromBit.force, id: id } - if (!newItem.geometry.properties) { - newItem.geometry.properties = {} - } - const props = newItem.geometry.properties as PlannedProps - props.name = message.details.from.force + '//' + message.message.title + '//' + geometry - props.geomId = plan.uniqid - props.id = activity.name + '//' + geometry - props.force = forceId - // fill in date/time, if not present - if (!props.startDate) { - if (message.message.startDate) { - props.startDate = message.message.startDate - props.startTime = moment(props.startDate).valueOf() - } - if (message.message.endDate) { - props.endDate = message.message.endDate - props.endTime = moment(props.endDate).valueOf() - } - } - res.push(newItem) - }) - } - }) - return res -} - -const getDocFromThisForce = (messages: MessagePlanning[], forceId: string): MessagePlanning => { - let found - while (!found) { - const doc = messages[Math.floor(Math.random() * messages.length)] - if (doc.details.from.forceId === forceId) { - found = doc - } - } - return found as MessagePlanning -} - -const outerTimeFor = (docs: MessagePlanning[]): TimePeriod => { - let res: TimePeriod | undefined - docs.forEach((doc) => { - const msg = doc.message - const tStart = moment.utc(msg.startDate).valueOf() - const tEnd = moment.utc(msg.endDate).valueOf() - const period: TimePeriod = [tStart, tEnd] - if (!res) { - res = period - } else { - res = timeIntersect2(period, res) - } - }) - return res as unknown as TimePeriod -} - -export const randomOrdersDocs = (channelId: string, count: number, forces: ForceData[], createFor: string[], orderTypes: PerForcePlanningActivitySet[], - adjudicationTemplateId: string, startTimeStr: string): Array => { - const res: Array = [] - const perForce = collateForceData(forces, createFor) - let startTime = moment(startTimeStr) - for (let i = 0; i < count; i++) { - const willIncrement = psora(2 + i) > 0.5 - const minsOffset = willIncrement ? Math.floor(psora(1 + i) * 5) * 5 : 0 - startTime = startTime.add(minsOffset, 'm') - const authorForce: PerForceData = randomArrayItem(perForce, 3 + i) - const newMessage = createMessage(channelId, authorForce, 2 + i * 3, orderTypes, startTime) - res.push(newMessage) - } - // have a go at a couple of interactions - const umpires = forces[0] - const umpireRoles = forces[0].roles - const justPlanning = deepCopy(res) as MessagePlanning[] - const interactions: MessageInteraction[] = [] - let ctr = 0 - const numInteractions = count > 40 ? 5 : 2 - umpireRoles.forEach((role) => { - for (let i = 0; i < numInteractions; i++) { - // find a force-1 doc - const doc1 = getDocFromThisForce(justPlanning, createFor[0]) - const doc2 = getDocFromThisForce(justPlanning, createFor[1]) - const time = outerTimeFor([doc1, doc2]) - const reference = forces[0].uniqid + '-' + ++ctr - const interaction: InteractionDetails = { - startTime: moment(time[0]).toISOString(), - endTime: moment(time[1]).toISOString(), - id: reference, - orders1: doc1._id, - orders2: doc2._id, - complete: true - } - const from: MessageDetailsFrom = { - force: umpires.name, - forceColor: umpires.color, - forceId: umpires.uniqid, - iconURL: '', - roleId: role.roleId, - roleName: role.name - } - const details: MessageDetails = { - from: from, - channel: channelId, - messageType: adjudicationTemplateId, - timestamp: moment().toISOString(), - turnNumber: doc1.details.turnNumber, - counter: ctr, - interaction: interaction - } - const msgBody: MessageAdjudicationOutcomes = { - Reference: reference, - healthOutcomes: [], - important: psora(3 + i) > 0.7, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: ADJUDICATION_OUTCOMES - } - const msgInt: MessageInteraction = { - messageType: INTERACTION_MESSAGE, - details: details, - message: msgBody, - _id: moment().toISOString() + '//' + interactions.length - } - // check it's not already present - if (!interactions.find((inter) => inter.message.Reference === msgInt.message.Reference)) { - interactions.push(msgInt) - } - } - }) - res.push(...interactions) - return res -} - -export const overlapsInTime = (me: GeomWithOrders, other: GeomWithOrders): boolean => { - const myProps = me.geometry.properties as PlannedProps - const otherProps = other.geometry.properties as PlannedProps - if (myProps && otherProps && myProps.startTime && myProps.endTime && otherProps.startTime && otherProps.endTime) { - return (myProps.startTime <= otherProps.endTime && myProps.endTime >= otherProps.startTime) - } - return true -} - -export const injectTimes = (orders: GeomWithOrders[]): GeomWithOrders[] => { - return orders.map((order: GeomWithOrders) => { - if (order.geometry.properties) { - const planned = order.geometry.properties as PlannedProps - if (!planned.startTime) { - // the time values aren't stored in teh message. Inject them here, since they will be - // useful in subsequent interactions - planned.startTime = moment(planned.startDate).valueOf() - planned.endTime = moment(planned.endDate).valueOf() - } - } - return order - }) -} - -export const findPlannedGeometries = (orders: GeomWithOrders[], time: number, windowMins: number): GeomWithOrders[] => { - const timeStart = moment(time) - const timeEnd = moment(time).add(windowMins, 'm') - const inWindow = orders.filter((value: GeomWithOrders) => { - const props = value.geometry.properties as PlannedProps - const geomStart = props.startDate ? moment(props.startDate) : moment(props.startTime) - const geomEnd = props.endDate ? moment(props.endDate) : moment(props.startTime) - return geomStart.isSameOrBefore(timeEnd) && geomEnd.isSameOrAfter(timeStart) - }) - return deepCopy(inWindow) -} - -const clean = (val: number): number => { - const scalar = 1000 - return Math.floor(val * scalar) / scalar -} - -export const getBounds = (orders: GeomWithOrders[]): LatLngBounds | undefined => { - let bounds: L.LatLngBounds | undefined - orders.forEach((geom: GeomWithOrders) => { - const geoAny = geom.geometry.geometry as any - let coords - switch (geom.geometry.geometry.type) { - case 'LineString': { - coords = geoAny.coordinates - break - } - case 'Point': { - coords = geoAny.coordinates - break - } - case 'Polygon': { - coords = geoAny.coordinates[0][0] - break - } - } - - coords && coords.forEach((point: number[]) => { - const pt = L.latLng(point[1], point[0]) - if (!bounds) { - bounds = L.latLngBounds(pt, pt) - } else { - bounds.extend(pt) - } - }) - }) - return bounds -} - -export const spatialBinning = (_orders: GeomWithOrders[], binsPerSide: number, bounds?: LatLngBounds): turf.Feature[] => { - const boxes: turf.Feature[] = [] - if (bounds && bounds.isValid()) { - const height = bounds.getNorth() - bounds.getSouth() - const width = bounds.getEast() - bounds.getWest() - const heightDelta = height / binsPerSide - const widthDelta = width / binsPerSide - for (let x = 0; x < binsPerSide; x++) { - for (let y = 0; y < binsPerSide; y++) { - const bX = clean(bounds.getWest() + x * widthDelta) - const bY = clean(bounds.getSouth() + y * heightDelta) - const tX = clean(bX + widthDelta) - const tY = clean(bY + heightDelta) - const poly = [[[bX, bY], [tX, bY], [tX, tY], [bX, tY], [bX, bY]]] - const turfPoly = turf.polygon(poly) - if (!turfPoly.properties) { - turfPoly.properties = {} - } - turfPoly.properties.name = 'box_' + (x * binsPerSide + y) - // pushGeo(poly) - boxes.push(turfPoly) - } - } - } - return boxes -} - -export interface SpatialBin { - polygon: turf.Feature | undefined - orders: GeomWithOrders[] -} - -export const putInBin = (orders: GeomWithOrders[], bins: turf.Feature[], bounds?: LatLngBounds): SpatialBin[] => { - if (!bounds) { - console.log('bounds missing') - return [] - } - const spatialBins: SpatialBin[] = [] - const binZero: SpatialBin = { - polygon: undefined, - orders: [] - } - spatialBins.push(binZero) - // initialise the other bins - bins.forEach((poly: turf.Feature, _index: number) => { - const thisBin: SpatialBin = { - polygon: poly, - orders: [] - } - spatialBins.push(thisBin) - }) - const tl = bounds.getNorthWest() - const br = bounds.getSouthEast() - const poly = [[[tl.lng, tl.lat], [tl.lng, br.lat], [br.lng, br.lat], [br.lng, tl.lat], [tl.lng, tl.lat]]] - const boundsPoly = turf.polygon(poly) - orders.forEach((order: GeomWithOrders) => { - const geom = order.geometry.geometry as any - const coords = geom.coordinates - let binFound = false - let goesOutsideBounds = false - spatialBins.forEach((bin: SpatialBin, _index: number) => { - // don't consider bin zero - if (bin.polygon) { - const polyGeo = bin.polygon.geometry as any - const turfPoly = turf.polygon(polyGeo.coordinates) - switch (order.geometry.geometry.type) { - case 'Point': { - const pt = turf.point(coords) - if (turf.booleanPointInPolygon(pt, turfPoly)) { - bin.orders.push(order) - binFound = true - } - if (!goesOutsideBounds && !turf.booleanContains(boundsPoly, pt)) { - goesOutsideBounds = true - } - break - } - case 'LineString': { - const lineS = turf.lineString(coords) - if (turf.booleanCrosses(lineS, bin.polygon)) { - bin.orders.push(order) - binFound = true - } - if (!goesOutsideBounds && !turf.booleanContains(boundsPoly, lineS)) { - goesOutsideBounds = true - } - - break - } - case 'Polygon': { - const coords2 = fixPoly(coords) - const thisPoly = turf.polygon(coords2 as any) - // note: overlap return false if one contains the other, so also - // note: check for one containing the other - if (turf.booleanOverlap(bin.polygon, thisPoly) || turf.booleanContains(bin.polygon, thisPoly) || - turf.booleanContains(thisPoly, bin.polygon)) { - bin.orders.push(order) - binFound = true - } - if (!goesOutsideBounds && !turf.booleanContains(boundsPoly, thisPoly)) { - goesOutsideBounds = true - } - break - } - } - } - }) - // if it hasn't been put in a bin, or if it goes outside bounds, pit - // it in bin zero - if (!binFound || goesOutsideBounds) { - binZero.orders.push(order) - } - }) - return spatialBins -} - -const differentForces = (me: GeomWithOrders, other: GeomWithOrders): boolean => { - const forces = [me.force, other.force] - const blueAndGreen = forces.includes('f-blue') && forces.includes('f-green') - return (me.force !== other.force) && !blueAndGreen -} - -export const createContactReference = (me: string, other: string): string => { - return me + ' ' + other -} - -export const findTouching = (geometries: GeomWithOrders[], interactionsConsidered: string[], - interactionsProcessed: string[], interactionsTested: Record, - sensorRangeKm: number): PlanningContact[] => { - const res: PlanningContact[] = [] - geometries.forEach((me: GeomWithOrders, myIndex: number) => { - geometries.forEach((other: GeomWithOrders, otherIndex: number) => { - // check it's not me - if (myIndex !== otherIndex) { - // generate IDs, to ensure we don't compare shapes twice - const meFirst = (me.id < other.id) - const first = meFirst ? me : other - const second = meFirst ? other : me - const id = createContactReference(first.id, second.id) - // have we already checked this permutation (maybe in another bin)? - if (!interactionsConsidered.includes(id)) { - // has it already been adjudicated - if (!interactionsProcessed.includes(id)) { - interactionsConsidered.push(id) - if (differentForces(me, other) && overlapsInTime(me, other)) { - // see if we have a cached contact - const cachedResult = interactionsTested[id] - if (cachedResult !== undefined) { - if (cachedResult !== null) { - res.push(cachedResult) - } - } else { - // see if they should interact with each other - const interacts = interactsWith(first.activity, second.activity) - const ISTAR_OBS = 'ISTAR-2' - const bothObs = first.uniqid === ISTAR_OBS && second.uniqid === ISTAR_OBS - // check for special case, or ISTAR obs box - if (interacts && !bothObs) { - const contact = touches(me, other, id, Math.random, sensorRangeKm) - if (contact) { - res.push(contact) - } - interactionsTested[id] = contact - } else { - // console.log('not considering', first.activity.actId, second.activity.actId) - // remember that this won't generate a contact - interactionsTested[id] = null - } - } - } - } - } - } - }) - }) - return res -} - -export const touches = (me: GeomWithOrders, other: GeomWithOrders, id: string, _randomizer: { (): number }, lineSensorRangeKm: number): PlanningContact | null => { - const geom = me.geometry.geometry as any - const myCoords = geom.coordinates - const geom2 = other.geometry.geometry as any - const otherCoords = geom2.coordinates - const myTime = timePeriodForGeom(me) - const otherTime = timePeriodForGeom(other) - let res: PlanningContact | boolean | undefined - let intersection: ShapeInteraction | undefined - const titles: string[] = [] - const monitor = (titles.includes(me.id) && titles.includes(other.id)) - const intersectionTime = timeIntersect2(myTime, otherTime) - if (titles.length > 0) { - // ok, we're looking for something. If this permutation matches it, carry on - else - // return null. - if (monitor) { - console.log('touches', me.geometry.geometry.type, other.geometry.geometry.type) - } else { - console.log('TOUCHES didn\'t match specified IDs. Dropping out') - return null - } - } - try { - switch (me.geometry.geometry.type) { - case 'Point': { - const mePt = turf.point(myCoords) - switch (other.geometry.geometry.type) { - case 'Point': { - const otherPt = turf.point(otherCoords) - res = turf.booleanEqual(mePt, otherPt) - if (res) { - intersection = { - startTime: intersectionTime[0], - endTime: intersectionTime[1], - intersection: mePt - } - } - break - } - case 'LineString': { - const otherLine = turf.lineString(otherCoords) - res = turf.booleanPointOnLine(mePt, otherLine) - if (res) { - intersection = linePointContact(otherLine.geometry, otherTime, mePt.geometry, myTime) - if (!intersection) { - res = undefined - } - } - break - } - case 'Polygon': { - const turfPoly = turf.polygon(otherCoords) - res = (turf.booleanPointInPolygon(mePt, turfPoly)) - if (res) { - intersection = { - startTime: intersectionTime[0], - endTime: intersectionTime[1], - intersection: mePt - } - } - break - } - } - break - } - case 'LineString': { - const meLine = turf.lineString(myCoords) - switch (other.geometry.geometry.type) { - case 'Point': { - const otherPt = turf.point(otherCoords) - res = turf.booleanPointOnLine(otherPt, meLine) - if (res) { - intersection = linePointContact(meLine.geometry, myTime, otherPt.geometry, otherTime) - if (!intersection) { - res = undefined - } - } - break - } - case 'LineString': { - const otherLine = turf.lineString(otherCoords) - const inter = turf.lineIntersect(meLine, otherLine) - res = inter.features.length > 0 - if (res) { - intersection = lineLineContact(meLine.geometry, myTime, otherLine.geometry, otherTime, lineSensorRangeKm) - if (!intersection) { - res = undefined - } - } - break - } - case 'Polygon': { - const turfPoly = turf.polygon(otherCoords) - res = turf.booleanCrosses(meLine, turfPoly) || turf.booleanContains(turfPoly, meLine) - if (res) { - // console.log('linestring vs polygon 1', me.plan.message.Reference, other.plan.message.Reference, turf.booleanCrosses(meLine, turfPoly), turf.booleanContains(turfPoly, meLine)) - intersection = linePolyContact(meLine.geometry, myTime, turfPoly.geometry, otherTime) - // if the line doesn't actually enter poly when it's running, cancel contact - if (!intersection) { - res = undefined - } - } - break - } - } - break - } - case 'Polygon': { - const mePoly = turf.polygon(myCoords) - switch (other.geometry.geometry.type) { - case 'Point': { - const otherPt = turf.point(otherCoords) - res = turf.booleanPointInPolygon(otherPt, mePoly) - if (res) { - intersection = { - startTime: intersectionTime[0], - endTime: intersectionTime[1], - intersection: otherPt - } - } - break - } - case 'LineString': { - const otherLine = turf.lineString(otherCoords) - res = turf.booleanCrosses(mePoly, otherLine) || turf.booleanContains(mePoly, otherLine) - if (res) { - // console.log('linestring vs polygon 2', me.uniqid, other.uniqid, me.plan.message.Reference, other.plan.message.Reference, turf.booleanCrosses(mePoly, otherLine), turf.booleanContains(mePoly, otherLine)) - intersection = linePolyContact(otherLine.geometry, otherTime, mePoly.geometry, myTime) - // if the line doesn't actually enter poly when it's running, cancel contact - if (!intersection) { - res = undefined - } - } - break - } - case 'Polygon': { - const turfPoly = turf.polygon(otherCoords) - // if one contains the other, overlap doesn't work - const overlaps = turf.booleanOverlap(mePoly, turfPoly) - const aContainsB = turf.booleanContains(mePoly, turfPoly) - const bContainsA = turf.booleanContains(turfPoly, mePoly) - res = overlaps || aContainsB || bContainsA - if (res) { - let intersects - // if they overlap, then intersect returns intersecting region - // but, if one contains the other, the `other` represents the intersection - if (overlaps) { - intersects = turf.intersect(mePoly, turfPoly) as Feature - } else if (aContainsB) { - intersects = turfPoly - } else { - intersects = mePoly - } - if (!intersects) { - throw Error('One method reported overlap, the other didn\'t') - } - try { - let tPoly: Feature | undefined - switch (intersects.geometry.type) { - case 'Polygon': { - const poly = intersects as Feature - tPoly = turf.polygon(poly.geometry.coordinates) - break - } - case 'MultiPolygon': { - const mPoly = intersects as Feature - tPoly = turf.multiPolygon(mPoly.geometry.coordinates) - break - } - default: { - console.warn('Failed to generate geometry for ', intersects.geometry.type) - } - } - if (tPoly) { - intersection = { - startTime: intersectionTime[0], - endTime: intersectionTime[1], - intersection: tPoly - } - } - } catch (err) { - console.warn('Issue generating poly overlap', me.plan.message.Reference, other.plan.message.Reference, - err, intersects) - } - } - break - } - } - break - } - } - } catch (err2) { - console.warn('Issue in touches logic', me.plan.message.Reference, other.plan.message.Reference, - me.geometry, other.geometry, err2) - } - - if (res === undefined) { - // console.warn('Didn\'t handle this case', me, other) - return null - } else { - if (res) { - if (intersection) { - const contact: PlanningContact = { - first: me, - second: other, - id: id, - intersection: intersection.intersection.geometry, - timeStart: intersection.startTime, - timeEnd: intersection.endTime - } - return contact - } - } - return null - } -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/material-icons.tsx b/client/src/Components/pf-planning/support-panel/helpers/material-icons.tsx deleted file mode 100644 index 9383dcfc35..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/material-icons.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React, { forwardRef } from 'react' - -import ArrowDownward from '@material-ui/icons/ArrowDownward' -import Check from '@material-ui/icons/Check' -import ChevronRight from '@material-ui/icons/ChevronRight' -import Clear from '@material-ui/icons/Clear' -import FilterList from '@material-ui/icons/FilterList' -import Search from '@material-ui/icons/Search' - -/** centrally provide a set of local icon overrides for the - * standard icons used in `material-table` - * - */ -export const materialIcons = { - Search: forwardRef((props, ref: React.Ref) => ), - ResetSearch: forwardRef((props, ref: React.Ref) => ), - Check: forwardRef((props, ref: React.Ref) => ), - DetailPanel: forwardRef((props, ref: React.Ref) => ), - SortArrow: forwardRef((props, ref: React.Ref) => ), - Filter: forwardRef((props, ref: React.Ref) => ) -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.spec.ts b/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.spec.ts deleted file mode 100644 index 7e72b9f5d4..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.spec.ts +++ /dev/null @@ -1,271 +0,0 @@ -import * as turf from '@turf/turf' -import GeoJSON, { Feature, LineString, Point, Polygon } from 'geojson' -import { containedIn, lineLineContact, linePointContact, linePolyContact, trimLineToPeriod } from './shape-intersects' - -const data: GeoJSON.FeatureCollection = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: {}, - geometry: { - type: 'LineString', - coordinates: [ - [ - 117.7434, - -21.0232 - ], - [ - 125.26, - -16.41 - ], - [ - 131.89, - -12.69 - ], - [ - 138.81, - -7.68 - ], - [ - 139.3171, - -8.0633 - ] - ] - } - }, - { - type: 'Feature', - properties: {}, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 120.2124, - -17.4764 - ], - [ - 126.21, - -17.476432 - ], - [ - 126.2109, - -12.5116 - ], - [ - 120.2124, - -12.51166 - ], - [ - 120.2124, - -17.4764 - ] - ] - ] - } - }, - { - type: 'Feature', - properties: {}, - geometry: { - type: 'LineString', - coordinates: [ - [ - 130.935, - -5.6378525 - ], - [ - 134.2749, - -7.5803277 - ], - [ - 134.7363, - -12.01783 - ] - ] - } - }, - { - type: 'Feature', - properties: {}, - geometry: { - type: 'Point', - coordinates: [ - 133.98248020559546, - -11.183634212198807 - ] - } - }, - { - type: 'Feature', - properties: {}, - geometry: { - type: 'LineString', - coordinates: [ - [ - 124.45312499999999, - -20.385825381874263 - ], - [ - 129.814453125, - -18.396230138028812 - ], - [ - 131.044921875, - -20.385825381874263 - ] - ] - } - } - ] -} - -const simpleLine: Feature = { - type: 'Feature', - properties: {}, - geometry: { - type: 'LineString', - coordinates: [[0, 0], [0, 10]] - } -} -const simplePoint: Feature = { - type: 'Feature', - properties: {}, - geometry: { - type: 'Point', - coordinates: [0, 8] - } -} -const simplePoly: Feature = { - type: 'Feature', - properties: {}, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [-2, 2], [4, 2], [4, 4], [-2, 4], [-2, 2] - ] - ] - } -} - -const line = data.features[0].geometry as LineString -const poly = data.features[1].geometry as Polygon -const lineIntersect = data.features[2].geometry as any -const point = data.features[3].geometry as any -const independentLine = data.features[4].geometry as any - -!7 && console.log(lineIntersect, point, independentLine) - -it('trims line to periods', () => { - expect(containedIn([4, 8], [2, 9])).toBeTruthy() - expect(containedIn([4, 8], [4, 8])).toBeTruthy() - expect(containedIn([4, 8], [4, 5])).toBeFalsy() - expect(containedIn([4, 8], [5, 8])).toBeFalsy() -}) - -it('trim line to a period', () => { - const tLine = turf.lineString(simpleLine.geometry.coordinates) - - const res1 = trimLineToPeriod(tLine.geometry, [0, 10], [2, 8]) as LineString - expect(res1).toBeTruthy() - expect(res1.coordinates).toEqual([[0, 2], [0, 8]]) - const res2 = trimLineToPeriod(tLine.geometry, [0, 10], [2, 12]) as LineString - expect(res2.coordinates).toEqual([[0, 2], [0, 10]]) - const res3 = trimLineToPeriod(tLine.geometry, [0, 10], [-2, 4]) as LineString - expect(res3.coordinates).toEqual([[0, 0], [0, 4]]) -}) - -it('intersection of line & poly', () => { - const resTooEarly = linePolyContact(simpleLine.geometry, [0, 10], simplePoly.geometry, [5, 10]) - expect(resTooEarly).toBeUndefined() - // console.log('aa', resTooEarly?.intersection.geometry) - - const res = linePolyContact(simpleLine.geometry, [0, 10], simplePoly.geometry, [0, 10]) - expect(res).toBeTruthy() - expect(res?.startTime).toBeCloseTo(2, 2) - expect(res?.endTime).toBeCloseTo(4, 2) - const twoCross = res?.intersection.geometry as any - expect(twoCross.coordinates.length).toEqual(2) - expect(twoCross.coordinates[0]).toEqual([0, 2]) - expect(twoCross.coordinates[1]).toEqual([0, 4]) - // console.log('a', res?.intersection.geometry) - // start in poly - const startInPoly = turf.lineString([[0, 3], [0, 10]]) - const res2 = linePolyContact(startInPoly.geometry, [0, 10], simplePoly.geometry, [0, 10]) - const crossOut = res2?.intersection.geometry as any - expect(crossOut.coordinates[0].length).toEqual(2) - expect(crossOut.coordinates[0]).toEqual([0, 3]) - expect(crossOut.coordinates[1]).toEqual([0, 4]) - expect(res2).toBeTruthy() - // console.log('b', res2?.intersection.geometry) - const endInPoly = turf.lineString([[0, 0], [0, 3]]) - const res3 = linePolyContact(endInPoly.geometry, [0, 10], simplePoly.geometry, [0, 10]) - expect(res3).toBeTruthy() - // console.log('b', res3?.intersection.geometry) - const crossIn = res3?.intersection.geometry as any - expect(crossIn.coordinates.length).toEqual(2) - expect(crossIn.coordinates[0]).toEqual([0, 2]) - expect(crossIn.coordinates[1]).toEqual([0, 3]) - // console.log('c', res3) - const resTooLate = linePolyContact(endInPoly.geometry, [0, 10], simplePoly.geometry, [0, 4]) - expect(resTooLate).toBeUndefined() - // console.log('d', resTooLate?.intersection.geometry) -}) - -it('intersection of line & point', () => { - const res = linePointContact(simpleLine.geometry, [0, 10], simplePoint.geometry, [2, 10]) - expect(res).toBeTruthy() - expect(res?.startTime).toEqual(2) - expect(res?.endTime).toEqual(8) - - const outsidePoly = turf.point([1, 1]) - const res2 = linePointContact(simpleLine.geometry, [0, 10], outsidePoly.geometry, [0, 10]) - expect(res2).toBeUndefined() - - const tooEarly = linePointContact(simpleLine.geometry, [0, 10], simplePoint.geometry, [0, 6]) - expect(tooEarly).toBeUndefined() - - const tooLate = linePointContact(simpleLine.geometry, [0, 10], simplePoint.geometry, [9, 10]) - expect(tooLate).toBeUndefined() -}) - -it('intersection of line & line - invalid', () => { - const horiLine = turf.lineString([[5, 5], [-5, 5]]) - const generousRange = lineLineContact(simpleLine.geometry, [0, 10], horiLine.geometry, [4, 10], 1000) - expect(generousRange).toBeTruthy() - - const resSmallerRange = lineLineContact(simpleLine.geometry, [0, 10], horiLine.geometry, [4, 10], 100) - expect(resSmallerRange).toBeFalsy() -}) - -it('intersection of line & line - valid', () => { - const horiLine = turf.lineString([[5, 5], [-5, 5]]) - const res = lineLineContact(simpleLine.geometry, [0, 10], horiLine.geometry, [0, 10], 10) - expect(res).toBeTruthy() - const geom = res?.intersection.geometry as any - expect(geom.coordinates.length).toEqual(2) - expect(geom.coordinates[0]).toEqual(0) - expect(geom.coordinates[1]).toEqual(5) - expect(res?.startTime).toBeCloseTo(5, 2) - expect(res?.endTime).toBeCloseTo(5, 2) -}) - -it('find how far along tje line to get the polygon overlap', () => { - const tLine = turf.lineString(line.coordinates) - const tPoly = turf.polygon(poly.coordinates) - const overlap = turf.lineIntersect(tLine, tPoly) - expect(overlap).toBeTruthy() - const beforeSection = turf.lineSplit(tLine, overlap.features[0]) - const afterSection = turf.lineSplit(tLine, overlap.features[1]) - const midSection = turf.lineSplit(beforeSection.features[1], overlap.features[1]) - const beforeLength = turf.length(beforeSection.features[0], { units: 'kilometers' }) - const afterLength = turf.length(afterSection.features[1], { units: 'kilometers' }) - const midLength = turf.length(midSection.features[0], { units: 'kilometers' }) - const totalLength = turf.length(tLine, { units: 'kilometers' }) - - // const testRes = linePolyContact(data.features[0].geometry as LineString, data.features[0].geometry as Polygon ) - - !7 && console.log('line', !!linePolyContact, beforeLength, midLength, afterLength, beforeLength + midLength + afterLength, totalLength) -}) diff --git a/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.ts b/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.ts deleted file mode 100644 index b9af520ccb..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/shape-intersects.ts +++ /dev/null @@ -1,300 +0,0 @@ -import * as turf from '@turf/turf' -import { Feature, LineString, Point, Polygon } from 'geojson' -import moment from 'moment' - -/** the interaction of two shapes */ -export interface ShapeInteraction { - startTime: number - endTime: number - intersection: Feature -} - -export type TimePeriod = number[] - -export const linePointContact = (line: LineString, lineTime: TimePeriod, point: Point, polyTime: TimePeriod): ShapeInteraction | undefined => { - // trim the line to the valid period of the point - const tLine: LineString | undefined = trimLineToPeriod(line, lineTime, polyTime) - if (tLine) { - // now re-check if the line and point interact - const onLine = turf.booleanPointOnLine(point, tLine) - if (onLine) { - // sort out the time of the interaction - const fLine: Feature = turf.lineString(tLine.coordinates) - const fPoint: Feature = turf.point(point.coordinates) - const beforeSection = turf.lineSplit(fLine, fPoint).features[0] - const pointLength = turf.length(beforeSection, { units: 'kilometers' }) - const totalLength = turf.length(fLine, { units: 'kilometers' }) - const period = timeIntersect2(lineTime, polyTime) - const proportion = pointLength / totalLength - const time = tStart(period) + (tEnd(period) - tStart(period)) * proportion - const res: ShapeInteraction = { - intersection: fPoint, - startTime: tStart(period), - endTime: time - } - return res - } - } - return undefined -} - -export const lineLineContact = (lineOne: LineString, lineOneTime: TimePeriod, lineTwo: LineString, lineTwoTime: TimePeriod, - sensorRangeKm: number): ShapeInteraction | undefined => { - // trim the line to the valid period of the point - const tLineOne: LineString | undefined = trimLineToPeriod(lineOne, lineOneTime, lineTwoTime) - const tLineTwo: LineString | undefined = trimLineToPeriod(lineTwo, lineTwoTime, lineOneTime) - if (tLineOne && tLineTwo) { - // now re-check if the line and point interact - const crosses = turf.lineIntersect(tLineOne, tLineTwo) - if (crosses.features.length > 0) { - const timeOfCrossing = (line: LineString, point: Point, period: TimePeriod): number => { - const splitPoint = turf.point(point.coordinates) - const fLine = turf.lineString(line.coordinates) - const splitLine = turf.lineSplit(fLine, splitPoint) - let time - if (splitLine.features.length > 1) { - const beforeSection = splitLine.features[0] - const fullLen = turf.length(fLine, { units: 'kilometers' }) - const len = turf.length(beforeSection, { units: 'kilometers' }) - const proportion = len / fullLen - time = period[0] + (period[1] - period[0]) * proportion - } else { - // only one leg. So, point was at start or end of data - if (turf.booleanEqual(turf.point(point.coordinates), turf.point(line.coordinates[0]))) { - time = period[0] - } else if (turf.booleanEqual(turf.point(point.coordinates), turf.point(line.coordinates[line.coordinates.length - 1]))) { - time = period[1] - } else { - console.warn('Wrong presumption about splitting line by point', point.coordinates, line.coordinates[0], line.coordinates[line.coordinates.length - 1]) - time = period[0] - } - } - return time - } - - // find the time of the crossing on line one - const fullLineOne = turf.lineString(lineOne.coordinates) - const crossPoint = turf.point(crosses.features[0].geometry.coordinates) - const timeOne = timeOfCrossing(fullLineOne.geometry, crossPoint.geometry, lineOneTime) - - /** check if the first period is wholly contained within the second period */ - const containsTime2 = (period: TimePeriod, time: number): boolean => { - return time >= tStart(period) && time <= tEnd(period) - } - - const notZeroLength = lineTwoTime[1] > lineTwoTime[0] - - // check if line two is alive at time one - if (notZeroLength && containsTime2(lineTwoTime, timeOne)) { - // find where the second line would be at this time - const fLineTwo = turf.lineString(lineTwo.coordinates) - const proportion = (timeOne - lineTwoTime[0]) / (lineTwoTime[1] - lineTwoTime[0]) - const fullLength = turf.length(fLineTwo, { units: 'kilometers' }) - const length = proportion * fullLength - const lineTwoAtTimeOne = turf.along(fLineTwo, length, { units: 'kilometers' }) - const distanceApart = turf.distance(crossPoint, lineTwoAtTimeOne, { units: 'kilometers' }) - - if (distanceApart <= sensorRangeKm) { - // find the time of the crossing on line two - const timeTwo = timeOfCrossing(lineTwo, crossPoint.geometry, lineTwoTime) - const meanTime = (timeOne + timeTwo) / 2 - const res: ShapeInteraction = { - intersection: crossPoint, - startTime: meanTime, - endTime: meanTime - } - return res - } - } - } - } - return undefined -} - -export const showPeriod = (timePeriod: TimePeriod): string => { - return moment(timePeriod[0]).toISOString() + ' - ' + moment(timePeriod[1]).toISOString() -} - -export const linePolyContact = (line: LineString, lineTime: TimePeriod, poly: Polygon, polyTime: TimePeriod): ShapeInteraction | undefined => { - // trim the line to the valid period of the poly - const tLine: LineString | undefined = trimLineToPeriod(line, lineTime, polyTime) - if (tLine) { - const fLine: Feature = turf.lineString(tLine.coordinates) - const fPoly: Feature = turf.polygon(poly.coordinates) - const overlap = turf.lineIntersect(tLine, fPoly) - const contains = turf.booleanContains(fPoly, fLine) - const timeI = timeIntersect2(lineTime, polyTime) - // console.log('LinePolygonInteraction', tLine, fLine, fPoly, 'line time:', showPeriod(lineTime), - // 'poly time:', showPeriod(polyTime), - // 'intersect time:', showPeriod(timeI), 'overlap:', overlap, ' contains:', contains, overlap && overlap.features.length) - if (contains) { - const res: ShapeInteraction = { - intersection: fLine, - startTime: timeI[0], - endTime: timeI[1] - } - return res - } else { - const items = overlap.features.length - if (items === 0) { - return undefined - } else if (items >= 2) { - // ok, line runs both sides of polygon - const beforeSection = turf.lineSplit(fLine, overlap.features[0]) - const midSection = turf.lineSplit(beforeSection.features[1], overlap.features[1]) - - // trim time to the period representing the mid-section - const fullLine = turf.lineString(line.coordinates) - const fullLen = turf.length(fullLine) - const startCoords = midSection.features[0].geometry.coordinates[0] - const startPoint = turf.point(startCoords) - const beforeLeg = turf.lineSplit(fullLine, startPoint).features[0] - const beforeLen = turf.length(beforeLeg) - const beforeProportion = beforeLen / fullLen - const afterCoords = midSection.features[0].geometry.coordinates - const afterCoord = afterCoords[afterCoords.length - 1] - const afterPoint = turf.point(afterCoord) - const split = turf.lineSplit(fullLine, afterPoint) - if (split.features.length > 1) { - // line crosses polygon, get ready to trim remainder - const afterLine = split.features[1] - const afterLen = turf.length(afterLine) - const afterProportion = afterLen / fullLen - const totalTime = lineTime[1] - lineTime[0] - const startTime = lineTime[0] + totalTime * beforeProportion - const endTime = lineTime[1] - totalTime * afterProportion - const res: ShapeInteraction = { - intersection: midSection.features[0], - startTime: startTime, - endTime: endTime - } - return res - } else { - // line finishes on poly - const totalTime = lineTime[1] - lineTime[0] - const startTime = lineTime[0] + totalTime * beforeProportion - const endTime = lineTime[1] - const res: ShapeInteraction = { - intersection: midSection.features[0], - startTime: startTime, - endTime: endTime - } - return res - } - } else { - // line only passes it once, so one end is inside the polygon. - // Have to find out if start or end is in polygon - const fPoint = turf.point(line.coordinates[0]) - const singleCrossing = turf.lineSplit(fLine, overlap.features[0]) - const fullLine = turf.lineString(line.coordinates) - const fullLen = turf.length(fullLine) - const totalTime = lineTime[1] - lineTime[0] - - const startInPoly = turf.booleanContains(fPoly, fPoint) - let startTime - let endTime - if (startInPoly) { - // trim time off the start - const afterCoords = singleCrossing.features[0].geometry.coordinates - const afterCoord = afterCoords[afterCoords.length - 1] - const afterPoint = turf.point(afterCoord) - const afterLine = turf.lineSplit(fullLine, afterPoint).features[1] - const afterLen = turf.length(afterLine) - const afterProportion = afterLen / fullLen - startTime = timeI[0] - endTime = lineTime[1] - totalTime * afterProportion - } else { - // trim time off the end - const startCoords = singleCrossing.features[1].geometry.coordinates[0] - const startPoint = turf.point(startCoords) - const beforeLeg = turf.lineSplit(fullLine, startPoint).features[0] - try { - const beforeLen = turf.length(beforeLeg) - const beforeProportion = beforeLen / fullLen - startTime = lineTime[0] + totalTime * beforeProportion - endTime = timeI[1] - } catch (err) { - console.log('turn issue in line length', startCoords, startPoint, beforeLeg) - return undefined - } - } - const indexToUse = startInPoly ? 0 : 1 - const res: ShapeInteraction = { - intersection: singleCrossing.features[indexToUse], - startTime: startTime, - endTime: endTime - } - return res - } - } - } else { - return undefined - } -} - -const elapsed = (period: TimePeriod): number => { - return period[1] - period[0] -} - -const tStart = (period: TimePeriod): number => { - return period[0] -} - -const tEnd = (period: TimePeriod): number => { - return period[1] -} - -/** check if the first period is wholly contained within the second period */ -export const containedIn = (periodOne: TimePeriod, periodTwo: TimePeriod): boolean => { - return tStart(periodOne) >= tStart(periodTwo) && tEnd(periodOne) <= tEnd(periodTwo) -} - -/** check if the first period is wholly contained within the second period */ -export const containsTime = (period: TimePeriod, time: number): boolean => { - return time >= tStart(period) && time <= tEnd(period) -} - -export const trimLineToPeriod = (line: LineString, lineTime: TimePeriod, otherTime: TimePeriod): LineString | undefined => { - if (containedIn(lineTime, otherTime)) { - return line - } else { - let tLine = turf.lineString(line.coordinates) - const totalLength = turf.length(tLine, { units: 'kilometers' }) - const lineStart = tStart(lineTime) - const otherStart = tStart(otherTime) - const lineEnd = tEnd(lineTime) - const otherEnd = tEnd(otherTime) - if (lineStart < otherStart) { - // have to trim some off my start - const diff = otherStart - lineStart - const proportion = diff / elapsed(lineTime) - const lengthToCut = proportion * totalLength - const splitPoint = turf.along(line, lengthToCut, { units: 'kilometers' }) - const splitLine = turf.lineSplit(tLine, splitPoint) - // if the split is very near to the start, we still just have one line segment - tLine = splitLine.features.length === 2 ? splitLine.features[1] : splitLine.features[0] - } - if (lineEnd > otherEnd) { - // have to trim some off the end - const diff = lineEnd - otherEnd - const proportion = diff / elapsed(lineTime) - const newLength = turf.length(tLine, { units: 'kilometers' }) - const lengthToCut = newLength - (proportion * totalLength) - const fixedLength = lengthToCut > 0 ? lengthToCut : 0 - const splitPoint = turf.along(tLine, fixedLength, { units: 'kilometers' }) - const splitLine = turf.lineSplit(tLine, splitPoint) - tLine = splitLine.features[0] - } - if (tLine) { - return tLine.geometry as LineString - } else { - return undefined - } - } -} - -export const timeIntersect2 = (periodOne: TimePeriod, periodTwo: TimePeriod): TimePeriod => { - const start = Math.max(tStart(periodOne), tStart(periodTwo)) - const end = Math.min(tEnd(periodOne), tEnd(periodTwo)) - return [start, end] -} diff --git a/client/src/Components/pf-planning/support-panel/helpers/update-location-timings.ts b/client/src/Components/pf-planning/support-panel/helpers/update-location-timings.ts deleted file mode 100644 index 2021446bed..0000000000 --- a/client/src/Components/pf-planning/support-panel/helpers/update-location-timings.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Asset, ForceData, PlannedActivityGeometry } from 'src/custom-types' -import { findAsset, updateGeometryTimings } from 'src/Helpers' -import { sum } from 'lodash' - -export const updateLocationTimings = (planId: string, plans: PlannedActivityGeometry[], - assets: Asset['uniqid'][], forces: ForceData[], startTime: string, endTime: string): PlannedActivityGeometry[] => { - // sort out the assets - const speeds: number[] = [] - assets.forEach((id: string) => { - const asset = findAsset(forces, id) - const attributes = asset.attributes - if (attributes) { - const spdVal = attributes.a_Speed - if (spdVal) { - speeds.push(spdVal as number) - } - } - }) - if (speeds.length > 0) { - const total = sum(speeds) - const mean = total / speeds.length - // now update the items - return updateGeometryTimings(plans, startTime, endTime, mean) - } else { - console.warn('unable to find assets with speed for plans', planId) - return plans - } -} diff --git a/client/src/Components/pf-planning/support-panel/index.non-spec.tsx b/client/src/Components/pf-planning/support-panel/index.non-spec.tsx deleted file mode 100644 index c66f4a766a..0000000000 --- a/client/src/Components/pf-planning/support-panel/index.non-spec.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* global it expect */ -import { INFO_MESSAGE_CLIPPED, Phase, PLANNING_MESSAGE } from 'src/config' -import { ChannelPlanning, MessageInteraction, MessagePlanning } from 'src/custom-types' -import { forceColors } from 'src/Helpers' -import { P9BMock, planningMessages as planningChannelMessages, turnPeriod } from 'src/mocks' -import { noop } from 'lodash' -import React from 'react' -import renderer from 'react-test-renderer' -import SupportPanel from './index' - -const planningChannel = P9BMock.data.channels.channels[0] as ChannelPlanning -const forces = P9BMock.data.forces.forces -const blueForce = forces[1] -const blueRole = blueForce.roles[0] -const allTemplates = P9BMock.data.templates ? P9BMock.data.templates.templates : [] -const platformTypes = (P9BMock.data.platformTypes && P9BMock.data.platformTypes.platformTypes) || [] - -const nonInfoMessages = planningChannelMessages.filter((msg) => msg.messageType !== INFO_MESSAGE_CLIPPED) as Array -const planningMessages = nonInfoMessages.filter((msg) => msg.details.messageType === PLANNING_MESSAGE) as Array - -describe('Support Panel component: ', () => { - it('renders component correctly', () => { - const tree = renderer - .create( noop} - saveNewActivityTimeMessage={(): any => noop} - selectedForce={blueForce} - selectedRoleId={blueRole.roleId} - selectedRoleName={blueRole.name} - setOpForcesForParent={noop} - setOwnForcesForParent={noop} - allOppAssets={[]} - allOwnAssets={[]} - />) - .toJSON() - expect(tree).toMatchSnapshot() - }) -}) diff --git a/client/src/Components/pf-planning/support-panel/index.stories-inc.tsx b/client/src/Components/pf-planning/support-panel/index.stories-inc.tsx deleted file mode 100644 index 62f8c2db0c..0000000000 --- a/client/src/Components/pf-planning/support-panel/index.stories-inc.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import { INFO_MESSAGE_CLIPPED, INTERACTION_MESSAGE, Phase, PLANNING_MESSAGE } from 'src/config' -import { ChannelPlanning, ForceData, MessageDetails, MessageInteraction, MessagePlanning, Role } from 'src/custom-types' -import { forceColors, incrementGameTime, platformIcons } from 'src/Helpers' -import { P9BMock, planningMessages as planningChannelMessages, turnPeriod } from 'src/mocks' -import { withKnobs } from '@storybook/addon-knobs' -import { Story } from '@storybook/react/types-6-0' -import { cloneDeep, noop } from 'lodash' -import moment from 'moment' -import React from 'react' -import { getOppAssets, getOwnAssets } from '../planning-assets/helpers/collate-assets' -import { TAB_ADJUDICATE, TAB_MY_ORDERS } from './constants' -import SupportPanel from './index' -import docs from './README.md' -import SupportPanelProps from './types/props' - -const wrapper: React.FC = (storyFn: any) =>
{storyFn()}
- -const planningChannel = P9BMock.data.channels.channels[0] as ChannelPlanning -const forces = P9BMock.data.forces.forces -const templates = P9BMock.data.templates ? P9BMock.data.templates.templates : [] -const gameDate = P9BMock.data.overview.gameDate -const gameTime = moment(gameDate).valueOf() - -const allRoles: string[] = [] -forces.forEach((force: ForceData) => { - force.roles.forEach((role: Role) => { - allRoles.push(force.uniqid + ' ~ ' + role.roleId) - }) -}) - -const nonInfoMessage = planningChannelMessages.filter((msg) => msg.messageType !== INFO_MESSAGE_CLIPPED) as Array -const planningMessages = nonInfoMessage.filter((msg: MessagePlanning | MessageInteraction) => msg.messageType === PLANNING_MESSAGE) as Array -const interactionMessages = nonInfoMessage.filter((msg: MessagePlanning | MessageInteraction) => msg.messageType === INTERACTION_MESSAGE) as Array -const attributeTypes = P9BMock.data.attributeTypes ? P9BMock.data.attributeTypes.attributes : [] - -export default { - title: 'local/organisms/SupportPanel', - component: SupportPanel, - decorators: [withKnobs, wrapper], - parameters: { - readme: { - // Show readme before story - content: docs - }, - options: { - // We have no addons enabled in this story, so the addon panel should be hidden - showPanel: true - }, - controls: { - expanded: true - } - }, - argTypes: { - selectedRoleName: { - name: 'View as', - defaultValue: allRoles[1], - options: allRoles, - control: { - type: 'select' - } - } - } -} - -const platformTypes = (P9BMock.data.platformTypes && P9BMock.data.platformTypes.platformTypes) || [] -const activities = P9BMock.data.activities ? P9BMock.data.activities.activities : [] - -// produce the own and opp assets for this player force -const forceCols = forceColors(forces) -const platIcons = platformIcons(platformTypes) -const own = getOwnAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []) -const opp = getOppAssets(forces, forceCols, platIcons, forces[1], platformTypes, attributeTypes, gameTime, []) - -const Template: Story = (args) => { - const roleStr: string = args.selectedRoleName - const initialTab = args.initialTab - const planningMessages = args.planningMessages - const interactionMessages = args.interactionMessages - - console.log('planning messages', planningMessages) - - // separate out the two elements of the combined role - const ind = roleStr.indexOf(' ~ ') - const forceStr = roleStr.substring(0, ind) - const role = roleStr.substring(ind + 3) - - const saveMessage = (dbName: string, details: MessageDetails, message: any) => { - return async (): Promise => { - console.log('dbName: ', dbName, ', details: ', details, ', message: ', message) - } - } - - const force = forces.find((value: ForceData) => value.uniqid === forceStr) - if (!force) { - throw Error('can\'t find force') - } - const roleVal = force.roles.find((roleVal: Role) => roleVal.roleId === role) - if (!roleVal) { - throw Error('can\'t find role') - } - - return (): void => { console.log('save activity') }} - selectedRoleId={roleVal.roleId} - selectedRoleName={roleVal.name} - selectedForce={force} - setOpForcesForParent={noop} - setOwnForcesForParent={noop} - allOppAssets={opp} - allOwnAssets={own} - initialTab={initialTab} - /> -} - -// mangle some dates -const firstTurn = turnPeriod[0] -const startTime = moment.utc(firstTurn.gameDate).valueOf() -const secondTurn = turnPeriod[1] -const secondEnd = incrementGameTime(secondTurn.gameDate, secondTurn.gameTurnTime) -const secondEndTime = moment.utc(secondEnd).valueOf() -const secondStartTime = moment.utc(secondTurn.gameDate).valueOf() -const midPoint = secondStartTime + (secondEndTime - secondStartTime) / 2 - -const newPlans = cloneDeep(planningMessages) as MessagePlanning[] -const msgToMove1 = newPlans[4] -msgToMove1.message.startDate = moment.utc(midPoint).toISOString() -msgToMove1.message.endDate = moment.utc(midPoint + 500000).toISOString() -const msgToMove2 = newPlans[5] -msgToMove2.message.startDate = moment.utc(startTime - 100000).toISOString() -msgToMove2.message.endDate = moment.utc(midPoint + 500000).toISOString() - -const newInter = cloneDeep(interactionMessages) as MessageInteraction[] -const interToMove1 = newInter[2] -const intertoMove2 = newInter[3] -if (interToMove1.details.interaction) { - interToMove1.details.interaction = { - ...interToMove1.details.interaction, - startTime: moment.utc(midPoint).toISOString(), - endTime: moment.utc(midPoint + 500000).toISOString() - } -} -if (intertoMove2.details.interaction) { - intertoMove2.details.interaction = { - ...intertoMove2.details.interaction, - startTime: moment.utc(startTime - 100000).toISOString(), - endTime: moment.utc(midPoint + 500000).toISOString() - } -} - -export const Default = Template.bind({}) -Default.args = { - planningMessages: planningMessages, - interactionMessages: newInter -} - -export const OrdersTab = Template.bind({}) -OrdersTab.args = { - initialTab: TAB_MY_ORDERS, - planningMessages: newPlans, - interactionMessages: newInter -} - -const redForce = forces[2] -export const OrdersForRedPlayer = Template.bind({}) -OrdersForRedPlayer.args = { - initialTab: TAB_MY_ORDERS, - planningMessages: newPlans, - interactionMessages: newInter, - selectedForce: redForce, - selectedRoleName: allRoles[10] -} - -export const AdjudicationTab = Template.bind({}) -AdjudicationTab.args = { - initialTab: TAB_ADJUDICATE, - planningMessages: newPlans, - interactionMessages: newInter, - selectedRoleName: allRoles[1] -} - -// console.log('fixing data') -// forces.forEach((force) => { -// if (force.assets) { -// force.assets.forEach((asset) => { -// if (asset.platformTypeId.includes('istar')) { -// if (asset.attributes) { -// asset.attributes.a_Search_Rate = 110 -// console.log('updated') -// } else { -// console.warn('found asset without attributes') -// } -// } -// }) -// } -// }) -// console.log('updated', forces) diff --git a/client/src/Components/pf-planning/support-panel/index.tsx b/client/src/Components/pf-planning/support-panel/index.tsx deleted file mode 100644 index 64881dcd37..0000000000 --- a/client/src/Components/pf-planning/support-panel/index.tsx +++ /dev/null @@ -1,542 +0,0 @@ -import { Column } from '@material-table/core' -import Slide from '@material-ui/core/Slide' -import MoreVert from '@material-ui/icons/MoreVert' -import { ADJUDICATION_PHASE, MESSAGE_SENT_INTERACTION, SUPPORT_PANEL_LAYOUT } from 'src/config' -import { MessageDetails, MessagePlanning, MessageSentInteraction, MessageStructure, PerForcePlanningActivitySet, PlannedActivityGeometry, PlannedProps, PlanningMessageStructure, PlanningMessageStructureCore } from 'src/custom-types' -import { incrementGameTime, platformIcons, PlatformStyle } from 'src/Helpers' -import { updateLocationNames } from 'src/Helpers/geometry-helpers' -import cx from 'classnames' -import { noop, sortBy } from 'lodash' -import LRU from 'lru-cache' -import moment from 'moment' -import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react' -import { Rnd } from 'react-rnd' -import NewMessage from '../../local/form-elements/new-message' -import { AdjudicationRow } from '../adjudication-messages-list/types/props' -import PlanningAssets from '../planning-assets' -import { AssetRow } from '../planning-assets/types/props' -import { collapseLocation, expandLocation } from '../planning-messages-list/helpers/collapse-location' -import { OrderRow } from '../planning-messages-list/types/props' -import { DEFAULT_SIZE, LRU_CACHE_OPTION, MAX_PANEL_HEIGHT, MAX_PANEL_WIDTH, MIN_PANEL_HEIGHT, MIN_PANEL_WIDTH, PANEL_STYLES, TAB_ADJUDICATE, TAB_MY_FORCE, TAB_MY_ORDERS, TAB_OPP_FOR } from './constants' -import { customiseActivities } from './helpers/customise-activities' -import { customiseAssets } from './helpers/customise-assets' -import { customiseLiveOrders } from './helpers/customise-live-orders' -import { customiseLocation } from './helpers/customise-location' -import TurnFilter from './helpers/TurnFilter' -import { updateLocationTimings } from './helpers/update-location-timings' -import styles from './styles.module.scss' -import PropTypes, { PanelActionTabsProps, SupportPanelContextInterface } from './types/props' -import { customiseMissiles } from './helpers/customise-missiles' -import { customiseCyberCards } from './helpers/customise-cards' - -export const SupportPanelContext = createContext({ selectedAssets: [], setCurrentAssets: noop, setCurrentOrders: noop, setCurrentInteraction: noop, assetsCache: new LRU(LRU_CACHE_OPTION), onSupportPanelLayoutChange: noop, getSupportPanelState: noop }) - -export const SupportPanel: React.FC = ({ - platformTypes, - planningMessages, - interactionMessages, - channel, - allTemplates, - saveMessage, - saveNewActivityTimeMessage, - saveCachedNewMessageValue, - getCachedNewMessagevalue, - clearCachedNewMessage, - selectedForce, - selectedRoleId, - selectedRoleName, - allForces, - forceColors, - allPeriods, - gameDate, - gameTurnLength: gameTurnTime, - currentTurn, - phase, - currentWargame, - setSelectedAssets, - setOpForcesForParent, - setOwnForcesForParent, - allOppAssets, - allOwnAssets, - onPanelWidthChange, - draftMessage, - onCancelDraftMessage, - forcePlanningActivities, - editLocation, - attributeTypes, - initialTab, - forceTemplateData -}) => { - const umpireInAdjudication = selectedForce.umpire && (phase === ADJUDICATION_PHASE) - const [activeTab, setActiveTab] = useState(initialTab || (umpireInAdjudication ? TAB_ADJUDICATE : TAB_MY_FORCE)) - const [isShowPanel, setShowPanel] = useState(true) - const [platIcons] = useState(platformIcons(platformTypes)) - - const [gameTurnEndDate, setGameTurnEndDate] = useState('') - - const selectedOwnAssets = useRef([]) - const selectedOpAssets = useRef([]) - - const [sortedOwnAssets, setSortedOwnAssets] = useState([]) - const [sortedOppAssets, setSortedOppAssets] = useState([]) - - const [turnFilter, setTurnFilter] = useState(-1) - const [localDraftMessage, setLocalDraftMessage] = useState(undefined) - const [activitiesForThisForce, setActivitiesForThisForce] = useState(undefined) - const [pendingLocationData, setPendingLocationData] = useState([]) - const { setCurrentOrders, setCurrentAssets, setCurrentInteraction, onSupportPanelLayoutChange, getSupportPanelState } = useContext(SupportPanelContext) - - const [pendingDetailOpen, setPendingDetailOpen] = useState(undefined) - const [pendingDetailClose, setPendingDetailClose] = useState(false) - - const panelState = useMemo(() => getSupportPanelState(), []) - - const onTabChange = (tab: string): void => { - setShowPanel(activeTab !== tab || !isShowPanel) - setActiveTab(tab) - console.log('tab', tab) - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.OPENING_TAB, tab) - } - - const getPanelWidthFromCache = () => { - const panelWidth = panelState[SUPPORT_PANEL_LAYOUT.SUPPORT_PANEL_WIDTH] - if (panelWidth && !isNaN(parseInt(panelWidth))) { - return parseInt(panelWidth) - } - return MIN_PANEL_WIDTH - } - - useEffect(() => { - const openingTab = panelState[SUPPORT_PANEL_LAYOUT.OPENING_TAB] - if (openingTab) { - setActiveTab(openingTab) - } - setTimeout(() => { - const panelWidth = getPanelWidthFromCache() - if (panelWidth !== MIN_PANEL_WIDTH) { - onPanelWidthChange && onPanelWidthChange(panelWidth) - } else { - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.SUPPORT_PANEL_WIDTH, '' + panelWidth) - } - }) - }, []) - - useEffect(() => { - setSortedOwnAssets(sortBy(allOwnAssets, function (row) { return row.name })) - }, [allOwnAssets]) - - useEffect(() => { - setSortedOppAssets(sortBy(allOppAssets, function (row) { return row.name })) - }, [allOppAssets]) - - useEffect(() => { - setLocalDraftMessage(draftMessage) - if (draftMessage) { - setActiveTab(TAB_MY_ORDERS) - } - }, [draftMessage]) - - useEffect(() => { - if (gameDate !== '' && gameTurnTime) { - const endDate = incrementGameTime(gameDate, gameTurnTime) - setGameTurnEndDate(endDate) - } - }, [gameDate, gameTurnTime]) - - useEffect(() => { - if (forcePlanningActivities) { - const thisForce = forcePlanningActivities.find((act: PerForcePlanningActivitySet) => act.force === selectedForce.uniqid) - setActivitiesForThisForce(thisForce) - } - }, [forcePlanningActivities, selectedForce]) - - const TabPanelActions = ({ onChange, className }: PanelActionTabsProps): React.ReactElement => { - if (selectedForce.umpire) { - return
-

onChange(TAB_MY_FORCE)} className={cx({ [styles.active]: activeTab === TAB_MY_FORCE })}>All Forces

-

onChange(TAB_MY_ORDERS)} className={cx({ [styles.active]: activeTab === TAB_MY_ORDERS })}>Orders

-

onChange(TAB_ADJUDICATE)} className={cx({ [styles.active]: activeTab === TAB_ADJUDICATE })}>Adjudication

-
- } else { - return
-

onChange(TAB_MY_FORCE)} className={cx({ [styles.active]: activeTab === TAB_MY_FORCE })}>My Force

-

onChange(TAB_MY_ORDERS)} className={cx({ [styles.active]: activeTab === TAB_MY_ORDERS })}>Orders

-

onChange(TAB_OPP_FOR)} className={cx({ [styles.active]: activeTab === TAB_OPP_FOR })}>Other Forces

-
- } - } - - const onRender = (): void => { - console.log('=> render') - } - - const handleSelectedAssetChange = () => { - const allSelectedAssets = selectedOwnAssets.current.concat(selectedOpAssets.current) - const selectedAssetIDs = allSelectedAssets.map((row: AssetRow) => row.id) - setSelectedAssets(selectedAssetIDs) - } - - useEffect(() => { - onPanelWidthChange && onPanelWidthChange(isShowPanel ? MIN_PANEL_WIDTH : 0) - }, [isShowPanel]) - - const onVisibleRowsChange = (opFor: boolean, data: AssetRow[]): void => { - if (opFor) { - setOpForcesForParent(data) - } else { - setOwnForcesForParent(data) - } - } - - const cancelNewOrders = (): void => { - onCancelDraftMessage && onCancelDraftMessage() - // also the local document - setLocalDraftMessage(undefined) - } - - const postBack = (details: MessageDetails, message: any): void => { - console.log('SupportPanel - save message postack', message.Reference) - - // We removed an hour from dates - due to flatPickr bug. Replace that hour - // NO - game now out of daylight savings time, so locale format is GMT, - // and flatPickr bug doesn't apply. - if (message.startDate) { - message.startDate = moment(message.startDate).toISOString() - } - if (message.endDate) { - message.endDate = moment(message.endDate).toISOString() - } - - // do we have any pending geometry - if (pendingLocationData.length > 0) { - const plan = message as MessagePlanning - console.log('injecting geometry', plan.message.location, pendingLocationData) - } - - const activity: MessageSentInteraction = { - aType: MESSAGE_SENT_INTERACTION - } - - saveNewActivityTimeMessage(selectedRoleId, activity, currentWargame) - - // fix the location bits, if necessary - const updatedDoc = localModifyForSave(message) - - saveMessage(currentWargame, details, updatedDoc)() - // also clear local one - setLocalDraftMessage(undefined) - } - - const onSizeChange = (_: MouseEvent | TouchEvent, __: any, elementRef: HTMLElement): void => { - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.SUPPORT_PANEL_WIDTH, '' + elementRef.offsetWidth) - onPanelWidthChange && onPanelWidthChange(elementRef.offsetWidth) - } - - const onTurnFilterChange = (turn: number) => { - setTurnFilter(turn) - } - - const localCustomiseTemplate = (document: MessageStructure | undefined, schema: Record): Record => { - // sort out which orders are currently "live" - const turnStart = moment(gameDate) - const turnEnd = moment(gameTurnEndDate) - const myForceOrders = planningMessages.filter((plan) => plan.details.from.forceId === selectedForce.uniqid) - const liveOrders: MessagePlanning[] = myForceOrders.filter((plan: MessagePlanning) => { - const startDate = plan.message.startDate - const endDate = plan.message.endDate - if (startDate && endDate) { - const startD = moment(startDate) - const endD = moment(endDate) - return startD.isBefore(turnEnd) && endD.isAfter(turnStart) - } else { - // console.log('Support panel. Orders start/end missing, so cannot offer for live orders', plan.message.Reference, plan) - return true - } - }) - - // specify the date formats, and default date for any flatPickr controls - const fixDate = (element: any, gameDate: string): any => { - if (element && element.options && element.options.flatpickr) { - element.options.flatpickr.dateFormat = 'Z' - element.options.flatpickr.altInput = true - element.options.flatpickr.altFormat = 'M dHi\\Z' - if (gameDate) { - const localDate = moment.utc(gameDate).toISOString() - element.options.flatpickr.defaultDate = localDate - } - } - return element - } - - // check this isn't an adjudication message, since we only - // set the default dates, if this is a planning message - const schemaTitle: string = schema.title || 'unknown' - if (!schemaTitle.startsWith('Adjudicat')) { - if (gameDate && schema.properties) { - fixDate(schema.properties.startDate, gameDate) - fixDate(schema.properties.endDate, gameDate) - } - } - - // we have an issue where flatPickr is showing dates on hour out - it is adding an hour. - // There isn't a fix for it, so manually subtract an hour - so the Z date-time is displayed - // NO: game time now in winter, so locale time is GMT, and flatpickr bug - // doesnt' apply - if (document) { - const plan = document as PlanningMessageStructure - if (plan.startDate && plan.startDate.length > 0) { - plan.startDate = moment.utc(plan.startDate).toISOString() - } - if (plan.endDate && plan.endDate.length > 0) { - plan.endDate = moment.utc(plan.endDate).toISOString() - } - } - - // now modify the template - const customisers: Array<{ (document: MessageStructure | undefined, schema: Record): Record }> = [ - (document, template) => customiseAssets(document, template, sortedOwnAssets, sortedOppAssets), - (document, template) => customiseActivities(document, template, forcePlanningActivities || [], selectedForce), - (document, template) => customiseLocation(document, template), - (document, template) => customiseLiveOrders(document, template, liveOrders), - (document, template) => customiseMissiles(document, template, selectedForce.uniqid, !!selectedForce.umpire, forceTemplateData), - (document, template) => customiseCyberCards(document, template, selectedForce.uniqid, !!selectedForce.umpire, forceTemplateData) - ] - - let current: Record = { ...schema } - customisers.forEach((fn) => { - current = fn(document, current) - }) - return current - } - - const localModifyForSave = (document: Record): Record => { - const fixedLocation = expandLocation(document) - const planDoc = fixedLocation as PlanningMessageStructureCore - if (planDoc.location && planDoc.ownAssets) { - const ownAssets = planDoc.ownAssets.map((item: { asset: string }) => item.asset) - // update the start/end time in the props - const updatedLocations = updateLocationTimings(planDoc.Reference, planDoc.location, ownAssets, allForces, planDoc.startDate, planDoc.endDate) - !7 && summariseLocations('before', planDoc.location) - !7 && summariseLocations('after', updatedLocations) - planDoc.location = updatedLocations - } - - // also try to fix the names - planDoc.location = planDoc.location ? updateLocationNames(planDoc.location, activitiesForThisForce) : undefined - - return planDoc - } - - const assetsForOrders = (id?: string): string[] => { - let res: string[] = [] - const plan = planningMessages.find((msg) => msg._id === id) - if (plan) { - const mine = plan.message.ownAssets || [] - const myIds = mine.map((val: { asset: string, number: number }): string => val.asset) - const others = plan.message.otherAssets ? plan.message.otherAssets.map((val: { asset: string }): string => val.asset) : [] - res = myIds.concat(others) - } - return res - } - - useEffect(() => { - if (pendingDetailOpen) { - const rowData = pendingDetailOpen - setPendingDetailOpen(undefined) - switch (activeTab) { - case TAB_MY_ORDERS: { - const order = rowData as OrderRow - const plan = planningMessages.find((msg) => msg._id === order.id) - if (plan) { - const mine = plan.message.ownAssets || [] - const myIds = mine.map((val: { asset: string, number: number }): string => val.asset) - const others = plan.message.otherAssets ? plan.message.otherAssets.map((val: { asset: string }): string => val.asset) : [] - const allIds = myIds.concat(others) - setCurrentAssets(allIds) - setCurrentOrders([plan._id]) - } - break - } - case TAB_ADJUDICATE: { - const adj = rowData as AdjudicationRow - - const doc = interactionMessages.find((doc) => doc._id === adj.id) - if (doc) { - const inter = doc.details.interaction - if (inter) { - // get the assets - const assets1 = assetsForOrders(inter.orders1) - const assets2 = assetsForOrders(inter.orders2) - const assets3 = inter.otherAssets || [] - const allAssets = assets1.concat(assets2).concat(assets3) - setCurrentAssets(allAssets) - setCurrentInteraction(adj.reference) - } - } - } - } - } - }, [planningMessages, interactionMessages, pendingDetailOpen, activeTab]) - - useEffect(() => { - if (pendingDetailClose) { - setPendingDetailClose(false) - setCurrentAssets(undefined) - setCurrentOrders([]) - if (activeTab === TAB_ADJUDICATE) { - setCurrentInteraction(undefined) - } - } - }, [pendingDetailClose, activeTab]) - - const storeNewLocation = (geoms: PlannedActivityGeometry[]): void => { - console.log('storing new geometries', geoms) - setPendingLocationData(geoms) - } - - const localEditLocation = (geoms: PlannedActivityGeometry[]): void => { - console.log('local edit location', geoms) - setPendingLocationData(geoms) - editLocation && editLocation(geoms, storeNewLocation) - - // if (message.message.location) { - // const localCallback = (newValue: unknown): void => { - // pendingLocationData.push(newValue as PlannedActivityGeometry[]) - // } - // // pass the location data object - // editLocation && editLocation(message.message.location, localCallback) - // } - } - - const summariseLocations = (title: string, plans: PlannedActivityGeometry[]): void => { - console.log('== ' + title + ' ==') - console.table(plans.map((plan: PlannedActivityGeometry) => { - const props = plan.geometry.properties as PlannedProps - return { - id: plan.uniqid, - start: props.startDate, - end: props.endDate - } - })) - } - - const mapColumnState = (activeTab: string, columns: Column[]): string => { - const mapCols = columns.map(col => ({ field: col.field, hidden: col.hidden || false })) - const objRes = {} - objRes[activeTab] = mapCols - return JSON.stringify(objRes) - } - - const onMyForceTableColumnChange = (columns: Column[]) => { - if (activeTab === TAB_MY_FORCE) { - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.VISIBLE_COLUMNS, mapColumnState(activeTab, columns)) - } - } - - const onOtherForceTableColumnChange = (columns: Column[]) => { - if (activeTab === TAB_OPP_FOR) { - onSupportPanelLayoutChange(SUPPORT_PANEL_LAYOUT.VISIBLE_COLUMNS, mapColumnState(activeTab, columns)) - } - } - - return ( -
- -
- -
-
- { - selectedOwnAssets.current = ownAssets - handleSelectedAssetChange() - }} - onVisibleRowsChange={(data): void => onVisibleRowsChange(false, data)} - onVisibleColumnsChange={onMyForceTableColumnChange} - /> -
-
- - {localDraftMessage && collapseLocation(document, activitiesForThisForce)} - modifyForSave={localModifyForSave} - draftMessage={localDraftMessage} - editCallback={localEditLocation} - />} -
-
- { - selectedOpAssets.current = opAssets - handleSelectedAssetChange() - }} - onVisibleRowsChange={(data): void => onVisibleRowsChange(true, data)} - onVisibleColumnsChange={onOtherForceTableColumnChange} - /> -
-
- -
-
-
- -
-
-
-
- -
-
- -
- ) -} - -const areEqual = (prevProps: PropTypes, nextProps: PropTypes): boolean => JSON.stringify(prevProps) === JSON.stringify(nextProps) - -export default React.memo(SupportPanel, areEqual) diff --git a/client/src/Components/pf-planning/support-panel/styles.module.scss b/client/src/Components/pf-planning/support-panel/styles.module.scss deleted file mode 100644 index 35aa1cd6ca..0000000000 --- a/client/src/Components/pf-planning/support-panel/styles.module.scss +++ /dev/null @@ -1,144 +0,0 @@ -@import "../../../themes/dependencies/variables"; - -.root { - min-width: 350px; - width: 100%; - height: 100%; - display: flex; - position: absolute; - overflow: hidden; - pointer-events: none; -} - -.content { - min-width: 330px; - width: 100%; - height: 100%; - border: 0; - background-color: #fff; - display: flex; - justify-content: center; - border-right: 2px solid #000; -} - -.action-tab { - width: 30px; - height: fit-content; - writing-mode: vertical-lr; - display: flex; - - p { - cursor: pointer; - border-top-right-radius: 15px; - border-bottom-right-radius: 15px; - display: flex; - align-items: center; - justify-content: center; - height: 100px; - margin-bottom: 1px; - border-left: 0; - background-color: #fff; - color: #000; - font-size: smaller; - font-weight: 550; - pointer-events: all; - } -} - -.active { - background-color: #00274b !important; - color: #fff !important; -} - -.tab-panel { - width: 100%; - color: #000; - overflow-y: auto; - /* stylelint-disable selector-max-compound-selectors */ - div { - &:nth-child(2) { - div > div > div { - overflow-y: hidden; - } - } - } - /* stylelint-enable selector-max-compound-selectors */ -} - -.panel { - display: flex; - width: inherit; - z-index: 2; - - div { - pointer-events: all; - } -} - -.secondary-action-tab { - position: absolute; - z-index: 1; -} - -.resize-indicator-container { - width: 0; - height: 100%; - display: flex; - align-items: center; - :nth-child(1) { - margin-left: -4px; - } -} - -.resize-indicator-icon { - position: absolute; - width: 10px; - height: 45px; - border: 1px solid #000; - border-radius: 3px; - background: rgb(233, 233, 233); - display: flex; - align-items: center; - justify-content: center; -} - -.order-group { - display: flex; - width: 100%; - justify-content: flex-start; - flex-direction: column; - overflow: hidden; - height: calc(100% - 20px); - overflow-y: auto; -} - -.new-order-input { - background-color: #fff; - outline: none; - margin-bottom: 10px; -} - -.select-template-title { - margin: 0 !important; -} - -.turn-dropdown { - display: flex; - align-items: center; - justify-content: center; - - p { - font-size: 14px; - margin-bottom: 0 !important; - margin-right: 10px; - } -} - -.hide { - display: none; -} - -th { - color: #999; - font-weight: normal; -} diff --git a/client/src/Components/pf-planning/support-panel/styles.module.scss.d.ts b/client/src/Components/pf-planning/support-panel/styles.module.scss.d.ts deleted file mode 100644 index 7d0aeba42d..0000000000 --- a/client/src/Components/pf-planning/support-panel/styles.module.scss.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'action-tab': string; - 'active': string; - 'content': string; - 'hide': string; - 'new-order-input': string; - 'order-group': string; - 'panel': string; - 'resize-indicator-container': string; - 'resize-indicator-icon': string; - 'root': string; - 'secondary-action-tab': string; - 'select-template-title': string; - 'tab-panel': string; - 'turn-dropdown': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/client/src/Components/pf-planning/support-panel/types/props.d.ts b/client/src/Components/pf-planning/support-panel/types/props.d.ts deleted file mode 100644 index 1fdf8c9d40..0000000000 --- a/client/src/Components/pf-planning/support-panel/types/props.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { - AttributeTypes, ChannelPlanning, ForceData, ForceTemplateData, GameTurnLength, MessageDetails, MessagePlanning, - PerForcePlanningActivitySet, Phase, PlainInteraction, PlatformTypeData, Role, TemplateBody, TurnPeriods -} from 'src/custom-types' -import { MessageInteraction } from 'src/custom-types/message' -import { ForceStyle } from 'src/Helpers' -import LRUCache from 'lru-cache' -import React, { Dispatch } from 'react' -import { AssetRow } from '../../planning-assets/types/props' -import { LocationEditCallbackHandler } from '../../planning-messages-list/types/props' -export default interface PropTypes { - planningMessages: MessagePlanning[] - interactionMessages: MessageInteraction[] - /** - * definition of this channel - */ - channel: ChannelPlanning - /** new orders templates for this player. Note: this component - * receives all templates, since the template to use is controlled - * by the `PlanningActivity` for the orders being generated - */ - allTemplates: TemplateBody[] - /** adjudication template */ - /** descriptions of platform types (used to generate icons) */ - platformTypes: PlatformTypeData[] - activityTimeChanel: (role: string, message: string) => void - saveMessage: (currentWargame: string, details: MessageDetails, message: any) => { (): void } - saveNewActivityTimeMessage: (role: string, activity: PlainInteraction, dbName: string) => void - saveCachedNewMessageValue?: (editMessage: any, messageOption: string) => void - getCachedNewMessagevalue?: (value: string) => string - clearCachedNewMessage?: (data: string[]) => void - dispatch: Dispatch - selectedRoleName: Role['name'] - selectedRoleId: Role['roleId'] - selectedForce: ForceData - allForces: ForceData[] - forceColors: ForceStyle[] - allPeriods: TurnPeriods - gameDate: string - phase: Phase - currentTurn: number - gameTurnLength: GameTurnLength - currentWargame: string - setSelectedAssets: (assets: string[]) => void - setOpForcesForParent: (assetRows: AssetRow[]) => void - setOwnForcesForParent: (assetRows: AssetRow[]) => void - allOwnAssets: AssetRow[] - allOppAssets: AssetRow[] - onPanelWidthChange?: (width: number) => void - /** a draft copy of an new orders */ - draftMessage?: MessagePlanning - /** player cancels creating a new set of orders */ - onCancelDraftMessage?: { (): void } - forcePlanningActivities?: PerForcePlanningActivitySet[] - /** user wishes to edit location data */ - editLocation?: LocationEditCallbackHandler - attributeTypes: AttributeTypes - /** - * the initial tab to show (useful for story testing) - */ - initialTab?: string - /** force-specific template data */ - forceTemplateData?: ForceTemplateData[] -} - -export type TabPanelProps = { - children?: React.ReactNode - active: boolean - value: string - className?: string -} - -export type PanelActionTabsProps = { - onChange: (tab: string) => void - className?: string -} - -export type SupportPanelContextInterface = { - selectedAssets: string[] - assetsCache: LRUCache - setCurrentAssets: React.Dispatch> - setCurrentOrders: React.Dispatch> - setCurrentInteraction: React.Dispatch> - onSupportPanelLayoutChange: (key: string, value: string) => void - getSupportPanelState: () => void -} diff --git a/client/src/Helpers/find-asset.ts b/client/src/Helpers/find-asset.ts index b8d55af829..241edb6965 100644 --- a/client/src/Helpers/find-asset.ts +++ b/client/src/Helpers/find-asset.ts @@ -1,4 +1,4 @@ -import { Asset, AssetWithForce, ForceData } from 'src/custom-types' +import { Asset, ForceData } from 'src/custom-types' /** recursive helper function - checks inside * comprising and hosting lists @@ -27,30 +27,6 @@ export const isAsset = (asset: Asset, assetId: string | undefined, assetName?: s } } -/** find the asset with the provided id, and it's parent force */ -export const findForceAndAsset = (allForces: ForceData[], assetId: string): AssetWithForce => { - let res: AssetWithForce | undefined - allForces.find((force) => { - const assets: Asset[] | undefined = force.assets - if (Array.isArray(assets)) { - assets.find(asset => { - const match = isAsset(asset, assetId) - if (match) { - res = { force: force, asset: match } - } - return !!res - }) - // if the above find works, we'll return true, which will - // terminate the find process. If it returns undefined, - // we'll return false, and carry on to the next force - return !!res - } - return false - }) - if (res !== undefined) return res - throw new Error('Asset not found from id:' + assetId) -} - /** find the asset with the provided id */ export default (allForces: ForceData[], assetId: string | undefined, assetName?: string): Asset => { let res: Asset | undefined diff --git a/client/src/Helpers/find-perceived-as-types.ts b/client/src/Helpers/find-perceived-as-types.ts deleted file mode 100644 index d5d8309501..0000000000 --- a/client/src/Helpers/find-perceived-as-types.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { UMPIRE_FORCE, UMPIRE_FORCE_NAME, UNKNOWN_TYPE } from 'src/config' -import { Perception, PerceivedTypes, PlatformTypeData, ForceData } from 'src/custom-types' - -/** provide classnames for an asset, as perceived by current player - * // TODO: switch from force name to force id, for both "my" and "their" - * @param {string} myForceId force id of current player - * @param {string} theirName name of selected asset - * @param {boolean} visibleToPlayerForce whether this asset is visible to player force - * @param {string} theirContactID contactID of selected asset (used when no perceived name) - * @param {string} theirForce force for selected asset - * @param {string} theirTypeId platform-type of selected asset - * @param {Perception[]} theirPerceptions list of force perceptions of selected asset - * @returns {PerceivedTypes | null } perceived types, if subject can see it, otherwise null - */ -export default function findPerceivedAsTypes ( - myForceId: ForceData['uniqid'], - theirName: string, - visibleToPlayerForce: boolean, - theirContactID: string, - theirForceId: ForceData['uniqid'], - theirTypeId: PlatformTypeData['uniqid'], - theirPerceptions: Perception[] -): PerceivedTypes | null { - let tmpPerception: Perception | null - if (myForceId === theirForceId || visibleToPlayerForce || myForceId === UMPIRE_FORCE || myForceId === UMPIRE_FORCE_NAME) { - // just use the real values - tmpPerception = { name: theirName, force: theirForceId, typeId: theirTypeId, by: myForceId } - } else { - // use the perceived values - tmpPerception = theirPerceptions.find(p => p.by === myForceId) || null - } - if (tmpPerception) { - const nameClass: string = tmpPerception.name || theirContactID - // workaround. We have some test data that still stores typeId in type - const typeId = tmpPerception.typeId || UNKNOWN_TYPE - const forceId = tmpPerception.force || UNKNOWN_TYPE - return { name: nameClass, typeId: typeId, forceId: forceId } - } else { - return null - } -} diff --git a/client/src/Helpers/geometry-helpers.ts b/client/src/Helpers/geometry-helpers.ts deleted file mode 100644 index 2ff3d0b1b8..0000000000 --- a/client/src/Helpers/geometry-helpers.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { PerForcePlanningActivitySet, PlannedActivityGeometry, PlannedProps, PlanningActivityGeometry } from 'src/custom-types' -import * as turf from '@turf/turf' -import { Feature, LineString } from 'geojson' -import moment from 'moment' -import deepCopy from './deep-copy' - -const updateLeg = (leg: PlannedActivityGeometry, startT: number, endT: number, speedKts: number, - millisRemaining: number, outwardLeg: boolean): [PlannedActivityGeometry, number] => { - // ok, sort times - if (leg.geometry.geometry.type === 'LineString') { - const fLine: Feature = turf.lineString(leg.geometry.geometry.coordinates) - const len = turf.length(fLine, { units: 'meters' }) - const speedMs = speedKts * 0.514444 - const millis = (len / speedMs) * 1000 - - // mangle the millis, to make things work, if necessary - if (millis < millisRemaining) { - console.warn('Will have to trim millis to fit in time period', leg.uniqid) - } - const safeMillis = millis < millisRemaining ? millis : millisRemaining / 2 - - // console.log('calc legs 0', moment(startT).toISOString(), moment(endT).toISOString()) - // console.log('calc legs 1', Math.floor(len), Math.floor(speedKts), Math.floor(millis), moment(millis).format('DD HH:mm:ss')) - - if (safeMillis < millisRemaining) { - const props = leg.geometry.properties as PlannedProps - if (outwardLeg) { - // ok, update - const finish = moment.utc(startT).add(safeMillis, 'milliseconds').toISOString() - // console.log('calc legs 2', moment(startT).toISOString(), Math.floor(safeMillis), finish) - props.startDate = moment.utc(startT).toISOString() - props.endDate = finish - } else { - // ok, update - const start = moment.utc(endT).subtract(safeMillis, 'milliseconds').toISOString() - props.startDate = start - props.endDate = moment.utc(endT).toISOString() - } - // consume time - const remaining = millisRemaining - safeMillis - return [leg, remaining] - } - } - return [leg, 0] -} - -export const updateLocationNames = (planned: PlannedActivityGeometry[], activities?: PerForcePlanningActivitySet): PlannedActivityGeometry[] => { - const updatedNames = planned.map((plan) => { - const id = plan.uniqid - let activity: PlanningActivityGeometry | undefined - activities && activities.groupedActivities.some((group) => { - return group.activities.some((planA) => { - return planA.geometries && planA.geometries.some((geom) => { - if (geom.uniqid === id) { - activity = geom - return true - } else { - return false - } - }) - }) - }) - const props = plan.geometry.properties as PlannedProps - if (activity) { - props.name = activity.name - } - return plan - }) - return updatedNames -} - -/** utility method to correct the timings for planned legs, according to platform speed */ -export const updateGeometryTimings = (geometries: PlannedActivityGeometry[], startTime: string, endTime: string, speedKts: number): PlannedActivityGeometry[] => { - const res = deepCopy(geometries) as PlannedActivityGeometry[] - let startVal = moment.utc(startTime).valueOf() - let endVal = moment.utc(endTime).valueOf() - let remaining = endVal - startVal - // note: we only update timings if there is more than one leg. With a single leg - // we give it all of the time allowed - if (res.length > 1) { - const legOut = updateLeg(res[0], startVal, endVal, speedKts, remaining, true) - if (legOut[1]) { - res[0] = legOut[0] - remaining = legOut[1] - const legOutProps = legOut[0].geometry.properties as PlannedProps - startVal = moment.utc(legOutProps.endDate).valueOf() - } - const legBack = updateLeg(res[res.length - 1], startVal, endVal, speedKts, remaining, false) - if (legBack[1]) { - res[res.length - 1] = legBack[0] - const legOutProps = legBack[0].geometry.properties as PlannedProps - endVal = moment.utc(legOutProps.startDate).valueOf() - } - // give all the remaining non-string goemetries this time period - res.forEach((plan: PlannedActivityGeometry) => { - if (plan.geometry.geometry.type !== 'LineString') { - const props = plan.geometry.properties as PlannedProps - props.startDate = moment.utc(startVal).toISOString() - props.endDate = moment.utc(endVal).toISOString() - } - }) - } else if (res.length === 1) { - // give this leg all of the time allowed - const geom = res[0] - const props = geom.geometry.properties || {} - props.startDate = startTime - props.endDate = endTime - geom.geometry.properties = props - } - return res -} diff --git a/client/src/Helpers/index.ts b/client/src/Helpers/index.ts index 1d006367ba..56b7c85104 100644 --- a/client/src/Helpers/index.ts +++ b/client/src/Helpers/index.ts @@ -9,9 +9,8 @@ export { default as convertMilliseconds } from './convert-milliseconds' export { default as deepCompare } from './deep-compare' export { default as deepCopy } from './deep-copy' export { default as duplicateThisForce } from './duplicate-force' -export { default as findAsset, findForceAndAsset } from './find-asset' +export { default as findAsset } from './find-asset' export { default as configDateTimeLocal } from './config-date-time-local' -export { default as findPerceivedAsTypes } from './find-perceived-as-types' export { default as findPlatformTypeFor } from './find-platform-type-for' export { default as forceFor } from './force-for' export { default as forceColors } from './force-colors' @@ -56,11 +55,8 @@ export { checkV3ParticipantStates, getParticipantStates } from './participant-states' -export { default as platformIcons, type PlatformStyle } from './platform-icons' export { default as routeGetPenultimatePosition } from './route-get-penultimate-position' export { default as shortPoll } from './short-poll' -export { default as sortDictionaryByValue } from './sort-dictionary-by-value' -export { updateGeometryTimings } from './geometry-helpers' export { default as usePrevious } from './use-previous' export { default as generateHashCode } from './generate-hash-code' export { diff --git a/client/src/Helpers/participant-states.ts b/client/src/Helpers/participant-states.ts index 28e3cde83a..32eab0d3f4 100644 --- a/client/src/Helpers/participant-states.ts +++ b/client/src/Helpers/participant-states.ts @@ -1,6 +1,6 @@ -import { CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM, CHANNEL_PLANNING, CHAT_MESSAGE_TEMPLATE_ID, PARTICIPANT_CUSTOM } from 'src/config' +import { CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM, CHAT_MESSAGE_TEMPLATE_ID, PARTICIPANT_CUSTOM } from 'src/config' import { ChannelCollab, ChannelTypes, ParticipantTemplate, Role, TemplateBody, TemplateBodysByKey } from 'src/custom-types' -import { CoreParticipant, ParticipantCustom, ParticipantPlanning } from 'src/custom-types/participant' +import { CoreParticipant, ParticipantCustom } from 'src/custom-types/participant' import getTemplateById, { getTemplateByIdNoUndefined } from './getTemplateById' import { matchedAllRolesFilter, matchedForceAndRoleFilter, matchedForceFilter, matchedV3AllRolesFilter, matchedV3ForceAndRoleFilter } from './participant-filters' @@ -90,13 +90,6 @@ export const checkV3ParticipantStates = (channel: ChannelTypes, selectedForce: s templateIDs.push(...roleCustom.templates) }) break - case CHANNEL_PLANNING: - // find all the templates I'm allowed to use - participatingRoles.forEach(role => { - const roleCustom = role as ParticipantPlanning - templateIDs.push(...roleCustom.templates) - }) - break default: console.warn('Encountered unexpected channel type:', channel) } diff --git a/client/src/Helpers/platform-icons.ts b/client/src/Helpers/platform-icons.ts deleted file mode 100644 index 28775d302a..0000000000 --- a/client/src/Helpers/platform-icons.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { PlatformTypeData } from 'src/custom-types' - -export interface PlatformStyle { - name: PlatformTypeData['name'] - uniqid: PlatformTypeData['uniqid'] - icon: PlatformTypeData['icon'] -} - -/** produce an array of platform ids, names, and icons */ -export default function platformIcons (platforms: PlatformTypeData[]): Array { - return platforms.map((platform: PlatformTypeData): PlatformStyle => { - return { - uniqid: platform.uniqid, - name: platform.name, - icon: platform.icon - } - }) -} diff --git a/client/src/Helpers/sort-dictionary-by-value.ts b/client/src/Helpers/sort-dictionary-by-value.ts deleted file mode 100644 index cd41bf618f..0000000000 --- a/client/src/Helpers/sort-dictionary-by-value.ts +++ /dev/null @@ -1,21 +0,0 @@ -// sort the platform dictionary, using this algorithm: -// https://stackoverflow.com/a/1069840/92441 -const sortDictionaryByValue = (dict: Record): Record => { - // convert dictionary to array - const sortedDict = [] - for (const key in dict) { - sortedDict.push([key, dict[key]]) - } - // sort array by second field - sortedDict.sort(function (a, b) { - return a[1].localeCompare(b[1]) - }) - // revert to dictionary - const objSorted = {} - sortedDict.forEach(function (item) { - objSorted[item[0]] = item[1] - }) - return objSorted -} - -export default sortDictionaryByValue diff --git a/client/src/Helpers/tests/find-perceived-as-types.spec.ts b/client/src/Helpers/tests/find-perceived-as-types.spec.ts deleted file mode 100644 index 4c13c44da5..0000000000 --- a/client/src/Helpers/tests/find-perceived-as-types.spec.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* global it expect */ - -import { UMPIRE_FORCE, UNKNOWN_TYPE } from 'src/config' -import { Perception } from 'src/custom-types' -import findPerceivedAsTypes from '../find-perceived-as-types' - -// perceptions element -const perceptions: Perception[] = [{ - by: 'Blue', - force: 'Green', - name: 'Dumbo', - typeId: 'a12' -}] - -// get a perceptions element with Force missing -const perceptionsForceMissing: Perception[] = [{ - by: 'Blue', - name: 'Dumbo', - typeId: 'a12' -}] - -// get a perceptions element with type missing -const perceptionsTypeMissing: Perception[] = [{ - by: 'Blue', - force: 'Green', - name: 'Dumbo' -}] - -// get a perceptions element with name missing -const perceptionsNameMissing: Perception[] = [{ - by: 'Blue', - force: 'Green', - typeId: 'a12' -}] - -// perceptions with nothing known -const perceptionsEmpty: Perception[] = [{ - by: 'Blue' -}] - -it('gives true details for same force', () => { - expect(findPerceivedAsTypes('yellow', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptions)).toEqual({ name: 'osaka', typeId: 'a13', forceId: 'yellow' }) -}) - -it('gives true details for umpire', () => { - expect(findPerceivedAsTypes(UMPIRE_FORCE, 'osaka', false, 'C0011', 'yellow', 'a13', - perceptions)).toEqual({ name: 'osaka', typeId: 'a13', forceId: 'yellow' }) -}) - -it('gives null for force without perception', () => { - expect(findPerceivedAsTypes('Red', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptions)).toEqual(null) -}) - -it('gives perceived details for force with entry', () => { - expect(findPerceivedAsTypes('Blue', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptions)).toEqual({ name: 'Dumbo', typeId: 'a12', forceId: 'Green' }) -}) - -it('gives perceived details for force with entry but type missing', () => { - expect(findPerceivedAsTypes('Blue', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptionsTypeMissing)).toEqual({ name: 'Dumbo', typeId: UNKNOWN_TYPE, forceId: 'Green' }) -}) - -it('gives perceived details for force with entry but force missing', () => { - expect(findPerceivedAsTypes('Blue', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptionsForceMissing)).toEqual({ name: 'Dumbo', forceId: UNKNOWN_TYPE, typeId: 'a12' }) -}) - -it('gives perceived details for force with entry but name missing', () => { - expect(findPerceivedAsTypes('Blue', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptionsNameMissing)).toEqual({ name: 'C0011', typeId: 'a12', forceId: 'Green' }) -}) - -it('gives perceived details for force with no details', () => { - expect(findPerceivedAsTypes('Blue', 'osaka', false, 'C0011', 'yellow', 'a13', - perceptionsEmpty)).toEqual({ name: 'C0011', forceId: UNKNOWN_TYPE, typeId: UNKNOWN_TYPE }) -}) diff --git a/client/src/Tests/ActionsAndReducers/playerUI/data/set_all_messages_mock.ts b/client/src/Tests/ActionsAndReducers/playerUI/data/set_all_messages_mock.ts index 7e76c944d4..8d9fe1847d 100644 --- a/client/src/Tests/ActionsAndReducers/playerUI/data/set_all_messages_mock.ts +++ b/client/src/Tests/ActionsAndReducers/playerUI/data/set_all_messages_mock.ts @@ -201,40 +201,6 @@ const testState: PlayerUi = { ] } ], - allPeriods: [ - { - gameDate: '2022-05-25T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 1 - }, - { - gameDate: '2022-05-28T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 1 - }, - { - gameDate: '2022-05-04T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 2 - }, - { - gameDate: '2022-05-04T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 2 - } - ], allForces: [ { name: 'White', diff --git a/client/src/Tests/ActionsAndReducers/playerUI/data/set_latest_wargame_message_mock.ts b/client/src/Tests/ActionsAndReducers/playerUI/data/set_latest_wargame_message_mock.ts index 0fc72f0a08..de121465cc 100644 --- a/client/src/Tests/ActionsAndReducers/playerUI/data/set_latest_wargame_message_mock.ts +++ b/client/src/Tests/ActionsAndReducers/playerUI/data/set_latest_wargame_message_mock.ts @@ -427,40 +427,6 @@ const state: PlayerUi = { ] } ], - allPeriods: [ - { - gameDate: '2022-05-25T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 1 - }, - { - gameDate: '2022-05-28T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 1 - }, - { - gameDate: '2022-05-04T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 2 - }, - { - gameDate: '2022-05-04T04:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 2 - } - ], allForces: [ { name: 'White', diff --git a/client/src/Tests/ActionsAndReducers/playerUI/handleSetWargameMessages.test.ts b/client/src/Tests/ActionsAndReducers/playerUI/handleSetWargameMessages.test.ts index 7a66f53e37..f028131717 100644 --- a/client/src/Tests/ActionsAndReducers/playerUI/handleSetWargameMessages.test.ts +++ b/client/src/Tests/ActionsAndReducers/playerUI/handleSetWargameMessages.test.ts @@ -16,7 +16,6 @@ const playerUi: PlayerUi = { playerMessageLog: {}, updateMessageState: true, isRFIManager: false, - allPeriods: [], selectedForce: { name: 'Blue', uniqid: 'force-k16fdykj', diff --git a/client/src/Views/ChannelTabsContainer/ChannelTabsContainer.tsx b/client/src/Views/ChannelTabsContainer/ChannelTabsContainer.tsx index 2961c3c166..0251c11e9a 100644 --- a/client/src/Views/ChannelTabsContainer/ChannelTabsContainer.tsx +++ b/client/src/Views/ChannelTabsContainer/ChannelTabsContainer.tsx @@ -11,7 +11,6 @@ import { usePlayerUiDispatch, usePlayerUiState } from '../../Store/PlayerUi' import computeTabs from './helpers/computeTabs' import { setDefaultModel } from './helpers/DefaultModel' import factory from './helpers/factory' -import { useDispatch } from 'react-redux' import tabRender from './helpers/tabRender' import Props from './types' @@ -22,7 +21,6 @@ const ChannelTabsContainer: React.FC = ({ rootRef, onTabChange }): React. const state = usePlayerUiState() const playerUiDispatch = usePlayerUiDispatch() - const dispatch = useDispatch() const { selectedForce, allChannels } = state if (selectedForce === undefined) throw new Error('selectedForce is undefined') @@ -76,7 +74,7 @@ const ChannelTabsContainer: React.FC = ({ rootRef, onTabChange }): React. ? ( { setAllowTabChangeEvent(true) diff --git a/client/src/Views/ChannelTabsContainer/helpers/factory.tsx b/client/src/Views/ChannelTabsContainer/helpers/factory.tsx index d55cd2ac30..1dfc5d38c4 100644 --- a/client/src/Views/ChannelTabsContainer/helpers/factory.tsx +++ b/client/src/Views/ChannelTabsContainer/helpers/factory.tsx @@ -1,15 +1,10 @@ import React from 'react' import { TabNode, TabSetNode } from 'flexlayout-react' import _ from 'lodash' -import { CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM, CHANNEL_PLANNING, Phase } from 'src/config' -import { PlayerUiActionTypes, ChannelPlanning, ForceData, ChannelTypes, ChannelUI, MessageInfoTypeClipped, MessageInteraction, MessagePlanning, PlayerUi } from 'src/custom-types' -import { mockPlanningMessages } from './mock-message-data' -import { getAllWargameMessages, saveMessage, turnPeriods } from '../../../ActionsAndReducers/playerUi/playerUi_ActionCreators' +import { CHANNEL_CHAT, CHANNEL_COLLAB, CHANNEL_CUSTOM } from 'src/config' +import { ChannelTypes, ChannelUI, PlayerUi } from 'src/custom-types' import ChatChannel from '../../../Components/ChatChannel' import CollabChannel from '../../../Components/CollabChannel' -import PlanningChannel from '../../../Components/pf-planning/planning-channel' - -import { saveNewActivityTimeMessage } from '../../../ActionsAndReducers/PlayerLog/PlayerLog_ActionCreators' type Factory = (node: TabNode) => React.ReactNode @@ -19,7 +14,7 @@ type Factory = (node: TabNode) => React.ReactNode * convenience function was created. */ -const factory = (state: PlayerUi, dispatch: React.Dispatch, reduxDisplatch: React.Dispatch): Factory => { +const factory = (state: PlayerUi): Factory => { return (node: TabNode): React.ReactNode => { /** helper to determine if the specified channel should be rendered */ const renderThisChannel = (channelData?: ChannelUI): boolean => { @@ -29,7 +24,7 @@ const factory = (state: PlayerUi, dispatch: React.Dispatch, // lose that content. Note: there _Shouldn't_ be a performance // hit, since the content in those channels won't be changing const cType = channelData.cData.channelType - if (cType === CHANNEL_COLLAB || cType === CHANNEL_CUSTOM || cType === CHANNEL_CHAT || cType === CHANNEL_PLANNING) { + if (cType === CHANNEL_COLLAB || cType === CHANNEL_CUSTOM || cType === CHANNEL_CHAT) { return true } } @@ -51,7 +46,7 @@ const factory = (state: PlayerUi, dispatch: React.Dispatch, if (!channel || !renderThisChannel(channel)) { return null } - const allTemplates = Object.values(state.allTemplatesByKey) + // const allTemplates = Object.values(state.allTemplatesByKey) const channelData: ChannelTypes = channel.cData const isV3 = !!channelData.channelType if (isV3) { @@ -62,61 +57,6 @@ const factory = (state: PlayerUi, dispatch: React.Dispatch, return case CHANNEL_CUSTOM: return - case CHANNEL_PLANNING: - // TODO: take this template id from the channel definition - const adjudicationTemplateId = 'p9adjudicate' - // NOTE: block of code to force mock messages into database - const writeData = false - if (writeData) { - console.clear() - const mockPlanningMessages2 = mockPlanningMessages - console.log('channel', channel.messages, channel.messages === undefined, channel.messages?.length) - if (channel.messages === undefined || channel.messages.length <= 5) { - // push them - console.log('about to store', mockPlanningMessages2.length, ' to ', state.currentWargame) - mockPlanningMessages2.forEach((msg: MessageInteraction | MessagePlanning | MessageInfoTypeClipped) => { - const asAny = msg as any - const savePromise = saveMessage(state.currentWargame, asAny.details, asAny.message) - savePromise() - console.log('stored', asAny.details) - }) - } - } - return } - channel={channel.cData as ChannelPlanning} - selectedRoleId={state.selectedRole} - selectedRoleName={state.selectedRoleName} - currentWargame={state.currentWargame} - selectedForce={state.selectedForce as ForceData} - attributeTypes={state.attributeTypes} - isUmpire={state.isUmpire} - phase={state.phase as Phase} - allForces={state.allForces} - allPeriods={state.allPeriods} - platformTypes={state.allPlatformTypes} - gameDate={state.gameDate} - currentTurn={state.currentTurn} - gameTurnLength={state.gameTurnTime} - // @ts-ignore - onTurnPeriods={turnPeriods} - dispatch={dispatch} - // @ts-ignore - getAllWargameMessages={getAllWargameMessages} - // @ts-ignore - // saveArchiveMessage={ArchivePostBack} - // @ts-ignore - saveMessage={saveMessage} - reduxDispatch={reduxDisplatch} - // @ts-ignore - saveNewActivityTimeMessage={saveNewActivityTimeMessage} - forcePlanningActivities={state.perForceActivities} - areas={state.areas} - forceTemplateData={state.forceTemplateData} - /> default: console.log('not yet handling', channelData) return null diff --git a/client/src/Views/ChannelTabsContainer/helpers/mock-message-data.ts b/client/src/Views/ChannelTabsContainer/helpers/mock-message-data.ts deleted file mode 100644 index 703a16eb03..0000000000 --- a/client/src/Views/ChannelTabsContainer/helpers/mock-message-data.ts +++ /dev/null @@ -1,3380 +0,0 @@ - -import { MessageInfoTypeClipped, MessageInteraction, MessagePlanning } from 'src/custom-types' - -export const mockPlanningMessages: Array = [ - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-22T15:47:41.086Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-6', - title: 'Order item 6', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T04:35:00.000Z', - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Patrol-0', - name: 'f-blue//3.105222334795144//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 73.7335, - 43.5688 - ], - [ - 48.58, - 35.27 - ], - [ - 23.8, - 26.34 - ], - [ - 23.5101, - 26.6663 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T02:55:00.000Z', - force: 'f-blue', - startTime: 1668473700000, - endTime: 1668480900000, - geomId: 'Patrol-1', - name: 'f-blue//6.210444669590288//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 22.78906268214402, - 27.30518334623726 - ], - [ - 22.78906268214402, - 26.02381814069331 - ], - [ - 24.22308411185446, - 26.02381814069331 - ], - [ - 24.22308411185446, - 27.30518334623726 - ], - [ - 22.78906268214402, - 27.30518334623726 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-11-15T02:55:00.000Z', - endDate: '2022-11-15T04:35:00.000Z', - force: 'f-blue', - startTime: 1668480900000, - endTime: 1668486900000, - geomId: 'Patrol-2', - name: 'f-blue//9.315667004385432//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 23.5101, - 26.6663 - ], - [ - 39.99, - 31.92 - ], - [ - 56.71, - 38.42 - ], - [ - 73.72, - 43.21 - ], - [ - 73.7335, - 43.5688 - ] - ] - } - } - } - ], - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'a49', - number: 5 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - }, - { - asset: 'a107' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_6', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-27T19:41:04.380Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-9', - title: 'Order item 9', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T04:55:00.000Z', - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-red', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Patrol-0', - name: 'f-red//3.8121305503746044//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 27.75, - 23.6603 - ], - [ - 39.25, - 30.11 - ], - [ - 49.65, - 37.47 - ], - [ - 61.34, - 44.12 - ], - [ - 72.31, - 50.04 - ], - [ - 72.5266, - 50.5454 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T03:15:00.000Z', - force: 'f-red', - startTime: 1668473700000, - endTime: 1668482100000, - geomId: 'Patrol-1', - name: 'f-red//7.624261100749209//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 67.27548585052453, - 53.55177613180756 - ], - [ - 67.27548585052453, - 47.33177205640518 - ], - [ - 77.12806529699637, - 47.33177205640518 - ], - [ - 77.12806529699637, - 53.55177613180756 - ], - [ - 67.27548585052453, - 53.55177613180756 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-11-15T03:15:00.000Z', - endDate: '2022-11-15T04:55:00.000Z', - force: 'f-red', - startTime: 1668482100000, - endTime: 1668488100000, - geomId: 'Patrol-2', - name: 'f-red//11.436391651123813//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 72.5266, - 50.5454 - ], - [ - 57.61, - 41.22 - ], - [ - 42.79, - 33 - ], - [ - 27.26, - 24.06 - ], - [ - 27.75, - 23.6603 - ] - ] - } - } - } - ], - activity: 'f-red-Maritime-Patrol', - ownAssets: [ - { - asset: 'a141', - number: 2 - }, - { - asset: 'a194', - number: 0 - }, - { - asset: 'a176', - number: 1 - }, - { - asset: 'a187', - number: 5 - } - ], - otherAssets: [ - { - asset: 'a10' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_9', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--ISTAR', - timestamp: '2022-09-29T05:18:28.464Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-12', - title: 'Order item 12', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T05:55:00.000Z', - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'ISTAR-0', - name: 'f-blue//3.412459935258994//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 73.7335, - 43.5688 - ], - [ - 57.99, - 35.04 - ], - [ - 41.33, - 25.6 - ], - [ - 24.95, - 17.44 - ], - [ - 25.4577, - 16.9954 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T02:55:00.000Z', - force: 'f-blue', - startTime: 1668473700000, - endTime: 1668480900000, - geomId: 'ISTAR-1', - name: 'f-blue//6.824919870517988//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 25.19838068598645, - 17.242900747382723 - ], - [ - 25.19838068598645, - 16.747572041961114 - ], - [ - 25.716335011928884, - 16.747572041961114 - ], - [ - 25.716335011928884, - 17.242900747382723 - ], - [ - 25.19838068598645, - 17.242900747382723 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-11-15T02:55:00.000Z', - endDate: '2022-11-15T03:15:00.000Z', - force: 'f-blue', - startTime: 1668480900000, - endTime: 1668482100000, - geomId: 'ISTAR-2', - name: 'f-blue//10.237379805776982//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 23.61337108593522, - 18.73376744444559 - ], - [ - 23.61337108593522, - 15.240744446564971 - ], - [ - 27.267975208020083, - 15.240744446564971 - ], - [ - 27.267975208020083, - 18.73376744444559 - ], - [ - 23.61337108593522, - 18.73376744444559 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-11-15T03:15:00.000Z', - endDate: '2022-11-15T05:55:00.000Z', - force: 'f-blue', - startTime: 1668482100000, - endTime: 1668491700000, - geomId: 'ISTAR-3', - name: 'f-blue//13.649839741035976//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 25.4577, - 16.9954 - ], - [ - 41.69, - 26.3 - ], - [ - 58.06, - 34.74 - ], - [ - 73.7, - 43.46 - ], - [ - 73.7335, - 43.5688 - ] - ] - } - } - } - ], - activity: 'f-blue-Maritime-ISTAR', - ownAssets: [ - { - asset: 'a87', - number: 1 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_12', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Standard', - timestamp: '2022-09-26T20:39:53.339Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-15', - title: 'Order item 15', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T05:35:00.000Z', - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-blue//6.906210489443765//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.5795, - 38.5097 - ], - [ - 54.39, - 21.44 - ], - [ - 74.51, - 3.68 - ], - [ - 74.3035, - 3.7946 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T03:05:00.000Z', - force: 'f-blue', - startTime: 1668473700000, - endTime: 1668481500000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-blue//13.81242097888753//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 70.58881724690697, - 7.469799355662781 - ], - [ - 70.58881724690697, - 0.10363757236208751 - ], - [ - 77.98662053971228, - 0.10363757236208751 - ], - [ - 77.98662053971228, - 7.469799355662781 - ], - [ - 70.58881724690697, - 7.469799355662781 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-11-15T03:05:00.000Z', - endDate: '2022-11-15T05:35:00.000Z', - force: 'f-blue', - startTime: 1668481500000, - endTime: 1668490500000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-blue//20.718631468331296//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 74.3035, - 3.7946 - ], - [ - 61.54, - 15.66 - ], - [ - 47.82, - 26.56 - ], - [ - 34.38, - 38.74 - ], - [ - 34.5795, - 38.5097 - ] - ] - } - } - } - ], - activity: 'f-blue-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'a88', - number: 1 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_15', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--TST', - timestamp: '2022-09-29T01:45:19.005Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-18', - title: 'Order item 18', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T03:25:00.000Z', - location: [ - { - uniqid: 'Time Sensitive Targeting (TST)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Time Sensitive Targeting (TST)-0', - name: 'f-blue//4.293382212938013//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 51.9965, - 45.7005 - ], - [ - 39.99, - 34.35 - ], - [ - 27.33, - 23.35 - ], - [ - 27.581, - 23.1017 - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//TST Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T01:05:00.000Z', - force: 'f-blue', - startTime: 1668473700000, - endTime: 1668474300000, - geomId: 'Time Sensitive Targeting (TST)-1', - name: 'f-blue//8.586764425876027//TST Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 25.402830519628, - 25.06001860913663 - ], - [ - 25.402830519628, - 21.114362297187355 - ], - [ - 29.696100406314063, - 21.114362297187355 - ], - [ - 29.696100406314063, - 25.06001860913663 - ], - [ - 25.402830519628, - 25.06001860913663 - ] - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route back', - startDate: '2022-11-15T01:05:00.000Z', - endDate: '2022-11-15T03:25:00.000Z', - force: 'f-blue', - startTime: 1668474300000, - endTime: 1668482700000, - geomId: 'Time Sensitive Targeting (TST)-2', - name: 'f-blue//12.88014663881404//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 27.581, - 23.1017 - ], - [ - 39.96, - 34.38 - ], - [ - 51.69, - 46.01 - ], - [ - 51.9965, - 45.7005 - ] - ] - } - } - } - ], - activity: 'f-blue-Air-Time Sensitive Targeting (TST)', - ownAssets: [ - { - asset: 'a46', - number: 4 - }, - { - asset: 'a55', - number: 3 - }, - { - asset: 'a91', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_18', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--MineLaying', - timestamp: '2022-09-27T12:34:45.461Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-21', - title: 'Order item 21', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T06:55:00.000Z', - location: [ - { - uniqid: 'Mine Laying-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Mine Laying-0', - name: 'f-blue//5.573975105719001//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.344, - 31.3463 - ], - [ - 55.19, - 27.59 - ], - [ - 62.1, - 23.89 - ], - [ - 69.3, - 20.48 - ], - [ - 69.5602, - 20.2184 - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Mine Area', - startDate: '2022-11-15T00:55:00.000Z', - endDate: '2022-11-15T04:05:00.000Z', - force: 'f-blue', - startTime: 1668473700000, - endTime: 1668485100000, - geomId: 'Mine Laying-1', - name: 'f-blue//11.147950211438001//Mine Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 68.6757545623389, - 21.041663960394256 - ], - [ - 68.6757545623389, - 19.39075516256376 - ], - [ - 70.43530903362823, - 19.39075516256376 - ], - [ - 70.43530903362823, - 21.041663960394256 - ], - [ - 68.6757545623389, - 21.041663960394256 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route back', - startDate: '2022-11-15T04:05:00.000Z', - endDate: '2022-11-15T06:55:00.000Z', - force: 'f-blue', - startTime: 1668485100000, - endTime: 1668495300000, - geomId: 'Mine Laying-2', - name: 'f-blue//16.721925317157//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 69.5602, - 20.2184 - ], - [ - 47.99, - 31.38 - ], - [ - 48.344, - 31.3463 - ] - ] - } - } - } - ], - activity: 'f-blue-Maritime-Mine Laying', - ownAssets: [ - { - asset: 'a58', - number: 3 - }, - { - asset: 'a52', - number: 0 - } - ], - otherAssets: [ - { - asset: 'a109' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_21', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Standard', - timestamp: '2022-09-22T05:08:12.707Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-24', - title: 'Order item 24', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - location: [ - { - uniqid: 'SAM MEZ-0', - geometry: { - type: 'Feature', - properties: { - id: 'SAM MEZ//SAM MEZ Location', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-blue', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'SAM MEZ-0', - name: 'f-blue//5.747989167804917//SAM MEZ Location' - }, - geometry: { - type: 'Point', - coordinates: [ - 67.6098, - 24.7249 - ] - } - } - } - ], - activity: 'f-blue-Maritime-SAM MEZ', - ownAssets: [ - { - asset: 'a25', - number: 0 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - }, - { - asset: 'a107' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_24', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-29T19:25:40.744Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-27', - title: 'Order item 27', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-11-15T00:05:00.000Z', - endDate: '2022-11-15T00:55:00.000Z', - force: 'f-red', - startTime: 1668470700000, - endTime: 1668473700000, - geomId: 'Transit-0', - name: 'f-red//4.815424399195763//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 70.7274, - 25.5667 - ], - [ - 34.53, - 40.69 - ], - [ - 34.4164, - 41.0459 - ] - ] - } - } - } - ], - activity: 'f-red-Land-Transit', - ownAssets: [ - { - asset: 'a146', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_27', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--MineLaying', - timestamp: '2022-09-25T07:27:09.572Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-30', - title: 'Order item 30', - startDate: '2022-11-15T00:10:00.000Z', - endDate: '2022-11-15T04:00:00.000Z', - location: [ - { - uniqid: 'Mine Laying-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route out', - startDate: '2022-11-15T00:10:00.000Z', - endDate: '2022-11-15T01:00:00.000Z', - force: 'f-red', - startTime: 1668471000000, - endTime: 1668474000000, - geomId: 'Mine Laying-0', - name: 'f-red//2.7762807999097276//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 80.6025, - 15.0499 - ], - [ - 63.77, - 28.33 - ], - [ - 47.22, - 40.89 - ], - [ - 29.96, - 53.73 - ], - [ - 30.0136, - 54.109 - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Mine Area', - startDate: '2022-11-15T01:00:00.000Z', - endDate: '2022-11-15T01:50:00.000Z', - force: 'f-red', - startTime: 1668474000000, - endTime: 1668477000000, - geomId: 'Mine Laying-1', - name: 'f-red//5.552561599819455//Mine Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 25.737349478660413, - 56.402214288214 - ], - [ - 25.737349478660413, - 51.68036960902181 - ], - [ - 33.82920108746788, - 51.68036960902181 - ], - [ - 33.82920108746788, - 56.402214288214 - ], - [ - 25.737349478660413, - 56.402214288214 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route back', - startDate: '2022-11-15T01:50:00.000Z', - endDate: '2022-11-15T04:00:00.000Z', - force: 'f-red', - startTime: 1668477000000, - endTime: 1668484800000, - geomId: 'Mine Laying-2', - name: 'f-red//8.328842399729183//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 30.0136, - 54.109 - ], - [ - 43.03, - 44.25 - ], - [ - 54.83, - 34.18 - ], - [ - 67.92, - 24.39 - ], - [ - 80.29, - 14.88 - ], - [ - 80.6025, - 15.0499 - ] - ] - } - } - } - ], - activity: 'f-red-Maritime-Mine Laying', - ownAssets: [ - { - asset: 'a122', - number: 0 - }, - { - asset: 'a170', - number: 0 - }, - { - asset: 'a147', - number: 5 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_30', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-25T09:12:39.190Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-33', - title: 'Order item 33', - startDate: '2022-11-15T00:30:00.000Z', - endDate: '2022-11-15T00:50:00.000Z', - location: [], - activity: 'f-red-Land-Strike', - ownAssets: [ - { - asset: 'a152', - number: 3 - }, - { - asset: 'a185', - number: 2 - }, - { - asset: 'a148', - number: 2 - }, - { - asset: 'a139', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - }, - { - asset: 'a8' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_33', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Standard', - timestamp: '2022-09-21T16:42:09.598Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-36', - title: 'Order item 36', - startDate: '2022-11-15T00:45:00.000Z', - endDate: '2022-11-15T02:45:00.000Z', - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-11-15T00:45:00.000Z', - endDate: '2022-11-15T01:35:00.000Z', - force: 'f-blue', - startTime: 1668473100000, - endTime: 1668476100000, - geomId: 'Resupply-0', - name: 'f-blue//5.378257109216065//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 65.7332, - 36.4001 - ], - [ - 67.96, - 28.43 - ], - [ - 71.03, - 19.31 - ], - [ - 73.39, - 11.47 - ], - [ - 76.03, - 2.91 - ], - [ - 75.673, - 2.8865 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-11-15T01:35:00.000Z', - endDate: '2022-11-15T02:35:00.000Z', - force: 'f-blue', - startTime: 1668476100000, - endTime: 1668479700000, - geomId: 'Resupply-1', - name: 'f-blue//10.75651421843213//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 72.81925408663112, - 5.722448169563038 - ], - [ - 72.81925408663112, - 0.043440309434564055 - ], - [ - 78.51251363389763, - 0.043440309434564055 - ], - [ - 78.51251363389763, - 5.722448169563038 - ], - [ - 72.81925408663112, - 5.722448169563038 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-11-15T02:35:00.000Z', - endDate: '2022-11-15T02:45:00.000Z', - force: 'f-blue', - startTime: 1668479700000, - endTime: 1668480300000, - geomId: 'Resupply-2', - name: 'f-blue//16.134771327648195//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 75.673, - 2.8865 - ], - [ - 72.14, - 13.61 - ], - [ - 68.86, - 25.59 - ], - [ - 65.87, - 36.86 - ], - [ - 65.7332, - 36.4001 - ] - ] - } - } - } - ], - activity: 'f-blue-Maritime-Resupply', - ownAssets: [ - { - asset: 'a39', - number: 4 - }, - { - asset: 'a57', - number: 0 - }, - { - asset: 'a5', - number: 2 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_36', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Standard', - timestamp: '2022-09-22T13:55:40.797Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-39', - title: 'Order item 39', - startDate: '2022-11-15T00:45:00.000Z', - endDate: '2022-11-15T03:55:00.000Z', - location: [ - { - uniqid: 'FIAC EZ-0', - geometry: { - type: 'Feature', - properties: { - id: 'FIAC EZ//Route out', - startDate: '2022-11-15T00:45:00.000Z', - endDate: '2022-11-15T01:35:00.000Z', - force: 'f-red', - startTime: 1668473100000, - endTime: 1668476100000, - geomId: 'FIAC EZ-0', - name: 'f-red//5.019377017772058//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 71.2747, - 14.6686 - ], - [ - 70.17, - 23.74 - ], - [ - 68.29, - 33.03 - ], - [ - 66.69, - 41.61 - ], - [ - 66.5401, - 42.0968 - ] - ] - } - } - }, - { - uniqid: 'FIAC EZ-1', - geometry: { - type: 'Feature', - properties: { - id: 'FIAC EZ//FIAC EZ Location', - startDate: '2022-11-15T01:35:00.000Z', - endDate: '2022-11-15T03:25:00.000Z', - force: 'f-red', - startTime: 1668476100000, - endTime: 1668482700000, - geomId: 'FIAC EZ-1', - name: 'f-red//10.038754035544116//FIAC EZ Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 65.82549410874967, - 42.6204420383667 - ], - [ - 65.82549410874967, - 41.56879728374625 - ], - [ - 67.24295310658444, - 41.56879728374625 - ], - [ - 67.24295310658444, - 42.6204420383667 - ], - [ - 65.82549410874967, - 42.6204420383667 - ] - ] - ] - } - } - }, - { - uniqid: 'FIAC EZ-2', - geometry: { - type: 'Feature', - properties: { - id: 'FIAC EZ//Route back', - startDate: '2022-11-15T03:25:00.000Z', - endDate: '2022-11-15T03:55:00.000Z', - force: 'f-red', - startTime: 1668482700000, - endTime: 1668484500000, - geomId: 'FIAC EZ-2', - name: 'f-red//15.058131053316174//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 66.5401, - 42.0968 - ], - [ - 67.33, - 34.74 - ], - [ - 68.99, - 28.26 - ], - [ - 69.94, - 21.06 - ], - [ - 71.16, - 15.14 - ], - [ - 71.2747, - 14.6686 - ] - ] - } - } - } - ], - activity: 'f-red-Maritime-FIAC EZ', - ownAssets: [ - { - asset: 'a178', - number: 0 - }, - { - asset: 'a182', - number: 0 - }, - { - asset: 'a115', - number: 4 - }, - { - asset: 'a174', - number: 5 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_39', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Patrol', - timestamp: '2022-09-28T00:53:12.787Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-42', - title: 'Order item 42', - startDate: '2022-11-15T00:50:00.000Z', - endDate: '2022-11-15T04:30:00.000Z', - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-11-15T00:50:00.000Z', - endDate: '2022-11-15T01:40:00.000Z', - force: 'f-red', - startTime: 1668473400000, - endTime: 1668476400000, - geomId: 'Patrol-0', - name: 'f-red//3.55391809566936//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 66.8179, - 13.6797 - ], - [ - 68.3, - 25.73 - ], - [ - 71.04, - 38.03 - ], - [ - 72.07, - 50.62 - ], - [ - 72.5266, - 50.5454 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-11-15T01:40:00.000Z', - endDate: '2022-11-15T02:30:00.000Z', - force: 'f-red', - startTime: 1668476400000, - endTime: 1668479400000, - geomId: 'Patrol-1', - name: 'f-red//7.10783619133872//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 67.85637764726746, - 53.24975172108632 - ], - [ - 67.85637764726746, - 47.674900680143864 - ], - [ - 76.67559980865279, - 47.674900680143864 - ], - [ - 76.67559980865279, - 53.24975172108632 - ], - [ - 67.85637764726746, - 53.24975172108632 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-11-15T02:30:00.000Z', - endDate: '2022-11-15T04:30:00.000Z', - force: 'f-red', - startTime: 1668479400000, - endTime: 1668486600000, - geomId: 'Patrol-2', - name: 'f-red//10.66175428700808//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 72.5266, - 50.5454 - ], - [ - 69.67, - 31.98 - ], - [ - 67.3, - 13.91 - ], - [ - 66.8179, - 13.6797 - ] - ] - } - } - } - ], - activity: 'f-red-Air-Patrol', - ownAssets: [ - { - asset: 'a174', - number: 5 - }, - { - asset: 'a163', - number: 5 - }, - { - asset: 'a179', - number: 2 - } - ], - otherAssets: [ - { - asset: 'a10' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_42', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Standard', - timestamp: '2022-09-29T17:34:45.567Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-45', - title: 'Order item 45', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T04:00:00.000Z', - location: [ - { - uniqid: 'Offensive Counter Air-0', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route out', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - force: 'f-blue', - startTime: 1668474600000, - endTime: 1668477600000, - geomId: 'Offensive Counter Air-0', - name: 'f-blue//5.981880342907971//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 49.9002, - 49.3109 - ], - [ - 49.99, - 21.04 - ], - [ - 49.9528, - 21.3991 - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-1', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//OCA Area', - startDate: '2022-11-15T02:00:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - force: 'f-blue', - startTime: 1668477600000, - endTime: 1668477600000, - geomId: 'Offensive Counter Air-1', - name: 'f-blue//11.963760685815942//OCA Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 48.94448682229479, - 22.32880694375131 - ], - [ - 48.94448682229479, - 20.463441478454907 - ], - [ - 50.94832991602052, - 20.463441478454907 - ], - [ - 50.94832991602052, - 22.32880694375131 - ], - [ - 48.94448682229479, - 22.32880694375131 - ] - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-2', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route back', - startDate: '2022-11-15T02:00:00.000Z', - endDate: '2022-11-15T04:00:00.000Z', - force: 'f-blue', - startTime: 1668477600000, - endTime: 1668484800000, - geomId: 'Offensive Counter Air-2', - name: 'f-blue//17.945641028723912//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 49.9528, - 21.3991 - ], - [ - 50.1, - 35.33 - ], - [ - 49.59, - 49.61 - ], - [ - 49.9002, - 49.3109 - ] - ] - } - } - } - ], - activity: 'f-blue-Air-Offensive Counter Air', - ownAssets: [ - { - asset: 'a26', - number: 3 - }, - { - asset: 'a97', - number: 2 - }, - { - asset: 'a99', - number: 2 - }, - { - asset: 'a31', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_45', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-27T16:00:19.138Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-48', - title: 'Order item 48', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - force: 'f-red', - startTime: 1668474600000, - endTime: 1668477600000, - geomId: 'Transit-0', - name: 'f-red//2.303263759415131//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 60.7398, - 5.7535 - ], - [ - 62.85, - 13.9 - ], - [ - 64.82, - 22.92 - ], - [ - 66.07, - 31.21 - ], - [ - 67.61, - 38.79 - ], - [ - 67.9125, - 39.108 - ] - ] - } - } - } - ], - activity: 'f-red-Land-Transit', - ownAssets: [ - { - asset: 'a131', - number: 5 - }, - { - asset: 'a188', - number: 1 - }, - { - asset: 'a175', - number: 2 - }, - { - asset: 'a189', - number: 1 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - }, - { - asset: 'a8' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_48', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Standard', - timestamp: '2022-09-21T20:09:53.499Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-51', - title: 'Order item 51', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - location: [ - { - uniqid: 'BMD MEZ-0', - geometry: { - type: 'Feature', - properties: { - id: 'BMD MEZ//BMD MEZ Location', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - force: 'f-blue', - startTime: 1668474600000, - endTime: 1668477600000, - geomId: 'BMD MEZ-0', - name: 'f-blue//2.5180683452636003//BMD MEZ Location' - }, - geometry: { - type: 'Point', - coordinates: [ - 27.2049, - 21.4301 - ] - } - } - } - ], - activity: 'f-blue-Maritime-BMD MEZ', - ownAssets: [ - { - asset: 'a89', - number: 2 - }, - { - asset: 'a34', - number: 1 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - }, - { - asset: 'a107' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_51', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--TST', - timestamp: '2022-09-28T22:03:28.651Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-54', - title: 'Order item 54', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T04:40:00.000Z', - location: [ - { - uniqid: 'Time Sensitive Targeting (TST)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route out', - startDate: '2022-11-15T01:10:00.000Z', - endDate: '2022-11-15T02:00:00.000Z', - force: 'f-red', - startTime: 1668474600000, - endTime: 1668477600000, - geomId: 'Time Sensitive Targeting (TST)-0', - name: 'f-red//6.6262941003078595//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 85.8061, - 11.1361 - ], - [ - 76.94, - 20.38 - ], - [ - 69.33, - 29.88 - ], - [ - 60, - 39.66 - ], - [ - 60.4596, - 39.5973 - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//TST Area', - startDate: '2022-11-15T02:00:00.000Z', - endDate: '2022-11-15T04:20:00.000Z', - force: 'f-red', - startTime: 1668477600000, - endTime: 1668486000000, - geomId: 'Time Sensitive Targeting (TST)-1', - name: 'f-red//13.252588200615719//TST Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 56.17797956454215, - 42.669092517241396 - ], - [ - 56.17797956454215, - 36.38192309149725 - ], - [ - 64.3693983260808, - 36.38192309149725 - ], - [ - 64.3693983260808, - 42.669092517241396 - ], - [ - 56.17797956454215, - 42.669092517241396 - ] - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route back', - startDate: '2022-11-15T04:20:00.000Z', - endDate: '2022-11-15T04:40:00.000Z', - force: 'f-red', - startTime: 1668486000000, - endTime: 1668487200000, - geomId: 'Time Sensitive Targeting (TST)-2', - name: 'f-red//19.87888230092358//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 60.4596, - 39.5973 - ], - [ - 72.91, - 25.55 - ], - [ - 85.81, - 10.95 - ], - [ - 85.8061, - 11.1361 - ] - ] - } - } - } - ], - activity: 'f-red-Air-Time Sensitive Targeting (TST)', - ownAssets: [ - { - asset: 'a107', - number: 5 - }, - { - asset: 'a134', - number: 5 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - }, - { - asset: 'a8' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_54', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--EWAttack', - timestamp: '2022-09-23T21:41:04.593Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-57', - title: 'Order item 57', - startDate: '2022-11-15T01:20:00.000Z', - endDate: '2022-11-15T05:00:00.000Z', - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-11-15T01:20:00.000Z', - endDate: '2022-11-15T02:10:00.000Z', - force: 'f-red', - startTime: 1668475200000, - endTime: 1668478200000, - geomId: 'EW Attack-0', - name: 'f-red//4.627941024693428//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 85.8061, - 11.1361 - ], - [ - 66.77, - 17.38 - ], - [ - 46.94, - 23.82 - ], - [ - 27.39, - 29.55 - ], - [ - 27.2352, - 29.9904 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-11-15T02:10:00.000Z', - endDate: '2022-11-15T05:00:00.000Z', - force: 'f-red', - startTime: 1668478200000, - endTime: 1668488400000, - geomId: 'EW Attack-1', - name: 'f-red//9.255882049386855//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 23.938017228233633, - 32.72389366451755 - ], - [ - 23.938017228233633, - 27.179215678482983 - ], - [ - 30.353191888351674, - 27.179215678482983 - ], - [ - 30.353191888351674, - 32.72389366451755 - ], - [ - 23.938017228233633, - 32.72389366451755 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-11-15T05:00:00.000Z', - endDate: '2022-11-15T05:00:00.000Z', - force: 'f-red', - startTime: 1668488400000, - endTime: 1668488400000, - geomId: 'EW Attack-2', - name: 'f-red//13.883823074080283//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 27.2352, - 29.9904 - ], - [ - 56.62, - 20.32 - ], - [ - 85.5, - 11.14 - ], - [ - 85.8061, - 11.1361 - ] - ] - } - } - } - ], - activity: 'f-red-Land-EW Attack', - ownAssets: [ - { - asset: 'a175', - number: 4 - }, - { - asset: 'a188', - number: 3 - }, - { - asset: 'a131', - number: 0 - }, - { - asset: 'a199', - number: 0 - } - ], - otherAssets: [ - { - asset: 'a10' - }, - { - asset: 'a96' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_57', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Standard', - timestamp: '2022-09-23T11:02:41.326Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-60', - title: 'Order item 60', - startDate: '2022-11-15T01:30:00.000Z', - endDate: '2022-11-15T07:50:00.000Z', - location: [ - { - uniqid: 'Offensive Counter Air-0', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route out', - startDate: '2022-11-15T01:30:00.000Z', - endDate: '2022-11-15T02:20:00.000Z', - force: 'f-red', - startTime: 1668475800000, - endTime: 1668478800000, - geomId: 'Offensive Counter Air-0', - name: 'f-red//6.523009118420305//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 74.3035, - 3.7946 - ], - [ - 54.63, - 21.17 - ], - [ - 34.28, - 38.86 - ], - [ - 34.5795, - 38.5097 - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-1', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//OCA Area', - startDate: '2022-11-15T02:20:00.000Z', - endDate: '2022-11-15T05:10:00.000Z', - force: 'f-red', - startTime: 1668478800000, - endTime: 1668489000000, - geomId: 'Offensive Counter Air-1', - name: 'f-red//13.04601823684061//OCA Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 30.508209615214312, - 41.490697568077884 - ], - [ - 30.508209615214312, - 35.39912652834502 - ], - [ - 38.32028924693916, - 35.39912652834502 - ], - [ - 38.32028924693916, - 41.490697568077884 - ], - [ - 30.508209615214312, - 41.490697568077884 - ] - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-2', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route back', - startDate: '2022-11-15T05:10:00.000Z', - endDate: '2022-11-15T07:50:00.000Z', - force: 'f-red', - startTime: 1668489000000, - endTime: 1668498600000, - geomId: 'Offensive Counter Air-2', - name: 'f-red//19.569027355260914//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.5795, - 38.5097 - ], - [ - 44.32, - 30.03 - ], - [ - 53.98, - 21.47 - ], - [ - 63.92, - 12.19 - ], - [ - 74.15, - 4.19 - ], - [ - 74.3035, - 3.7946 - ] - ] - } - } - } - ], - activity: 'f-red-Air-Offensive Counter Air', - ownAssets: [ - { - asset: 'a199', - number: 0 - }, - { - asset: 'a197', - number: 2 - }, - { - asset: 'a126', - number: 0 - }, - { - asset: 'a179', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a10' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_60', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Other--SOFAttack', - timestamp: '2022-09-27T14:08:18.849Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-63', - title: 'Order item 63', - startDate: '2022-11-15T01:50:00.000Z', - endDate: '2022-11-15T06:50:00.000Z', - location: [ - { - uniqid: 'SOF Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'SOF Activity//Route out', - startDate: '2022-11-15T01:50:00.000Z', - endDate: '2022-11-15T02:40:00.000Z', - force: 'f-blue', - startTime: 1668477000000, - endTime: 1668480000000, - geomId: 'SOF Activity-0', - name: 'f-blue//2.311498381488491//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 52.2775, - 43.778 - ], - [ - 44.78, - 31.41 - ], - [ - 36.63, - 19.39 - ], - [ - 36.9805, - 19.0458 - ] - ] - } - } - }, - { - uniqid: 'SOF Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'SOF Activity//Activity Location', - startDate: '2022-11-15T02:40:00.000Z', - endDate: '2022-11-15T03:00:00.000Z', - force: 'f-blue', - startTime: 1668480000000, - endTime: 1668481200000, - geomId: 'SOF Activity-1', - name: 'f-blue//4.622996762976982//Activity Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 32.834909204057595, - 22.821181754393546 - ], - [ - 32.834909204057595, - 15.182073993649173 - ], - [ - 40.939453201270105, - 15.182073993649173 - ], - [ - 40.939453201270105, - 22.821181754393546 - ], - [ - 32.834909204057595, - 22.821181754393546 - ] - ] - ] - } - } - }, - { - uniqid: 'SOF Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'SOF Activity//Effect Location', - startDate: '2022-11-15T03:00:00.000Z', - endDate: '2022-11-15T04:50:00.000Z', - force: 'f-blue', - startTime: 1668481200000, - endTime: 1668487800000, - geomId: 'SOF Activity-2', - name: 'f-blue//6.9344951444654725//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 34.935149686400194, - 20.94482108728698 - ], - [ - 34.935149686400194, - 17.12477005124668 - ], - [ - 38.979301012401045, - 17.12477005124668 - ], - [ - 38.979301012401045, - 20.94482108728698 - ], - [ - 34.935149686400194, - 20.94482108728698 - ] - ] - ] - } - } - }, - { - uniqid: 'SOF Activity-3', - geometry: { - type: 'Feature', - properties: { - id: 'SOF Activity//Route back', - startDate: '2022-11-15T04:50:00.000Z', - endDate: '2022-11-15T06:50:00.000Z', - force: 'f-blue', - startTime: 1668487800000, - endTime: 1668495000000, - geomId: 'SOF Activity-3', - name: 'f-blue//9.245993525953963//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.9805, - 19.0458 - ], - [ - 44.31, - 30.95 - ], - [ - 51.96, - 44.16 - ], - [ - 52.2775, - 43.778 - ] - ] - } - } - } - ], - activity: 'f-blue-Other-SOF Activity', - ownAssets: [ - { - asset: 'a79', - number: 3 - }, - { - asset: 'a63', - number: 5 - }, - { - asset: 'a74', - number: 4 - } - ], - otherAssets: [ - { - asset: 'a109' - }, - { - asset: 'a189' - }, - { - asset: 'a107' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_63', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Patrol', - timestamp: '2022-09-27T22:57:57.163Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-66', - title: 'Order item 66', - startDate: '2022-11-15T01:50:00.000Z', - endDate: '2022-11-15T06:00:00.000Z', - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-11-15T01:50:00.000Z', - endDate: '2022-11-15T02:40:00.000Z', - force: 'f-red', - startTime: 1668477000000, - endTime: 1668480000000, - geomId: 'Patrol-0', - name: 'f-red//6.993408813752467//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 84.1145, - 10.1282 - ], - [ - 77.32, - 30.4 - ], - [ - 69.93, - 51.07 - ], - [ - 69.5398, - 51.5758 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-11-15T02:40:00.000Z', - endDate: '2022-11-15T04:50:00.000Z', - force: 'f-red', - startTime: 1668480000000, - endTime: 1668487800000, - geomId: 'Patrol-1', - name: 'f-red//13.986817627504934//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 67.86932312505414, - 52.579204276843654 - ], - [ - 67.86932312505414, - 50.54971433229363 - ], - [ - 71.13731823289143, - 50.54971433229363 - ], - [ - 71.13731823289143, - 52.579204276843654 - ], - [ - 67.86932312505414, - 52.579204276843654 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-11-15T04:50:00.000Z', - endDate: '2022-11-15T06:00:00.000Z', - force: 'f-red', - startTime: 1668487800000, - endTime: 1668492000000, - geomId: 'Patrol-2', - name: 'f-red//20.9802264412574//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 69.5398, - 51.5758 - ], - [ - 83.64, - 10.24 - ], - [ - 84.1145, - 10.1282 - ] - ] - } - } - } - ], - activity: 'f-red-Air-Patrol', - ownAssets: [ - { - asset: 'a115', - number: 1 - }, - { - asset: 'a181', - number: 1 - }, - { - asset: 'a178', - number: 5 - }, - { - asset: 'a105', - number: 1 - } - ], - otherAssets: [ - { - asset: 'a10' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_66', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-24T13:31:36.267Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-69', - title: 'Order item 69', - startDate: '2022-11-15T02:00:00.000Z', - endDate: '2022-11-15T07:40:00.000Z', - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-11-15T02:00:00.000Z', - endDate: '2022-11-15T02:50:00.000Z', - force: 'f-blue', - startTime: 1668477600000, - endTime: 1668480600000, - geomId: 'Patrol-0', - name: 'f-blue//5.568740415357752//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.2807, - 30.4085 - ], - [ - 46.2, - 25.7 - ], - [ - 49.6, - 21.48 - ], - [ - 49.9528, - 21.3991 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-11-15T02:50:00.000Z', - endDate: '2022-11-15T04:50:00.000Z', - force: 'f-blue', - startTime: 1668480600000, - endTime: 1668487800000, - geomId: 'Patrol-1', - name: 'f-blue//11.137480830715504//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 47.30972294959791, - 23.796959342165355 - ], - [ - 47.30972294959791, - 18.961170574547136 - ], - [ - 52.50985917082621, - 18.961170574547136 - ], - [ - 52.50985917082621, - 23.796959342165355 - ], - [ - 47.30972294959791, - 23.796959342165355 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-11-15T04:50:00.000Z', - endDate: '2022-11-15T07:40:00.000Z', - force: 'f-blue', - startTime: 1668487800000, - endTime: 1668498000000, - geomId: 'Patrol-2', - name: 'f-blue//16.706221246073255//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 49.9528, - 21.3991 - ], - [ - 41.96, - 30.29 - ], - [ - 42.2807, - 30.4085 - ] - ] - } - } - } - ], - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'a5', - number: 0 - }, - { - asset: 'a57', - number: 4 - }, - { - asset: 'a39', - number: 0 - } - ], - otherAssets: [ - { - asset: 'a109' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_69', - _rev: '2' - } -] diff --git a/client/src/api/db/index.tsx b/client/src/api/db/index.tsx index 1e5cbcc226..a406c4dd98 100644 --- a/client/src/api/db/index.tsx +++ b/client/src/api/db/index.tsx @@ -2,15 +2,15 @@ import { databasePath, deletePath, replicate, serverPath, socketPath, wargameSettings } from 'src/config' -import { Message, MessageCustom, MessageInfoType, PlayerLogEntries, Wargame, TurnPeriod } from 'src/custom-types' +import { Message, MessageCustom, MessageInfoType, PlayerLogEntries, Wargame } from 'src/custom-types' import { io } from 'socket.io-client' import { DbProviderInterface, FetchData, FetchDataArray, FetchDataLogs, - FetchReferenc, ProviderDbInterface, - FetchTurnPeriod + FetchReferenc, + ProviderDbInterface } from './types' export class DbProvider implements DbProviderInterface { private provider: ProviderDbInterface @@ -137,18 +137,6 @@ export class DbProvider implements DbProviderInterface { }) } - getTurnPeriods (): Promise { - return new Promise((resolve, reject) => { - fetch(serverPath + this.getDbName() + '/' + 'turns') - .then(res => res.json() as Promise) - .then((res) => { - const { msg, data } = res - if (msg === 'ok') resolve(data) - else reject(msg) - }) - }) - } - lastCounter (roleId: string, id: string): Promise { return new Promise((resolve, reject) => { fetch(serverPath + this.getDbName() + '/' + roleId + '/' + id + '/' + 'counter') diff --git a/client/src/api/db/types.d.ts b/client/src/api/db/types.d.ts index ad3f1d5398..017c62bf70 100644 --- a/client/src/api/db/types.d.ts +++ b/client/src/api/db/types.d.ts @@ -1,4 +1,4 @@ -import { Message, MessageInfoType, Wargame, PlayerLogEntries, TurnPeriod } from 'src/custom-types' +import { Message, MessageInfoType, Wargame, PlayerLogEntries } from 'src/custom-types' import DbProvider from '.' export interface DbProviderInterface { @@ -8,7 +8,6 @@ export interface DbProviderInterface { put: (doc: Wargame | Message) => Promise allDocs: () => Promise lastWargame: () => Promise - getTurnPeriods: () => Promise lastCounter: (roleId: string, id: string) => Promise getPlayerLogs: (wargames: string, query: string) => Promise bulkDocs: (docs: PlayerLogEntries) => Promise<{msg: string}> @@ -48,9 +47,4 @@ export interface FetchDataLogs { data: PlayerLogEntries } -export interface FetchTurnPeriod { - msg: string - data: TurnPeriod[] -} - export type ChangeListener = (value: ChangesResponseChange) => any diff --git a/client/src/api/wargames_api/index.ts b/client/src/api/wargames_api/index.ts index 6787c60e35..821075a9d2 100644 --- a/client/src/api/wargames_api/index.ts +++ b/client/src/api/wargames_api/index.ts @@ -11,7 +11,7 @@ import { setCurrentWargame, setLatestFeedbackMessage, setLatestWargameMessage } from '../../ActionsAndReducers/playerUi/playerUi_ActionCreators' -import { ActivityLogsInterface, AnnotationMarkerData, ChannelTypes, ForceData, GameTurnLength, IconOption, Message, MessageChannel, MessageCustom, MessageDetails, MessageDetailsFrom, MessageFeedback, MessageInfoType, MessageStructure, ParticipantChat, ParticipantTypes, PlatformType, PlatformTypeData, PlayerLogEntries, PlayerUiDispatch, Role, TurnPeriod, Wargame, WargameOverview, WargameRevision } from 'src/custom-types' +import { ActivityLogsInterface, AnnotationMarkerData, ChannelTypes, ForceData, GameTurnLength, IconOption, Message, MessageChannel, MessageCustom, MessageDetails, MessageDetailsFrom, MessageFeedback, MessageInfoType, MessageStructure, ParticipantChat, ParticipantTypes, PlatformType, PlatformTypeData, PlayerLogEntries, PlayerUiDispatch, Role, Wargame, WargameOverview, WargameRevision } from 'src/custom-types' import { ApiWargameDb, ApiWargameDbObject, ListenNewMessageType } from './types.d' @@ -828,11 +828,3 @@ export const duplicateAnnotation = (dbName: string, currentAnnation: IconOption) return updateWargame({ ...res, data: updatedData }, dbName) }) } - -export const getTurnPeriodsList = (dbName: string): Promise => { - const { db } = getWargameDbByName(dbName) - - return db.getTurnPeriods() - .then((res) => res) - .catch(rejectDefault) -} diff --git a/client/src/config/action-constants.ts b/client/src/config/action-constants.ts index 6ff7ba75bb..b0efe90489 100644 --- a/client/src/config/action-constants.ts +++ b/client/src/config/action-constants.ts @@ -34,7 +34,6 @@ export const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION' export const UPDATE_RECIPIENT = 'UPDATE_RECIPIENT' export const REMOVE_RECIPIENT = 'REMOVE_RECIPIENT' export const SET_CURRENT_WARGAME_PLAYER = 'SET_CURRENT_WARGAME_PLAYER' -export const SET_ALL_TURN_PERIOD = 'SET_ALL_TURN_PERIOD' export const SET_FORCE = 'SET_FORCE' export const SET_ROLE = 'SET_ROLE' export const SET_FILTERED_CHANNELS = 'SET_FILTERED_CHANNELS' diff --git a/client/src/config/enums.ts b/client/src/config/enums.ts index bd43953a7b..b6f1ea0315 100644 --- a/client/src/config/enums.ts +++ b/client/src/config/enums.ts @@ -181,10 +181,3 @@ export enum AdminTabs { Channels = 'channels', Annotations = 'annotationIcons' } - -export enum SymbolForces { - Friend = 'F', - Hostile = 'H', - Neutral = 'N', - Unknown = 'U' -} diff --git a/client/src/config/globals.ts b/client/src/config/globals.ts index 8a667165e2..d481b4041b 100644 --- a/client/src/config/globals.ts +++ b/client/src/config/globals.ts @@ -19,12 +19,9 @@ export const expiredStorage = new ExpiredStorage() export const LOCAL_STORAGE_TIMEOUT = 2592000 // one month export const UMPIRE_FORCE = 'umpire' -export const UMPIRE_FORCE_NAME = 'white' export const LOCATION_PENDING = 'LocationPending' // special state where platforms can be moved at turn zero -export const UNKNOWN_TYPE = 'Unknown' // type use when force or platform-type not known for mapping asset - export const infoOpsGroup = 'Info Ops' // type of activity in planning message // special platform-type name, used for task group. Must match `platform-types` definition @@ -173,15 +170,6 @@ export const NEW_ROLE = 'New Role' export const UNSENT_CHAT_MESSAGE_TYPE = 'chat' export const UNSENT_SELECT_BY_DEFAULT_VALUE = 'BY_DEFAULT_VALUE' -export const SUPPORT_PANEL_LAYOUT = { - OPENING_TAB: 'serge.planning.openingTab', - SUPPORT_PANEL_WIDTH: 'serge.planning.supportPanelWidth', - VISIBLE_COLUMNS: 'serge.planning.visibleColumns2', - IS_FILTER: 'serge.planning.isFilter', - SORT_COLUMNS: 'serge.planning.sortColumns', - FILTER_APPLIED: 'serge.planning.filterApplied' -} - export const STORYBOOK_ROUTE = './storybook' // Interval for check server heartbeats diff --git a/client/src/custom-types/asset.d.ts b/client/src/custom-types/asset.d.ts index ebfc040fc2..8b9e246528 100644 --- a/client/src/custom-types/asset.d.ts +++ b/client/src/custom-types/asset.d.ts @@ -1,10 +1,5 @@ import { LaydownTypes } from 'src/config' -import { AttributeValues, AttributeValues2, ForceData, Perception, PlatformTypeData, Role, RouteStatus, RouteTurn } from '.' - -export type AssetWithForce = { - force: ForceData - asset: Asset -} +import { AttributeValues, AttributeValues2, Perception, PlatformTypeData, Role, RouteStatus, RouteTurn } from '.' export interface Asset { /** diff --git a/client/src/custom-types/index.d.ts b/client/src/custom-types/index.d.ts index 05e78e25d5..721a11ccf4 100644 --- a/client/src/custom-types/index.d.ts +++ b/client/src/custom-types/index.d.ts @@ -10,14 +10,10 @@ export { default as Force } from './force' export { default as GroupItem } from './group-item' export { default as Message } from './message' export { default as Participant } from './participant' -export { default as PerceivedTypes } from './perceived-types' export { default as Perception } from './perception' export { default as PlatformTypeData } from './platform-type-data' export { default as PlatformType } from './platform-type' export { default as Role } from './role' -export { default as States } from './states' -export { default as SergeHex } from './serge-hex' -export { default as SergeGrid } from './serge-grid' export { default as Template } from './template' export { default as WargameData } from './wargame-data' export { default as WargameList } from './wargame-list' diff --git a/client/src/custom-types/index.ts b/client/src/custom-types/index.ts index 0a05d24529..ef7b90a7a8 100644 --- a/client/src/custom-types/index.ts +++ b/client/src/custom-types/index.ts @@ -23,12 +23,12 @@ export { default as IconOption } from './icon-option.d' export * from './map-annotation.d' // export { default as MapPostBack } from './map-postback-data.d' -export { default as MappingConstraints } from './mapping-constraints.d' export { default as MarkerPerception } from './marker-perception.d' export * from './message-types-actions.d' export { default as MessageTypes, TemplateBodysByKey } from './message-types.d' export { - PlanningMessageStructureCore, PlanningMessageStructure, InteractionDetails, MessagePlanning, MessageAdjudicationOutcomes, + PlanningMessageStructureCore, PlanningMessageStructure, + MessagePlanning, MessageAdjudicationOutcomes, LocationOutcome, PerceptionOutcome, PerceptionOutcomes } from './pf-planning.d' export { @@ -44,7 +44,6 @@ export { } from './message.d' export { MessagesActionTypes, MessagesDispatch, SetCurrentViewFromURI } from './messages-action.d' export * from './participant.d' -export { default as PerceivedTypes } from './perceived-types.d' export { default as Perception } from './perception.d' export * from './planning-activity.d' export { default as PlatformTypeData } from './platform-type-data.d' @@ -52,7 +51,6 @@ export { default as PlatformType } from './platform-type.d' export * from './player-log-actions.d' export * from './player-log.d' export * from './player-ui-actions.d' -export * from './turn-period.d' export { default as PlayerUi, PlayerUiChannels, PlayerUiChatChannel } from './player-ui.d' export { default as RequestForInformation } from './request-for-information.d' export { default as Role } from './role.d' diff --git a/client/src/custom-types/perceived-types.d.ts b/client/src/custom-types/perceived-types.d.ts deleted file mode 100644 index bb37d2a7e8..0000000000 --- a/client/src/custom-types/perceived-types.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { UNKNOWN_TYPE } from 'src/config' -import ForceData from './force-data' -import PlatformTypeData from './platform-type-data' - -/** set of CSS classes that represent perception */ -export default interface PerceivedTypes { - /** - * the percevied type id (or undefined if unknown) - */ - typeId: PlatformTypeData['uniqid'] | typeof UNKNOWN_TYPE - /** the perceived force id (or undefined if unknown) - * - */ - forceId: ForceData['uniqid'] | typeof UNKNOWN_TYPE - /** - * what this force thinks the asset is called - */ - name: string - /** - * the perceived condition of this asset - */ - condition?: string -} diff --git a/client/src/custom-types/player-ui-actions.d.ts b/client/src/custom-types/player-ui-actions.d.ts index 38cb17a791..15e26b04d6 100644 --- a/client/src/custom-types/player-ui-actions.d.ts +++ b/client/src/custom-types/player-ui-actions.d.ts @@ -1,6 +1,5 @@ import { SET_CURRENT_WARGAME_PLAYER, - SET_ALL_TURN_PERIOD, SET_FORCE, SET_ROLE, SET_ALL_TEMPLATES_PLAYERUI, @@ -22,7 +21,6 @@ import { import { Wargame, - TurnPeriod, Role, MessageFeedback, MessageChannel, @@ -39,11 +37,6 @@ interface SetCurrentWargameAction { payload: Wargame } -interface SetCurrentTurnPeriodAction { - type: typeof SET_ALL_TURN_PERIOD - payload: Array -} - interface SetForceAction { type: typeof SET_FORCE payload: string @@ -122,7 +115,6 @@ interface CloseModalAction { } export type PlayerUiActionTypes = SetCurrentWargameAction | - SetCurrentTurnPeriodAction | SetForceAction | SetRoleAction | SetAllTemplatesAction | diff --git a/client/src/custom-types/player-ui.d.ts b/client/src/custom-types/player-ui.d.ts index 696c20ccf9..46f4525eb0 100644 --- a/client/src/custom-types/player-ui.d.ts +++ b/client/src/custom-types/player-ui.d.ts @@ -5,7 +5,6 @@ import { ChannelTypes } from './channel-data' import ChannelUI from './channel-ui' import ForceData from './force-data' import { AnnotationIcons } from './map-annotation' -import MappingConstraints from './mapping-constraints' import { MessageChannel, MessageFeedback } from './message' import { TemplateBodysByKey } from './message-types' import { PerForcePlanningActivitySet } from './planning-activity' @@ -13,7 +12,6 @@ import PlatformTypeData from './platform-type-data' import { PlayerMessageLog } from './player-log' import Role from './role' import { GameTurnLength } from './turn-length' -import { TurnPeriods } from './turn-period' export interface PlayerUiChannels { [property: string]: ChannelUI @@ -55,7 +53,6 @@ export default interface PlayerUi { /** all channels in this wargame */ allChannels: Array /** icons used for markers */ - allPeriods: TurnPeriods markerIcons: AnnotationIcons /** set of forces for ths current wargame */ allForces: Array @@ -89,8 +86,6 @@ export default interface PlayerUi { isRFIManager: boolean /** log of recent player messages */ playerMessageLog: PlayerMessageLog - /** mapping constraints */ - mappingConstraints?: MappingConstraints /** whether to hide force memberships in channels */ hideForcesInChannels?: boolean /** definitions of activities for forces */ diff --git a/client/src/custom-types/turn-period.d.ts b/client/src/custom-types/turn-period.d.ts deleted file mode 100644 index b91ece4aa1..0000000000 --- a/client/src/custom-types/turn-period.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { GameTurnLength } from './turn-length' - -/** a description of the start and finish time for a turn */ -export interface TurnPeriod { - gameTurnTime: GameTurnLength - gameDate: string - gameTurn: number -} - -export type TurnPeriods = TurnPeriod[] diff --git a/client/src/mocks/index.ts b/client/src/mocks/index.ts index 887de23807..e300d0ccce 100644 --- a/client/src/mocks/index.ts +++ b/client/src/mocks/index.ts @@ -17,14 +17,11 @@ export { default as WargameExportedMock } from './wargame-exported.mock' export { default as MessageTemplatesMock } from './message-templates.mock' export * from './message-templates-by-key.mock' export { default as forces } from './forces.mock' -export { default as turnPeriod } from './turn-period.mock' export { default as atlanticForces } from './atlantic-forces.mock' export { default as smallScaleForces } from './small-scale-forces.mock' export { default as watuWargame } from './watu-wargame-mock' export { default as P9Mock } from './pf-planning/p9-wargame.mock' -export { default as p9MessageTemplatesMock } from './pf-planning/p9-message-templates.mock' export { default as P9BMock } from './pf-planning/p9b-wargame.mock' -export { default as P9BShort } from './pf-planning/p9b-short-wargame.mock' export { default as preInitialisedForces } from './pre-initialised-forces.mock' export { default as platformTypes } from './platform-types.mock' export { default as platformType } from './platform-type.mock' @@ -42,4 +39,3 @@ export * from './planning-messages.mock' export { default as planningMessageTemplatesMock } from './planning-message-templates.mock' export * from './coa-messages.mock' export * from './planning-activities.mock' -export * from './planning-messages-bulk.mock' diff --git a/client/src/mocks/pf-planning/p9-message-templates.mock.ts b/client/src/mocks/pf-planning/p9-message-templates.mock.ts deleted file mode 100644 index a90d41749b..0000000000 --- a/client/src/mocks/pf-planning/p9-message-templates.mock.ts +++ /dev/null @@ -1,5749 +0,0 @@ -import { TemplateBody } from 'src/custom-types' - -const p9MessageTemplatesMock: TemplateBody[] = [ - { - lastUpdated: '2022-11-12T19:56:51.409Z', - title: 'Land--Transit', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'transitSpeed', - 'transitDuration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - transitSpeed: { - type: 'integer', - title: 'Transit Speed', - propertyOrder: 300, - options: { - grid_columns: 3 - } - }, - transitDuration: { - type: 'string', - title: 'Transit Duration', - propertyOrder: 301, - options: { - grid_columns: 3 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--Transit', - type: 'object' - }, - completed: true, - _id: 'Land--Transit', - _rev: '2022-11-12T19:56:51.409Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.409Z', - title: 'Maritime--Transit', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'transitSpeed', - 'transitDuration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - transitSpeed: { - type: 'integer', - title: 'Transit Speed', - propertyOrder: 300, - options: { - grid_columns: 3 - } - }, - transitDuration: { - type: 'string', - title: 'Transit Duration', - propertyOrder: 301, - options: { - grid_columns: 3 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--Transit', - type: 'object' - }, - completed: true, - _id: 'Maritime--Transit', - _rev: '2022-11-12T19:56:51.409Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.409Z', - title: 'Air--Transit', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'transitSpeed', - 'transitDuration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - transitSpeed: { - type: 'integer', - title: 'Transit Speed', - propertyOrder: 300, - options: { - grid_columns: 3 - } - }, - transitDuration: { - type: 'string', - title: 'Transit Duration', - propertyOrder: 301, - options: { - grid_columns: 3 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--Transit', - type: 'object' - }, - completed: true, - _id: 'Air--Transit', - _rev: '2022-11-12T19:56:51.409Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.410Z', - title: 'Land--MissileStrike', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'missileType', - 'missilesFired', - 'targetType', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - missileType: { - type: 'string', - title: 'Missile Type', - propertyOrder: 302, - options: { - grid_columns: 4 - } - }, - missilesFired: { - type: 'integer', - title: 'Missiles Fired', - propertyOrder: 303, - options: { - grid_columns: 4 - } - }, - targetType: { - type: 'string', - title: 'Target Type', - propertyOrder: 304, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--MissileStrike', - type: 'object' - }, - completed: true, - _id: 'Land--MissileStrike', - _rev: '2022-11-12T19:56:51.410Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.411Z', - title: 'Maritime--MissileStrike', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'missileType', - 'missilesFired', - 'targetType', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - missileType: { - type: 'string', - title: 'Missile Type', - propertyOrder: 302, - options: { - grid_columns: 4 - } - }, - missilesFired: { - type: 'integer', - title: 'Missiles Fired', - propertyOrder: 303, - options: { - grid_columns: 4 - } - }, - targetType: { - type: 'string', - title: 'Target Type', - propertyOrder: 304, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--MissileStrike', - type: 'object' - }, - completed: true, - _id: 'Maritime--MissileStrike', - _rev: '2022-11-12T19:56:51.411Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.412Z', - title: 'Land--Patrol', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'patrolType', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - patrolType: { - type: 'string', - title: 'Patrol Type', - propertyOrder: 305, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--Patrol', - type: 'object' - }, - completed: true, - _id: 'Land--Patrol', - _rev: '2022-11-12T19:56:51.412Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.412Z', - title: 'Maritime--Patrol', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'patrolType', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - patrolType: { - type: 'string', - title: 'Patrol Type', - propertyOrder: 305, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--Patrol', - type: 'object' - }, - completed: true, - _id: 'Maritime--Patrol', - _rev: '2022-11-12T19:56:51.412Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.412Z', - title: 'Air--Patrol', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'patrolType', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - patrolType: { - type: 'string', - title: 'Patrol Type', - propertyOrder: 305, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--Patrol', - type: 'object' - }, - completed: true, - _id: 'Air--Patrol', - _rev: '2022-11-12T19:56:51.412Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.415Z', - title: 'Land--Standard', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--Standard', - type: 'object' - }, - completed: true, - _id: 'Land--Standard', - _rev: '2022-11-12T19:56:51.415Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.415Z', - title: 'Maritime--Standard', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--Standard', - type: 'object' - }, - completed: true, - _id: 'Maritime--Standard', - _rev: '2022-11-12T19:56:51.415Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.417Z', - title: 'Land--ISTAR', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'method', - 'duration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - method: { - type: 'string', - title: 'Observation Method', - propertyOrder: 306, - options: { - grid_columns: 4 - } - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 307, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--ISTAR', - type: 'object' - }, - completed: true, - _id: 'Land--ISTAR', - _rev: '2022-11-12T19:56:51.417Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.417Z', - title: 'Maritime--ISTAR', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'method', - 'duration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - method: { - type: 'string', - title: 'Observation Method', - propertyOrder: 306, - options: { - grid_columns: 4 - } - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 307, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--ISTAR', - type: 'object' - }, - completed: true, - _id: 'Maritime--ISTAR', - _rev: '2022-11-12T19:56:51.417Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.417Z', - title: 'Air--ISTAR', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'method', - 'duration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - method: { - type: 'string', - title: 'Observation Method', - propertyOrder: 306, - options: { - grid_columns: 4 - } - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 307, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--ISTAR', - type: 'object' - }, - completed: true, - _id: 'Air--ISTAR', - _rev: '2022-11-12T19:56:51.417Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.418Z', - title: 'Air--Duration', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'duration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 308, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--Duration', - type: 'object' - }, - completed: true, - _id: 'Air--Duration', - _rev: '2022-11-12T19:56:51.418Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.419Z', - title: 'Air--TST', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'duration', - 'targetPriority', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 309, - options: { - grid_columns: 4 - } - }, - targetPriority: { - type: 'string', - format: 'textarea', - title: 'Target Type Priority', - propertyOrder: 310, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--TST', - type: 'object' - }, - completed: true, - _id: 'Air--TST', - _rev: '2022-11-12T19:56:51.419Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.420Z', - title: 'Maritime--MineLaying', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'duration', - 'density', - 'covert', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 311, - options: { - grid_columns: 4 - } - }, - density: { - type: 'integer', - title: 'Minefield Priority', - propertyOrder: 312, - options: { - grid_columns: 4 - } - }, - covert: { - type: 'boolean', - title: 'Covert', - format: 'checkbox', - propertyOrder: 313, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--MineLaying', - type: 'object' - }, - completed: true, - _id: 'Maritime--MineLaying', - _rev: '2022-11-12T19:56:51.420Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.420Z', - title: 'Maritime--Duration', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'duration', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 308, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--Duration', - type: 'object' - }, - completed: true, - _id: 'Maritime--Duration', - _rev: '2022-11-12T19:56:51.420Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.421Z', - title: 'Maritime--ASWBarrier', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'duration', - 'active', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - duration: { - type: 'integer', - title: 'Duration (hrs)', - propertyOrder: 314, - options: { - grid_columns: 4 - } - }, - active: { - type: 'boolean', - title: 'Active?', - format: 'checkbox', - propertyOrder: 315, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--ASWBarrier', - type: 'object' - }, - completed: true, - _id: 'Maritime--ASWBarrier', - _rev: '2022-11-12T19:56:51.421Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.421Z', - title: 'Air--Standard', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--Standard', - type: 'object' - }, - completed: true, - _id: 'Air--Standard', - _rev: '2022-11-12T19:56:51.421Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.423Z', - title: 'Land--EWAttack', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'effect', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - effect: { - type: 'string', - title: 'Effect Type', - propertyOrder: 316, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Land--EWAttack', - type: 'object' - }, - completed: true, - _id: 'Land--EWAttack', - _rev: '2022-11-12T19:56:51.423Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.423Z', - title: 'Maritime--EWAttack', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'effect', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - effect: { - type: 'string', - title: 'Effect Type', - propertyOrder: 316, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Maritime--EWAttack', - type: 'object' - }, - completed: true, - _id: 'Maritime--EWAttack', - _rev: '2022-11-12T19:56:51.423Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.423Z', - title: 'Air--EWAttack', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'effect', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - effect: { - type: 'string', - title: 'Effect Type', - propertyOrder: 316, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Air--EWAttack', - type: 'object' - }, - completed: true, - _id: 'Air--EWAttack', - _rev: '2022-11-12T19:56:51.423Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.425Z', - title: 'Other--SOFAttack', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'activityType', - 'intendedEffect', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - activityType: { - enum: [ - 'Raid', - 'Capture/Kill', - 'Gather Int', - 'Deliver Errect' - ], - title: 'Activity Type', - type: 'string', - propertyOrder: 317, - options: { - grid_columns: 4 - } - }, - intendedEffect: { - type: 'string', - format: 'textarea', - title: 'Intended Effect', - propertyOrder: 318, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Other--SOFAttack', - type: 'object' - }, - completed: true, - _id: 'Other--SOFAttack', - _rev: '2022-11-12T19:56:51.425Z' - }, - { - lastUpdated: '2022-11-12T19:56:51.425Z', - title: 'Other--Cyber', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'intent', - 'ownAssets', - 'otherAssets', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'activityDescription', - 'activityType', - 'intendedEffect', - 'location' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'serge-date', - type: 'string', - title: 'Start date', - propertyOrder: 30, - options: { - grid_columns: 3 - } - }, - endDate: { - format: 'serge-date', - type: 'string', - propertyOrder: 40, - title: 'End date', - options: { - grid_columns: 3 - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 8 - }, - type: 'string' - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets', - options: { - grid_columns: 6 - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Asset', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 3, - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ] - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 2 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - propertyOrder: 80, - format: 'table', - minItems: 0, - title: 'Subject(s) of orders', - options: { - grid_columns: 6 - }, - items: { - title: 'Asset', - type: 'string', - enum: [ - 'ra', - 'rb', - 'rc', - 'da' - ], - options: { - enum_titles: [ - 'Boat A', - 'Bike B', - 'Band C', - 'Plane A' - ] - } - } - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - format: 'text', - title: 'Sync with', - propertyOrder: 68, - options: { - grid_columns: 6 - }, - type: 'string' - }, - supports: { - format: 'textarea', - title: 'Supports High-Level', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - format: 'text', - title: 'Activity Card', - propertyOrder: 120, - options: { - grid_columns: 4 - }, - type: 'string' - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 130, - options: { - grid_columns: 8 - }, - type: 'string' - }, - activityType: { - type: 'string', - title: 'Activity Type', - propertyOrder: 319, - options: { - grid_columns: 4 - } - }, - intendedEffect: { - type: 'string', - format: 'textarea', - title: 'Intended Effect', - propertyOrder: 320, - options: { - grid_columns: 4 - } - }, - location: { - format: 'textarea', - title: 'Location', - id: 'locationArea', - type: 'string', - readonly: 'readonly', - propertyOrder: 55, - options: { - grid_columns: 6 - } - } - }, - title: 'Other--Cyber', - type: 'object' - }, - completed: true, - _id: 'Other--Cyber', - _rev: '2022-11-12T19:56:51.425Z' - } -] -export default p9MessageTemplatesMock diff --git a/client/src/mocks/pf-planning/p9b-short-wargame.mock.ts b/client/src/mocks/pf-planning/p9b-short-wargame.mock.ts deleted file mode 100644 index d2b20eccd9..0000000000 --- a/client/src/mocks/pf-planning/p9b-short-wargame.mock.ts +++ /dev/null @@ -1,15517 +0,0 @@ -import { Wargame } from 'src/custom-types' - -const shortGame: Wargame = { - adjudicationStartTime: '2021-08-10T16:12:25+01:00', - wargameList: [], - data: { - overview: { - name: 'Overview - settings', - gameDescription: '', - gameTurnTime: { unit: 'millis', millis: 259200000 }, - realtimeTurnTime: 300000, - timeWarning: 60000, - turnPresentation: 'Natural', - gameDate: '2022-05-01T00:00:00+00:00', - showAccessCodes: true, - logPlayerActivity: false, - dirty: false - }, - forces: { - selectedForce: 'f-blue', - name: 'Forces', - forces: [ - { - color: '#000000', - dirty: false, - iconURL: 'default_img/forceDefault.png', - name: 'Umpire', - overview: 'An overview written here..', - roles: [ - { - isGameControl: true, - isInsightViewer: true, - isObserver: true, - name: 'Game Designer', - roleId: 'umpire' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: true, - isRFIManager: false, - name: 'Adjudicator 1', - roleId: 'adjud-1' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: true, - isRFIManager: false, - name: 'Adjudicator 2', - roleId: 'adjud-2' - } - ], - umpire: true, - uniqid: 'umpire' - }, - { - assets: [ - { - uniqid: 'Blue.1.306', - contactId: 'CA139', - name: 'Blue:Fast Jet Squadron :305', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fast Jet Squadron :305', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 38.1819, - 49.8131 - ] - }, - { - by: 'f-green', - name: 'Blue:Fast Jet Squadron :305', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 38.1475, - 49.8062 - ] - }, - { - by: 'f-white', - name: 'Blue:Fast Jet Squadron :305', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 38.1819, - 49.8131 - ] - } - ], - health: 100, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 46.9858, - 52.1862 - ], - attributes: { - a_Speed: 280, - a_Type: 'Fast Jet Squadron _4', - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Airfield: 'Blue.7.86', - a_Equipment: '_27' - } - }, - { - uniqid: 'Blue.12.307', - contactId: 'CA1093', - name: 'Blue:FIAC:306', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:306', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.5145, - 47.2995 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:306', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.5145, - 47.2995 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:306', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.5145, - 47.2995 - ] - } - ], - health: 25, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 41.1429, - 37.6467 - ], - attributes: { - a_Type: 'FIAC_4', - a_Speed: 15, - a_C4_Status: 'Operational', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-387' - } - }, - { - uniqid: 'Blue.3.308', - contactId: 'CA52', - name: 'Blue:SAM:307', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:307', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 38.391, - 42.0927 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:307', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 38.4635, - 42.0998 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:307', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 38.4177, - 42.1671 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 38.391, - 42.0927 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_4', - a_C4_Status: 'Degraded', - a_Equipment: '_3', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.10.309', - contactId: 'CA2694', - name: 'Blue:Air LOGS:308', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Air LOGS:308', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 49.7978, - 46.4653 - ] - }, - { - by: 'f-green', - name: 'Blue:Air LOGS:308', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 49.8652, - 46.3708 - ] - }, - { - by: 'f-white', - name: 'Blue:Air LOGS:308', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 49.8652, - 46.3708 - ] - } - ], - health: 0, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 41.9732, - 22.0703 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 200, - a_C4_Status: 'None', - a_Airfield: 'Blue.7.140', - a_Number_Aircraft: 10, - a_Equipment: '_46' - } - }, - { - uniqid: 'Blue.3.310', - contactId: 'CA1545', - name: 'Blue:SAM:309', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:309', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.6593, - 30.4972 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:309', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.6593, - 30.4972 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:309', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.6593, - 30.4972 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 33.6593, - 30.4972 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_2', - a_C4_Status: 'Operational', - a_Equipment: '_19', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.6.311', - contactId: 'CA1208', - name: 'Blue:Land Unit:310', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:310', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 36.7702, - 48.8665 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:310', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 36.7702, - 48.8665 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:310', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 36.7702, - 48.8665 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 36.7702, - 48.8665 - ], - attributes: { - a_Speed: 34, - a_Type: 'Land Unit_2', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_29', - a_Equipment: '_48' - } - }, - { - uniqid: 'Blue.9.312', - contactId: 'CA314', - name: 'Blue:ISTAR:311', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:311', - typeId: '_air_istar', - force: 'f-blue' - }, - { - by: 'f-green', - name: 'Blue:ISTAR:311', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 51.7404, - 34.5406 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:311', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 51.778, - 34.5634 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 32.1834, - 22.3947 - ], - attributes: { - a_Speed: 200, - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Type: 'ISTAR_5', - a_Airfield: '_12', - a_Equipment: '_45', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-793' - } - }, - { - uniqid: 'Blue.13.313', - contactId: 'CA1446', - name: 'Blue:Maritime Minefield:312', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Maritime Minefield:312', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 41.6371, - 43.2591 - ] - }, - { - by: 'f-green', - name: 'Blue:Maritime Minefield:312', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 41.6371, - 43.2591 - ] - }, - { - by: 'f-white', - name: 'Blue:Maritime Minefield:312', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 41.6371, - 43.2591 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 41.6371, - 43.2591 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_4', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Blue.5.314', - contactId: 'CA2640', - name: 'Blue:Submarine:313', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:313', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.6713, - 26.6795 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:313', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.6576, - 26.6298 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:313', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.6713, - 26.6795 - ] - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 41.6713, - 26.6795 - ], - attributes: { - a_Speed: 30, - a_Type: 'Submarine_1', - a_C4_Status: 'Operational', - a_Equipment: '_43' - } - }, - { - uniqid: 'Blue.13.315', - contactId: 'CA2137', - name: 'Blue:Maritime Minefield:314', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Maritime Minefield:314', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 52.0059, - 39.1927 - ] - }, - { - by: 'f-green', - name: 'Blue:Maritime Minefield:314', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 52.0059, - 39.1927 - ] - }, - { - by: 'f-white', - name: 'Blue:Maritime Minefield:314', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 52.0059, - 39.1927 - ] - } - ], - health: 50, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 52.0059, - 39.1927 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_2', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'No' - } - }, - { - uniqid: 'Blue.11.316', - contactId: 'CA660', - name: 'Blue:C2 Node:315', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:315', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.1768, - 36.9888 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:315', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.1957, - 36.9887 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:315', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.1957, - 36.9887 - ] - } - ], - health: 100, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 41.1957, - 36.9887 - ], - attributes: { - a_Type: 'C2 Node_4', - a_C4_Status: 'Degraded', - a_Connections: '_30' - } - }, - { - uniqid: 'Blue.5.317', - contactId: 'CA32', - name: 'Blue:Submarine:316', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:316', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 33.8111, - 50.7015 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:316', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 33.8111, - 50.7015 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:316', - typeId: '_maritime_submarine', - force: 'f-blue' - } - ], - health: 25, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 33.8111, - 50.7015 - ], - attributes: { - a_Speed: 25, - a_Type: 'Submarine_1', - a_C4_Status: 'Operational', - a_Equipment: '_27' - } - }, - { - uniqid: 'Blue.10.318', - contactId: 'CA2105', - name: 'Blue:Air LOGS:317', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Air LOGS:317', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 33.7018, - 49.6305 - ] - }, - { - by: 'f-green', - name: 'Blue:Air LOGS:317', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 33.6133, - 49.5321 - ] - }, - { - by: 'f-white', - name: 'Blue:Air LOGS:317', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 33.7018, - 49.6305 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 33.1265, - 40.0106 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 220, - a_C4_Status: 'Degraded', - a_Airfield: '_11', - a_Number_Aircraft: 10, - a_Equipment: '_31', - a_TaskGroup: 'CTF-310' - } - }, - { - uniqid: 'Blue.7.319', - contactId: 'CA413', - name: 'Blue:Fixed Asset:318', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:318', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 48.2018, - 31.075 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:318', - typeId: '_land_asset', - force: 'f-blue' - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:318', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 48.1802, - 31.0331 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 48.1802, - 31.0331 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Blue.10.320', - contactId: 'CA1448', - name: 'Blue:Air LOGS:319', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Air LOGS:319', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 51.6465, - 44.5631 - ] - }, - { - by: 'f-green', - name: 'Blue:Air LOGS:319', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 51.6465, - 44.5631 - ] - }, - { - by: 'f-white', - name: 'Blue:Air LOGS:319', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 51.6795, - 44.6367 - ] - } - ], - health: 25, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 31.2378, - 38.7034 - ], - attributes: { - a_Type: 'Air LOGS_5', - a_Speed: 280, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.9.159', - a_Number_Aircraft: 10, - a_Equipment: '_1' - } - }, - { - uniqid: 'Blue.6.321', - contactId: 'CA2415', - name: 'Blue:Land Unit:320', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:320', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 29.3762, - 44.0187 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:320', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 29.3762, - 44.0187 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:320', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 29.3762, - 44.0187 - ] - } - ], - health: 50, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 29.3762, - 44.0187 - ], - attributes: { - a_Speed: 10, - a_Type: 'Land Unit_1', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_44', - a_Equipment: '_29' - } - }, - { - uniqid: 'Blue.10.322', - contactId: 'CA0', - name: 'Blue:Air LOGS:321', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Air LOGS:321', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 46.8103, - 38.4965 - ] - }, - { - by: 'f-green', - name: 'Blue:Air LOGS:321', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 46.8103, - 38.4965 - ] - }, - { - by: 'f-white', - name: 'Blue:Air LOGS:321', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 46.8103, - 38.4965 - ] - } - ], - health: 50, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 49.994, - 24.3865 - ], - attributes: { - a_Type: 'Air LOGS_3', - a_Speed: 240, - a_C4_Status: 'Degraded', - a_Airfield: '_7', - a_Number_Aircraft: 10, - a_Equipment: '_25', - a_TaskGroup: 'CTF-575' - } - }, - { - uniqid: 'Blue.6.323', - contactId: 'CA1941', - name: 'Blue:Land Unit:322', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:322', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.346, - 23.554 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:322', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.4297, - 23.5803 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:322', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.4297, - 23.5803 - ] - } - ], - health: 100, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 48.4297, - 23.5803 - ], - attributes: { - a_Speed: 46, - a_Type: 'Land Unit_5', - a_C4_Status: 'None', - a_Size: 'Unit size_30', - a_Equipment: '_6' - } - }, - { - uniqid: 'Blue.6.324', - contactId: 'CA3238', - name: 'Blue:Fixed Asset:323', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:323', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.1031, - 41.9396 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:323', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.1031, - 41.9396 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:323', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.1031, - 41.9396 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 34.1031, - 41.9396 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Blue.2.325', - contactId: 'CA1960', - name: 'Blue:Bomber Squadron:324', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Bomber Squadron:324', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 47.9383, - 51.7305 - ] - }, - { - by: 'f-green', - name: 'Blue:Bomber Squadron:324', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 47.9383, - 51.7305 - ] - }, - { - by: 'f-white', - name: 'Blue:Bomber Squadron:324', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 47.9383, - 51.7305 - ] - } - ], - health: 50, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 34.583, - 47.6436 - ], - attributes: { - a_Type: 'Bomber Squadron_1', - a_Speed: 240, - a_C4_Status: 'None', - a_Airfield: 'Blue.12.13', - a_Number_Aircraft: 10, - a_Equipment: '_36' - } - }, - { - uniqid: 'Blue.6.326', - contactId: 'CA31', - name: 'Blue:Land Unit:325', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:325', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.5411, - 34.2564 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:325', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.4917, - 34.1753 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:325', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 48.6046, - 34.1925 - ] - } - ], - health: 50, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 48.5411, - 34.2564 - ], - attributes: { - a_Speed: 34, - a_Type: 'Land Unit_2', - a_C4_Status: 'Operational', - a_Size: 'Unit size_48', - a_Equipment: '_14' - } - }, - { - uniqid: 'Blue.1.327', - contactId: 'CA3285', - name: 'Blue:Fast Jet Squadron :326', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fast Jet Squadron :326', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 54.1454, - 31.5336 - ] - }, - { - by: 'f-green', - name: 'Blue:Fast Jet Squadron :326', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 54.1454, - 31.5336 - ] - }, - { - by: 'f-white', - name: 'Blue:Fast Jet Squadron :326', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 54.1454, - 31.5336 - ] - } - ], - health: 25, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 37.1086, - 51.0099 - ], - attributes: { - a_Speed: 220, - a_Type: 'Fast Jet Squadron _5', - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.7.302', - a_Equipment: '_27' - } - }, - { - uniqid: 'Blue.3.328', - contactId: 'CA2911', - name: 'Blue:SAM:327', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:327', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 35.3319, - 36.9958 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:327', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 35.3668, - 36.9801 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:327', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 35.3319, - 36.9958 - ] - } - ], - health: 75, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 35.3319, - 36.9958 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_5', - a_C4_Status: 'Operational', - a_Equipment: '_8', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.7.329', - contactId: 'CA3156', - name: 'Blue:Fixed Asset:328', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:328', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5505, - 42.6389 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:328', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5864, - 42.5617 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:328', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5864, - 42.5617 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 42.5864, - 42.5617 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Blue.5.330', - contactId: 'CA743', - name: 'Blue:Submarine:329', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:329', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 51.6894, - 35.457 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:329', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 51.6535, - 35.4829 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:329', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 51.7883, - 35.5417 - ] - } - ], - health: 100, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 33.1265, - 40.0106 - ], - attributes: { - a_Speed: 10, - a_Type: 'Submarine_4', - a_C4_Status: 'None', - a_Equipment: '_43', - a_TaskGroup: 'CTF-310' - } - }, - { - uniqid: 'Blue.5.331', - contactId: 'CA1330', - name: 'Blue:Fixed Asset:330', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:330', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 45.6735, - 52.2504 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:330', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 45.5889, - 52.2577 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:330', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 45.68, - 52.2801 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 45.68, - 52.2801 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Blue.7.332', - contactId: 'CA1887', - name: 'Blue:Fixed Asset:331', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:331', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.7764, - 52.0503 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:331', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.8739, - 52.1147 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:331', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.7764, - 52.0503 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 41.7764, - 52.0503 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_3' - } - }, - { - uniqid: 'Blue.5.333', - contactId: 'CA572', - name: 'Blue:Submarine:332', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:332', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.2465, - 49.7578 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:332', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.2078, - 49.7396 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:332', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 41.2465, - 49.7578 - ] - } - ], - health: 25, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 52.2171, - 38.0852 - ], - attributes: { - a_Speed: 10, - a_Type: 'Submarine_4', - a_C4_Status: 'Degraded', - a_Equipment: '_21', - a_TaskGroup: 'CTF-281' - } - }, - { - uniqid: 'Blue.5.334', - contactId: 'CA2703', - name: 'Blue:Submarine:333', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:333', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 33.9727, - 33.3832 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:333', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 33.9367, - 33.4356 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:333', - typeId: '_maritime_submarine', - force: 'f-blue' - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 33.9367, - 33.4356 - ], - attributes: { - a_Speed: 20, - a_Type: 'Submarine_1', - a_C4_Status: 'None', - a_Equipment: '_33' - } - }, - { - uniqid: 'Blue.12.335', - contactId: 'CA3388', - name: 'Blue:FIAC:334', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:334', - typeId: '_maritime_fiac', - force: 'f-blue' - }, - { - by: 'f-green', - name: 'Blue:FIAC:334', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 46.7173, - 31.6087 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:334', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 46.7446, - 31.5264 - ] - } - ], - health: 100, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 33.1265, - 40.0106 - ], - attributes: { - a_Type: 'FIAC_6', - a_Speed: 25, - a_C4_Status: 'Operational', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-310' - } - }, - { - uniqid: 'Blue.11.336', - contactId: 'CA843', - name: 'Blue:C2 Node:335', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:335', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 53.8192, - 35.3747 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:335', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 53.8192, - 35.3747 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:335', - typeId: '_land_c2', - force: 'f-blue' - } - ], - health: 0, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 53.8192, - 35.3747 - ], - attributes: { - a_Type: 'C2 Node_2', - a_C4_Status: 'Operational', - a_Connections: '_38' - } - }, - { - uniqid: 'Blue.8.337', - contactId: 'CA3359', - name: 'Blue:SSM:336', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:336', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 42.8324, - 49.5771 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:336', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 42.8324, - 49.5771 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:336', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 42.9186, - 49.5574 - ] - } - ], - health: 0, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 42.8324, - 49.5771 - ], - attributes: { - a_Speed: 22, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_4', - a_Equipment: '_9' - } - }, - { - uniqid: 'Blue.12.338', - contactId: 'CA2133', - name: 'Blue:FIAC:337', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:337', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 32.4665, - 30.9855 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:337', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 32.5239, - 31.0044 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:337', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 32.4665, - 30.9855 - ] - } - ], - health: 50, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 32.4665, - 30.9855 - ], - attributes: { - a_Type: 'FIAC_5', - a_Speed: 15, - a_C4_Status: 'Degraded', - a_Number_FIACs: 100 - } - }, - { - uniqid: 'Blue.4.339', - contactId: 'CA197', - name: 'Blue:Fixed Asset:338', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:338', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 33.4631, - 26.5736 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:338', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 33.3799, - 26.5276 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:338', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 33.4631, - 26.5736 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 33.4631, - 26.5736 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_1' - } - }, - { - uniqid: 'Blue.5.340', - contactId: 'CA1370', - name: 'Blue:Submarine:339', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:339', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 47.373, - 23.5988 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:339', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 47.373, - 23.5988 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:339', - typeId: '_maritime_submarine', - force: 'f-blue' - } - ], - health: 0, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 33.1265, - 40.0106 - ], - attributes: { - a_Speed: 15, - a_Type: 'Submarine_2', - a_C4_Status: 'None', - a_Equipment: '_5', - a_TaskGroup: 'CTF-310' - } - }, - { - uniqid: 'Blue.8.341', - contactId: 'CA110', - name: 'Blue:SSM:340', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:340', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 29.7643, - 38.0982 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:340', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 29.8304, - 38.0791 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:340', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 29.8304, - 38.0791 - ] - } - ], - health: 100, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 29.8304, - 38.0791 - ], - attributes: { - a_Speed: 46, - a_Number_Missiles: 100, - a_C4_Status: 'Degraded', - a_Type: 'SSM_4', - a_Equipment: '_13' - } - }, - { - uniqid: 'Blue.7.342', - contactId: 'CA3375', - name: 'Blue:Fixed Asset:341', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:341', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.4556, - 34.8564 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:341', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.4556, - 34.8564 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:341', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.4556, - 34.8564 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 46.4556, - 34.8564 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Blue.8.343', - contactId: 'CA2386', - name: 'Blue:SSM:342', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:342', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 47.1018, - 33.9108 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:342', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 47.051, - 33.8169 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:342', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 47.1018, - 33.9108 - ] - } - ], - health: 25, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 47.1018, - 33.9108 - ], - attributes: { - a_Speed: 34, - a_Number_Missiles: 100, - a_C4_Status: 'Degraded', - a_Type: 'SSM_6', - a_Equipment: '_14' - } - }, - { - uniqid: 'Blue.12.344', - contactId: 'CA2210', - name: 'Blue:FIAC:343', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:343', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.1491, - 27.632 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:343', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.1491, - 27.632 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:343', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 49.1532, - 27.6992 - ] - } - ], - health: 50, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 49.994, - 24.3865 - ], - attributes: { - a_Type: 'FIAC_4', - a_Speed: 20, - a_C4_Status: 'None', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-575' - } - }, - { - uniqid: 'Blue.3.345', - contactId: 'CA1486', - name: 'Blue:SAM:344', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:344', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 48.8407, - 42.81 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:344', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 48.827, - 42.7822 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:344', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 48.827, - 42.7822 - ] - } - ], - health: 50, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 48.827, - 42.7822 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_2', - a_C4_Status: 'Operational', - a_Equipment: '_12', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.7.346', - contactId: 'CA1007', - name: 'Blue:Fixed Asset:345', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:345', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 33.3669, - 22.2403 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:345', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 33.2769, - 22.1804 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:345', - typeId: '_land_asset', - force: 'f-blue' - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 33.2769, - 22.1804 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Blue.13.347', - contactId: 'CA620', - name: 'Blue:Maritime Minefield:346', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Maritime Minefield:346', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 39.256, - 26.8764 - ] - }, - { - by: 'f-green', - name: 'Blue:Maritime Minefield:346', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 39.256, - 26.8764 - ] - }, - { - by: 'f-white', - name: 'Blue:Maritime Minefield:346', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 39.256, - 26.8764 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 39.256, - 26.8764 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_3', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'Limited' - } - }, - { - uniqid: 'Blue.2.348', - contactId: 'CA1887', - name: 'Blue:Bomber Squadron:347', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Bomber Squadron:347', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 37.979, - 50.9955 - ] - }, - { - by: 'f-green', - name: 'Blue:Bomber Squadron:347', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 37.8798, - 50.953 - ] - }, - { - by: 'f-white', - name: 'Blue:Bomber Squadron:347', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 37.979, - 50.9955 - ] - } - ], - health: 75, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 33.2769, - 22.1804 - ], - attributes: { - a_Type: 'Bomber Squadron_3', - a_Speed: 200, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.7.346', - a_Number_Aircraft: 10, - a_Equipment: '_3' - } - }, - { - uniqid: 'Blue.9.349', - contactId: 'CA1642', - name: 'Blue:Fixed Asset:348', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:348', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.309, - 45.9045 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:348', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.3921, - 45.9872 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:348', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.367, - 45.9272 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 34.3921, - 45.9872 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Blue.2.350', - contactId: 'CA1479', - name: 'Blue:Bomber Squadron:349', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Bomber Squadron:349', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 28.767, - 25.0064 - ] - }, - { - by: 'f-green', - name: 'Blue:Bomber Squadron:349', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 28.8948, - 25.0035 - ] - }, - { - by: 'f-white', - name: 'Blue:Bomber Squadron:349', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 28.7162, - 25.1156 - ] - } - ], - health: 25, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 53.8269, - 47.0758 - ], - attributes: { - a_Type: 'Bomber Squadron_3', - a_Speed: 220, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.8.216', - a_Number_Aircraft: 10, - a_Equipment: '_44' - } - }, - { - uniqid: 'Blue.4.351', - contactId: 'CA2895', - name: 'Blue:Ship:350', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Ship:350', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 47.1179, - 35.2417 - ] - }, - { - by: 'f-green', - name: 'Blue:Ship:350', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 47.1179, - 35.2417 - ] - }, - { - by: 'f-white', - name: 'Blue:Ship:350', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 47.1179, - 35.2417 - ] - } - ], - health: 25, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 47.1179, - 35.2417 - ], - attributes: { - a_Speed: 25, - a_Type: 'Ship_4', - a_C4_Status: 'None', - a_MEZ_range: 300, - a_Equipment: '_39' - } - }, - { - uniqid: 'Blue.9.352', - contactId: 'CA82', - name: 'Blue:ISTAR:351', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:351', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 33.5699, - 43.943 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:351', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 33.5381, - 44.0324 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:351', - typeId: '_air_istar', - force: 'f-blue' - } - ], - health: 75, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 49.994, - 24.3865 - ], - attributes: { - a_Speed: 260, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_3', - a_Airfield: '_7', - a_Equipment: '_46', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-575' - } - }, - { - uniqid: 'Blue.2.353', - contactId: 'CA746', - name: 'Blue:Fixed Asset:352', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:352', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5851, - 27.8456 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:352', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5851, - 27.8456 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:352', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 42.5851, - 27.8456 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 42.5851, - 27.8456 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_1' - } - }, - { - uniqid: 'Blue.7.354', - contactId: 'CA2144', - name: 'Blue:Fixed Asset:353', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:353', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 51.8179, - 33.9748 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:353', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 51.8179, - 33.9748 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:353', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 51.7611, - 33.9054 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 51.8179, - 33.9748 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Blue.10.355', - contactId: 'CA3100', - name: 'Blue:Air LOGS:354', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Air LOGS:354', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 35.254, - 32.3634 - ] - }, - { - by: 'f-green', - name: 'Blue:Air LOGS:354', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 35.2637, - 32.4276 - ] - }, - { - by: 'f-white', - name: 'Blue:Air LOGS:354', - typeId: '_air_logs', - force: 'f-blue', - position: [ - 35.3196, - 32.4109 - ] - } - ], - health: 25, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 33.4511, - 34.1889 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 240, - a_C4_Status: 'Degraded', - a_Airfield: 'Blue.8.117', - a_Number_Aircraft: 10, - a_Equipment: '_48' - } - }, - { - uniqid: 'Blue.5.356', - contactId: 'CA1189', - name: 'Blue:Fixed Asset:355', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:355', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.837, - 28.7075 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:355', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.7932, - 28.6272 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:355', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.7932, - 28.6272 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 30.7932, - 28.6272 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Blue.6.357', - contactId: 'CA1438', - name: 'Blue:Land Unit:356', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:356', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 49.6258, - 22.0298 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:356', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 49.7228, - 21.9451 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:356', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 49.6258, - 22.0298 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 49.6258, - 22.0298 - ], - attributes: { - a_Speed: 34, - a_Type: 'Land Unit_6', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_38', - a_Equipment: '_43' - } - }, - { - uniqid: 'Blue.1.358', - contactId: 'CA1861', - name: 'Blue:Fast Jet Squadron :357', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fast Jet Squadron :357', - typeId: '_air_fighter', - force: 'f-blue' - }, - { - by: 'f-green', - name: 'Blue:Fast Jet Squadron :357', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 37.6751, - 38.7452 - ] - }, - { - by: 'f-white', - name: 'Blue:Fast Jet Squadron :357', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 37.6751, - 38.7452 - ] - } - ], - health: 75, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 50.3925, - 52.3049 - ], - attributes: { - a_Speed: 200, - a_Type: 'Fast Jet Squadron _3', - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.12.241', - a_Equipment: '_36' - } - }, - { - uniqid: 'Blue.12.359', - contactId: 'CA49', - name: 'Blue:FIAC:358', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:358', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 41.1195, - 53.1398 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:358', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 41.0806, - 53.2213 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:358', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 41.1195, - 53.1398 - ] - } - ], - health: 75, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 52.2171, - 38.0852 - ], - attributes: { - a_Type: 'FIAC_3', - a_Speed: 30, - a_C4_Status: 'Degraded', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-281' - } - }, - { - uniqid: 'Blue.1.360', - contactId: 'CA1912', - name: 'Blue:Fast Jet Squadron :359', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fast Jet Squadron :359', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 46.2937, - 50.1768 - ] - }, - { - by: 'f-green', - name: 'Blue:Fast Jet Squadron :359', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 46.2641, - 50.2045 - ] - }, - { - by: 'f-white', - name: 'Blue:Fast Jet Squadron :359', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 46.2641, - 50.2045 - ] - } - ], - health: 25, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 33.4511, - 34.1889 - ], - attributes: { - a_Speed: 260, - a_Type: 'Fast Jet Squadron _4', - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Airfield: 'Blue.8.117', - a_Equipment: '_19' - } - }, - { - uniqid: 'Blue.9.361', - contactId: 'CA2676', - name: 'Blue:ISTAR:360', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:360', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 38.4508, - 43.9156 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:360', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 38.5071, - 43.9163 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:360', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 38.4508, - 43.9156 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 33.4511, - 34.1889 - ], - attributes: { - a_Speed: 260, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_4', - a_Airfield: 'Blue.8.117', - a_Equipment: '_43', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Blue.3.362', - contactId: 'CA2358', - name: 'Blue:SAM:361', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:361', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 36.3201, - 43.5834 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:361', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 36.2381, - 43.6172 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:361', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 36.3201, - 43.5834 - ] - } - ], - health: 100, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 36.3201, - 43.5834 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_4', - a_C4_Status: 'None', - a_Equipment: '_4', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.6.363', - contactId: 'CA3098', - name: 'Blue:Land Unit:362', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Land Unit:362', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 54.9518, - 33.2974 - ] - }, - { - by: 'f-green', - name: 'Blue:Land Unit:362', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 55.0164, - 33.2104 - ] - }, - { - by: 'f-white', - name: 'Blue:Land Unit:362', - typeId: '_land_unit', - force: 'f-blue', - position: [ - 54.9936, - 33.2552 - ] - } - ], - health: 75, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 54.9518, - 33.2974 - ], - attributes: { - a_Speed: 34, - a_Type: 'Land Unit_6', - a_C4_Status: 'Operational', - a_Size: 'Unit size_39', - a_Equipment: '_12' - } - }, - { - uniqid: 'Blue.11.364', - contactId: 'CA189', - name: 'Blue:C2 Node:363', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:363', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.0594, - 37.7314 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:363', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.1236, - 37.6896 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:363', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 41.0594, - 37.7314 - ] - } - ], - health: 100, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 41.0594, - 37.7314 - ], - attributes: { - a_Type: 'C2 Node_3', - a_C4_Status: 'Operational', - a_Connections: '_9' - } - }, - { - uniqid: 'Blue.11.365', - contactId: 'CA1707', - name: 'Blue:C2 Node:364', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:364', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 36.4836, - 28.2571 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:364', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 36.4836, - 28.2571 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:364', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 36.4836, - 28.2571 - ] - } - ], - health: 25, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 36.4836, - 28.2571 - ], - attributes: { - a_Type: 'C2 Node_2', - a_C4_Status: 'None', - a_Connections: '_6' - } - }, - { - uniqid: 'Blue.4.366', - contactId: 'CA325', - name: 'Blue:Fixed Asset:365', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:365', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.3096, - 52.4645 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:365', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.3096, - 52.4645 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:365', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.3096, - 52.4645 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 49.3096, - 52.4645 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Blue.3.367', - contactId: 'CA2409', - name: 'Blue:SAM:366', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:366', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.7662, - 36.5732 - ] - }, - { - by: 'f-green', - name: 'Blue:SAM:366', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.7098, - 36.5143 - ] - }, - { - by: 'f-white', - name: 'Blue:SAM:366', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 33.7888, - 36.6083 - ] - } - ], - health: 50, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 33.7888, - 36.6083 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_3', - a_C4_Status: 'None', - a_Equipment: '_3', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.4.368', - contactId: 'CA2529', - name: 'Blue:Ship:367', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Ship:367', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 39.7416, - 36.9566 - ] - }, - { - by: 'f-green', - name: 'Blue:Ship:367', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 39.7416, - 36.9566 - ] - }, - { - by: 'f-white', - name: 'Blue:Ship:367', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 39.7511, - 37.0133 - ] - } - ], - health: 50, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 33.1265, - 40.0106 - ], - attributes: { - a_Speed: 10, - a_Type: 'Ship_1', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_2', - a_TaskGroup: 'CTF-310' - } - }, - { - uniqid: 'Blue.6.369', - contactId: 'CA1147', - name: 'Blue:Fixed Asset:368', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:368', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 31.609, - 53.7361 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:368', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 31.5924, - 53.8349 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:368', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 31.609, - 53.7361 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 31.609, - 53.7361 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Blue.12.370', - contactId: 'CA643', - name: 'Blue:Fixed Asset:369', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:369', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.182, - 27.5761 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:369', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.182, - 27.5761 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:369', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.1592, - 27.5088 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 41.182, - 27.5761 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Blue.7.371', - contactId: 'CA3212', - name: 'Blue:Fixed Asset:370', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:370', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 54.5139, - 43.0751 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:370', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 54.5139, - 43.0751 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:370', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 54.5583, - 43.0893 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 54.5139, - 43.0751 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_1' - } - }, - { - uniqid: 'Blue.4.372', - contactId: 'CA52', - name: 'Blue:Ship:371', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Ship:371', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 29.331, - 52.5565 - ] - }, - { - by: 'f-green', - name: 'Blue:Ship:371', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 29.3901, - 52.6405 - ] - }, - { - by: 'f-white', - name: 'Blue:Ship:371', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 29.3901, - 52.6405 - ] - } - ], - health: 50, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 52.2171, - 38.0852 - ], - attributes: { - a_Speed: 15, - a_Type: 'Ship_4', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_11', - a_TaskGroup: 'CTF-281' - } - }, - { - uniqid: 'Blue.1.373', - contactId: 'CA3146', - name: 'Blue:Fast Jet Squadron :372', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fast Jet Squadron :372', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 46.1251, - 32.6452 - ] - }, - { - by: 'f-green', - name: 'Blue:Fast Jet Squadron :372', - typeId: '_air_fighter', - force: 'f-blue', - position: [ - 46.1251, - 32.6452 - ] - }, - { - by: 'f-white', - name: 'Blue:Fast Jet Squadron :372', - typeId: '_air_fighter', - force: 'f-blue' - } - ], - health: 50, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 44.0692, - 52.2191 - ], - attributes: { - a_Speed: 220, - a_Type: 'Fast Jet Squadron _3', - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Airfield: 'Blue.5.149', - a_Equipment: '_35' - } - }, - { - uniqid: 'Blue.8.374', - contactId: 'CA2150', - name: 'Blue:Fixed Asset:373', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:373', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.4074, - 48.6528 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:373', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.4074, - 48.6528 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:373', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 34.4074, - 48.6528 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 34.4074, - 48.6528 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Blue.13.375', - contactId: 'CA2216', - name: 'Blue:Fixed Asset:374', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:374', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.3837, - 49.5009 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:374', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.4583, - 49.4743 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:374', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.4583, - 49.4743 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 30.4583, - 49.4743 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_1' - } - }, - { - uniqid: 'Blue.3.376', - contactId: 'CA1720', - name: 'Blue:SAM:375', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SAM:375', - typeId: '_land_sam', - force: 'f-blue' - }, - { - by: 'f-green', - name: 'Blue:SAM:375', - typeId: '_land_sam', - force: 'f-blue' - }, - { - by: 'f-white', - name: 'Blue:SAM:375', - typeId: '_land_sam', - force: 'f-blue', - position: [ - 39.4751, - 33.1486 - ] - } - ], - health: 50, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 39.4751, - 33.1486 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_5', - a_C4_Status: 'Operational', - a_Equipment: '_34', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Blue.8.377', - contactId: 'CA520', - name: 'Blue:SSM:376', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:376', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 37.0192, - 37.7105 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:376', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 36.9004, - 37.8443 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:376', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 36.9358, - 37.753 - ] - } - ], - health: 50, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 36.9358, - 37.753 - ], - attributes: { - a_Speed: 22, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_4', - a_Equipment: '_0' - } - }, - { - uniqid: 'Blue.11.378', - contactId: 'CA2898', - name: 'Blue:C2 Node:377', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:377', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 37.6056, - 45.262 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:377', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 37.5838, - 45.2155 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:377', - typeId: '_land_c2', - force: 'f-blue' - } - ], - health: 25, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 37.6148, - 45.2241 - ], - attributes: { - a_Type: 'C2 Node_2', - a_C4_Status: 'Operational', - a_Connections: '_5' - } - }, - { - uniqid: 'Blue.9.379', - contactId: 'CA1032', - name: 'Blue:ISTAR:378', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:378', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 39.3067, - 28.7567 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:378', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 39.4148, - 28.6759 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:378', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 39.3788, - 28.7306 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 49.994, - 24.3865 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'None', - a_Type: 'ISTAR_3', - a_Airfield: '_13', - a_Equipment: '_43', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-575' - } - }, - { - uniqid: 'Blue.5.380', - contactId: 'CA1224', - name: 'Blue:Submarine:379', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:379', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 47.7211, - 45.9485 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:379', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 47.7211, - 45.9485 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:379', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 47.7211, - 45.9485 - ] - } - ], - health: 100, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 47.7211, - 45.9485 - ], - attributes: { - a_Speed: 10, - a_Type: 'Submarine_2', - a_C4_Status: 'None', - a_Equipment: '_28' - } - }, - { - uniqid: 'Blue.13.381', - contactId: 'CA2865', - name: 'Blue:Maritime Minefield:380', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Maritime Minefield:380', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 42.9269, - 29.2618 - ] - }, - { - by: 'f-green', - name: 'Blue:Maritime Minefield:380', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 42.9269, - 29.2618 - ] - }, - { - by: 'f-white', - name: 'Blue:Maritime Minefield:380', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 42.874, - 29.3135 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 42.9269, - 29.2618 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_2', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Blue.8.382', - contactId: 'CA135', - name: 'Blue:SSM:381', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:381', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 28.7643, - 48.1591 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:381', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 28.6874, - 48.0854 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:381', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 28.6874, - 48.0854 - ] - } - ], - health: 25, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 28.6874, - 48.0854 - ], - attributes: { - a_Speed: 46, - a_Number_Missiles: 100, - a_C4_Status: 'None', - a_Type: 'SSM_4', - a_Equipment: '_23' - } - }, - { - uniqid: 'Blue.12.383', - contactId: 'CA3281', - name: 'Blue:FIAC:382', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:382', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 51.4885, - 50.1063 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:382', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 51.4885, - 50.1063 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:382', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 51.4885, - 50.1063 - ] - } - ], - health: 75, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 32.1834, - 22.3947 - ], - attributes: { - a_Type: 'FIAC_6', - a_Speed: 30, - a_C4_Status: 'Degraded', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-793' - } - }, - { - uniqid: 'Blue.13.384', - contactId: 'CA2321', - name: 'Blue:Maritime Minefield:383', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Maritime Minefield:383', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 35.0533, - 43.8912 - ] - }, - { - by: 'f-green', - name: 'Blue:Maritime Minefield:383', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 35.0533, - 43.8912 - ] - }, - { - by: 'f-white', - name: 'Blue:Maritime Minefield:383', - typeId: '_maritime_mine', - force: 'f-blue', - position: [ - 35.0533, - 43.8912 - ] - } - ], - health: 100, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 35.0533, - 43.8912 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_4', - a_C4_Status: 'Operational', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Blue.9.385', - contactId: 'CA153', - name: 'Blue:ISTAR:384', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:384', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 43.1209, - 41.0781 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:384', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 43.0754, - 41.0445 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:384', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 43.1433, - 41.1233 - ] - } - ], - health: 50, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 34.583, - 47.6436 - ], - attributes: { - a_Speed: 260, - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Type: 'ISTAR_4', - a_Airfield: 'Blue.12.13', - a_Equipment: '_47', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Blue.9.386', - contactId: 'CA1448', - name: 'Blue:ISTAR:385', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:385', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 29.5313, - 43.8747 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:385', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 29.5313, - 43.8747 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:385', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 29.5313, - 43.8747 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 41.9732, - 22.0703 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_6', - a_Airfield: 'Blue.7.140', - a_Equipment: '_49', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Blue.6.387', - contactId: 'CA127', - name: 'Blue:Fixed Asset:386', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:386', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.3103, - 26.2449 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:386', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.3103, - 26.2449 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:386', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 41.3794, - 26.2695 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 41.3103, - 26.2449 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Blue.9.388', - contactId: 'CA839', - name: 'Blue:ISTAR:387', - perceptions: [ - { - by: 'f-red', - name: 'Blue:ISTAR:387', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 44.325, - 32.299 - ] - }, - { - by: 'f-green', - name: 'Blue:ISTAR:387', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 44.3441, - 32.3914 - ] - }, - { - by: 'f-white', - name: 'Blue:ISTAR:387', - typeId: '_air_istar', - force: 'f-blue', - position: [ - 44.4127, - 32.428 - ] - } - ], - health: 100, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 41.1429, - 37.6467 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_1', - a_Airfield: '_43', - a_Equipment: '_3', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-387' - } - }, - { - uniqid: 'Blue.11.389', - contactId: 'CA336', - name: 'Blue:Fixed Asset:388', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:388', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.6904, - 29.7412 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:388', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.6904, - 29.7412 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:388', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 46.6904, - 29.7412 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 46.6904, - 29.7412 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Blue.4.390', - contactId: 'CA117', - name: 'Blue:Ship:389', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Ship:389', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 36.216, - 51.1611 - ] - }, - { - by: 'f-green', - name: 'Blue:Ship:389', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 36.216, - 51.1611 - ] - }, - { - by: 'f-white', - name: 'Blue:Ship:389', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 36.216, - 51.1611 - ] - } - ], - health: 50, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 36.216, - 51.1611 - ], - attributes: { - a_Speed: 30, - a_Type: 'Ship_6', - a_C4_Status: 'Operational', - a_MEZ_range: 300, - a_Equipment: '_29' - } - }, - { - uniqid: 'Blue.12.391', - contactId: 'CA872', - name: 'Blue:FIAC:390', - perceptions: [ - { - by: 'f-red', - name: 'Blue:FIAC:390', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 42.8595, - 21.9951 - ] - }, - { - by: 'f-green', - name: 'Blue:FIAC:390', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 42.7862, - 22.1684 - ] - }, - { - by: 'f-white', - name: 'Blue:FIAC:390', - typeId: '_maritime_fiac', - force: 'f-blue', - position: [ - 42.8144, - 22.0762 - ] - } - ], - health: 0, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 52.2171, - 38.0852 - ], - attributes: { - a_Type: 'FIAC_2', - a_Speed: 30, - a_C4_Status: 'Operational', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-281' - } - }, - { - uniqid: 'Blue.4.392', - contactId: 'CA1100', - name: 'Blue:Ship:391', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Ship:391', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 37.9752, - 43.4125 - ] - }, - { - by: 'f-green', - name: 'Blue:Ship:391', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 37.9752, - 43.4125 - ] - }, - { - by: 'f-white', - name: 'Blue:Ship:391', - typeId: '_maritime_ship', - force: 'f-blue', - position: [ - 37.9752, - 43.4125 - ] - } - ], - health: 100, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 52.2171, - 38.0852 - ], - attributes: { - a_Speed: 20, - a_Type: 'Ship_1', - a_C4_Status: 'Operational', - a_MEZ_range: 300, - a_Equipment: '_9', - a_TaskGroup: 'CTF-281' - } - }, - { - uniqid: 'Blue.13.393', - contactId: 'CA507', - name: 'Blue:Fixed Asset:392', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:392', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.4753, - 28.3807 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:392', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.4753, - 28.3807 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:392', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 30.4753, - 28.3807 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 30.4753, - 28.3807 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Blue.5.394', - contactId: 'CA3240', - name: 'Blue:Submarine:393', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:393', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 43.9987, - 36.254 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:393', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 43.9987, - 36.254 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:393', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 43.9987, - 36.254 - ] - } - ], - health: 25, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 43.9987, - 36.254 - ], - attributes: { - a_Speed: 30, - a_Type: 'Submarine_6', - a_C4_Status: 'None', - a_Equipment: '_40' - } - }, - { - uniqid: 'Blue.2.395', - contactId: 'CA1088', - name: 'Blue:Bomber Squadron:394', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Bomber Squadron:394', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 54.8438, - 29.1739 - ] - }, - { - by: 'f-green', - name: 'Blue:Bomber Squadron:394', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 54.8055, - 29.2361 - ] - }, - { - by: 'f-white', - name: 'Blue:Bomber Squadron:394', - typeId: '_air_bomber', - force: 'f-blue', - position: [ - 54.8055, - 29.2361 - ] - } - ], - health: 100, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 31.2378, - 38.7034 - ], - attributes: { - a_Type: 'Bomber Squadron_4', - a_Speed: 280, - a_C4_Status: 'Degraded', - a_Airfield: 'Blue.9.159', - a_Number_Aircraft: 10, - a_Equipment: '_8' - } - }, - { - uniqid: 'Blue.4.396', - contactId: 'CA2249', - name: 'Blue:Fixed Asset:395', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:395', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.5416, - 29.5383 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:395', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.5416, - 29.5383 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:395', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 49.5416, - 29.5383 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 49.5416, - 29.5383 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_3' - } - }, - { - uniqid: 'Blue.8.397', - contactId: 'CA162', - name: 'Blue:Fixed Asset:396', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Fixed Asset:396', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 36.8405, - 22.6482 - ] - }, - { - by: 'f-green', - name: 'Blue:Fixed Asset:396', - typeId: '_land_asset', - force: 'f-blue', - position: [ - 36.8405, - 22.6482 - ] - }, - { - by: 'f-white', - name: 'Blue:Fixed Asset:396', - typeId: '_land_asset', - force: 'f-blue' - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 36.8405, - 22.6482 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Blue.5.398', - contactId: 'CA2405', - name: 'Blue:Submarine:397', - perceptions: [ - { - by: 'f-red', - name: 'Blue:Submarine:397', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 52.2262, - 30.2722 - ] - }, - { - by: 'f-green', - name: 'Blue:Submarine:397', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 52.2098, - 30.2949 - ] - }, - { - by: 'f-white', - name: 'Blue:Submarine:397', - typeId: '_maritime_submarine', - force: 'f-blue', - position: [ - 52.1161, - 30.2743 - ] - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 41.1429, - 37.6467 - ], - attributes: { - a_Speed: 15, - a_Type: 'Submarine_4', - a_C4_Status: 'Operational', - a_Equipment: '_21', - a_TaskGroup: 'CTF-387' - } - }, - { - uniqid: 'Blue.8.399', - contactId: 'CA1693', - name: 'Blue:SSM:398', - perceptions: [ - { - by: 'f-red', - name: 'Blue:SSM:398', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 35.5603, - 42.0263 - ] - }, - { - by: 'f-green', - name: 'Blue:SSM:398', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 35.4772, - 41.9425 - ] - }, - { - by: 'f-white', - name: 'Blue:SSM:398', - typeId: '_land_ssm', - force: 'f-blue', - position: [ - 35.4276, - 41.893 - ] - } - ], - health: 100, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 35.4772, - 41.9425 - ], - attributes: { - a_Speed: 46, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_6', - a_Equipment: '_7' - } - }, - { - uniqid: 'Blue.11.400', - contactId: 'CA2706', - name: 'Blue:C2 Node:399', - perceptions: [ - { - by: 'f-red', - name: 'Blue:C2 Node:399', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 49.4522, - 27.4372 - ] - }, - { - by: 'f-green', - name: 'Blue:C2 Node:399', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 49.3573, - 27.3537 - ] - }, - { - by: 'f-white', - name: 'Blue:C2 Node:399', - typeId: '_land_c2', - force: 'f-blue', - position: [ - 49.3573, - 27.3537 - ] - } - ], - health: 100, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 49.3573, - 27.3537 - ], - attributes: { - a_Type: 'C2 Node_5', - a_C4_Status: 'None', - a_Connections: '_1' - } - } - ], - color: '#3dd0ff', - dirty: false, - iconURL: 'default_img/forceDefault.png', - name: 'Blue', - overview: 'An overview written here..', - roles: [ - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - name: 'MTG 1', - roleId: 'blue-mtg-1' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'MTG 2', - roleId: 'blue-mtg-2' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'MTG 3', - roleId: 'blue-mtg-3' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'Sub-Surface', - roleId: 'blue-sub' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'AEW 1', - roleId: 'blue-aew-1' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'AEW 2', - roleId: 'blue-aew-2' - } - ], - umpire: false, - uniqid: 'f-blue' - }, - { - assets: [ - { - uniqid: 'Red.4.1', - contactId: 'CA474', - name: 'Red:Ship:0', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Ship:0', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 4.6158, - 82.8018 - ] - }, - { - by: 'f-green', - name: 'Red:Ship:0', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 4.6158, - 82.8018 - ] - }, - { - by: 'f-white', - name: 'Red:Ship:0', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 4.7143, - 82.826 - ] - } - ], - health: 75, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 4.6158, - 82.8018 - ], - attributes: { - a_Speed: 20, - a_Type: 'Ship_2', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_45' - } - }, - { - uniqid: 'Red.12.2', - contactId: 'CA2464', - name: 'Red:FIAC:1', - perceptions: [ - { - by: 'f-blue', - name: 'Red:FIAC:1', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 32.5352, - 65.0402 - ] - }, - { - by: 'f-green', - name: 'Red:FIAC:1', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 32.5443, - 65.0564 - ] - }, - { - by: 'f-white', - name: 'Red:FIAC:1', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 32.5443, - 65.0564 - ] - } - ], - health: 75, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 32.5443, - 65.0564 - ], - attributes: { - a_Type: 'FIAC_1', - a_Speed: 10, - a_C4_Status: 'None', - a_Number_FIACs: 100 - } - }, - { - uniqid: 'Red.5.3', - contactId: 'CA2853', - name: 'Red:Fixed Asset:2', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:2', - typeId: '_land_asset', - force: 'f-red', - position: [ - 2.8145, - 73.184 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:2', - typeId: '_land_asset', - force: 'f-red', - position: [ - 2.8145, - 73.184 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:2', - typeId: '_land_asset', - force: 'f-red', - position: [ - 2.8145, - 73.184 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 2.8145, - 73.184 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_3' - } - }, - { - uniqid: 'Red.4.4', - contactId: 'CA2432', - name: 'Red:Ship:3', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Ship:3', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 14.3876, - 57.6393 - ] - }, - { - by: 'f-green', - name: 'Red:Ship:3', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 14.3876, - 57.6393 - ] - }, - { - by: 'f-white', - name: 'Red:Ship:3', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 14.4358, - 57.6386 - ] - } - ], - health: 100, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 14.3876, - 57.6393 - ], - attributes: { - a_Speed: 30, - a_Type: 'Ship_2', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_14', - a_TaskGroup: 'CTF-551' - } - }, - { - uniqid: 'Red.9.5', - contactId: 'CA476', - name: 'Red:ISTAR:4', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:4', - typeId: '_air_istar', - force: 'f-red', - position: [ - 32.6678, - 55.6836 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:4', - typeId: '_air_istar', - force: 'f-red', - position: [ - 32.6678, - 55.6836 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:4', - typeId: '_air_istar', - force: 'f-red', - position: [ - 32.6678, - 55.6836 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 22.1345, - 82.6827 - ], - attributes: { - a_Speed: 200, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_2', - a_Airfield: 'Red.7.113', - a_Equipment: '_48', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Red.13.6', - contactId: 'CA2444', - name: 'Red:Maritime Minefield:5', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:5', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 13.2857, - 60.1602 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:5', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 13.2857, - 60.1602 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:5', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 13.2857, - 60.1602 - ] - } - ], - health: 75, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 13.2857, - 60.1602 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_2', - a_C4_Status: 'None', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Red.3.7', - contactId: 'CA2948', - name: 'Red:SAM:6', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:6', - typeId: '_land_sam', - force: 'f-red', - position: [ - 41.0483, - 72.6751 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:6', - typeId: '_land_sam', - force: 'f-red', - position: [ - 41.0566, - 72.6508 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:6', - typeId: '_land_sam', - force: 'f-red', - position: [ - 41.0566, - 72.6508 - ] - } - ], - health: 100, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 41.0566, - 72.6508 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_4', - a_C4_Status: 'None', - a_Equipment: '_0', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.9.8', - contactId: 'CA1610', - name: 'Red:ISTAR:7', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:7', - typeId: '_air_istar', - force: 'f-red', - position: [ - 5.2215, - 59.5647 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:7', - typeId: '_air_istar', - force: 'f-red', - position: [ - 5.2215, - 59.5647 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:7', - typeId: '_air_istar', - force: 'f-red', - position: [ - 5.2215, - 59.5647 - ] - } - ], - health: 100, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 35.7354, - 80.7173 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_1', - a_Airfield: 'Red.7.108', - a_Equipment: '_5', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Red.3.9', - contactId: 'CA1091', - name: 'Red:SAM:8', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:8', - typeId: '_land_sam', - force: 'f-red', - position: [ - 38.6615, - 81.653 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:8', - typeId: '_land_sam', - force: 'f-red', - position: [ - 38.6615, - 81.653 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:8', - typeId: '_land_sam', - force: 'f-red' - } - ], - health: 25, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 38.6615, - 81.653 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_6', - a_C4_Status: 'Degraded', - a_Equipment: '_31', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.8.10', - contactId: 'CA2328', - name: 'Red:SSM:9', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:9', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9126, - 76.1173 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:9', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9126, - 76.1173 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:9', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9126, - 76.1173 - ] - } - ], - health: 100, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 33.9126, - 76.1173 - ], - attributes: { - a_Speed: 46, - a_Number_Missiles: 100, - a_C4_Status: 'None', - a_Type: 'SSM_2', - a_Equipment: '_30' - } - }, - { - uniqid: 'Red.11.11', - contactId: 'CA1137', - name: 'Red:Fixed Asset:10', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:10', - typeId: '_land_asset', - force: 'f-red', - position: [ - 36.8605, - 80.0006 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:10', - typeId: '_land_asset', - force: 'f-red', - position: [ - 36.9504, - 79.95 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:10', - typeId: '_land_asset', - force: 'f-red', - position: [ - 36.9364, - 79.9573 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 36.9504, - 79.95 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_3' - } - }, - { - uniqid: 'Red.5.12', - contactId: 'CA2580', - name: 'Red:Fixed Asset:11', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:11', - typeId: '_land_asset', - force: 'f-red', - position: [ - 29.2591, - 79.793 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:11', - typeId: '_land_asset', - force: 'f-red', - position: [ - 29.2591, - 79.793 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:11', - typeId: '_land_asset', - force: 'f-red', - position: [ - 29.2591, - 79.793 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 29.2591, - 79.793 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Red.2.13', - contactId: 'CA2272', - name: 'Red:Bomber Squadron:12', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Bomber Squadron:12', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 30.0938, - 84.6055 - ] - }, - { - by: 'f-green', - name: 'Red:Bomber Squadron:12', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 29.9949, - 84.6755 - ] - }, - { - by: 'f-white', - name: 'Red:Bomber Squadron:12', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 30.0938, - 84.6055 - ] - } - ], - health: 25, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 6.3868, - 61.4238 - ], - attributes: { - a_Type: 'Bomber Squadron_4', - a_Speed: 240, - a_C4_Status: 'None', - a_Airfield: 'Red.6.300', - a_Number_Aircraft: 10, - a_Equipment: '_0' - } - }, - { - uniqid: 'Red.3.14', - contactId: 'CA2659', - name: 'Red:SAM:13', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:13', - typeId: '_land_sam', - force: 'f-red', - position: [ - 36.1609, - 84.9009 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:13', - typeId: '_land_sam', - force: 'f-red', - position: [ - 36.1319, - 84.9938 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:13', - typeId: '_land_sam', - force: 'f-red', - position: [ - 36.2005, - 84.8832 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 36.1609, - 84.9009 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_6', - a_C4_Status: 'Degraded', - a_Equipment: '_2', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.1.15', - contactId: 'CA2495', - name: 'Red:Fast Jet Squadron :14', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fast Jet Squadron :14', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 47.1893, - 63.7844 - ] - }, - { - by: 'f-green', - name: 'Red:Fast Jet Squadron :14', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 47.1893, - 63.7844 - ] - }, - { - by: 'f-white', - name: 'Red:Fast Jet Squadron :14', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 47.1893, - 63.7844 - ] - } - ], - health: 100, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 35.1056, - 63.0615 - ], - attributes: { - a_Speed: 240, - a_Type: 'Fast Jet Squadron _4', - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Airfield: '_45', - a_Equipment: '_12', - a_TaskGroup: 'CTF-748' - } - }, - { - uniqid: 'Red.13.16', - contactId: 'CA1342', - name: 'Red:Maritime Minefield:15', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:15', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 31.388, - 78.6773 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:15', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 31.312, - 78.7259 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:15', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 31.312, - 78.7259 - ] - } - ], - health: 0, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 31.312, - 78.7259 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_2', - a_C4_Status: 'Operational', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Red.9.17', - contactId: 'CA2126', - name: 'Red:ISTAR:16', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:16', - typeId: '_air_istar', - force: 'f-red', - position: [ - 6.5508, - 61.5804 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:16', - typeId: '_air_istar', - force: 'f-red', - position: [ - 6.5309, - 61.6067 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:16', - typeId: '_air_istar', - force: 'f-red', - position: [ - 6.5508, - 61.5804 - ] - } - ], - health: 75, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 200, - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Type: 'ISTAR_6', - a_Airfield: '_27', - a_Equipment: '_34', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.4.18', - contactId: 'CA467', - name: 'Red:Ship:17', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Ship:17', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.9913, - 83.4511 - ] - }, - { - by: 'f-green', - name: 'Red:Ship:17', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.9768, - 83.5274 - ] - }, - { - by: 'f-white', - name: 'Red:Ship:17', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.9913, - 83.4511 - ] - } - ], - health: 0, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 30, - a_Type: 'Ship_2', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_4', - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.4.19', - contactId: 'CA1654', - name: 'Red:Ship:18', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Ship:18', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 31.741, - 81.648 - ] - }, - { - by: 'f-green', - name: 'Red:Ship:18', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 31.7024, - 81.674 - ] - }, - { - by: 'f-white', - name: 'Red:Ship:18', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 31.7024, - 81.674 - ] - } - ], - health: 75, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 15, - a_Type: 'Ship_2', - a_C4_Status: 'Operational', - a_MEZ_range: 300, - a_Equipment: '_2', - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.5.20', - contactId: 'CA2042', - name: 'Red:Submarine:19', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:19', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 21.6368, - 60.4998 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:19', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 21.6368, - 60.4998 - ] - }, - { - by: 'f-white', - name: 'Red:Submarine:19', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 21.6368, - 60.4998 - ] - } - ], - health: 0, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 21.6368, - 60.4998 - ], - attributes: { - a_Speed: 20, - a_Type: 'Submarine_1', - a_C4_Status: 'None', - a_Equipment: '_35', - a_TaskGroup: 'CTF-476' - } - }, - { - uniqid: 'Red.12.21', - contactId: 'CA857', - name: 'Red:FIAC:20', - perceptions: [ - { - by: 'f-blue', - name: 'Red:FIAC:20', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 10.3016, - 67.5874 - ] - }, - { - by: 'f-green', - name: 'Red:FIAC:20', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 10.3797, - 67.5423 - ] - }, - { - by: 'f-white', - name: 'Red:FIAC:20', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 10.3016, - 67.5874 - ] - } - ], - health: 75, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 10.3016, - 67.5874 - ], - attributes: { - a_Type: 'FIAC_4', - a_Speed: 30, - a_C4_Status: 'None', - a_Number_FIACs: 100 - } - }, - { - uniqid: 'Red.1.22', - contactId: 'CA1769', - name: 'Red:Fast Jet Squadron :21', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fast Jet Squadron :21', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 7.0111, - 81.736 - ] - }, - { - by: 'f-green', - name: 'Red:Fast Jet Squadron :21', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 7.0485, - 81.6555 - ] - }, - { - by: 'f-white', - name: 'Red:Fast Jet Squadron :21', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 7.0111, - 81.736 - ] - } - ], - health: 100, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 53.7477, - 85.2579 - ], - attributes: { - a_Speed: 200, - a_Type: 'Fast Jet Squadron _3', - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Airfield: 'Red.6.27', - a_Equipment: '_7' - } - }, - { - uniqid: 'Red.1.23', - contactId: 'CA638', - name: 'Red:Fixed Asset:22', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:22', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.2829, - 77.5876 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:22', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.2829, - 77.5876 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:22', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.2829, - 77.5876 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 31.2829, - 77.5876 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Red.6.24', - contactId: 'CA1033', - name: 'Red:Fixed Asset:23', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:23', - typeId: '_land_asset', - force: 'f-red', - position: [ - 30.6457, - 55.5709 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:23', - typeId: '_land_asset', - force: 'f-red', - position: [ - 30.6457, - 55.5709 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:23', - typeId: '_land_asset', - force: 'f-red', - position: [ - 30.6457, - 55.5709 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 30.6457, - 55.5709 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Red.10.25', - contactId: 'CA3090', - name: 'Red:Air LOGS:24', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:24', - typeId: '_air_logs', - force: 'f-red', - position: [ - 24.5805, - 70.2859 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:24', - typeId: '_air_logs', - force: 'f-red', - position: [ - 24.7148, - 70.3087 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:24', - typeId: '_air_logs', - force: 'f-red', - position: [ - 24.6164, - 70.2793 - ] - } - ], - health: 25, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 5.3662, - 78.2597 - ], - attributes: { - a_Type: 'Air LOGS_5', - a_Speed: 240, - a_C4_Status: 'Operational', - a_Airfield: 'Red.9.142', - a_Number_Aircraft: 10, - a_Equipment: '_33' - } - }, - { - uniqid: 'Red.13.26', - contactId: 'CA1680', - name: 'Red:Maritime Minefield:25', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:25', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 3.7075, - 58.4767 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:25', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 3.6281, - 58.3928 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:25', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 3.6281, - 58.3928 - ] - } - ], - health: 0, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 3.6281, - 58.3928 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_3', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'No' - } - }, - { - uniqid: 'Red.6.27', - contactId: 'CA2012', - name: 'Red:Fixed Asset:26', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:26', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.7477, - 85.2579 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:26', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.7477, - 85.2579 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:26', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.7477, - 85.2579 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 53.7477, - 85.2579 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Red.5.28', - contactId: 'CA2984', - name: 'Red:Submarine:27', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:27', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 37.505, - 57.0225 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:27', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 37.4328, - 56.9577 - ] - }, - { - by: 'f-white', - name: 'Red:Submarine:27', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 37.505, - 57.0225 - ] - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 37.505, - 57.0225 - ], - attributes: { - a_Speed: 20, - a_Type: 'Submarine_4', - a_C4_Status: 'Degraded', - a_Equipment: '_22', - a_TaskGroup: 'CTF-853' - } - }, - { - uniqid: 'Red.13.29', - contactId: 'CA637', - name: 'Red:Maritime Minefield:28', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 37.0665, - 80.8494 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 36.9734, - 80.7397 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 37.0352, - 80.8063 - ] - } - ], - health: 50, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 37.0352, - 80.8063 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_4', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'No' - } - }, - { - uniqid: 'Red.10.30', - contactId: 'CA989', - name: 'Red:Air LOGS:29', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:29', - typeId: '_air_logs', - force: 'f-red', - position: [ - 34.6693, - 75.7907 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:29', - typeId: '_air_logs', - force: 'f-red', - position: [ - 34.702, - 75.8813 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:29', - typeId: '_air_logs', - force: 'f-red', - position: [ - 34.7256, - 75.8791 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 22.7804, - 74.9572 - ], - attributes: { - a_Type: 'Air LOGS_1', - a_Speed: 280, - a_C4_Status: 'Degraded', - a_Airfield: 'Red.11.156', - a_Number_Aircraft: 10, - a_Equipment: '_48' - } - }, - { - uniqid: 'Red.13.31', - contactId: 'CA1267', - name: 'Red:Maritime Minefield:30', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:30', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 19.6348, - 80.7304 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:30', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 19.6348, - 80.7304 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:30', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 19.6348, - 80.7304 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 19.6348, - 80.7304 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_5', - a_C4_Status: 'None', - a_Minefield_Passable: 'No' - } - }, - { - uniqid: 'Red.10.32', - contactId: 'CA1811', - name: 'Red:Air LOGS:31', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:31', - typeId: '_air_logs', - force: 'f-red', - position: [ - 45.4084, - 54.3079 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:31', - typeId: '_air_logs', - force: 'f-red', - position: [ - 45.4084, - 54.3079 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:31', - typeId: '_air_logs', - force: 'f-red', - position: [ - 45.4084, - 54.3079 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 14.6958, - 84.39 - ], - attributes: { - a_Type: 'Air LOGS_2', - a_Speed: 240, - a_C4_Status: 'Operational', - a_Airfield: 'Red.2.349', - a_Number_Aircraft: 10, - a_Equipment: '_34' - } - }, - { - uniqid: 'Red.2.33', - contactId: 'CA3290', - name: 'Red:Bomber Squadron:32', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Bomber Squadron:32', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 26.0421, - 80.1642 - ] - }, - { - by: 'f-green', - name: 'Red:Bomber Squadron:32', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 26.0421, - 80.1642 - ] - }, - { - by: 'f-white', - name: 'Red:Bomber Squadron:32', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 26.0421, - 80.1642 - ] - } - ], - health: 25, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 6.3868, - 61.4238 - ], - attributes: { - a_Type: 'Bomber Squadron_5', - a_Speed: 280, - a_C4_Status: 'Degraded', - a_Airfield: 'Red.6.300', - a_Number_Aircraft: 10, - a_Equipment: '_25' - } - }, - { - uniqid: 'Red.8.34', - contactId: 'CA1963', - name: 'Red:Fixed Asset:33', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-red', - position: [ - 28.3666, - 84.148 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-red', - position: [ - 28.4304, - 84.1205 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-red', - position: [ - 28.3666, - 84.148 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 28.3666, - 84.148 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Red.10.35', - contactId: 'CA1559', - name: 'Red:Air LOGS:34', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:34', - typeId: '_air_logs', - force: 'f-red', - position: [ - 33.5674, - 81.7573 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:34', - typeId: '_air_logs', - force: 'f-red', - position: [ - 33.5541, - 81.671 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:34', - typeId: '_air_logs', - force: 'f-red', - position: [ - 33.5544, - 81.7616 - ] - } - ], - health: 25, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 37.505, - 57.0225 - ], - attributes: { - a_Type: 'Air LOGS_1', - a_Speed: 220, - a_C4_Status: 'Degraded', - a_Airfield: '_11', - a_Number_Aircraft: 10, - a_Equipment: '_17', - a_TaskGroup: 'CTF-853' - } - }, - { - uniqid: 'Red.13.36', - contactId: 'CA2539', - name: 'Red:Maritime Minefield:35', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:35', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 5.8863, - 60.1628 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:35', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 5.8863, - 60.1628 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:35', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 5.8863, - 60.1628 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 5.8863, - 60.1628 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_1', - a_C4_Status: 'Operational', - a_Minefield_Passable: 'Limited' - } - }, - { - uniqid: 'Red.8.37', - contactId: 'CA137', - name: 'Red:SSM:36', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:36', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 53.0363, - 61.6192 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:36', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 53.0126, - 61.7126 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:36', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 53.0126, - 61.7126 - ] - } - ], - health: 100, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 53.0126, - 61.7126 - ], - attributes: { - a_Speed: 10, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_6', - a_Equipment: '_20' - } - }, - { - uniqid: 'Red.8.38', - contactId: 'CA2284', - name: 'Red:SSM:37', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:37', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9861, - 83.7823 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:37', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9241, - 83.7461 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:37', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 33.9861, - 83.7823 - ] - } - ], - health: 0, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 33.9861, - 83.7823 - ], - attributes: { - a_Speed: 10, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_6', - a_Equipment: '_38' - } - }, - { - uniqid: 'Red.11.39', - contactId: 'CA1717', - name: 'Red:C2 Node:38', - perceptions: [ - { - by: 'f-blue', - name: 'Red:C2 Node:38', - typeId: '_land_c2', - force: 'f-red', - position: [ - 12.8846, - 54.2549 - ] - }, - { - by: 'f-green', - name: 'Red:C2 Node:38', - typeId: '_land_c2', - force: 'f-red', - position: [ - 12.8549, - 54.2329 - ] - }, - { - by: 'f-white', - name: 'Red:C2 Node:38', - typeId: '_land_c2', - force: 'f-red', - position: [ - 12.8846, - 54.2549 - ] - } - ], - health: 75, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 12.8846, - 54.2549 - ], - attributes: { - a_Type: 'C2 Node_3', - a_C4_Status: 'Degraded', - a_Connections: '_16' - } - }, - { - uniqid: 'Red.7.40', - contactId: 'CA1909', - name: 'Red:Fixed Asset:39', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:39', - typeId: '_land_asset', - force: 'f-red', - position: [ - 20.7817, - 66.6441 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:39', - typeId: '_land_asset', - force: 'f-red', - position: [ - 20.8031, - 66.547 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:39', - typeId: '_land_asset', - force: 'f-red', - position: [ - 20.8349, - 66.5278 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 20.8031, - 66.547 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Red.4.41', - contactId: 'CA663', - name: 'Red:Ship:40', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Ship:40', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.3531, - 63.3816 - ] - }, - { - by: 'f-green', - name: 'Red:Ship:40', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.259, - 63.3515 - ] - }, - { - by: 'f-white', - name: 'Red:Ship:40', - typeId: '_maritime_ship', - force: 'f-red', - position: [ - 28.3531, - 63.3816 - ] - } - ], - health: 50, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 28.3531, - 63.3816 - ], - attributes: { - a_Speed: 15, - a_Type: 'Ship_6', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_36' - } - }, - { - uniqid: 'Red.11.42', - contactId: 'CA3140', - name: 'Red:Fixed Asset:41', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-red', - position: [ - 33.1492, - 61.5854 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-red', - position: [ - 33.1492, - 61.5854 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-red', - position: [ - 33.1518, - 61.6726 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 33.1492, - 61.5854 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Red.3.43', - contactId: 'CA341', - name: 'Red:SAM:42', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:42', - typeId: '_land_sam', - force: 'f-red', - position: [ - 7.9011, - 66.8216 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:42', - typeId: '_land_sam', - force: 'f-red', - position: [ - 7.9011, - 66.8216 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:42', - typeId: '_land_sam', - force: 'f-red', - position: [ - 7.9011, - 66.8216 - ] - } - ], - health: 100, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 7.9011, - 66.8216 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_1', - a_C4_Status: 'None', - a_Equipment: '_39', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.11.44', - contactId: 'CA2250', - name: 'Red:C2 Node:43', - perceptions: [ - { - by: 'f-blue', - name: 'Red:C2 Node:43', - typeId: '_land_c2', - force: 'f-red', - position: [ - 5.3459, - 71.5753 - ] - }, - { - by: 'f-green', - name: 'Red:C2 Node:43', - typeId: '_land_c2', - force: 'f-red', - position: [ - 5.3459, - 71.5753 - ] - }, - { - by: 'f-white', - name: 'Red:C2 Node:43', - typeId: '_land_c2', - force: 'f-red', - position: [ - 5.3459, - 71.5753 - ] - } - ], - health: 0, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 5.3459, - 71.5753 - ], - attributes: { - a_Type: 'C2 Node_5', - a_C4_Status: 'Degraded', - a_Connections: '_26' - } - }, - { - uniqid: 'Red.6.45', - contactId: 'CA82', - name: 'Red:Land Unit:44', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:44', - typeId: '_land_unit', - force: 'f-red', - position: [ - 48.4203, - 71.476 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:44', - typeId: '_land_unit', - force: 'f-red', - position: [ - 48.4104, - 71.5095 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:44', - typeId: '_land_unit', - force: 'f-red', - position: [ - 48.4321, - 71.4404 - ] - } - ], - health: 0, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 48.3638, - 71.5388 - ], - attributes: { - a_Speed: 22, - a_Type: 'Land Unit_1', - a_C4_Status: 'Operational', - a_Size: 'Unit size_31', - a_Equipment: '_21' - } - }, - { - uniqid: 'Red.3.46', - contactId: 'CA2919', - name: 'Red:SAM:45', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:45', - typeId: '_land_sam', - force: 'f-red', - position: [ - 54.8857, - 77.7572 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:45', - typeId: '_land_sam', - force: 'f-red', - position: [ - 54.8209, - 77.8126 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:45', - typeId: '_land_sam', - force: 'f-red', - position: [ - 54.8209, - 77.8126 - ] - } - ], - health: 50, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 54.8209, - 77.8126 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_5', - a_C4_Status: 'None', - a_Equipment: '_23', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.9.47', - contactId: 'CA2045', - name: 'Red:ISTAR:46', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:46', - typeId: '_air_istar', - force: 'f-red', - position: [ - 8.6779, - 80.5537 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:46', - typeId: '_air_istar', - force: 'f-red', - position: [ - 8.6779, - 80.5537 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:46', - typeId: '_air_istar', - force: 'f-red', - position: [ - 8.6779, - 80.5537 - ] - } - ], - health: 0, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 15.2149, - 84.0358 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Type: 'ISTAR_5', - a_Airfield: 'Red.7.316', - a_Equipment: '_10', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Red.6.48', - contactId: 'CA1488', - name: 'Red:Land Unit:47', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:47', - typeId: '_land_unit', - force: 'f-red', - position: [ - 30.6093, - 73.3352 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:47', - typeId: '_land_unit', - force: 'f-red', - position: [ - 30.6093, - 73.3352 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:47', - typeId: '_land_unit', - force: 'f-red', - position: [ - 30.6093, - 73.3352 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 30.6093, - 73.3352 - ], - attributes: { - a_Speed: 58, - a_Type: 'Land Unit_2', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_8', - a_Equipment: '_6' - } - }, - { - uniqid: 'Red.6.49', - contactId: 'CA2870', - name: 'Red:Land Unit:48', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:48', - typeId: '_land_unit', - force: 'f-red', - position: [ - 34.9217, - 80.4121 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:48', - typeId: '_land_unit', - force: 'f-red', - position: [ - 34.8586, - 80.3461 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:48', - typeId: '_land_unit', - force: 'f-red', - position: [ - 34.8586, - 80.3461 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 34.8586, - 80.3461 - ], - attributes: { - a_Speed: 46, - a_Type: 'Land Unit_2', - a_C4_Status: 'Operational', - a_Size: 'Unit size_17', - a_Equipment: '_4' - } - }, - { - uniqid: 'Red.8.50', - contactId: 'CA3003', - name: 'Red:SSM:49', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:49', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 45.8003, - 56.801 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:49', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 45.8166, - 56.7332 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:49', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 45.816, - 56.6442 - ] - } - ], - health: 25, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 45.8166, - 56.7332 - ], - attributes: { - a_Speed: 10, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_6', - a_Equipment: '_32' - } - }, - { - uniqid: 'Red.12.51', - contactId: 'CA2613', - name: 'Red:FIAC:50', - perceptions: [ - { - by: 'f-blue', - name: 'Red:FIAC:50', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 23.7848, - 65.1503 - ] - }, - { - by: 'f-green', - name: 'Red:FIAC:50', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 23.8572, - 65.1293 - ] - }, - { - by: 'f-white', - name: 'Red:FIAC:50', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 23.7848, - 65.1503 - ] - } - ], - health: 50, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 23.7848, - 65.1503 - ], - attributes: { - a_Type: 'FIAC_6', - a_Speed: 20, - a_C4_Status: 'Operational', - a_Number_FIACs: 100 - } - }, - { - uniqid: 'Red.9.52', - contactId: 'CA2405', - name: 'Red:ISTAR:51', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:51', - typeId: '_air_istar', - force: 'f-red', - position: [ - 46.0673, - 58.0929 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:51', - typeId: '_air_istar', - force: 'f-red', - position: [ - 46.0673, - 58.0929 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:51', - typeId: '_air_istar', - force: 'f-red', - position: [ - 46.0673, - 58.0929 - ] - } - ], - health: 25, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 35.1056, - 63.0615 - ], - attributes: { - a_Speed: 260, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_2', - a_Airfield: '_23', - a_Equipment: '_49', - a_Search_Rate: 100, - a_TaskGroup: 'CTF-748' - } - }, - { - uniqid: 'Red.8.53', - contactId: 'CA2090', - name: 'Red:SSM:52', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:52', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 4.954, - 85.5363 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:52', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 4.954, - 85.5363 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:52', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 4.954, - 85.5363 - ] - } - ], - health: 0, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 4.954, - 85.5363 - ], - attributes: { - a_Speed: 22, - a_Number_Missiles: 100, - a_C4_Status: 'None', - a_Type: 'SSM_2', - a_Equipment: '_46' - } - }, - { - uniqid: 'Red.9.54', - contactId: 'CA2187', - name: 'Red:Fixed Asset:53', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:53', - typeId: '_land_asset', - force: 'f-red', - position: [ - 48.0462, - 67.2815 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:53', - typeId: '_land_asset', - force: 'f-red', - position: [ - 47.9968, - 67.2197 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:53', - typeId: '_land_asset', - force: 'f-red', - position: [ - 48.0462, - 67.2815 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 48.0462, - 67.2815 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Red.11.55', - contactId: 'CA2039', - name: 'Red:C2 Node:54', - perceptions: [ - { - by: 'f-blue', - name: 'Red:C2 Node:54', - typeId: '_land_c2', - force: 'f-red', - position: [ - 24.1743, - 58.5583 - ] - }, - { - by: 'f-green', - name: 'Red:C2 Node:54', - typeId: '_land_c2', - force: 'f-red', - position: [ - 24.1458, - 58.6113 - ] - }, - { - by: 'f-white', - name: 'Red:C2 Node:54', - typeId: '_land_c2', - force: 'f-red' - } - ], - health: 75, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 24.1458, - 58.6113 - ], - attributes: { - a_Type: 'C2 Node_5', - a_C4_Status: 'Degraded', - a_Connections: '_5' - } - }, - { - uniqid: 'Red.6.56', - contactId: 'CA150', - name: 'Red:Land Unit:55', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:55', - typeId: '_land_unit', - force: 'f-red', - position: [ - 53.6356, - 83.0755 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:55', - typeId: '_land_unit', - force: 'f-red', - position: [ - 53.6356, - 83.0755 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:55', - typeId: '_land_unit', - force: 'f-red', - position: [ - 53.6356, - 83.0755 - ] - } - ], - health: 50, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 53.6356, - 83.0755 - ], - attributes: { - a_Speed: 10, - a_Type: 'Land Unit_1', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_15', - a_Equipment: '_22' - } - }, - { - uniqid: 'Red.3.57', - contactId: 'CA2925', - name: 'Red:SAM:56', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:56', - typeId: '_land_sam', - force: 'f-red', - position: [ - 9.435, - 77.3457 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:56', - typeId: '_land_sam', - force: 'f-red', - position: [ - 9.4201, - 77.3979 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:56', - typeId: '_land_sam', - force: 'f-red', - position: [ - 9.5276, - 77.4321 - ] - } - ], - health: 50, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 9.435, - 77.3457 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_4', - a_C4_Status: 'None', - a_Equipment: '_31', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.10.58', - contactId: 'CA930', - name: 'Red:Air LOGS:57', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:57', - typeId: '_air_logs', - force: 'f-red', - position: [ - 52.6991, - 66.4729 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:57', - typeId: '_air_logs', - force: 'f-red', - position: [ - 52.6991, - 66.4729 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:57', - typeId: '_air_logs', - force: 'f-red', - position: [ - 52.6991, - 66.4729 - ] - } - ], - health: 100, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 14.3876, - 57.6393 - ], - attributes: { - a_Type: 'Air LOGS_5', - a_Speed: 220, - a_C4_Status: 'Degraded', - a_Airfield: '_19', - a_Number_Aircraft: 10, - a_Equipment: '_5', - a_TaskGroup: 'CTF-551' - } - }, - { - uniqid: 'Red.9.59', - contactId: 'CA901', - name: 'Red:ISTAR:58', - perceptions: [ - { - by: 'f-blue', - name: 'Red:ISTAR:58', - typeId: '_air_istar', - force: 'f-red', - position: [ - 39.3454, - 60.3504 - ] - }, - { - by: 'f-green', - name: 'Red:ISTAR:58', - typeId: '_air_istar', - force: 'f-red', - position: [ - 39.4075, - 60.4165 - ] - }, - { - by: 'f-white', - name: 'Red:ISTAR:58', - typeId: '_air_istar', - force: 'f-red', - position: [ - 39.4075, - 60.4165 - ] - } - ], - health: 50, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 22.1345, - 82.6827 - ], - attributes: { - a_Speed: 260, - a_Number_Aircraft: 10, - a_C4_Status: 'None', - a_Type: 'ISTAR_1', - a_Airfield: 'Red.7.113', - a_Equipment: '_24', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Red.2.60', - contactId: 'CA327', - name: 'Red:Bomber Squadron:59', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Bomber Squadron:59', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 43.6343, - 85.313 - ] - }, - { - by: 'f-green', - name: 'Red:Bomber Squadron:59', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 43.6343, - 85.313 - ] - }, - { - by: 'f-white', - name: 'Red:Bomber Squadron:59', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 43.6343, - 85.313 - ] - } - ], - health: 0, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 24.9287, - 82.1939 - ], - attributes: { - a_Type: 'Bomber Squadron_3', - a_Speed: 220, - a_C4_Status: 'Degraded', - a_Airfield: 'Red.7.87', - a_Number_Aircraft: 10, - a_Equipment: '_31' - } - }, - { - uniqid: 'Red.3.61', - contactId: 'CA2140', - name: 'Red:SAM:60', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:60', - typeId: '_land_sam', - force: 'f-red', - position: [ - 46.641, - 75.3826 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:60', - typeId: '_land_sam', - force: 'f-red', - position: [ - 46.641, - 75.3826 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:60', - typeId: '_land_sam', - force: 'f-red', - position: [ - 46.641, - 75.3826 - ] - } - ], - health: 25, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 46.641, - 75.3826 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_2', - a_C4_Status: 'None', - a_Equipment: '_23', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.6.62', - contactId: 'CA1670', - name: 'Red:Fixed Asset:61', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:61', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.4431, - 61.4677 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:61', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.4431, - 61.4677 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:61', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.4431, - 61.4677 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 14.4431, - 61.4677 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Red.8.63', - contactId: 'CA2493', - name: 'Red:Fixed Asset:62', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:62', - typeId: '_land_asset', - force: 'f-red', - position: [ - 48.5645, - 56.2058 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:62', - typeId: '_land_asset', - force: 'f-red', - position: [ - 48.5645, - 56.2058 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:62', - typeId: '_land_asset', - force: 'f-red', - position: [ - 48.5507, - 56.1953 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 48.5645, - 56.2058 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Red.10.64', - contactId: 'CA1021', - name: 'Red:Air LOGS:63', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:63', - typeId: '_air_logs', - force: 'f-red', - position: [ - 49.7379, - 70.6485 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:63', - typeId: '_air_logs', - force: 'f-red', - position: [ - 49.7379, - 70.6485 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:63', - typeId: '_air_logs', - force: 'f-red', - position: [ - 49.8054, - 70.5754 - ] - } - ], - health: 25, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 21.6368, - 60.4998 - ], - attributes: { - a_Type: 'Air LOGS_6', - a_Speed: 200, - a_C4_Status: 'Operational', - a_Airfield: '_9', - a_Number_Aircraft: 10, - a_Equipment: '_6', - a_TaskGroup: 'CTF-476' - } - }, - { - uniqid: 'Red.3.65', - contactId: 'CA2056', - name: 'Red:SAM:64', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:64', - typeId: '_land_sam', - force: 'f-red', - position: [ - 45.2362, - 77.5836 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:64', - typeId: '_land_sam', - force: 'f-red', - position: [ - 45.2362, - 77.5836 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:64', - typeId: '_land_sam', - force: 'f-red', - position: [ - 45.2362, - 77.5836 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 45.2362, - 77.5836 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_6', - a_C4_Status: 'None', - a_Equipment: '_20', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.5.66', - contactId: 'CA2761', - name: 'Red:Submarine:65', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:65', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 18.6701, - 72.236 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:65', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 18.6174, - 72.2187 - ] - }, - { - by: 'f-white', - name: 'Red:Submarine:65', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 18.5512, - 72.2931 - ] - } - ], - health: 100, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 10, - a_Type: 'Submarine_1', - a_C4_Status: 'None', - a_Equipment: '_34', - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.3.67', - contactId: 'CA506', - name: 'Red:Fixed Asset:66', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:66', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.319, - 78.3822 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:66', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.238, - 78.2956 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:66', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.319, - 78.3822 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 37.319, - 78.3822 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Red.12.68', - contactId: 'CA3206', - name: 'Red:FIAC:67', - perceptions: [ - { - by: 'f-blue', - name: 'Red:FIAC:67', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 45.2043, - 64.9582 - ] - }, - { - by: 'f-green', - name: 'Red:FIAC:67', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 45.2043, - 64.9582 - ] - }, - { - by: 'f-white', - name: 'Red:FIAC:67', - typeId: '_maritime_fiac', - force: 'f-red', - position: [ - 45.1928, - 64.8957 - ] - } - ], - health: 50, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Type: 'FIAC_5', - a_Speed: 30, - a_C4_Status: 'Operational', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.7.69', - contactId: 'CA264', - name: 'Red:Fixed Asset:68', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:68', - typeId: '_land_asset', - force: 'f-red', - position: [ - 47.5823, - 76.9211 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:68', - typeId: '_land_asset', - force: 'f-red', - position: [ - 47.587, - 76.9223 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:68', - typeId: '_land_asset', - force: 'f-red', - position: [ - 47.5398, - 76.8493 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 47.4924, - 76.9192 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Red.6.70', - contactId: 'CA2863', - name: 'Red:Land Unit:69', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:69', - typeId: '_land_unit', - force: 'f-red', - position: [ - 8.898, - 68.8511 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:69', - typeId: '_land_unit', - force: 'f-red', - position: [ - 8.898, - 68.8511 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:69', - typeId: '_land_unit', - force: 'f-red', - position: [ - 8.826, - 68.7744 - ] - } - ], - health: 0, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 8.898, - 68.8511 - ], - attributes: { - a_Speed: 34, - a_Type: 'Land Unit_2', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_45', - a_Equipment: '_48' - } - }, - { - uniqid: 'Red.10.71', - contactId: 'CA233', - name: 'Red:Air LOGS:70', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:70', - typeId: '_air_logs', - force: 'f-red', - position: [ - 43.5184, - 83.9333 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:70', - typeId: '_air_logs', - force: 'f-red', - position: [ - 43.5184, - 83.9333 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:70', - typeId: '_air_logs', - force: 'f-red', - position: [ - 43.5184, - 83.9333 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 48.0462, - 67.2815 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 200, - a_C4_Status: 'Operational', - a_Airfield: 'Red.9.54', - a_Number_Aircraft: 10, - a_Equipment: '_5' - } - }, - { - uniqid: 'Red.11.72', - contactId: 'CA2264', - name: 'Red:C2 Node:71', - perceptions: [ - { - by: 'f-blue', - name: 'Red:C2 Node:71', - typeId: '_land_c2', - force: 'f-red' - }, - { - by: 'f-green', - name: 'Red:C2 Node:71', - typeId: '_land_c2', - force: 'f-red', - position: [ - 11.431, - 64.0723 - ] - }, - { - by: 'f-white', - name: 'Red:C2 Node:71', - typeId: '_land_c2', - force: 'f-red', - position: [ - 11.431, - 64.0723 - ] - } - ], - health: 0, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 11.431, - 64.0723 - ], - attributes: { - a_Type: 'C2 Node_3', - a_C4_Status: 'None', - a_Connections: '_1' - } - }, - { - uniqid: 'Red.5.73', - contactId: 'CA604', - name: 'Red:Fixed Asset:72', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:72', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.7794, - 54.4144 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:72', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.7448, - 54.5116 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:72', - typeId: '_land_asset', - force: 'f-red', - position: [ - 53.8168, - 54.5094 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 53.8129, - 54.4336 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Red.8.74', - contactId: 'CA1602', - name: 'Red:SSM:73', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SSM:73', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 52.2868, - 63.9252 - ] - }, - { - by: 'f-green', - name: 'Red:SSM:73', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 52.373, - 63.9392 - ] - }, - { - by: 'f-white', - name: 'Red:SSM:73', - typeId: '_land_ssm', - force: 'f-red', - position: [ - 52.2868, - 63.9252 - ] - } - ], - health: 100, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 52.2868, - 63.9252 - ], - attributes: { - a_Speed: 10, - a_Number_Missiles: 100, - a_C4_Status: 'Operational', - a_Type: 'SSM_5', - a_Equipment: '_45' - } - }, - { - uniqid: 'Red.5.75', - contactId: 'CA855', - name: 'Red:Submarine:74', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:74', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 34.0033, - 84.4682 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:74', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 34.0517, - 84.554 - ] - }, - { - by: 'f-white', - name: 'Red:Submarine:74', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 34.0033, - 84.4682 - ] - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 20, - a_Type: 'Submarine_3', - a_C4_Status: 'Degraded', - a_Equipment: '_44', - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.3.76', - contactId: 'CA2882', - name: 'Red:SAM:75', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:75', - typeId: '_land_sam', - force: 'f-red', - position: [ - 4.1087, - 80.8626 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:75', - typeId: '_land_sam', - force: 'f-red', - position: [ - 3.968, - 80.9251 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:75', - typeId: '_land_sam', - force: 'f-red', - position: [ - 4.0478, - 80.8605 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 4.0478, - 80.8605 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_3', - a_C4_Status: 'Degraded', - a_Equipment: '_6', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.13.77', - contactId: 'CA2055', - name: 'Red:Maritime Minefield:76', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:76', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 11.7588, - 75.8588 - ] - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:76', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 11.8557, - 75.8927 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:76', - typeId: '_maritime_mine', - force: 'f-red' - } - ], - health: 50, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 11.8557, - 75.8927 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_3', - a_C4_Status: 'Operational', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Red.3.78', - contactId: 'CA3272', - name: 'Red:SAM:77', - perceptions: [ - { - by: 'f-blue', - name: 'Red:SAM:77', - typeId: '_land_sam', - lastUpdate: 1651263200000, - force: 'f-red', - position: [ - 24.8411, - 55.7904 - ] - }, - { - by: 'f-green', - name: 'Red:SAM:77', - typeId: '_land_sam', - force: 'f-red', - position: [ - 24.8107, - 55.766 - ] - }, - { - by: 'f-white', - name: 'Red:SAM:77', - typeId: '_land_sam', - force: 'f-red', - position: [ - 24.8142, - 55.8389 - ] - } - ], - health: 0, - platformTypeId: '_land_sam', - condition: 'working', - location: [ - 24.8411, - 55.7904 - ], - attributes: { - a_Number_Missiles: 100, - a_Type: 'SAM_5', - a_C4_Status: 'Operational', - a_Equipment: '_41', - a_MEZ_range: 300 - } - }, - { - uniqid: 'Red.5.79', - contactId: 'CA2363', - name: 'Red:Submarine:78', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:78', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 34.7004, - 70.3721 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:78', - typeId: '_maritime_submarine', - force: 'f-red' - }, - { - by: 'f-white', - name: 'Red:Submarine:78', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 34.7857, - 70.4726 - ] - } - ], - health: 25, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 28.9913, - 83.4511 - ], - attributes: { - a_Speed: 15, - a_Type: 'Submarine_3', - a_C4_Status: 'Degraded', - a_Equipment: '_41', - a_TaskGroup: 'CTF-241' - } - }, - { - uniqid: 'Red.9.80', - contactId: 'CA458', - name: 'Red:Fixed Asset:79', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:79', - typeId: '_land_asset', - force: 'f-red', - position: [ - 10.0566, - 63.457 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:79', - typeId: '_land_asset', - force: 'f-red', - position: [ - 10.0566, - 63.457 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:79', - typeId: '_land_asset', - force: 'f-red', - position: [ - 10.0566, - 63.457 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 10.0566, - 63.457 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Red.13.81', - contactId: 'CA2786', - name: 'Red:Maritime Minefield:80', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Maritime Minefield:80', - typeId: '_maritime_mine', - force: 'f-red' - }, - { - by: 'f-green', - name: 'Red:Maritime Minefield:80', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 16.9975, - 69.2433 - ] - }, - { - by: 'f-white', - name: 'Red:Maritime Minefield:80', - typeId: '_maritime_mine', - force: 'f-red', - position: [ - 17.0725, - 69.2556 - ] - } - ], - health: 25, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 16.9975, - 69.2433 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_5', - a_C4_Status: 'Degraded', - a_Minefield_Passable: 'Yes' - } - }, - { - uniqid: 'Red.7.82', - contactId: 'CA3225', - name: 'Red:Fixed Asset:81', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:81', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.865, - 84.3547 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:81', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.9373, - 84.4292 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:81', - typeId: '_land_asset', - force: 'f-red', - position: [ - 31.9769, - 84.3408 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 31.9373, - 84.4292 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Red.7.83', - contactId: 'CA1082', - name: 'Red:Fixed Asset:82', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:82', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.6495, - 78.775 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:82', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.7135, - 78.8679 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:82', - typeId: '_land_asset', - force: 'f-red', - position: [ - 37.6757, - 78.8438 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 37.6757, - 78.8438 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Red.1.84', - contactId: 'CA2796', - name: 'Red:Fast Jet Squadron :83', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fast Jet Squadron :83', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 23.4905, - 77.9429 - ] - }, - { - by: 'f-green', - name: 'Red:Fast Jet Squadron :83', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 23.4905, - 77.9429 - ] - }, - { - by: 'f-white', - name: 'Red:Fast Jet Squadron :83', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 23.4905, - 77.9429 - ] - } - ], - health: 75, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 53.7477, - 85.2579 - ], - attributes: { - a_Speed: 280, - a_Type: 'Fast Jet Squadron _3', - a_Number_Aircraft: 10, - a_C4_Status: 'None', - a_Airfield: 'Red.6.27', - a_Equipment: '_12' - } - }, - { - uniqid: 'Red.10.85', - contactId: 'CA1259', - name: 'Red:Air LOGS:84', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:84', - typeId: '_air_logs', - force: 'f-red', - position: [ - 21.7531, - 65.2936 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:84', - typeId: '_air_logs', - force: 'f-red', - position: [ - 21.7531, - 65.2936 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:84', - typeId: '_air_logs', - force: 'f-red', - position: [ - 21.7055, - 65.2957 - ] - } - ], - health: 100, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 21.6368, - 60.4998 - ], - attributes: { - a_Type: 'Air LOGS_1', - a_Speed: 280, - a_C4_Status: 'Operational', - a_Airfield: '_17', - a_Number_Aircraft: 10, - a_Equipment: '_5', - a_TaskGroup: 'CTF-476' - } - }, - { - uniqid: 'Red.2.86', - contactId: 'CA1714', - name: 'Red:Bomber Squadron:85', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Bomber Squadron:85', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 36.5371, - 58.1439 - ] - }, - { - by: 'f-green', - name: 'Red:Bomber Squadron:85', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 36.4509, - 58.1628 - ] - }, - { - by: 'f-white', - name: 'Red:Bomber Squadron:85', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 36.5371, - 58.1439 - ] - } - ], - health: 50, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 53.7477, - 85.2579 - ], - attributes: { - a_Type: 'Bomber Squadron_4', - a_Speed: 260, - a_C4_Status: 'Degraded', - a_Airfield: 'Red.6.27', - a_Number_Aircraft: 10, - a_Equipment: '_46' - } - }, - { - uniqid: 'Red.7.87', - contactId: 'CA1501', - name: 'Red:Fixed Asset:86', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:86', - typeId: '_land_asset', - force: 'f-red', - position: [ - 24.9222, - 82.1586 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:86', - typeId: '_land_asset', - force: 'f-red', - position: [ - 24.8838, - 82.2433 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:86', - typeId: '_land_asset', - force: 'f-red', - position: [ - 24.9287, - 82.1939 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 24.9287, - 82.1939 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Red.6.88', - contactId: 'CA1482', - name: 'Red:Land Unit:87', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:87', - typeId: '_land_unit', - force: 'f-red', - position: [ - 16.4959, - 54.6741 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:87', - typeId: '_land_unit', - force: 'f-red', - position: [ - 16.4959, - 54.6741 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:87', - typeId: '_land_unit', - force: 'f-red', - position: [ - 16.4945, - 54.6286 - ] - } - ], - health: 50, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 16.4959, - 54.6741 - ], - attributes: { - a_Speed: 58, - a_Type: 'Land Unit_4', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_0', - a_Equipment: '_37' - } - }, - { - uniqid: 'Red.1.89', - contactId: 'CA2469', - name: 'Red:Fast Jet Squadron :88', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fast Jet Squadron :88', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 48.8531, - 69.065 - ] - }, - { - by: 'f-green', - name: 'Red:Fast Jet Squadron :88', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 48.8686, - 69.016 - ] - }, - { - by: 'f-white', - name: 'Red:Fast Jet Squadron :88', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 48.7659, - 69.0846 - ] - } - ], - health: 25, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 24.9287, - 82.1939 - ], - attributes: { - a_Speed: 260, - a_Type: 'Fast Jet Squadron _2', - a_Number_Aircraft: 10, - a_C4_Status: 'None', - a_Airfield: 'Red.7.87', - a_Equipment: '_41' - } - }, - { - uniqid: 'Red.7.90', - contactId: 'CA1108', - name: 'Red:Fixed Asset:89', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:89', - typeId: '_land_asset', - force: 'f-red', - position: [ - 7.3724, - 84.2831 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:89', - typeId: '_land_asset', - force: 'f-red', - position: [ - 7.4011, - 84.2078 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:89', - typeId: '_land_asset', - force: 'f-red', - position: [ - 7.3736, - 84.2875 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 7.3724, - 84.2831 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Red.5.91', - contactId: 'CA561', - name: 'Red:Submarine:90', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Submarine:90', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 11.0989, - 70.0415 - ] - }, - { - by: 'f-green', - name: 'Red:Submarine:90', - typeId: '_maritime_submarine', - force: 'f-red', - position: [ - 11.0989, - 70.0415 - ] - }, - { - by: 'f-white', - name: 'Red:Submarine:90', - typeId: '_maritime_submarine', - force: 'f-red' - } - ], - health: 0, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 21.6368, - 60.4998 - ], - attributes: { - a_Speed: 15, - a_Type: 'Submarine_3', - a_C4_Status: 'None', - a_Equipment: '_32', - a_TaskGroup: 'CTF-476' - } - }, - { - uniqid: 'Red.8.92', - contactId: 'CA835', - name: 'Red:Fixed Asset:91', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:91', - typeId: '_land_asset', - force: 'f-red', - position: [ - 41.583, - 72.5265 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:91', - typeId: '_land_asset', - force: 'f-red', - position: [ - 41.583, - 72.5265 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:91', - typeId: '_land_asset', - force: 'f-red', - position: [ - 41.6078, - 72.573 - ] - } - ], - health: 0, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 41.583, - 72.5265 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Fixed Asset_2' - } - }, - { - uniqid: 'Red.6.93', - contactId: 'CA97', - name: 'Red:Land Unit:92', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Land Unit:92', - typeId: '_land_unit', - force: 'f-red', - position: [ - 23.5196, - 76.9741 - ] - }, - { - by: 'f-green', - name: 'Red:Land Unit:92', - typeId: '_land_unit', - force: 'f-red', - position: [ - 23.5196, - 76.9741 - ] - }, - { - by: 'f-white', - name: 'Red:Land Unit:92', - typeId: '_land_unit', - force: 'f-red', - position: [ - 23.5196, - 76.9741 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 23.5196, - 76.9741 - ], - attributes: { - a_Speed: 22, - a_Type: 'Land Unit_3', - a_C4_Status: 'None', - a_Size: 'Unit size_31', - a_Equipment: '_34' - } - }, - { - uniqid: 'Red.11.94', - contactId: 'CA2531', - name: 'Red:C2 Node:93', - perceptions: [ - { - by: 'f-blue', - name: 'Red:C2 Node:93', - typeId: '_land_c2', - force: 'f-red', - position: [ - 45.9827, - 78.3624 - ] - }, - { - by: 'f-green', - name: 'Red:C2 Node:93', - typeId: '_land_c2', - force: 'f-red', - position: [ - 46.0847, - 78.4753 - ] - }, - { - by: 'f-white', - name: 'Red:C2 Node:93', - typeId: '_land_c2', - force: 'f-red', - position: [ - 46.0718, - 78.4396 - ] - } - ], - health: 75, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 46.0718, - 78.4396 - ], - attributes: { - a_Type: 'C2 Node_5', - a_C4_Status: 'Operational', - a_Connections: '_41' - } - }, - { - uniqid: 'Red.10.95', - contactId: 'CA2949', - name: 'Red:Air LOGS:94', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Air LOGS:94', - typeId: '_air_logs', - force: 'f-red', - position: [ - 29.2945, - 54.358 - ] - }, - { - by: 'f-green', - name: 'Red:Air LOGS:94', - typeId: '_air_logs', - force: 'f-red', - position: [ - 29.2387, - 54.2795 - ] - }, - { - by: 'f-white', - name: 'Red:Air LOGS:94', - typeId: '_air_logs', - force: 'f-red', - position: [ - 29.2387, - 54.2795 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 22.1345, - 82.6827 - ], - attributes: { - a_Type: 'Air LOGS_2', - a_Speed: 260, - a_C4_Status: 'None', - a_Airfield: 'Red.7.113', - a_Number_Aircraft: 10, - a_Equipment: '_4' - } - }, - { - uniqid: 'Red.2.96', - contactId: 'CA1376', - name: 'Red:Bomber Squadron:95', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Bomber Squadron:95', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 25.5972, - 77.6141 - ] - }, - { - by: 'f-green', - name: 'Red:Bomber Squadron:95', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 25.4864, - 77.523 - ] - }, - { - by: 'f-white', - name: 'Red:Bomber Squadron:95', - typeId: '_air_bomber', - force: 'f-red', - position: [ - 25.5742, - 77.5118 - ] - } - ], - health: 75, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 22.1345, - 82.6827 - ], - attributes: { - a_Type: 'Bomber Squadron_5', - a_Speed: 280, - a_C4_Status: 'Degraded', - a_Airfield: 'Red.7.113', - a_Number_Aircraft: 10, - a_Equipment: '_44' - } - }, - { - uniqid: 'Red.12.97', - contactId: 'CA3214', - name: 'Red:Fixed Asset:96', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fixed Asset:96', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.5857, - 63.596 - ] - }, - { - by: 'f-green', - name: 'Red:Fixed Asset:96', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.514, - 63.5945 - ] - }, - { - by: 'f-white', - name: 'Red:Fixed Asset:96', - typeId: '_land_asset', - force: 'f-red', - position: [ - 14.514, - 63.5945 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 14.514, - 63.5945 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_1' - } - }, - { - uniqid: 'Red.1.98', - contactId: 'CA3364', - name: 'Red:Fast Jet Squadron :97', - perceptions: [ - { - by: 'f-blue', - name: 'Red:Fast Jet Squadron :97', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 42.101, - 63.0473 - ] - }, - { - by: 'f-green', - name: 'Red:Fast Jet Squadron :97', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 42.101, - 63.0473 - ] - }, - { - by: 'f-white', - name: 'Red:Fast Jet Squadron :97', - typeId: '_air_fighter', - force: 'f-red', - position: [ - 42.101, - 63.0473 - ] - } - ], - health: 100, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 37.505, - 57.0225 - ], - attributes: { - a_Speed: 260, - a_Type: 'Fast Jet Squadron _2', - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Airfield: '_29', - a_Equipment: '_12', - a_TaskGroup: 'CTF-853' - } - } - ], - color: '#ff3d43', - dirty: false, - iconURL: 'default_img/forceDefault.png', - name: 'Red', - overview: 'An overview written here..', - roles: [ - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - name: 'CO', - roleId: 'red-CO' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'MAR', - roleId: 'red-mar' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'Land & Fires', - roleId: 'red-land' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'Air & AD', - roleId: 'red-air' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'Direct Action', - roleId: 'red-direct' - }, - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - isRFIManager: false, - name: 'Threat Network', - roleId: 'red-threat' - } - ], - umpire: false, - uniqid: 'f-red' - }, - { - assets: [ - { - uniqid: 'Green.6.26', - contactId: 'CA1842', - name: 'Green:Fixed Asset:25', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:25', - typeId: '_land_asset', - force: 'f-green', - position: [ - 26.4663, - 37.7143 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:25', - typeId: '_land_asset', - force: 'f-green', - position: [ - 26.4663, - 37.7143 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:25', - typeId: '_land_asset', - force: 'f-green', - position: [ - 26.4663, - 37.7143 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 26.4663, - 37.7143 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_3' - } - }, - { - uniqid: 'Green.11.27', - contactId: 'CA3010', - name: 'Green:C2 Node:26', - perceptions: [ - { - by: 'f-blue', - name: 'Green:C2 Node:26', - typeId: '_land_c2', - force: 'f-green', - position: [ - 24.6826, - 23.175 - ] - }, - { - by: 'f-red', - name: 'Green:C2 Node:26', - typeId: '_land_c2', - force: 'f-green', - position: [ - 24.7104, - 23.1151 - ] - }, - { - by: 'f-white', - name: 'Green:C2 Node:26', - typeId: '_land_c2', - force: 'f-green', - position: [ - 24.6826, - 23.175 - ] - } - ], - health: 25, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 24.6826, - 23.175 - ], - attributes: { - a_Type: 'C2 Node_5', - a_C4_Status: 'Operational', - a_Connections: '_47' - } - }, - { - uniqid: 'Green.10.28', - contactId: 'CA1404', - name: 'Green:Air LOGS:27', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Air LOGS:27', - typeId: '_air_logs', - force: 'f-green', - position: [ - 7.6918, - 24.7171 - ] - }, - { - by: 'f-red', - name: 'Green:Air LOGS:27', - typeId: '_air_logs', - force: 'f-green', - position: [ - 7.6486, - 24.7154 - ] - }, - { - by: 'f-white', - name: 'Green:Air LOGS:27', - typeId: '_air_logs', - force: 'f-green', - position: [ - 7.6918, - 24.7171 - ] - } - ], - health: 75, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 20.432, - 41.3013 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 220, - a_C4_Status: 'Operational', - a_Airfield: 'Green.2.268', - a_Number_Aircraft: 10, - a_Equipment: '_44' - } - }, - { - uniqid: 'Green.13.29', - contactId: 'CA248', - name: 'Green:Maritime Minefield:28', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-green', - position: [ - 19.639, - 50.3947 - ] - }, - { - by: 'f-red', - name: 'Green:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-green', - position: [ - 19.639, - 50.3947 - ] - }, - { - by: 'f-white', - name: 'Green:Maritime Minefield:28', - typeId: '_maritime_mine', - force: 'f-green', - position: [ - 19.639, - 50.3947 - ] - } - ], - health: 50, - platformTypeId: '_maritime_mine', - condition: 'working', - location: [ - 19.639, - 50.3947 - ], - attributes: { - a_Density: 100, - a_Type: 'Maritime Minefield_6', - a_C4_Status: 'None', - a_Minefield_Passable: 'No' - } - }, - { - uniqid: 'Green.7.30', - contactId: 'CA2674', - name: 'Green:Fixed Asset:29', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:29', - typeId: '_land_asset', - force: 'f-green', - position: [ - 21.0247, - 52.0864 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:29', - typeId: '_land_asset', - force: 'f-green', - position: [ - 21.0247, - 52.0864 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:29', - typeId: '_land_asset', - force: 'f-green', - position: [ - 21.0247, - 52.0864 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 21.0247, - 52.0864 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_4' - } - }, - { - uniqid: 'Green.7.31', - contactId: 'CA550', - name: 'Green:Fixed Asset:30', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:30', - typeId: '_land_asset', - force: 'f-green', - position: [ - 27.8516, - 41.9181 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:30', - typeId: '_land_asset', - force: 'f-green', - position: [ - 27.8467, - 41.9414 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:30', - typeId: '_land_asset', - force: 'f-green', - position: [ - 27.9138, - 42 - ] - } - ], - health: 75, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 27.9138, - 42 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Green.6.32', - contactId: 'CA444', - name: 'Green:Land Unit:31', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Land Unit:31', - typeId: '_land_unit', - force: 'f-green', - position: [ - 14.4156, - 47.3352 - ] - }, - { - by: 'f-red', - name: 'Green:Land Unit:31', - typeId: '_land_unit', - force: 'f-green', - position: [ - 14.4156, - 47.3352 - ] - }, - { - by: 'f-white', - name: 'Green:Land Unit:31', - typeId: '_land_unit', - force: 'f-green', - position: [ - 14.4156, - 47.3352 - ] - } - ], - health: 25, - platformTypeId: '_land_unit', - condition: 'working', - location: [ - 14.4156, - 47.3352 - ], - attributes: { - a_Speed: 46, - a_Type: 'Land Unit_5', - a_C4_Status: 'Degraded', - a_Size: 'Unit size_26', - a_Equipment: '_41' - } - }, - { - uniqid: 'Green.9.33', - contactId: 'CA2364', - name: 'Green:ISTAR:32', - perceptions: [ - { - by: 'f-blue', - name: 'Green:ISTAR:32', - typeId: '_air_istar', - force: 'f-green', - position: [ - 27.3643, - 33.7654 - ] - }, - { - by: 'f-red', - name: 'Green:ISTAR:32', - typeId: '_air_istar', - force: 'f-green' - }, - { - by: 'f-white', - name: 'Green:ISTAR:32', - typeId: '_air_istar', - force: 'f-green', - position: [ - 27.3643, - 33.7654 - ] - } - ], - health: 75, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 10.8875, - 29.6706 - ], - attributes: { - a_Speed: 200, - a_Number_Aircraft: 10, - a_C4_Status: 'Degraded', - a_Type: 'ISTAR_1', - a_Airfield: 'Green.7.374', - a_Equipment: '_28', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Green.1.34', - contactId: 'CA2612', - name: 'Green:Fixed Asset:33', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-green', - position: [ - 16.6517, - 23.7708 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-green', - position: [ - 16.6126, - 23.8086 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:33', - typeId: '_land_asset', - force: 'f-green', - position: [ - 16.6126, - 23.8086 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 16.6126, - 23.8086 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Green.12.35', - contactId: 'CA2013', - name: 'Green:FIAC:34', - perceptions: [ - { - by: 'f-blue', - name: 'Green:FIAC:34', - typeId: '_maritime_fiac', - force: 'f-green', - position: [ - 8.5272, - 34.6833 - ] - }, - { - by: 'f-red', - name: 'Green:FIAC:34', - typeId: '_maritime_fiac', - force: 'f-green', - position: [ - 8.506, - 34.7293 - ] - }, - { - by: 'f-white', - name: 'Green:FIAC:34', - typeId: '_maritime_fiac', - force: 'f-green', - position: [ - 8.506, - 34.7293 - ] - } - ], - health: 100, - platformTypeId: '_maritime_fiac', - condition: 'working', - location: [ - 20.8273, - 51.7642 - ], - attributes: { - a_Type: 'FIAC_6', - a_Speed: 15, - a_C4_Status: 'Operational', - a_Number_FIACs: 100, - a_TaskGroup: 'CTF-490' - } - }, - { - uniqid: 'Green.5.36', - contactId: 'CA1127', - name: 'Green:Submarine:35', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Submarine:35', - typeId: '_maritime_submarine', - force: 'f-green', - position: [ - 8.3484, - 45.1648 - ] - }, - { - by: 'f-red', - name: 'Green:Submarine:35', - typeId: '_maritime_submarine', - force: 'f-green', - position: [ - 8.3928, - 45.1287 - ] - }, - { - by: 'f-white', - name: 'Green:Submarine:35', - typeId: '_maritime_submarine', - force: 'f-green', - position: [ - 8.3484, - 45.1648 - ] - } - ], - health: 75, - platformTypeId: '_maritime_submarine', - condition: 'working', - location: [ - 20.8273, - 51.7642 - ], - attributes: { - a_Speed: 15, - a_Type: 'Submarine_3', - a_C4_Status: 'Operational', - a_Equipment: '_1', - a_TaskGroup: 'CTF-490' - } - }, - { - uniqid: 'Green.10.37', - contactId: 'CA1844', - name: 'Green:Air LOGS:36', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Air LOGS:36', - typeId: '_air_logs', - force: 'f-green', - position: [ - 4.1523, - 47.2572 - ] - }, - { - by: 'f-red', - name: 'Green:Air LOGS:36', - typeId: '_air_logs', - force: 'f-green', - position: [ - 4.245, - 47.1726 - ] - }, - { - by: 'f-white', - name: 'Green:Air LOGS:36', - typeId: '_air_logs', - force: 'f-green', - position: [ - 4.217, - 47.1208 - ] - } - ], - health: 50, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 13.2943, - 41.6967 - ], - attributes: { - a_Type: 'Air LOGS_4', - a_Speed: 260, - a_C4_Status: 'None', - a_Airfield: 'Green.5.304', - a_Number_Aircraft: 10, - a_Equipment: '_8' - } - }, - { - uniqid: 'Green.9.38', - contactId: 'CA482', - name: 'Green:ISTAR:37', - perceptions: [ - { - by: 'f-blue', - name: 'Green:ISTAR:37', - typeId: '_air_istar', - force: 'f-green', - position: [ - 8.5464, - 44.9415 - ] - }, - { - by: 'f-red', - name: 'Green:ISTAR:37', - typeId: '_air_istar', - force: 'f-green', - position: [ - 8.459, - 44.8987 - ] - }, - { - by: 'f-white', - name: 'Green:ISTAR:37', - typeId: '_air_istar', - force: 'f-green', - position: [ - 8.459, - 44.8987 - ] - } - ], - health: 100, - platformTypeId: '_air_istar', - condition: 'working', - location: [ - 12.7233, - 34.6197 - ], - attributes: { - a_Speed: 240, - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Type: 'ISTAR_4', - a_Airfield: 'Green.8.77', - a_Equipment: '_4', - a_Search_Rate: 100 - } - }, - { - uniqid: 'Green.2.39', - contactId: 'CA3146', - name: 'Green:Bomber Squadron:38', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Bomber Squadron:38', - typeId: '_air_bomber', - force: 'f-green', - position: [ - 9.2185, - 33.8527 - ] - }, - { - by: 'f-red', - name: 'Green:Bomber Squadron:38', - typeId: '_air_bomber', - force: 'f-green', - position: [ - 9.2998, - 33.9392 - ] - }, - { - by: 'f-white', - name: 'Green:Bomber Squadron:38', - typeId: '_air_bomber', - force: 'f-green', - position: [ - 9.2998, - 33.9392 - ] - } - ], - health: 100, - platformTypeId: '_air_bomber', - condition: 'working', - location: [ - 25.0334, - 24.093 - ], - attributes: { - a_Type: 'Bomber Squadron_3', - a_Speed: 220, - a_C4_Status: 'Degraded', - a_Airfield: 'Green.10.218', - a_Number_Aircraft: 10, - a_Equipment: '_41' - } - }, - { - uniqid: 'Green.10.40', - contactId: 'CA1102', - name: 'Green:Air LOGS:39', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Air LOGS:39', - typeId: '_air_logs', - force: 'f-green', - position: [ - 3.1025, - 30.9424 - ] - }, - { - by: 'f-red', - name: 'Green:Air LOGS:39', - typeId: '_air_logs', - force: 'f-green', - position: [ - 3.1008, - 30.8471 - ] - }, - { - by: 'f-white', - name: 'Green:Air LOGS:39', - typeId: '_air_logs', - force: 'f-green', - position: [ - 3.0866, - 30.8881 - ] - } - ], - health: 0, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 17.307, - 22.2196 - ], - attributes: { - a_Type: 'Air LOGS_2', - a_Speed: 220, - a_C4_Status: 'Operational', - a_Airfield: 'Green.4.219', - a_Number_Aircraft: 10, - a_Equipment: '_5' - } - }, - { - uniqid: 'Green.1.41', - contactId: 'CA1945', - name: 'Green:Fixed Asset:40', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:40', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.0226, - 36.2628 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:40', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.0226, - 36.2628 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:40', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.0226, - 36.2628 - ] - } - ], - health: 100, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 12.0226, - 36.2628 - ], - attributes: { - a_C4_Status: 'Operational', - a_Type: 'Fixed Asset_5' - } - }, - { - uniqid: 'Green.5.42', - contactId: 'CA3351', - name: 'Green:Fixed Asset:41', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-green', - position: [ - 25.3124, - 44.8059 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-green', - position: [ - 25.3124, - 44.8059 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:41', - typeId: '_land_asset', - force: 'f-green', - position: [ - 25.3124, - 44.8059 - ] - } - ], - health: 25, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 25.3124, - 44.8059 - ], - attributes: { - a_C4_Status: 'None', - a_Type: 'Fixed Asset_6' - } - }, - { - uniqid: 'Green.11.43', - contactId: 'CA1848', - name: 'Green:C2 Node:42', - perceptions: [ - { - by: 'f-blue', - name: 'Green:C2 Node:42', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.9265, - 28.3015 - ] - }, - { - by: 'f-red', - name: 'Green:C2 Node:42', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.9486, - 28.2287 - ] - }, - { - by: 'f-white', - name: 'Green:C2 Node:42', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.9326, - 28.3691 - ] - } - ], - health: 50, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 22.9265, - 28.3015 - ], - attributes: { - a_Type: 'C2 Node_2', - a_C4_Status: 'Degraded', - a_Connections: '_18' - } - }, - { - uniqid: 'Green.2.44', - contactId: 'CA2531', - name: 'Green:Fixed Asset:43', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fixed Asset:43', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.9064, - 44.4775 - ] - }, - { - by: 'f-red', - name: 'Green:Fixed Asset:43', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.9064, - 44.4775 - ] - }, - { - by: 'f-white', - name: 'Green:Fixed Asset:43', - typeId: '_land_asset', - force: 'f-green', - position: [ - 12.9064, - 44.4775 - ] - } - ], - health: 50, - platformTypeId: '_land_asset', - condition: 'working', - location: [ - 12.9064, - 44.4775 - ], - attributes: { - a_C4_Status: 'Degraded', - a_Type: 'Airfield' - } - }, - { - uniqid: 'Green.1.45', - contactId: 'CA1802', - name: 'Green:Fast Jet Squadron :44', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Fast Jet Squadron :44', - typeId: '_air_fighter', - force: 'f-green' - }, - { - by: 'f-red', - name: 'Green:Fast Jet Squadron :44', - typeId: '_air_fighter', - force: 'f-green', - position: [ - 15.0187, - 51.8866 - ] - }, - { - by: 'f-white', - name: 'Green:Fast Jet Squadron :44', - typeId: '_air_fighter', - force: 'f-green', - position: [ - 15.0187, - 51.8866 - ] - } - ], - health: 100, - platformTypeId: '_air_fighter', - condition: 'working', - location: [ - 2.8115, - 28.9223 - ], - attributes: { - a_Speed: 240, - a_Type: 'Fast Jet Squadron _4', - a_Number_Aircraft: 10, - a_C4_Status: 'Operational', - a_Airfield: '_31', - a_Equipment: '_3', - a_TaskGroup: 'CTF-648' - } - }, - { - uniqid: 'Green.8.46', - contactId: 'CA912', - name: 'Green:SSM:45', - perceptions: [ - { - by: 'f-blue', - name: 'Green:SSM:45', - typeId: '_land_ssm', - force: 'f-green', - position: [ - 4.1987, - 43.0784 - ] - }, - { - by: 'f-red', - name: 'Green:SSM:45', - typeId: '_land_ssm', - force: 'f-green', - position: [ - 4.1866, - 43.0578 - ] - }, - { - by: 'f-white', - name: 'Green:SSM:45', - typeId: '_land_ssm', - force: 'f-green' - } - ], - health: 50, - platformTypeId: '_land_ssm', - condition: 'working', - location: [ - 4.1987, - 43.0784 - ], - attributes: { - a_Speed: 58, - a_Number_Missiles: 100, - a_C4_Status: 'None', - a_Type: 'SSM_2', - a_Equipment: '_38' - } - }, - { - uniqid: 'Green.11.47', - contactId: 'CA645', - name: 'Green:C2 Node:46', - perceptions: [ - { - by: 'f-blue', - name: 'Green:C2 Node:46', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.9297, - 50.0688 - ] - }, - { - by: 'f-red', - name: 'Green:C2 Node:46', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.8844, - 49.9743 - ] - }, - { - by: 'f-white', - name: 'Green:C2 Node:46', - typeId: '_land_c2', - force: 'f-green', - position: [ - 22.8844, - 49.9743 - ] - } - ], - health: 75, - platformTypeId: '_land_c2', - condition: 'working', - location: [ - 22.8844, - 49.9743 - ], - attributes: { - a_Type: 'C2 Node_4', - a_C4_Status: 'Degraded', - a_Connections: '_42' - } - }, - { - uniqid: 'Green.10.48', - contactId: 'CA1335', - name: 'Green:Air LOGS:47', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Air LOGS:47', - typeId: '_air_logs', - force: 'f-green', - position: [ - 16.4725, - 46.2294 - ] - }, - { - by: 'f-red', - name: 'Green:Air LOGS:47', - typeId: '_air_logs', - force: 'f-green', - position: [ - 16.5459, - 46.3082 - ] - }, - { - by: 'f-white', - name: 'Green:Air LOGS:47', - typeId: '_air_logs', - force: 'f-green', - position: [ - 16.5459, - 46.3082 - ] - } - ], - health: 100, - platformTypeId: '_air_logs', - condition: 'working', - location: [ - 10.7894, - 27.0201 - ], - attributes: { - a_Type: 'Air LOGS_5', - a_Speed: 240, - a_C4_Status: 'Degraded', - a_Airfield: 'Green.7.74', - a_Number_Aircraft: 10, - a_Equipment: '_24' - } - }, - { - uniqid: 'Green.4.49', - contactId: 'CA1867', - name: 'Green:Ship:48', - perceptions: [ - { - by: 'f-blue', - name: 'Green:Ship:48', - typeId: '_maritime_ship', - force: 'f-green', - position: [ - 5.7632, - 50.2303 - ] - }, - { - by: 'f-red', - name: 'Green:Ship:48', - typeId: '_maritime_ship', - force: 'f-green', - position: [ - 5.7632, - 50.2303 - ] - }, - { - by: 'f-white', - name: 'Green:Ship:48', - typeId: '_maritime_ship', - force: 'f-green', - position: [ - 5.7684, - 50.2955 - ] - } - ], - health: 75, - platformTypeId: '_maritime_ship', - condition: 'working', - location: [ - 17.8265, - 45.8454 - ], - attributes: { - a_Speed: 30, - a_Type: 'Ship_6', - a_C4_Status: 'Degraded', - a_MEZ_range: 300, - a_Equipment: '_22', - a_TaskGroup: 'CTF-614' - } - } - ], - color: '#7ed321', - dirty: false, - iconURL: 'default_img/forceDefault.png', - name: 'Green', - overview: 'An overview written here..', - roles: [ - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - name: 'CO', - roleId: 'green-co' - } - ], - umpire: false, - uniqid: 'f-green' - }, - { - assets: [], - color: '#FCFBEE', - dirty: false, - iconURL: 'default_img/forceDefault.png', - name: 'White', - overview: 'An overview written here.', - roles: [ - { - isGameControl: false, - isInsightViewer: false, - isObserver: false, - name: 'CO', - roleId: 'white-co' - } - ], - umpire: false, - uniqid: 'f-white' - } - ], - dirty: false - }, - channels: { - name: 'Channels', - channels: [ - { - channelType: 'ChannelPlanning', - name: 'Planning', - constraints: { - bounds: [ - [75, -20], [-10, 140] - ], - maxZoom: 7, - minZoom: 3, - tileLayer: { - attribution: 'Generated by QTiles g./arabian_sea/{z}/{x}/{y}.png ', - url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - maxNativeZoom: 7 - } - }, - participants: [ - { - forceUniqid: 'f-blue', - pType: 'ParticipantPlanning', - roles: [], - subscriptionId: 'huk3qr', - templates: [] - }, - { - forceUniqid: 'f-red', - pType: 'ParticipantPlanning', - roles: [], - subscriptionId: 'h123qr', - templates: [] - }, - { - forceUniqid: 'umpire', - pType: 'ParticipantPlanning', - roles: [ - 'rkrlw6f5f' - ], - subscriptionId: 'r4y1p', - templates: [] - } - ], - uniqid: 'channel-planning' - }, - { - uniqid: 'red-sme', - name: 'Red & SME', - channelType: 'ChannelChat', - participants: [ - { - forceUniqid: 'f-green', - roles: [], - subscriptionId: 'hndha', - pType: 'ParticipantChat' - }, - { - - forceUniqid: 'f-red', - roles: [], - subscriptionId: '', - pType: 'ParticipantChat' - } - ] - }, - { - uniqid: 'blue-sme', - name: 'Blue & SME', - channelType: 'ChannelChat', - participants: [ - { - forceUniqid: 'f-green', - roles: [], - subscriptionId: 'vk8l', - pType: 'ParticipantChat' - }, - { - - forceUniqid: 'umpire', - roles: [], - subscriptionId: 'asdf', - pType: 'ParticipantChat' - }, - { - - forceUniqid: 'umpire', - roles: [ - 'adjud-1', - 'adjud-2' - ], - subscriptionId: 'gfda', - pType: 'ParticipantChat' - }, - { - - forceUniqid: 'f-blue', - roles: [], - subscriptionId: 'dsfg', - pType: 'ParticipantChat' - } - ] - }, - { - uniqid: 'red-chat', - name: 'Red Chat', - channelType: 'ChannelChat', - participants: [ - { - - forceUniqid: 'f-red', - roles: [], - subscriptionId: 'asfes', - pType: 'ParticipantChat' - } - ] - }, - { - uniqid: 'blue-chat', - name: 'Blue Chat', - channelType: 'ChannelChat', - participants: [ - { - - forceUniqid: 'f-blue', - roles: [], - subscriptionId: 'adst', - pType: 'ParticipantChat' - } - ] - } - ], - selectedChannel: '', - dirty: false - }, - platformTypes: { - dirty: false, - name: 'Platform Types', - platformTypes: [ - { - name: 'Fast Jet Squadron ', - icon: 'n_', - sidc: 'S*A*MFF---', - conditions: [], - states: [], - uniqid: '_air_fighter', - attributeTypeIds: [ - 'a_Speed', - 'a_Type', - 'a_Number_Aircraft', - 'a_C4_Status', - 'a_Airfield', - 'a_Equipment', - 'a_TaskGroup' - ], - travelMode: 'air' - }, - { - name: 'Bomber Squadron', - icon: 'n_', - sidc: 'S*A*MFB---', - attributeTypeIds: [ - 'a_Type', - 'a_Speed', - 'a_C4_Status', - 'a_Airfield', - 'a_Number_Aircraft', - 'a_Equipment' - ], - conditions: [], - states: [], - uniqid: '_air_bomber', - travelMode: 'air' - }, - { - name: 'SAM', - icon: 'n_', - sidc: 'S*G*UCDMM-', - attributeTypeIds: [ - 'a_Number_Missiles', - 'a_Type', - 'a_C4_Status', - 'a_Equipment', - 'a_MEZ_range', - 'a_C4_Status' - ], - conditions: [], - states: [], - uniqid: '_land_sam', - travelMode: 'land' - }, - { - name: 'Ship', - icon: 'n_', - sidc: 'S*S*CLDD--', - attributeTypeIds: [ - 'a_Speed', - 'a_Type', - 'a_C4_Status', - 'a_MEZ_range', - 'a_Equipment', - 'a_TaskGroup' - ], - conditions: [], - states: [], - uniqid: '_maritime_ship', - travelMode: 'sea' - }, - { - name: 'Submarine', - icon: 'n_', - sidc: 'S*U*S-----', - attributeTypeIds: [ - 'a_Speed', - 'a_Type', - 'a_C4_Status', - 'a_Equipment', - 'a_TaskGroup' - ], - conditions: [], - states: [], - uniqid: '_maritime_submarine', - travelMode: 'sea' - }, - { - name: 'Land Unit', - icon: 'n_', - sidc: 'S*G*UCIZ--', - attributeTypeIds: [ - 'a_Speed', - 'a_Type', - 'a_C4_Status', - 'a_Size', - 'a_Equipment' - ], - conditions: [], - states: [], - uniqid: '_land_unit', - travelMode: 'land' - }, - { - name: 'Fixed Asset', - icon: 'n_', - sidc: 'G*M*SF----', - attributeTypeIds: [ - 'a_C4_Status', - 'a_Type' - ], - conditions: [], - states: [], - uniqid: '_land_asset', - travelMode: 'land' - }, - { - name: 'SSM', - icon: 'n_', - sidc: 'S*A*WMSS--', - attributeTypeIds: [ - 'a_Speed', - 'a_Number_Missiles', - 'a_C4_Status', - 'a_Type', - 'a_Equipment', - 'a_C4_Status' - ], - conditions: [], - states: [], - uniqid: '_land_ssm', - travelMode: 'land' - }, - { - name: 'ISTAR', - icon: 'n_', - sidc: 'S*A*MFR---', - attributeTypeIds: [ - 'a_Speed', - 'a_Number_Aircraft', - 'a_C4_Status', - 'a_Type', - 'a_Airfield', - 'a_Equipment', - 'a_Search_Rate', - 'a_TaskGroup' - ], - conditions: [], - states: [], - uniqid: '_air_istar', - travelMode: 'air' - }, - { - name: 'Air LOGS', - icon: 'n_', - sidc: 'S*A*MFC---', - attributeTypeIds: [ - 'a_Type', - 'a_Speed', - 'a_C4_Status', - 'a_Airfield', - 'a_Number_Aircraft', - 'a_Equipment', - 'a_TaskGroup' - ], - conditions: [], - states: [], - uniqid: '_air_logs', - travelMode: 'air' - }, - { - name: 'C2 Node', - icon: 'n_', - sidc: 'S*G*UH----', - attributeTypeIds: [ - 'a_Type', - 'a_C4_Status', - 'a_Connections', - 'a_C4_Status' - ], - conditions: [], - states: [], - uniqid: '_land_c2', - travelMode: 'land' - }, - { - name: 'FIAC', - icon: 'n_', - sidc: 'S*S*CPSUG-', - attributeTypeIds: [ - 'a_Type', - 'a_Speed', - 'a_C4_Status', - 'a_Number_FIACs' - ], - conditions: [], - states: [], - uniqid: '_maritime_fiac', - travelMode: 'sea' - }, - { - name: 'Maritime Minefield', - icon: 'n_', - sidc: 'S*U*WM----', - attributeTypeIds: [ - 'a_Density', - 'a_Type', - 'a_C4_Status', - 'a_Minefield_Passable' - ], - conditions: [], - states: [], - uniqid: '_maritime_mine', - travelMode: 'sea' - } - ], - selectedType: '' - }, - attributeTypes: { - attributes: [ - { - attrId: 'a_Type', - attrType: 'AttributeTypeString', - description: 'Sub-type of this platform', - editableByPlayer: false, - name: 'Sub-type' - }, { - attrId: 'a_Number_Aircraft', - attrType: 'AttributeTypeNumber', - defaultValue: 10, - description: 'Number of aircraftt', - editableByPlayer: false, - name: 'Number aircraft' - }, { - attrId: 'a_Number_Missiles', - attrType: 'AttributeTypeNumber', - defaultValue: 100, - description: 'Number of missiles', - editableByPlayer: false, - name: 'Number missiles' - }, { - attrId: 'a_Number_FIACs', - attrType: 'AttributeTypeNumber', - defaultValue: 100, - description: 'Number of FIAC assets', - editableByPlayer: false, - name: 'Number FIACs' - }, { - attrId: 'a_MEZ_range', - attrType: 'AttributeTypeNumber', - defaultValue: 300, - description: 'MEZ Range (km)', - editableByPlayer: false, - name: 'MEZ Range', - units: 'km' - }, { - attrId: 'a_Speed', - attrType: 'AttributeTypeNumber', - defaultValue: 10, - description: 'Default Speed (kts)', - editableByPlayer: false, - name: 'Speed (kts)' - }, - { - attrId: 'a_Size', - attrType: 'AttributeTypeString', - defaultValue: 'Unit size_', - description: 'Size of military unit', - editableByPlayer: false, - name: 'Size' - }, { - attrId: 'a_C4_Status', - attrType: 'AttributeTypeEnum', - defaultValue: 'Operational', - description: 'C4 Status', - values: ['None', 'Degraded', 'Operational'], - editableByPlayer: false, - name: 'C4 Status' - }, { - attrId: 'a_Minefield_Passable', - attrType: 'AttributeTypeEnum', - defaultValue: 'Operational', - description: 'If minefield is passable', - values: ['No', 'Limited', 'Yes'], - editableByPlayer: false, - name: 'Minefield Status' - }, - { - attrId: 'a_Building_Type', - attrType: 'AttributeTypeEnum', - description: 'Type of fixed land asset', - values: ['B-Type-A', 'B-Type-B', 'B-Type-C'], - editableByPlayer: false, - name: 'Building Type' - }, - { - attrId: 'a_Range', - attrType: 'AttributeTypeNumber', - defaultValue: 2000, - description: 'Range of weapon (km)', - editableByPlayer: false, - name: 'Range', - units: 'km' - }, - { - attrId: 'a_Connections', - attrType: 'AttributeTypeString', - defaultValue: '', - description: 'C2 Connections for asset', - editableByPlayer: false, - name: 'Connections' - }, - { - attrId: 'a_Density', - attrType: 'AttributeTypeNumber', - defaultValue: 100, - description: 'Density of minefield', - editableByPlayer: false, - name: 'Density', - units: 'per km2' - }, - { - attrId: 'a_Equipment', - attrType: 'AttributeTypeString', - description: 'Equipment carried on asset', - editableByPlayer: false, - name: 'Equipment' - }, - { - attrId: 'a_Units', - attrType: 'AttributeTypeString', - description: 'Child units', - editableByPlayer: false, - name: 'Units' - }, - { - attrId: 'a_TaskGroup', - attrType: 'AttributeTypeString', - description: 'Host Task Group', - editableByPlayer: false, - name: 'Task Group' - }, - { - attrId: 'a_Airfield', - attrType: 'AttributeTypeString', - description: 'Host airfield (id)', - editableByPlayer: false, - name: 'Airfield' - }, - { - attrId: 'a_Search_Rate', - attrType: 'AttributeTypeNumber', - description: 'Search rate km2/aircraft/hr', - editableByPlayer: false, - defaultValue: 100, - name: 'SearchRate' - } - ] - }, - activities: { - activities: [ - { - force: 'f-blue', - groupedActivities: [ - { - category: 'Land', - activities: [ - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-blue-Land-EW Attack', - template: 'Land--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Land-ISTAR', - template: 'Land--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Land Close Combat', - actId: 'LAND', - interactsWith: [ - 'EW' - ], - uniqid: 'f-blue-Land-Land Close Combat', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Land Close Combat-0' - }, - { - aType: 'Polygon', - name: 'Combat Location', - optional: false, - uniqid: 'Land Close Combat-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Land Close Combat-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Land-Patrol', - template: 'Land--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Raid', - actId: 'Raid', - interactsWith: [ - 'EW' - ], - uniqid: 'f-blue-Land-Raid', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Raid-0' - }, - { - aType: 'Polygon', - name: 'Raid Location', - optional: false, - uniqid: 'Raid-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Raid-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Land-Resupply', - template: 'Land--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Land-Strike', - template: 'f-blue--Land--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Land-Transit', - template: 'Land--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Maritime', - activities: [ - { - name: 'ASW Barrier', - actId: 'ASW-B', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'RESUPP', - 'TRANSIT' - ], - uniqid: 'f-blue-Maritime-ASW Barrier', - template: 'Maritime--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ASW Barrier-0' - }, - { - aType: 'Polygon', - name: 'ASW Area', - optional: false, - uniqid: 'ASW Barrier-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ASW Barrier-2' - } - ] - }, - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-blue-Maritime-EW Attack', - template: 'Maritime--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Maritime-ISTAR', - template: 'Maritime--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Mine Clearance', - actId: 'M-Clr', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'FIAC' - ], - uniqid: 'f-blue-Maritime-Mine Clearance', - template: 'Maritime--Activity', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Mine Clearance-0' - }, - { - aType: 'Polygon', - name: 'Mine Clearance Area Area', - optional: false, - uniqid: 'Mine Clearance-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Mine Clearance-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Mine Laying', - actId: 'M-Lay', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'FIAC' - ], - uniqid: 'f-blue-Maritime-Mine Laying', - template: 'Maritime--Activity', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Mine Laying-0' - }, - { - aType: 'Polygon', - name: 'Mine Area', - optional: false, - uniqid: 'Mine Laying-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Mine Laying-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Maritime-Patrol', - template: 'Maritime--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Maritime-Resupply', - template: 'Maritime--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Maritime-Strike', - template: 'f-blue--Maritime--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Maritime-Transit', - template: 'Maritime--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Air', - activities: [ - { - name: 'Air-Air Refuel', - actId: 'AAR', - interactsWith: [ - 'EW', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Air-Air Refuel', - template: 'Air--AirToAir', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Air-Air Refuel-0' - }, - { - aType: 'Polygon', - name: 'AAR at this location', - optional: false, - uniqid: 'Air-Air Refuel-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Air-Air Refuel-2' - } - ] - }, - { - name: 'Defensive Counter Air', - actId: 'DCA', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST' - ], - uniqid: 'f-blue-Air-Defensive Counter Air', - template: 'Air--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Defensive Counter Air-0' - }, - { - aType: 'Polygon', - name: 'DCA Area', - optional: false, - uniqid: 'Defensive Counter Air-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Defensive Counter Air-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-blue-Air-EW Attack', - template: 'Air--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-ISTAR', - template: 'Air--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Offensive Counter Air', - actId: 'OCA', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST' - ], - uniqid: 'f-blue-Air-Offensive Counter Air', - template: 'Air--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Offensive Counter Air-0' - }, - { - aType: 'Polygon', - name: 'OCA Area', - optional: false, - uniqid: 'Offensive Counter Air-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Offensive Counter Air-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Resupply', - template: 'Air--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Stand Off Strike', - actId: 'SoffS', - interactsWith: [ - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Stand Off Strike', - template: 'f-blue--Air--MissileStrike', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Stand Off Strike-0' - }, - { - aType: 'Polygon', - name: 'Launch Location', - optional: false, - uniqid: 'Stand Off Strike-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Stand Off Strike-2' - } - ] - }, - { - name: 'Suppression of Air Defences (SEAD)', - actId: 'SEAD', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Suppression of Air Defences (SEAD)', - template: 'Air--Activity', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-0' - }, - { - aType: 'Polygon', - name: 'SEAD Area', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-2' - } - ] - }, - { - name: 'Time Sensitive Targeting (TST)', - actId: 'TST', - interactsWith: [ - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Time Sensitive Targeting (TST)', - template: 'Air--TST', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-0' - }, - { - aType: 'Polygon', - name: 'TST Area', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-2' - } - ], - spatialHealth: true - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-blue-Air-Transit', - template: 'Air--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Cyber', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-blue-Cyber-Area Activity', - template: 'Cyber--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-blue-Cyber-Targeted Activity', - template: 'Cyber--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'Space', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-blue-Space-Area Activity', - template: 'Space--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-blue-Space-Targeted Activity', - template: 'Space--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'Info Ops', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-blue-Info Ops-Area Activity', - template: 'Info Ops--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-blue-Info Ops-Targeted Activity', - template: 'Info Ops--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'SOF', - activities: [ - { - name: 'Activity', - actId: 'SOF Activity', - interactsWith: [ - 'EW' - ], - uniqid: 'f-blue-SOF-Activity', - template: 'SOF--SOFActivity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Activity-0' - }, - { - aType: 'Polygon', - name: 'Effect Location', - optional: false, - uniqid: 'Activity-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Activity-2' - } - ], - spatialPerception: true, - spatialHealth: true - } - ] - } - ] - }, - { - force: 'f-red', - groupedActivities: [ - { - category: 'Land', - activities: [ - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-red-Land-EW Attack', - template: 'Land--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Land-ISTAR', - template: 'Land--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Land Close Combat', - actId: 'LAND', - interactsWith: [ - 'EW' - ], - uniqid: 'f-red-Land-Land Close Combat', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Land Close Combat-0' - }, - { - aType: 'Polygon', - name: 'Combat Location', - optional: false, - uniqid: 'Land Close Combat-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Land Close Combat-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Land-Patrol', - template: 'Land--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Raid', - actId: 'Raid', - interactsWith: [ - 'EW' - ], - uniqid: 'f-red-Land-Raid', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Raid-0' - }, - { - aType: 'Polygon', - name: 'Raid Location', - optional: false, - uniqid: 'Raid-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Raid-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Land-Resupply', - template: 'Land--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Land-Strike', - template: 'f-red--Land--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Land-Transit', - template: 'Land--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Maritime', - activities: [ - { - name: 'ASW Barrier', - actId: 'ASW-B', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'RESUPP', - 'TRANSIT' - ], - uniqid: 'f-red-Maritime-ASW Barrier', - template: 'Maritime--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ASW Barrier-0' - }, - { - aType: 'Polygon', - name: 'ASW Area', - optional: false, - uniqid: 'ASW Barrier-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ASW Barrier-2' - } - ] - }, - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-red-Maritime-EW Attack', - template: 'Maritime--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Maritime-ISTAR', - template: 'Maritime--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Mine Clearance', - actId: 'M-Clr', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'FIAC' - ], - uniqid: 'f-red-Maritime-Mine Clearance', - template: 'Maritime--Activity', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Mine Clearance-0' - }, - { - aType: 'Polygon', - name: 'Mine Clearance Area Area', - optional: false, - uniqid: 'Mine Clearance-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Mine Clearance-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Mine Laying', - actId: 'M-Lay', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'FIAC' - ], - uniqid: 'f-red-Maritime-Mine Laying', - template: 'Maritime--Activity', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Mine Laying-0' - }, - { - aType: 'Polygon', - name: 'Mine Area', - optional: false, - uniqid: 'Mine Laying-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Mine Laying-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Maritime-Patrol', - template: 'Maritime--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Maritime-Resupply', - template: 'Maritime--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Sea Denial', - actId: 'Sea Denial', - interactsWith: [ - 'EW' - ], - uniqid: 'f-red-Maritime-Sea Denial', - template: 'Maritime--Activity', - geometries: [ - { - aType: 'Polygon', - name: 'Area', - optional: false, - uniqid: 'Sea Denial-0' - } - ] - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Maritime-Strike', - template: 'f-red--Maritime--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Maritime-Transit', - template: 'Maritime--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Air', - activities: [ - { - name: 'Air-Air Refuel', - actId: 'AAR', - interactsWith: [ - 'EW', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Air-Air Refuel', - template: 'Air--AirToAir', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Air-Air Refuel-0' - }, - { - aType: 'Polygon', - name: 'AAR at this location', - optional: false, - uniqid: 'Air-Air Refuel-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Air-Air Refuel-2' - } - ] - }, - { - name: 'Defensive Counter Air', - actId: 'DCA', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST' - ], - uniqid: 'f-red-Air-Defensive Counter Air', - template: 'Air--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Defensive Counter Air-0' - }, - { - aType: 'Polygon', - name: 'DCA Area', - optional: false, - uniqid: 'Defensive Counter Air-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Defensive Counter Air-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'EW Attack', - actId: 'EW', - interactsWith: [ - 'SOF Activity', - 'BMD-MEZ', - 'SAM-MEZ', - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST', - 'SOF', - 'Sea Denial', - 'Raid', - 'LAND' - ], - uniqid: 'f-red-Air-EW Attack', - template: 'Air--EWAttack', - events: [ - 'i-start', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'EW Attack-0' - }, - { - aType: 'Polygon', - name: 'EW Area of Effect', - optional: false, - uniqid: 'EW Attack-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'EW Attack-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'ISTAR', - actId: 'ISTAR', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-ISTAR', - template: 'Air--ISTAR', - events: [ - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'ISTAR-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'ISTAR-1' - }, - { - aType: 'Polygon', - name: 'Observation Area', - optional: false, - uniqid: 'ISTAR-2' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'ISTAR-3' - } - ], - spatialPerception: true - }, - { - name: 'Offensive Counter Air', - actId: 'OCA', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'AAR', - 'RESUPP', - 'TRANSIT', - 'DCA', - 'OCA', - 'SoffS', - 'SEAD', - 'TST' - ], - uniqid: 'f-red-Air-Offensive Counter Air', - template: 'Air--Activity', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Offensive Counter Air-0' - }, - { - aType: 'Polygon', - name: 'OCA Area', - optional: false, - uniqid: 'Offensive Counter Air-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Offensive Counter Air-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Resupply', - actId: 'RESUPP', - interactsWith: [ - 'STRIKE', - 'EW', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Resupply', - template: 'Air--Resupply', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Resupply-0' - }, - { - aType: 'Polygon', - name: 'Resupply at this location', - optional: false, - uniqid: 'Resupply-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Resupply-2' - } - ] - }, - { - name: 'Stand Off Strike', - actId: 'SoffS', - interactsWith: [ - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Stand Off Strike', - template: 'f-red--Air--MissileStrike', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Stand Off Strike-0' - }, - { - aType: 'Polygon', - name: 'Launch Location', - optional: false, - uniqid: 'Stand Off Strike-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Stand Off Strike-2' - } - ] - }, - { - name: 'Suppression of Air Defences (SEAD)', - actId: 'SEAD', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Suppression of Air Defences (SEAD)', - template: 'Air--Activity', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-0' - }, - { - aType: 'Polygon', - name: 'SEAD Area', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Suppression of Air Defences (SEAD)-2' - } - ] - }, - { - name: 'Time Sensitive Targeting (TST)', - actId: 'TST', - interactsWith: [ - 'EW', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Time Sensitive Targeting (TST)', - template: 'Air--TST', - events: [ - 'i-random' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-0' - }, - { - aType: 'Polygon', - name: 'TST Area', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Time Sensitive Targeting (TST)-2' - } - ], - spatialHealth: true - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-red-Air-Transit', - template: 'Air--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Cyber', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-red-Cyber-Area Activity', - template: 'Cyber--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-red-Cyber-Targeted Activity', - template: 'Cyber--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'Space', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-red-Space-Area Activity', - template: 'Space--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-red-Space-Targeted Activity', - template: 'Space--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'Info Ops', - activities: [ - { - name: 'Area Activity', - actId: 'AreaActivity', - interactsWith: [], - uniqid: 'f-red-Info Ops-Area Activity', - template: 'Info Ops--AreaEffects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ], - geometries: [ - { - aType: 'Polygon', - name: 'Area of effect', - optional: false, - uniqid: 'Area Activity-0' - } - ] - }, - { - name: 'Targeted Activity', - actId: 'Activity', - interactsWith: [], - uniqid: 'f-red-Info Ops-Targeted Activity', - template: 'Info Ops--Effects', - events: [ - 'i-start', - 'i-random', - 'i-end' - ] - } - ] - }, - { - category: 'SOF', - activities: [ - { - name: 'Activity', - actId: 'SOF Activity', - interactsWith: [ - 'EW' - ], - uniqid: 'f-red-SOF-Activity', - template: 'SOF--SOFActivity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Activity-0' - }, - { - aType: 'Polygon', - name: 'Effect Location', - optional: false, - uniqid: 'Activity-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Activity-2' - } - ], - spatialPerception: true, - spatialHealth: true - } - ] - } - ] - }, - { - force: 'f-green', - groupedActivities: [ - { - category: 'Land', - activities: [ - { - name: 'Land Close Combat', - actId: 'LAND', - interactsWith: [ - 'EW' - ], - uniqid: 'f-green-Land-Land Close Combat', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Land Close Combat-0' - }, - { - aType: 'Polygon', - name: 'Combat Location', - optional: false, - uniqid: 'Land Close Combat-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Land Close Combat-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Land-Patrol', - template: 'Land--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Raid', - actId: 'Raid', - interactsWith: [ - 'EW' - ], - uniqid: 'f-green-Land-Raid', - template: 'Land--Activity', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Raid-0' - }, - { - aType: 'Polygon', - name: 'Raid Location', - optional: false, - uniqid: 'Raid-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Raid-2' - } - ], - spatialPerception: true, - spatialHealth: true - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Land-Strike', - template: 'f-green--Land--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Land-Transit', - template: 'Land--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Maritime', - activities: [ - { - name: 'Patrol', - actId: 'PATRL', - interactsWith: [ - 'EW', - 'ISTAR', - 'PATRL', - 'TRANSIT', - 'ASW-B', - 'FIAC', - 'M-Clr', - 'M-Lay', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Maritime-Patrol', - template: 'Maritime--Patrol', - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Patrol-0' - }, - { - aType: 'Polygon', - name: 'Patrol Area', - optional: false, - uniqid: 'Patrol-1' - }, - { - aType: 'Polyline', - name: 'Route back', - optional: false, - uniqid: 'Patrol-2' - } - ] - }, - { - name: 'Strike', - actId: 'STRIKE', - interactsWith: [ - 'BMD-MEZ', - 'SAM-MEZ', - 'EW', - 'RESUPP', - 'TRANSIT', - 'ASW-B', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Maritime-Strike', - template: 'f-green--Maritime--MissileStrike', - events: [ - 'i-end' - ] - }, - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Maritime-Transit', - template: 'Maritime--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - }, - { - category: 'Air', - activities: [ - { - name: 'Transit', - actId: 'TRANSIT', - interactsWith: [ - 'STRIKE', - 'EW', - 'ISTAR', - 'PATRL', - 'ASW-B', - 'FIAC', - 'DCA', - 'OCA' - ], - uniqid: 'f-green-Air-Transit', - template: 'Air--Transit', - events: [ - 'i-end' - ], - geometries: [ - { - aType: 'Polyline', - name: 'Route out', - optional: false, - uniqid: 'Transit-0' - } - ] - } - ] - } - ] - } - ] - }, - templates: { - templates: [ - { - lastUpdated: '2019-09-30T12:37:26.705Z', - title: 'Adjudication Feedback', - details: { - $id: 'https://example.com/arrays.schema.json', - $schema: 'http://json-schema.org/draft-07/schema#', - type: 'object', - title: 'Adjudication Outcomes', - format: 'grid', - required: [ - 'narrative', - 'Reference', - 'important', - 'perForceNarratives' - ], - properties: { - Reference: { - title: 'Reference', - propertyOrder: 10, - readonly: true, - type: 'string', - options: { - grid_columns: 3 - } - }, - messageType: { - options: { - hidden: true - }, - type: 'string' - }, - important: { - type: 'boolean', - propertyOrder: 5, - title: 'Important (high profile adjudication)', - format: 'checkbox', - options: { - grid_columns: 3 - } - }, - narrative: { - title: 'General Summary', - propertyOrder: 20, - type: 'string', - format: 'textarea', - options: { - grid_columns: 3 - } - }, - perForceNarratives: { - type: 'array', - title: 'Per-force feedback', - propertyOrder: 25, - format: 'table', - options: { - grid_columns: 5 - }, - additionalProperties: false, - items: { - title: 'Feedback', - type: 'object', - required: [ - 'force', - 'feedback' - ], - properties: { - force: { - title: 'Force', - propertyOrder: 10, - type: 'string', - enum: [ - 'f-a', - 'f-b', - 'f-c', - 'f-d' - ], - options: { - enum_titles: [ - 'Red', - 'Blue', - 'White', - 'Green' - ], - grid_columns: 3 - } - }, - feedback: { - title: 'Feedback', - propertyOrder: 20, - type: 'string', - format: 'textarea' - } - } - } - }, - perceptionOutcomes: { - type: 'array', - title: 'Perception Outcomes', - propertyOrder: 40, - format: 'table', - additionalProperties: false, - items: { - title: 'Perception Outcome', - type: 'object', - required: [ - 'force', - 'asset' - ], - properties: { - force: { - title: 'By', - propertyOrder: 10, - type: 'string', - enum: [ - 'f-a', - 'f-b', - 'f-c', - 'f-d' - ], - options: { - enum_titles: [ - 'Red', - 'Blue', - 'White', - 'Green' - ], - grid_columns: 3 - } - }, - asset: { - title: 'Asset', - propertyOrder: 20, - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ], - grid_columns: 3 - } - }, - perceivedForce: { - title: 'Force', - propertyOrder: 30, - type: 'string', - enum: [ - 'Unknown', - 'Blue', - 'Red', - 'Green', - 'White' - ], - options: { - grid_columns: 3 - } - }, - perceivedType: { - title: 'Platform Type', - propertyOrder: 40, - type: 'string', - enum: [ - 'Unknown', - 'Tank', - 'Frigate', - 'Fighter', - 'Destroyer' - ], - options: { - grid_columns: 3 - } - }, - perceivedHealth: { - title: 'Health', - propertyOrder: 50, - type: 'number', - options: { - grid_columns: 3 - } - }, - perceivedName: { - title: 'Name', - propertyOrder: 60, - type: 'string' - }, - perceivedLocation: { - title: 'Location t/[1,2]/x', - propertyOrder: 65, - type: 'string' - }, - narrative: { - title: 'Comment', - propertyOrder: 70, - type: 'string', - format: 'textarea' - } - } - } - }, - healthOutcomes: { - type: 'array', - format: 'table', - propertyOrder: 50, - title: 'Health Outcomes', - additionalProperties: false, - items: { - title: 'Health Outcome', - type: 'object', - required: [ - 'asset', - 'health' - ], - properties: { - asset: { - title: 'Asset', - propertyOrder: 10, - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ], - grid_columns: 3 - } - }, - health: { - title: 'Health', - propertyOrder: 20, - type: 'number', - options: { - grid_columns: 2 - } - }, - c4: { - title: 'C4 Ability', - propertyOrder: 25, - type: 'string', - enum: [ - 'Unchanged', - 'None', - 'Degraded', - 'Operational' - ], - options: { - grid_columns: 2 - } - }, - repairComplete: { - title: 'Repair in (days)', - propertyOrder: 40, - type: 'string', - enum: [ - 'I/R', - '1', - '2', - '3' - ], - options: { - grid_columns: 2 - } - }, - narrative: { - title: 'Comment', - propertyOrder: 50, - type: 'string', - format: 'textarea' - }, - private: { - title: 'Private', - propertyOrder: 60, - type: 'string', - format: 'textarea' - } - } - } - }, - locationOutcomes: { - type: 'array', - format: 'table', - propertyOrder: 60, - title: 'Movement Outcomes', - additionalProperties: false, - items: { - title: 'Movement Outcome', - type: 'object', - required: [ - 'asset', - 'location' - ], - properties: { - asset: { - title: 'Asset', - propertyOrder: 30, - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - enum_titles: [ - 'Tank A', - 'Tank B', - 'Tank C', - 'Plane A' - ], - grid_columns: 3 - } - }, - location: { - title: 'Location [2.4, 4.2]', - propertyOrder: 40, - type: 'string', - options: { - grid_columns: 3 - } - }, - narrative: { - title: 'Comment', - propertyOrder: 50, - type: 'string', - format: 'textarea' - }, - private: { - title: 'Private', - propertyOrder: 60, - type: 'string', - format: 'textarea' - } - } - } - } - } - }, - completed: false, - _id: 'p9adjudicate', - _rev: '1-7fa1e6dd6b4ac5b6afc45b596ee7af61' - }, - { - lastUpdated: '2019-09-30T12:37:26.705Z', - title: 'Chat', - details: { - type: 'object', - properties: { - content: { - type: 'string', - format: 'textarea', - options: { - inputAttributes: { - placeholder: 'type the text' - } - } - } - }, - title: 'Chat', - format: 'grid' - }, - completed: false, - _id: 'k16eedkl', - _rev: '1-09ab7a18ff677cec5d9a56f02a45788d' - }, - { - lastUpdated: '2023-02-20T15:19:12.345Z', - title: 'f-blue--Land--MissileStrike', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'activityDescription', - 'intent', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'rulesOfEngagement', - 'emconState', - 'ownAssets', - 'otherAssets' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - minLength: 10, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'datetime-local', - type: 'string', - propertyOrder: 40, - title: 'Start Date', - options: { - grid_columns: 3, - inputAttributes: { - placeholder: 'Enter start date' - }, - flatpickr: { - time_24hr: true, - enableTime: true, - altInput: true, - altFormat: 'M dHi\\Z', - dateFormat: 'Z', - defaultDate: '2024-05-01T00:00:00Z' - } - } - }, - endDate: { - format: 'datetime-local', - type: 'string', - propertyOrder: 45, - title: 'End Date', - options: { - grid_columns: 3, - inputAttributes: { - placeholder: 'Enter end date' - }, - flatpickr: { - time_24hr: true, - enableTime: true, - altInput: true, - altFormat: 'M dHi\\Z', - dateFormat: 'Z', - defaultDate: '2024-05-01T00:00:00Z' - } - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 55, - options: { - grid_columns: 6 - }, - type: 'string' - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 6 - }, - type: 'string' - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - type: 'array', - propertyOrder: 100, - format: 'table', - minItems: 0, - title: 'Synchronised with', - options: { - grid_columns: 6 - }, - items: { - title: 'Order', - type: 'string', - enum: [ - 'o-a', - 'o-b', - 'o-c', - 'o-d' - ], - options: { - enum_titles: [ - 'Orders A', - 'Orders B', - 'Orders C', - 'Orders D' - ] - } - } - }, - supports: { - format: 'textarea', - title: 'High-level Activity Supported', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - title: 'Associated Cyber/Space Activity Ref#', - propertyOrder: 120, - type: 'string', - enum: [ - 'None', - 'FR Cyper Op 12 - Green Drain', - 'DE Cyper Op 14 - Brain Smash', - 'GR Space Op 16 - Ruby Spaniel', - 'SP Info Op 18 - Orange Drawn' - ], - options: { - grid_columns: 4 - } - }, - rulesOfEngagement: { - enum: [ - 'Weapons Free', - 'Weapons Tight', - 'Weapons Held' - ], - title: 'Rules of Engagement', - type: 'string', - propertyOrder: 210, - options: { - grid_columns: 3 - } - }, - emconState: { - enum: [ - 'Electronic Silence', - 'Radio Silence', - 'Normal Operations', - 'No restrictions' - ], - title: 'Emcon State', - type: 'string', - propertyOrder: 220, - options: { - grid_columns: 3 - } - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets (Launchers)', - options: { - grid_columns: 6, - enable_array_copy: true, - disable_array_reorder: true - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Launcher', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 2, - enum_titles: [ - 'Battery A', - 'Battery B', - 'Battery C', - 'Battery D' - ] - } - }, - missileType: { - title: 'Missile Type', - type: 'string', - enum: [ - '###Ballistic', - 'SRBM', - 'MRBM', - 'IRBM', - '###Cruise', - 'Standard Cruise', - 'Low Obs Cruise', - '###UAV', - 'Propellor OWA UAV', - 'Jet OWA UAV' - ], - options: { - grid_columns: 2 - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 1 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 75, - title: 'Targets', - options: { - grid_columns: 6, - enable_array_copy: true, - disable_array_reorder: true - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Target', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 2, - enum_titles: [ - 'Opp Site A', - 'Opp Site B', - 'Opp Site C', - 'Opp Site D' - ] - } - }, - missileType: { - title: 'Missile Type', - type: 'string', - enum: [ - '###Ballistic', - 'SRBM', - 'MRBM', - 'IRBM', - '###Cruise', - 'Standard Cruise', - 'Low Obs Cruise', - '###UAV', - 'Propellor OWA UAV', - 'Jet OWA UAV' - ], - options: { - grid_columns: 2 - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 1 - }, - format: 'number' - } - } - } - } - }, - title: 'f-blue--Land--MissileStrike', - type: 'object' - }, - completed: true, - _id: 'f-blue--Land--MissileStrike', - _rev: '2023-02-20T15:19:12.345Z' - }, - { - lastUpdated: '2023-02-20T15:19:12.345Z', - title: 'f-blue--Maritime--MissileStrike', - details: { - format: 'grid', - required: [ - 'Reference', - 'title', - 'startDate', - 'endDate', - 'activity', - 'activityDescription', - 'intent', - 'actionsOn', - 'synchronisedWith', - 'supports', - 'activityCard', - 'rulesOfEngagement', - 'emconState', - 'ownAssets', - 'otherAssets' - ], - properties: { - Reference: { - type: 'string', - title: 'Reference (locked)', - readonly: 'readonly', - propertyOrder: 10, - options: { - grid_columns: 2 - } - }, - title: { - type: 'string', - title: 'Title', - propertyOrder: 20, - minLength: 10, - options: { - grid_columns: 10 - } - }, - startDate: { - format: 'datetime-local', - type: 'string', - propertyOrder: 40, - title: 'Start Date', - options: { - grid_columns: 3, - inputAttributes: { - placeholder: 'Enter start date' - }, - flatpickr: { - time_24hr: true, - enableTime: true, - altInput: true, - altFormat: 'M dHi\\Z', - dateFormat: 'Z', - defaultDate: '2024-05-01T00:00:00Z' - } - } - }, - endDate: { - format: 'datetime-local', - type: 'string', - propertyOrder: 45, - title: 'End Date', - options: { - grid_columns: 3, - inputAttributes: { - placeholder: 'Enter end date' - }, - flatpickr: { - time_24hr: true, - enableTime: true, - altInput: true, - altFormat: 'M dHi\\Z', - dateFormat: 'Z', - defaultDate: '2024-05-01T00:00:00Z' - } - } - }, - activity: { - title: 'Activity', - propertyOrder: 50, - readonly: 'readonly', - type: 'string', - enum: [ - 'transit', - 'kinetic', - 'asymmetric' - ], - options: { - grid_columns: 6, - enum_titles: [ - 'Transit1', - 'Kinetic1', - 'Asymmetric1' - ] - } - }, - activityDescription: { - format: 'textarea', - title: 'Activity Description', - propertyOrder: 55, - options: { - grid_columns: 6 - }, - type: 'string' - }, - intent: { - format: 'textarea', - title: 'Intent', - propertyOrder: 60, - options: { - grid_columns: 6 - }, - type: 'string' - }, - actionsOn: { - format: 'textarea', - title: 'Actions on', - propertyOrder: 90, - options: { - grid_columns: 12 - }, - type: 'string' - }, - synchronisedWith: { - type: 'array', - propertyOrder: 100, - format: 'table', - minItems: 0, - title: 'Synchronised with', - options: { - grid_columns: 6 - }, - items: { - title: 'Order', - type: 'string', - enum: [ - 'o-a', - 'o-b', - 'o-c', - 'o-d' - ], - options: { - enum_titles: [ - 'Orders A', - 'Orders B', - 'Orders C', - 'Orders D' - ] - } - } - }, - supports: { - format: 'textarea', - title: 'High-level Activity Supported', - propertyOrder: 110, - options: { - grid_columns: 6 - }, - type: 'string' - }, - activityCard: { - title: 'Associated Cyber/Space Activity Ref#', - propertyOrder: 120, - type: 'string', - enum: [ - 'None', - 'FR Cyper Op 12 - Green Drain', - 'DE Cyper Op 14 - Brain Smash', - 'GR Space Op 16 - Ruby Spaniel', - 'SP Info Op 18 - Orange Drawn' - ], - options: { - grid_columns: 4 - } - }, - rulesOfEngagement: { - enum: [ - 'Weapons Free', - 'Weapons Tight', - 'Weapons Held' - ], - title: 'Rules of Engagement', - type: 'string', - propertyOrder: 210, - options: { - grid_columns: 3 - } - }, - emconState: { - enum: [ - 'Electronic Silence', - 'Radio Silence', - 'Normal Operations', - 'No restrictions' - ], - title: 'Emcon State', - type: 'string', - propertyOrder: 220, - options: { - grid_columns: 3 - } - }, - ownAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 70, - title: 'Own Assets (Launchers)', - options: { - grid_columns: 6, - enable_array_copy: true, - disable_array_reorder: true - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Launcher', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 2, - enum_titles: [ - 'Battery A', - 'Battery B', - 'Battery C', - 'Battery D' - ] - } - }, - missileType: { - title: 'Missile Type', - type: 'string', - enum: [ - '###Ballistic', - 'SRBM', - 'MRBM', - 'IRBM', - '###Cruise', - 'Standard Cruise', - 'Low Obs Cruise', - '###UAV', - 'Propellor OWA UAV', - 'Jet OWA UAV' - ], - options: { - grid_columns: 2 - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 1 - }, - format: 'number' - } - } - } - }, - otherAssets: { - type: 'array', - format: 'table', - minItems: 0, - propertyOrder: 75, - title: 'Targets', - options: { - grid_columns: 6, - enable_array_copy: true, - disable_array_reorder: true - }, - items: { - type: 'object', - format: 'grid', - title: 'Asset', - required: [ - 'asset', - 'number' - ], - properties: { - asset: { - title: 'Target', - type: 'string', - enum: [ - 'ta', - 'tb', - 'tc', - 'pa' - ], - options: { - grid_columns: 2, - enum_titles: [ - 'Opp Site A', - 'Opp Site B', - 'Opp Site C', - 'Opp Site D' - ] - } - }, - missileType: { - title: 'Missile Type', - type: 'string', - enum: [ - '###Ballistic', - 'SRBM', - 'MRBM', - 'IRBM', - '###Cruise', - 'Standard Cruise', - 'Low Obs Cruise', - '###UAV', - 'Propellor OWA UAV', - 'Jet OWA UAV' - ], - options: { - grid_columns: 2 - } - }, - number: { - title: 'Quantity', - type: 'string', - options: { - grid_columns: 1 - }, - format: 'number' - } - } - } - } - }, - title: 'f-blue--Maritime--MissileStrike', - type: 'object' - }, - completed: true, - _id: 'f-blue--Maritime--MissileStrike', - _rev: '2023-02-20T15:19:12.345Z' - } - ] - }, - areas: { - areas: [ - { - name: 'Category-1', - color: '#aaf', - usedBy: [ - 'f-blue', - 'f-red' - ], - areas: [ - { - name: 'area-1', - polygon: { - type: 'Polygon', - coordinates: [ - [ - [ - 42.3586, - 52.15751 - ], - [ - 42.3586, - 44.88566 - ], - [ - 53.45622, - 44.885665 - ], - [ - 53.45622, - 52.15751 - ], - [ - 42.3586, - 52.15751 - ] - ] - ] - } - }, - { - name: 'area-2', - polygon: { - type: 'Polygon', - coordinates: [ - [ - [ - 32.3586, - 42.15751 - ], - [ - 32.3586, - 34.88566 - ], - [ - 43.45622, - 34.885665 - ], - [ - 43.45622, - 42.15751 - ], - [ - 32.3586, - 42.15751 - ] - ] - ] - } - } - ] - }, { - name: 'Category-2', - color: 'afa', - usedBy: [ - 'f-blue' - ], - areas: [ - { - name: 'area-3', - polygon: { - type: 'Polygon', - coordinates: [ - [ - [ - 32.3586, - 52.15751 - ], - [ - 32.3586, - 44.88566 - ], - [ - 43.45622, - 44.885665 - ], - [ - 43.45622, - 52.15751 - ], - [ - 32.3586, - 52.15751 - ] - ] - ] - } - }, - { - name: 'area-4', - polygon: { - type: 'Polygon', - coordinates: [ - [ - [ - 22.3586, - 52.1575 - ], - [ - 22.3586, - 44.88566 - ], - [ - 33.45622, - 44.885665 - ], - [ - 33.45622, - 52.15751 - ], - [ - 22.3586, - 52.1575 - ] - ] - ] - } - }, - { - name: 'area-5', - polygon: { - type: 'Polygon', - coordinates: [ - [ - [ - 44.342709, - 41.454939 - ], - [ - 44.342709, - 35.22708 - ], - [ - 52.319515, - 35.22708 - ], - [ - 52.319515, - 41.454939 - ], - [ - 44.342709, - 41.454939 - ] - ] - ] - } - } - ] - } - ] - } - }, - gameTurn: 1, - infoType: true, - messageType: 'InfoMessage', - name: 'wargame-l6nngxlk', - phase: 'planning', - turnEndTime: '2021-08-10T16:17:26+01:00', - wargameInitiated: true, - wargameTitle: 'P9 Test' -} -export default shortGame diff --git a/client/src/mocks/planning-activities.mock.ts b/client/src/mocks/planning-activities.mock.ts index 1f5e6ab90d..8428ac4155 100644 --- a/client/src/mocks/planning-activities.mock.ts +++ b/client/src/mocks/planning-activities.mock.ts @@ -1,165 +1,4 @@ import { PerForcePlanningActivitySet } from 'src/custom-types' -// import P9BMock from "./p9b-wargame.mock" - -// const forces = P9BMock.data.forces.forces - -export const MockPlanningActivities = [ - // { - // uniqid: 'precis-strike', - // name: 'Precision Strike', - // template: 'k16e-land', - // color: '#f0f', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route in', - // uniqid: 'aa1' - // }, - // { - // aType: GeometryType.point, - // name: 'Target Location', - // uniqid: 'aa2' - // }, - // { - // aType: GeometryType.polyline, - // name: 'Route out', - // uniqid: 'aa3' - // }, - // ] - // }, - // { - // uniqid: 'ballistic-strike', - // name: 'Ballistic Strike', - // template: 'k16e-land', - // color: '#f0f', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route to target', - // uniqid: 'ab1' - // } - // ] - // }, - // { - // uniqid: 'area-strike', - // name: 'Area Strike', - // template: 'k16e-land', - // color: '#b0f', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route in', - // uniqid: 'aa4' - // }, - // { - // aType: GeometryType.polygon, - // name: 'Target Area', - // uniqid: 'aa5' - // }, - // { - // aType: GeometryType.polyline, - // name: 'Route out', - // uniqid: 'aa6' - // }, - // ] - // }, - // { - // uniqid: 'transit', - // name: 'Transit', - // template: 'k16e-land', - // color: '#f33', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route', - // uniqid: 'aa7' - // } - // ] - // }, - // { - // uniqid: 'cyber', - // name: 'Non spatial cyber', - // template: 'k16e-other', - // }, - // { - // uniqid: 'air-recce', - // name: 'Air Reconnaisance', - // template: 'Air Activity', - // color: '#5b0', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route in', - // uniqid: 'aa8' - // }, - // { - // aType: GeometryType.polygon, - // name: 'Flight box', - // uniqid: 'aa9a' - // }, - // { - // aType: GeometryType.polygon, - // name: 'Target Area', - // uniqid: 'aa9b' - // }, - // { - // aType: GeometryType.polyline, - // name: 'Route out', - // uniqid: 'a10' - // }, - // ] - // }, - // { - // uniqid: 'area-recce', - // name: 'Area Reconnaisance', - // template: 'k16e-air', - // color: '#5b0', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route in', - // uniqid: 'aa8' - // }, - // { - // aType: GeometryType.polygon, - // name: 'Flight Box', - // uniqid: 'aa9a' - // }, - // { - // aType: GeometryType.polygon, - // name: 'Target Area', - // uniqid: 'aa9b' - // }, - // { - // aType: GeometryType.polyline, - // name: 'Route out', - // uniqid: 'a10' - // }, - // ] - // }, - // { - // uniqid: 'point-recce', - // name: 'Point Reconnaisance', - // template: 'k16e-air', - // geometries: [ - // { - // aType: GeometryType.polyline, - // name: 'Route in', - // uniqid: 'a11' - // }, - // { - // aType: GeometryType.point, - // name: 'Target Area', - // uniqid: 'a12' - // }, - // { - // aType: GeometryType.polyline, - // name: 'Route out', - // uniqid: 'a13' - // }, - // ] - // } -] export const MockPerForceActivities: PerForcePlanningActivitySet[] = [ // { diff --git a/client/src/mocks/planning-messages-bulk.mock.ts b/client/src/mocks/planning-messages-bulk.mock.ts deleted file mode 100644 index dd7f1a7d48..0000000000 --- a/client/src/mocks/planning-messages-bulk.mock.ts +++ /dev/null @@ -1,26058 +0,0 @@ -import { MessageInfoTypeClipped, MessageInteraction, MessagePlanning } from 'src/custom-types' - -export const planningMessagesBulk: Array = [ - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-22T15:47:41.086Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-2', - title: 'Order item 6', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T04:35:00.000Z', - activity: 'f-blue-Air-Defensive Counter Air', - ownAssets: [ - { - asset: 'Blue.1.64', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Defensive Counter Air-0', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//Route out', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-blue', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Defensive Counter Air-0', - name: 'f-blue//3.105222334795144//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 0.7937, - 46.7283 - ], - [ - 39.92, - 36.36 - ], - [ - 79.42, - 25.37 - ], - [ - 79.1354, - 25.6948 - ] - ] - } - } - }, - { - uniqid: 'Defensive Counter Air-1', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//DCA Area', - startDate: '2022-05-01T00:55:00.000Z', - endDate: '2022-05-01T02:55:00.000Z', - force: 'f-blue', - startTime: 1651366500000, - endTime: 1651373700000, - geomId: 'Defensive Counter Air-1', - name: 'f-blue//6.210444669590288//DCA Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 78.42051721021559, - 26.333759612706096 - ], - [ - 78.42051721021559, - 25.05239274819244 - ], - [ - 79.84263126653113, - 25.05239274819244 - ], - [ - 79.84263126653113, - 26.333759612706096 - ], - [ - 78.42051721021559, - 26.333759612706096 - ] - ] - ] - } - } - }, - { - uniqid: 'Defensive Counter Air-2', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//Route back', - startDate: '2022-05-01T02:55:00.000Z', - endDate: '2022-05-01T04:35:00.000Z', - force: 'f-blue', - startTime: 1651373700000, - endTime: 1651379700000, - geomId: 'Defensive Counter Air-2', - name: 'f-blue//9.315667004385432//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 79.1354, - 25.6948 - ], - [ - 52.76, - 32.33 - ], - [ - 26.63, - 40.21 - ], - [ - 0.78, - 46.37 - ], - [ - 0.7937, - 46.7283 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_2', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-27T19:41:04.380Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-5', - title: 'Order item 9', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T04:55:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.8.372', - number: 3 - }, - { - asset: 'Green.9.301', - number: 2 - }, - { - asset: 'Green.2.344', - number: 0 - }, - { - asset: 'Green.3.100', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-green', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Land Close Combat-0', - name: 'f-green//3.8121305503746044//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.9288, - 11.076 - ], - [ - 55, - 25.73 - ], - [ - 52.98, - 41.3 - ], - [ - 52.24, - 56.14 - ], - [ - 50.79, - 70.27 - ], - [ - 50.9972, - 70.7758 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T00:55:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - force: 'f-green', - startTime: 1651366500000, - endTime: 1651374900000, - geomId: 'Land Close Combat-1', - name: 'f-green//7.624261100749209//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 39.88987483440687, - 73.60622903447535 - ], - [ - 39.88987483440687, - 67.44904663148094 - ], - [ - 59.147900000710116, - 67.44904663148094 - ], - [ - 59.147900000710116, - 73.60622903447535 - ], - [ - 39.88987483440687, - 73.60622903447535 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T03:15:00.000Z', - endDate: '2022-05-01T04:55:00.000Z', - force: 'f-green', - startTime: 1651374900000, - endTime: 1651380900000, - geomId: 'Land Close Combat-2', - name: 'f-green//11.436391651123813//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 50.9972, - 70.7758 - ], - [ - 52.65, - 50.51 - ], - [ - 54.4, - 31.35 - ], - [ - 55.44, - 11.47 - ], - [ - 55.9288, - 11.076 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_5', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T05:18:28.464Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-8', - title: 'Order item 12', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - activity: 'f-blue-Land-Raid', - ownAssets: [ - { - asset: 'Blue.5.100', - number: 5 - }, - { - asset: 'Blue.12.369', - number: 3 - }, - { - asset: 'Blue.9.351', - number: 5 - }, - { - asset: 'Blue.2.46', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-blue', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Raid-0', - name: 'f-blue//3.412459935258994//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.1256, - 43.883 - ], - [ - 27.92, - 40.05 - ], - [ - 7.81, - 35.31 - ], - [ - -12.02, - 31.86 - ], - [ - -11.5232, - 31.4121 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T00:55:00.000Z', - endDate: '2022-05-01T02:55:00.000Z', - force: 'f-blue', - startTime: 1651366500000, - endTime: 1651373700000, - geomId: 'Raid-1', - name: 'f-blue//6.824919870517988//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -11.814165501416811, - 31.659436811572302 - ], - [ - -11.814165501416811, - 31.16410939969229 - ], - [ - -11.233766607907233, - 31.16410939969229 - ], - [ - -11.233766607907233, - 31.659436811572302 - ], - [ - -11.814165501416811, - 31.659436811572302 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T02:55:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - force: 'f-blue', - startTime: 1651373700000, - endTime: 1651374900000, - geomId: 'Raid-2', - name: 'f-blue//10.237379805776982//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -11.5232, - 31.4121 - ], - [ - 18.03, - 37.5 - ], - [ - 46.97, - 43.97 - ], - [ - 47.1256, - 43.883 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_8', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--TST', - timestamp: '2022-09-26T20:39:53.339Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-11', - title: 'Order item 15', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T05:35:00.000Z', - activity: 'f-red-Air-Time Sensitive Targeting (TST)', - ownAssets: [ - { - asset: 'Red.3.46', - number: 4 - }, - { - asset: 'Red.2.255', - number: 5 - }, - { - asset: 'Red.8.177', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Time Sensitive Targeting (TST)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route out', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-red', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Time Sensitive Targeting (TST)-0', - name: 'f-red//6.906210489443765//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 75.74, - 24.64 - ], - [ - 31.82, - 9.78 - ], - [ - 31.6133, - 9.8944 - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//TST Area', - startDate: '2022-05-01T00:55:00.000Z', - endDate: '2022-05-01T03:05:00.000Z', - force: 'f-red', - startTime: 1651366500000, - endTime: 1651374300000, - geomId: 'Time Sensitive Targeting (TST)-1', - name: 'f-red//13.81242097888753//TST Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 27.82447747887043, - 13.55655288159408 - ], - [ - 27.82447747887043, - 6.190788854011897 - ], - [ - 35.31804933841015, - 6.190788854011897 - ], - [ - 35.31804933841015, - 13.55655288159408 - ], - [ - 27.82447747887043, - 13.55655288159408 - ] - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route back', - startDate: '2022-05-01T03:05:00.000Z', - endDate: '2022-05-01T05:35:00.000Z', - force: 'f-red', - startTime: 1651374300000, - endTime: 1651383300000, - geomId: 'Time Sensitive Targeting (TST)-2', - name: 'f-red//20.718631468331296//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 31.6133, - 9.8944 - ], - [ - 61.55, - 19.82 - ], - [ - 90.52, - 28.79 - ], - [ - 119.78, - 39.04 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_11', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-29T01:45:19.005Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-14', - title: 'Order item 18', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - activity: 'f-blue-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Blue.7.213', - number: 0 - }, - { - asset: 'Blue.6.362', - number: 3 - }, - { - asset: 'Blue.6.223', - number: 5 - }, - { - asset: 'Blue.8.199', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-blue', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Area Activity-0', - name: 'f-blue//4.293382212938013//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 20.844302107062255, - 16.488564458329883 - ], - [ - 20.844302107062255, - 12.757964862401938 - ], - [ - 24.702303201543984, - 12.757964862401938 - ], - [ - 24.702303201543984, - 16.488564458329883 - ], - [ - 20.844302107062255, - 16.488564458329883 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_14', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-27T12:34:45.461Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-17', - title: 'Order item 21', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T06:55:00.000Z', - activity: 'f-blue-Air-Offensive Counter Air', - ownAssets: [ - { - asset: 'Blue.8.199', - number: 4 - }, - { - asset: 'Blue.3.287', - number: 5 - }, - { - asset: 'Blue.8.89', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Offensive Counter Air-0', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route out', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - force: 'f-blue', - startTime: 1651363500000, - endTime: 1651366500000, - geomId: 'Offensive Counter Air-0', - name: 'f-blue//5.573975105719001//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 5.2312, - 50.857 - ], - [ - 1.73, - 43.2 - ], - [ - -1.7, - 35.6 - ], - [ - -4.86, - 28.29 - ], - [ - -4.6034, - 28.0284 - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-1', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//OCA Area', - startDate: '2022-05-01T00:55:00.000Z', - endDate: '2022-05-01T04:05:00.000Z', - force: 'f-blue', - startTime: 1651366500000, - endTime: 1651377900000, - geomId: 'Offensive Counter Air-1', - name: 'f-blue//11.147950211438001//OCA Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -5.545851540666061, - 28.850675518332423 - ], - [ - -5.545851540666061, - 27.199792041740952 - ], - [ - -3.675294728298656, - 27.199792041740952 - ], - [ - -3.675294728298656, - 28.850675518332423 - ], - [ - -5.545851540666061, - 28.850675518332423 - ] - ] - ] - } - } - }, - { - uniqid: 'Offensive Counter Air-2', - geometry: { - type: 'Feature', - properties: { - id: 'Offensive Counter Air//Route back', - startDate: '2022-05-01T04:05:00.000Z', - endDate: '2022-05-01T06:55:00.000Z', - force: 'f-blue', - startTime: 1651377900000, - endTime: 1651388100000, - geomId: 'Offensive Counter Air-2', - name: 'f-blue//16.721925317157//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -4.6034, - 28.0284 - ], - [ - 4.87, - 50.89 - ], - [ - 5.2312, - 50.857 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_17', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--Effects', - timestamp: '2022-09-22T05:08:12.707Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-20', - title: 'Order item 24', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T00:55:00.000Z', - activity: 'f-red-Space-Targeted Activity', - ownAssets: [ - { - asset: 'Red.9.4', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_20', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-28T13:19:15.896Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-23', - title: 'Order item 32', - startDate: '2022-05-01T00:05:00.000Z', - endDate: '2022-05-01T02:05:00.000Z', - activity: 'f-green-Maritime-Strike', - ownAssets: [ - { - asset: 'Green.2.29', - number: 2, - missileType: 'SRBM' - }, - { - asset: 'Green.10.397', - number: 5, - missileType: 'SRBM' - }, - { - asset: 'Green.5.78', - number: 0, - missileType: 'Standard Cruise' - }, - { - asset: 'Green.1.273', - number: 3, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'MRBM', - number: 5 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_23', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-25T07:27:09.572Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-26', - title: 'Order item 30', - startDate: '2022-05-01T00:10:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.1.273', - number: 5 - }, - { - asset: 'Green.5.181', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T00:10:00.000Z', - endDate: '2022-05-01T01:00:00.000Z', - force: 'f-green', - startTime: 1651363800000, - endTime: 1651366800000, - geomId: 'Land Close Combat-0', - name: 'f-green//2.7762807999097276//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.0734, - 22.1834 - ], - [ - 45.99, - 15.17 - ], - [ - 90.19, - 7.43 - ], - [ - 133.68, - -0.02 - ], - [ - 133.7336, - 0.3536 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T01:00:00.000Z', - endDate: '2022-05-01T01:50:00.000Z', - force: 'f-green', - startTime: 1651366800000, - endTime: 1651369800000, - geomId: 'Land Close Combat-1', - name: 'f-green//5.552561599819455//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 131.36615668104054, - 2.7180766181540648 - ], - [ - 131.36615668104054, - -2.0114799164369797 - ], - [ - 136.09983721413923, - -2.0114799164369797 - ], - [ - 136.09983721413923, - 2.7180766181540648 - ], - [ - 131.36615668104054, - 2.7180766181540648 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T01:50:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - force: 'f-green', - startTime: 1651369800000, - endTime: 1651377600000, - geomId: 'Land Close Combat-2', - name: 'f-green//8.328842399729183//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 133.7336, - 0.3536 - ], - [ - 101.18, - 5.71 - ], - [ - 67.42, - 10.86 - ], - [ - 34.95, - 16.3 - ], - [ - 1.76, - 22.02 - ], - [ - 2.0734, - 22.1834 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_26', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-25T09:12:39.190Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-29', - title: 'Order item 33', - startDate: '2022-05-01T00:30:00.000Z', - endDate: '2022-05-01T01:20:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.6.337', - number: 5 - }, - { - asset: 'Green.7.184', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T00:30:00.000Z', - endDate: '2022-05-01T01:20:00.000Z', - force: 'f-green', - startTime: 1651365000000, - endTime: 1651368000000, - geomId: 'Transit-0', - name: 'f-green//4.630558369892242//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 12.44, - 37.53 - ], - [ - 30.98, - 47.69 - ], - [ - 48.8, - 58.14 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_29', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-27T14:16:38.039Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-32', - title: 'Order item 40', - startDate: '2022-05-01T00:45:00.000Z', - endDate: '2022-05-01T02:05:00.000Z', - activity: 'f-blue-Maritime-Strike', - ownAssets: [ - { - asset: 'Blue.2.220', - number: 0, - missileType: 'Propellor OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Red.8.78', - missileType: 'IRBM', - number: 4 - }, - { - asset: 'Green.11.351', - missileType: 'Standard Cruise', - number: 0 - }, - { - asset: 'Red.10.50', - missileType: 'SRBM', - number: 3 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_32', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-22T13:55:40.797Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-35', - title: 'Order item 39', - startDate: '2022-05-01T00:45:00.000Z', - endDate: '2022-05-01T01:35:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.6.322', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T00:45:00.000Z', - endDate: '2022-05-01T01:35:00.000Z', - force: 'f-green', - startTime: 1651365900000, - endTime: 1651368900000, - geomId: 'Transit-0', - name: 'f-green//5.019377017772058//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - -5.78, - 39.95 - ], - [ - -6.41, - 53.58 - ], - [ - -6.75, - 66.51 - ], - [ - -6.9159, - 66.9968 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_35', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-28T00:53:12.787Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-38', - title: 'Order item 42', - startDate: '2022-05-01T00:50:00.000Z', - endDate: '2022-05-01T04:30:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.11.245', - number: 5 - }, - { - asset: 'Green.6.312', - number: 5 - }, - { - asset: 'Green.12.92', - number: 5 - }, - { - asset: 'Green.7.386', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T00:50:00.000Z', - endDate: '2022-05-01T01:40:00.000Z', - force: 'f-green', - startTime: 1651366200000, - endTime: 1651369200000, - geomId: 'Land Close Combat-0', - name: 'f-green//3.55391809566936//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 3.1085, - 18.7529 - ], - [ - -2.24, - 25.86 - ], - [ - -6.34, - 33.23 - ], - [ - -12.16, - 40.87 - ], - [ - -11.7083, - 40.797 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T01:40:00.000Z', - endDate: '2022-05-01T02:30:00.000Z', - force: 'f-green', - startTime: 1651369200000, - endTime: 1651372200000, - geomId: 'Land Close Combat-1', - name: 'f-green//7.10783619133872//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -15.560971823106454, - 43.52792700227566 - ], - [ - -15.560971823106454, - 37.94820704861075 - ], - [ - -8.166418872921666, - 37.94820704861075 - ], - [ - -8.166418872921666, - 43.52792700227566 - ], - [ - -15.560971823106454, - 43.52792700227566 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T02:30:00.000Z', - endDate: '2022-05-01T04:30:00.000Z', - force: 'f-green', - startTime: 1651372200000, - endTime: 1651379400000, - geomId: 'Land Close Combat-2', - name: 'f-green//10.66175428700808//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -11.7083, - 40.797 - ], - [ - -4.3, - 29.64 - ], - [ - 3.59, - 18.98 - ], - [ - 3.1085, - 18.7529 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_38', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T17:34:45.567Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-41', - title: 'Order item 45', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - activity: 'f-blue-Land-Raid', - ownAssets: [ - { - asset: 'Blue.1.386', - number: 0 - }, - { - asset: 'Blue.6.393', - number: 2 - }, - { - asset: 'Blue.9.113', - number: 0 - }, - { - asset: 'Blue.8.347', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - force: 'f-blue', - startTime: 1651367400000, - endTime: 1651370400000, - geomId: 'Raid-0', - name: 'f-blue//5.981880342907971//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.7042, - 62.6482 - ], - [ - -3.9, - -5.7 - ], - [ - -3.9466, - -5.35 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651370400000, - geomId: 'Raid-1', - name: 'f-blue//11.963760685815942//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -4.882079870424977, - -4.41658826080645 - ], - [ - -4.882079870424977, - -6.281989524699421 - ], - [ - -3.008263449507522, - -6.281989524699421 - ], - [ - -3.008263449507522, - -4.41658826080645 - ], - [ - -4.882079870424977, - -4.41658826080645 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651377600000, - geomId: 'Raid-2', - name: 'f-blue//17.945641028723912//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.9466, - -5.35 - ], - [ - 16.55, - 28.62 - ], - [ - 36.39, - 62.95 - ], - [ - 36.7042, - 62.6482 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_41', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-27T16:00:19.138Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-44', - title: 'Order item 48', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - activity: 'f-red-Air-Transit', - ownAssets: [ - { - asset: 'Red.2.347', - number: 1 - }, - { - asset: 'Red.9.294', - number: 4 - }, - { - asset: 'Red.9.354', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - force: 'f-red', - startTime: 1651367400000, - endTime: 1651370400000, - geomId: 'Transit-0', - name: 'f-red//2.303263759415131//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 96.48, - 32.45 - ], - [ - 72.84, - 26.94 - ], - [ - 48.49, - 20.72 - ], - [ - 24.42, - 13.78 - ], - [ - 24.7211, - 14.1009 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_44', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'SOF--SOFActivity', - timestamp: '2022-09-21T20:09:53.499Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-47', - title: 'Order item 51', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T05:10:00.000Z', - activity: 'f-red-SOF-Activity', - ownAssets: [ - { - asset: 'Red.1.128', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route out', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - force: 'f-red', - startTime: 1651367400000, - endTime: 1651370400000, - geomId: 'Activity-0', - name: 'f-red//2.5180683452636003//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.5434, - 63.8207 - ], - [ - 79.01, - 54.86 - ], - [ - 49.32, - 44.75 - ], - [ - 18.92, - 35.92 - ], - [ - -12.19, - 26.37 - ], - [ - -11.8485, - 26.6128 - ] - ] - } - } - }, - { - uniqid: 'Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Effect Location', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T03:30:00.000Z', - force: 'f-red', - startTime: 1651370400000, - endTime: 1651375800000, - geomId: 'Activity-1', - name: 'f-red//5.036136690527201//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -14.888402055756588, - 29.233678619414196 - ], - [ - -14.888402055756588, - 23.930252228437347 - ], - [ - -8.94642201383412, - 23.930252228437347 - ], - [ - -8.94642201383412, - 29.233678619414196 - ], - [ - -14.888402055756588, - 29.233678619414196 - ] - ] - ] - } - } - }, - { - uniqid: 'Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route back', - startDate: '2022-05-01T03:30:00.000Z', - endDate: '2022-05-01T05:10:00.000Z', - force: 'f-red', - startTime: 1651375800000, - endTime: 1651381800000, - geomId: 'Activity-2', - name: 'f-red//7.554205035790801//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -11.8485, - 26.6128 - ], - [ - 49.26, - 44.99 - ], - [ - 109.71, - 63.69 - ], - [ - 109.5434, - 63.8207 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_47', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-28T22:03:28.651Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-50', - title: 'Order item 54', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T04:40:00.000Z', - activity: 'f-red-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Red.1.128', - number: 3 - }, - { - asset: 'Red.9.354', - number: 3 - }, - { - asset: 'Red.9.294', - number: 3 - }, - { - asset: 'Red.2.347', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T01:10:00.000Z', - endDate: '2022-05-01T02:00:00.000Z', - force: 'f-red', - startTime: 1651367400000, - endTime: 1651370400000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-red//6.6262941003078595//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 83.0181, - 53.5159 - ], - [ - 48.37, - 49.17 - ], - [ - 14.99, - 45.08 - ], - [ - -20.11, - 41.27 - ], - [ - -19.6567, - 41.2039 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T04:20:00.000Z', - force: 'f-red', - startTime: 1651370400000, - endTime: 1651378800000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-red//13.252588200615719//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -24.0535617343461, - 44.27108868595785 - ], - [ - -24.0535617343461, - 37.98470414180903 - ], - [ - -15.662904120740851, - 37.98470414180903 - ], - [ - -15.662904120740851, - 44.27108868595785 - ], - [ - -24.0535617343461, - 44.27108868595785 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T04:20:00.000Z', - endDate: '2022-05-01T04:40:00.000Z', - force: 'f-red', - startTime: 1651378800000, - endTime: 1651380000000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-red//19.87888230092358//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -19.6567, - 41.2039 - ], - [ - 31.46, - 47.55 - ], - [ - 83.02, - 53.33 - ], - [ - 83.0181, - 53.5159 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_50', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-23T21:41:04.593Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-53', - title: 'Order item 57', - startDate: '2022-05-01T01:20:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.2.347', - number: 0 - }, - { - asset: 'Green.5.113', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T01:20:00.000Z', - endDate: '2022-05-01T02:10:00.000Z', - force: 'f-green', - startTime: 1651368000000, - endTime: 1651371000000, - geomId: 'Land Close Combat-0', - name: 'f-green//4.627941024693428//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -0.7267, - 19.325 - ], - [ - 44.93, - 34.8 - ], - [ - 89.78, - 50.48 - ], - [ - 134.92, - 65.43 - ], - [ - 134.7621, - 65.8743 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T02:10:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - force: 'f-green', - startTime: 1651371000000, - endTime: 1651381200000, - geomId: 'Land Close Combat-1', - name: 'f-green//9.255882049386855//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 127.1823862467912, - 68.47993462407712 - ], - [ - 127.1823862467912, - 62.96565074778134 - ], - [ - 140.8731099848347, - 62.96565074778134 - ], - [ - 140.8731099848347, - 68.47993462407712 - ], - [ - 127.1823862467912, - 68.47993462407712 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T05:00:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - force: 'f-green', - startTime: 1651381200000, - endTime: 1651381200000, - geomId: 'Land Close Combat-2', - name: 'f-green//13.883823074080283//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 134.7621, - 65.8743 - ], - [ - 67.11, - 42.35 - ], - [ - -1.02, - 19.33 - ], - [ - -0.7267, - 19.325 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_53', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--AreaEffects', - timestamp: '2022-09-23T11:02:41.326Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-56', - title: 'Order item 60', - startDate: '2022-05-01T01:30:00.000Z', - endDate: '2022-05-01T02:20:00.000Z', - activity: 'f-red-Space-Area Activity', - ownAssets: [ - { - asset: 'Red.1.386', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T01:30:00.000Z', - endDate: '2022-05-01T02:20:00.000Z', - force: 'f-red', - startTime: 1651368600000, - endTime: 1651371600000, - geomId: 'Area Activity-0', - name: 'f-red//6.523009118420305//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -6.790091207623584, - 57.04691862363707 - ], - [ - -6.790091207623584, - 53.116218035142424 - ], - [ - 0.10876112888669928, - 53.116218035142424 - ], - [ - 0.10876112888669928, - 57.04691862363707 - ], - [ - -6.790091207623584, - 57.04691862363707 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_56', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--EWAttack', - timestamp: '2022-09-27T14:08:18.849Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-59', - title: 'Order item 63', - startDate: '2022-05-01T01:50:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - activity: 'f-red-Maritime-EW Attack', - ownAssets: [ - { - asset: 'Red.12.244', - number: 1 - }, - { - asset: 'Red.2.290', - number: 2 - }, - { - asset: 'Red.10.50', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-05-01T01:50:00.000Z', - endDate: '2022-05-01T02:40:00.000Z', - force: 'f-red', - startTime: 1651369800000, - endTime: 1651372800000, - geomId: 'EW Attack-0', - name: 'f-red//2.311498381488491//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 61.01, - 49.51 - ], - [ - 1.4, - 60.57 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T03:00:00.000Z', - force: 'f-red', - startTime: 1651372800000, - endTime: 1651374000000, - geomId: 'EW Attack-1', - name: 'f-red//4.622996762976982//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -6.927921254642883, - 63.79183053167006 - ], - [ - -6.927921254642883, - 56.202976461043356 - ], - [ - 8.629643483140496, - 56.202976461043356 - ], - [ - 8.629643483140496, - 63.79183053167006 - ], - [ - -6.927921254642883, - 63.79183053167006 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-05-01T03:00:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - force: 'f-red', - startTime: 1651374000000, - endTime: 1651380600000, - geomId: 'EW Attack-2', - name: 'f-red//6.9344951444654725//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 60.85, - 49.7 - ], - [ - 120.29, - 38.52 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_59', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-27T22:57:57.163Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-62', - title: 'Order item 66', - startDate: '2022-05-01T01:50:00.000Z', - endDate: '2022-05-01T06:00:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.6.322', - number: 0 - }, - { - asset: 'Green.9.308', - number: 2 - }, - { - asset: 'Green.3.7', - number: 0 - }, - { - asset: 'Green.4.219', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T01:50:00.000Z', - endDate: '2022-05-01T02:40:00.000Z', - force: 'f-green', - startTime: 1651369800000, - endTime: 1651372800000, - geomId: 'Raid-0', - name: 'f-green//6.993408813752467//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 9.2476, - 2.466 - ], - [ - 59.89, - 32.69 - ], - [ - 109.93, - 63.32 - ], - [ - 109.5434, - 63.8207 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - force: 'f-green', - startTime: 1651372800000, - endTime: 1651380600000, - geomId: 'Raid-1', - name: 'f-green//13.986817627504934//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 107.15749531131662, - 64.81672816949133 - ], - [ - 107.15749531131662, - 62.78805063703224 - ], - [ - 111.76346543851375, - 62.78805063703224 - ], - [ - 111.76346543851375, - 64.81672816949133 - ], - [ - 107.15749531131662, - 64.81672816949133 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T04:50:00.000Z', - endDate: '2022-05-01T06:00:00.000Z', - force: 'f-green', - startTime: 1651380600000, - endTime: 1651384800000, - geomId: 'Raid-2', - name: 'f-green//20.9802264412574//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.5434, - 63.8207 - ], - [ - 8.77, - 2.58 - ], - [ - 9.2476, - 2.466 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_62', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-24T13:31:36.267Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-65', - title: 'Order item 69', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T07:40:00.000Z', - activity: 'f-blue-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Blue.5.219', - number: 3 - }, - { - asset: 'Blue.3.145', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-blue//5.568740415357752//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 45.0923, - 59.4373 - ], - [ - 26.34, - 41.97 - ], - [ - 7.07, - 24.99 - ], - [ - 7.4215, - 24.9094 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T02:50:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - force: 'f-blue', - startTime: 1651373400000, - endTime: 1651380600000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-blue//11.137480830715504//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 4.699865081083769, - 27.303416450439148 - ], - [ - 4.699865081083769, - 22.467895644441736 - ], - [ - 10.038494740036175, - 22.467895644441736 - ], - [ - 10.038494740036175, - 27.303416450439148 - ], - [ - 4.699865081083769, - 27.303416450439148 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T04:50:00.000Z', - endDate: '2022-05-01T07:40:00.000Z', - force: 'f-blue', - startTime: 1651380600000, - endTime: 1651390800000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-blue//16.706221246073255//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 7.4215, - 24.9094 - ], - [ - 44.77, - 59.32 - ], - [ - 45.0923, - 59.4373 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_65', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-25T17:49:16.162Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-68', - title: 'Order item 72', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-blue-Air-Transit', - ownAssets: [ - { - asset: 'Blue.8.336', - number: 3 - }, - { - asset: 'Blue.10.202', - number: 5 - }, - { - asset: 'Blue.11.180', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Transit-0', - name: 'f-blue//3.0374931863043457//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 61.93, - 41.22 - ], - [ - 75.22, - 37.34 - ], - [ - 87.78, - 33.74 - ], - [ - 88.1337, - 33.6791 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_68', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-23T03:50:56.847Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-71', - title: 'Order item 75', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T07:10:00.000Z', - activity: 'f-blue-Maritime-Mine Laying', - ownAssets: [ - { - asset: 'Blue.3.272', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Mine Laying-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Mine Laying-0', - name: 'f-blue//4.399667126592249//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 17.0504, - 61.1013 - ], - [ - 15.07, - 45.17 - ], - [ - 13.14, - 30.29 - ], - [ - 10.5, - 14.7 - ], - [ - 10.9857, - 14.2125 - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Mine Area', - startDate: '2022-05-01T02:50:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - force: 'f-blue', - startTime: 1651373400000, - endTime: 1651381200000, - geomId: 'Mine Laying-1', - name: 'f-blue//8.799334253184497//Mine Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 9.308262624271137, - 15.820576922635418 - ], - [ - 9.308262624271137, - 12.592900822343115 - ], - [ - 12.639370870675782, - 12.592900822343115 - ], - [ - 12.639370870675782, - 15.820576922635418 - ], - [ - 9.308262624271137, - 15.820576922635418 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route back', - startDate: '2022-05-01T05:00:00.000Z', - endDate: '2022-05-01T07:10:00.000Z', - force: 'f-blue', - startTime: 1651381200000, - endTime: 1651389000000, - geomId: 'Mine Laying-2', - name: 'f-blue//13.199001379776746//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 10.9857, - 14.2125 - ], - [ - 14.21, - 37.6 - ], - [ - 16.8, - 61.35 - ], - [ - 17.0504, - 61.1013 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_71', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-25T03:36:38.323Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-74', - title: 'Order item 78', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-red-Maritime-Transit', - ownAssets: [ - { - asset: 'Red.3.28', - number: 1 - }, - { - asset: 'Red.4.173', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-red', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Transit-0', - name: 'f-red//4.6552622360759415//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 104.7962, - 25.857 - ], - [ - 53.98, - 42.01 - ], - [ - 2.56, - 58.57 - ], - [ - 2.8761, - 58.3634 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_74', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-26T04:20:03.647Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-77', - title: 'Order item 84', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T03:00:00.000Z', - activity: 'f-blue-Land-Strike', - ownAssets: [ - { - asset: 'Blue.4.3', - number: 4, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Red.8.78', - missileType: 'SRBM', - number: 4 - }, - { - asset: 'Green.11.351', - missileType: 'SRBM', - number: 3 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_77', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-22T11:47:23.831Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-80', - title: 'Order item 89', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T04:20:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.3.198', - number: 3, - missileType: 'SRBM' - }, - { - asset: 'Green.10.223', - number: 3, - missileType: 'MRBM' - }, - { - asset: 'Green.2.361', - number: 5, - missileType: 'Propellor OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 1 - }, - { - asset: 'Red.5.351', - missileType: 'Jet OWA UAV', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_80', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-25T05:17:47.494Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-83', - title: 'Order item 87', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.6.212', - number: 2 - }, - { - asset: 'Blue.11.177', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-blue', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Transit-0', - name: 'f-blue//3.782574580574874//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 28.2441, - 41.1434 - ], - [ - 37.31, - 33.95 - ], - [ - 45.58, - 26.96 - ], - [ - 54.13, - 19.25 - ], - [ - 54.3212, - 19.3529 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_83', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-28T19:59:32.132Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-86', - title: 'Order item 90', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.3.46', - number: 3 - }, - { - asset: 'Green.5.350', - number: 1 - }, - { - asset: 'Green.5.368', - number: 0 - }, - { - asset: 'Green.2.99', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-green', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Transit-0', - name: 'f-green//4.611854367132764//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 31.2229, - -7.5057 - ], - [ - 35.75, - 5.3 - ], - [ - 40.21, - 18.04 - ], - [ - 43.96, - 31.07 - ], - [ - 48.99, - 44.38 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_86', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-28T16:25:17.560Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-89', - title: 'Order item 93', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-red-Maritime-Sea Denial', - ownAssets: [ - { - asset: 'Red.9.99', - number: 5 - }, - { - asset: 'Red.9.343', - number: 0 - }, - { - asset: 'Red.1.300', - number: 1 - }, - { - asset: 'Red.12.371', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Sea Denial-0', - geometry: { - type: 'Feature', - properties: { - id: 'Sea Denial//Area', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-red', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Sea Denial-0', - name: 'f-red//4.334555323177483//Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 39.67020756819433, - 18.11083491872493 - ], - [ - 39.67020756819433, - 10.941293218040272 - ], - [ - 47.09431373550757, - 10.941293218040272 - ], - [ - 47.09431373550757, - 18.11083491872493 - ], - [ - 39.67020756819433, - 18.11083491872493 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_89', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--AreaEffects', - timestamp: '2022-09-24T18:35:03.780Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-92', - title: 'Order item 96', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - activity: 'f-red-Space-Area Activity', - ownAssets: [ - { - asset: 'Red.12.371', - number: 4 - }, - { - asset: 'Red.8.155', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T02:00:00.000Z', - endDate: '2022-05-01T02:50:00.000Z', - force: 'f-red', - startTime: 1651370400000, - endTime: 1651373400000, - geomId: 'Area Activity-0', - name: 'f-red//2.9506774487090297//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 33.959529012036796, - 17.72207009194913 - ], - [ - 33.959529012036796, - 13.511056185668503 - ], - [ - 38.33567843705156, - 13.511056185668503 - ], - [ - 38.33567843705156, - 17.72207009194913 - ], - [ - 33.959529012036796, - 17.72207009194913 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_92', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-25T10:28:50.789Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-95', - title: 'Order item 99', - startDate: '2022-05-01T02:10:00.000Z', - endDate: '2022-05-01T03:00:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.10.63', - number: 0 - }, - { - asset: 'Green.5.187', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:10:00.000Z', - endDate: '2022-05-01T03:00:00.000Z', - force: 'f-green', - startTime: 1651371000000, - endTime: 1651374000000, - geomId: 'Transit-0', - name: 'f-green//5.460220743145328//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.6203, - 12.5113 - ], - [ - 44.1, - 23.91 - ], - [ - 45.58, - 35.3 - ], - [ - 47.33, - 46.97 - ], - [ - 48.37, - 57.92 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_95', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-22T08:06:38.589Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-98', - title: 'Order item 102', - startDate: '2022-05-01T02:20:00.000Z', - endDate: '2022-05-01T06:00:00.000Z', - activity: 'f-red-Maritime-Patrol', - ownAssets: [ - { - asset: 'Red.1.375', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T02:20:00.000Z', - endDate: '2022-05-01T03:10:00.000Z', - force: 'f-red', - startTime: 1651371600000, - endTime: 1651374600000, - geomId: 'Patrol-0', - name: 'f-red//6.863185207359493//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 105.8945, - 40.488 - ], - [ - 71.03, - 41.11 - ], - [ - 36.3, - 42.88 - ], - [ - 1.86, - 43.92 - ], - [ - 1.4099, - 43.5471 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T03:10:00.000Z', - endDate: '2022-05-01T05:30:00.000Z', - force: 'f-red', - startTime: 1651374600000, - endTime: 1651383000000, - geomId: 'Patrol-1', - name: 'f-red//13.726370414718986//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -2.1224857261560137, - 45.95011835346093 - ], - [ - -2.1224857261560137, - 41.04378419465139 - ], - [ - 4.666002573849215, - 41.04378419465139 - ], - [ - 4.666002573849215, - 45.95011835346093 - ], - [ - -2.1224857261560137, - 45.95011835346093 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T05:30:00.000Z', - endDate: '2022-05-01T06:00:00.000Z', - force: 'f-red', - startTime: 1651383000000, - endTime: 1651384800000, - geomId: 'Patrol-2', - name: 'f-red//20.58955562207848//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.4099, - 43.5471 - ], - [ - 35.9, - 42.37 - ], - [ - 71.56, - 41.37 - ], - [ - 105.5, - 40.65 - ], - [ - 105.8945, - 40.488 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_98', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-26T05:49:16.588Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-101', - title: 'Order item 110', - startDate: '2022-05-01T02:20:00.000Z', - endDate: '2022-05-01T03:10:00.000Z', - activity: 'f-red-Maritime-Strike', - ownAssets: [ - { - asset: 'Red.10.105', - number: 2, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Red.12.109', - number: 4, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'MRBM', - number: 2 - }, - { - asset: 'Green.11.351', - missileType: 'MRBM', - number: 3 - }, - { - asset: 'Blue.11.50', - missileType: 'Standard Cruise', - number: 0 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_101', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-29T20:34:16.561Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-104', - title: 'Order item 108', - startDate: '2022-05-01T02:20:00.000Z', - endDate: '2022-05-01T04:40:00.000Z', - activity: 'f-red-Land-Patrol', - ownAssets: [ - { - asset: 'Red.7.56', - number: 1 - }, - { - asset: 'Red.6.399', - number: 2 - }, - { - asset: 'Red.10.105', - number: 2 - }, - { - asset: 'Red.7.226', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T02:20:00.000Z', - endDate: '2022-05-01T03:10:00.000Z', - force: 'f-red', - startTime: 1651371600000, - endTime: 1651374600000, - geomId: 'Patrol-0', - name: 'f-red//6.3493776430841535//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 67.6338, - 13.4044 - ], - [ - 53.78, - 21.23 - ], - [ - 39.15, - 29.28 - ], - [ - 24.8, - 36.61 - ], - [ - 25.216, - 36.5262 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T03:10:00.000Z', - endDate: '2022-05-01T04:40:00.000Z', - force: 'f-red', - startTime: 1651374600000, - endTime: 1651380000000, - geomId: 'Patrol-1', - name: 'f-red//12.698755286168307//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 21.688768059805213, - 39.208477169196904 - ], - [ - 21.688768059805213, - 33.74711769707752 - ], - [ - 28.502662187399547, - 33.74711769707752 - ], - [ - 28.502662187399547, - 39.208477169196904 - ], - [ - 21.688768059805213, - 39.208477169196904 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T04:40:00.000Z', - endDate: '2022-05-01T04:40:00.000Z', - force: 'f-red', - startTime: 1651380000000, - endTime: 1651380000000, - geomId: 'Patrol-2', - name: 'f-red//19.04813292925246//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 25.216, - 36.5262 - ], - [ - 67.51, - 13.06 - ], - [ - 67.6338, - 13.4044 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_104', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--EWAttack', - timestamp: '2022-09-23T19:24:06.733Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-107', - title: 'Order item 111', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - activity: 'f-blue-Maritime-EW Attack', - ownAssets: [ - { - asset: 'Blue.5.226', - number: 4 - }, - { - asset: 'Blue.10.109', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - force: 'f-blue', - startTime: 1651371900000, - endTime: 1651374900000, - geomId: 'EW Attack-0', - name: 'f-blue//4.432605614885688//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 52.9675, - 33.8959 - ], - [ - 42.88, - 29.88 - ], - [ - 32.94, - 25.02 - ], - [ - 22.29, - 20.44 - ], - [ - 22.5078, - 20.4081 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-05-01T03:15:00.000Z', - endDate: '2022-05-01T04:25:00.000Z', - force: 'f-blue', - startTime: 1651374900000, - endTime: 1651379100000, - geomId: 'EW Attack-1', - name: 'f-blue//8.865211229771376//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 19.184658054743238, - 23.426185317644453 - ], - [ - 19.184658054743238, - 17.329474205832557 - ], - [ - 25.701881905602335, - 17.329474205832557 - ], - [ - 25.701881905602335, - 23.426185317644453 - ], - [ - 19.184658054743238, - 23.426185317644453 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-05-01T04:25:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - force: 'f-blue', - startTime: 1651379100000, - endTime: 1651390500000, - geomId: 'EW Attack-2', - name: 'f-blue//13.297816844657063//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 22.5078, - 20.4081 - ], - [ - 32.99, - 25.21 - ], - [ - 42.58, - 29.12 - ], - [ - 53.46, - 34.31 - ], - [ - 52.9675, - 33.8959 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_107', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-22T07:57:57.695Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-110', - title: 'Order item 114', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.11.215', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - force: 'f-green', - startTime: 1651371900000, - endTime: 1651374900000, - geomId: 'Transit-0', - name: 'f-green//6.40925475617405//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 26.1757, - 29.9436 - ], - [ - 25.16, - 36.18 - ], - [ - 25.216, - 36.5262 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_110', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-25T10:15:49.447Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-113', - title: 'Order item 117', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T06:25:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.7.24', - number: 5 - }, - { - asset: 'Green.5.187', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T02:25:00.000Z', - endDate: '2022-05-01T03:15:00.000Z', - force: 'f-green', - startTime: 1651371900000, - endTime: 1651374900000, - geomId: 'Raid-0', - name: 'f-green//2.2793250663671643//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 7.4215, - 24.9094 - ], - [ - 23.05, - 40.44 - ], - [ - 38.85, - 55.13 - ], - [ - 53.93, - 70.11 - ], - [ - 53.9672, - 70.2835 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T03:15:00.000Z', - endDate: '2022-05-01T06:05:00.000Z', - force: 'f-green', - startTime: 1651374900000, - endTime: 1651385100000, - geomId: 'Raid-1', - name: 'f-green//4.5586501327343285//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 48.556987591572636, - 71.88838439584568 - ], - [ - 48.556987591572636, - 68.54043003287214 - ], - [ - 58.56251607072975, - 68.54043003287214 - ], - [ - 58.56251607072975, - 71.88838439584568 - ], - [ - 48.556987591572636, - 71.88838439584568 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T06:05:00.000Z', - endDate: '2022-05-01T06:25:00.000Z', - force: 'f-green', - startTime: 1651385100000, - endTime: 1651386300000, - geomId: 'Raid-2', - name: 'f-green//6.837975199101493//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 53.9672, - 70.2835 - ], - [ - 7.01, - 24.72 - ], - [ - 7.4215, - 24.9094 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_113', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-24T18:17:41.991Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-116', - title: 'Order item 120', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T07:00:00.000Z', - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'Blue.7.52', - number: 3 - }, - { - asset: 'Blue.8.155', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T03:30:00.000Z', - force: 'f-blue', - startTime: 1651372800000, - endTime: 1651375800000, - geomId: 'Patrol-0', - name: 'f-blue//2.0428165460471064//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 37.5437, - 36.2633 - ], - [ - 132.19, - 42.59 - ], - [ - 131.8716, - 42.3472 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T03:30:00.000Z', - endDate: '2022-05-01T05:50:00.000Z', - force: 'f-blue', - startTime: 1651375800000, - endTime: 1651384200000, - geomId: 'Patrol-1', - name: 'f-blue//4.085633092094213//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 126.4452632206987, - 45.993741262437304 - ], - [ - 126.4452632206987, - 38.47342464693466 - ], - [ - 136.68535773438134, - 38.47342464693466 - ], - [ - 136.68535773438134, - 45.993741262437304 - ], - [ - 126.4452632206987, - 45.993741262437304 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T05:50:00.000Z', - endDate: '2022-05-01T07:00:00.000Z', - force: 'f-blue', - startTime: 1651384200000, - endTime: 1651388400000, - geomId: 'Patrol-2', - name: 'f-blue//6.128449638141319//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 131.8716, - 42.3472 - ], - [ - 100.7, - 40.49 - ], - [ - 68.73, - 37.84 - ], - [ - 37.04, - 36.47 - ], - [ - 37.5437, - 36.2633 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_116', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-28T16:03:35.324Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-119', - title: 'Order item 123', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T03:30:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.7.300', - number: 5 - }, - { - asset: 'Green.10.342', - number: 5 - }, - { - asset: 'Green.5.98', - number: 4 - }, - { - asset: 'Green.10.367', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T03:30:00.000Z', - force: 'f-green', - startTime: 1651372800000, - endTime: 1651375800000, - geomId: 'Transit-0', - name: 'f-green//5.699729195213877//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 39.6806, - -0.6765 - ], - [ - 40.99, - 17.34 - ], - [ - 42.72, - 34.79 - ], - [ - 42.5642, - 35.0817 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_119', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-28T19:33:29.449Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-122', - title: 'Order item 126', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - activity: 'f-red-Maritime-Patrol', - ownAssets: [ - { - asset: 'Red.9.367', - number: 3 - }, - { - asset: 'Red.9.349', - number: 3 - }, - { - asset: 'Red.4.45', - number: 4 - }, - { - asset: 'Red.10.253', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T02:40:00.000Z', - endDate: '2022-05-01T03:30:00.000Z', - force: 'f-red', - startTime: 1651372800000, - endTime: 1651375800000, - geomId: 'Patrol-0', - name: 'f-red//3.250063013867475//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 120.4258, - -9.9971 - ], - [ - -7.14, - 25.5 - ], - [ - -7.3539, - 25.067 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T03:30:00.000Z', - endDate: '2022-05-01T03:50:00.000Z', - force: 'f-red', - startTime: 1651375800000, - endTime: 1651377000000, - geomId: 'Patrol-1', - name: 'f-red//6.50012602773495//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -11.419728729828329, - 28.58287215804598 - ], - [ - -11.419728729828329, - 21.44666947698239 - ], - [ - -3.5183390719781777, - 21.44666947698239 - ], - [ - -3.5183390719781777, - 28.58287215804598 - ], - [ - -11.419728729828329, - 28.58287215804598 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T03:50:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - force: 'f-red', - startTime: 1651377000000, - endTime: 1651381200000, - geomId: 'Patrol-2', - name: 'f-red//9.750189041602425//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -7.3539, - 25.067 - ], - [ - 120.37, - -10.2 - ], - [ - 120.4258, - -9.9971 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_122', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-25T04:47:24.363Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-125', - title: 'Order item 129', - startDate: '2022-05-01T02:55:00.000Z', - endDate: '2022-05-01T03:45:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.5.253', - number: 5 - }, - { - asset: 'Green.11.176', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T02:55:00.000Z', - endDate: '2022-05-01T03:45:00.000Z', - force: 'f-green', - startTime: 1651373700000, - endTime: 1651376700000, - geomId: 'Transit-0', - name: 'f-green//4.693818001425825//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.9466, - -5.35 - ], - [ - 50.16, - 7.48 - ], - [ - 105.6, - 20.65 - ], - [ - 105.205, - 21.0042 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_125', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Space--AreaEffects', - timestamp: '2022-09-26T03:45:20.069Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-128', - title: 'Order item 132', - startDate: '2022-05-01T03:10:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - activity: 'f-blue-Space-Area Activity', - ownAssets: [ - { - asset: 'Blue.9.360', - number: 0 - }, - { - asset: 'Blue.5.222', - number: 5 - }, - { - asset: 'Blue.9.197', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T03:10:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - force: 'f-blue', - startTime: 1651374600000, - endTime: 1651377600000, - geomId: 'Area Activity-0', - name: 'f-blue//5.030994158471003//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 119.32952961145035, - 39.308649522492935 - ], - [ - 119.32952961145035, - 38.31508506723307 - ], - [ - 120.60477596690791, - 38.31508506723307 - ], - [ - 120.60477596690791, - 39.308649522492935 - ], - [ - 119.32952961145035, - 39.308649522492935 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_128', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-22T02:18:19.789Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-131', - title: 'Order item 139', - startDate: '2022-05-01T03:10:00.000Z', - endDate: '2022-05-01T04:00:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.7.285', - number: 4, - missileType: 'Jet OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 2 - }, - { - asset: 'Red.5.351', - missileType: 'Low Obs Cruise', - number: 2 - }, - { - asset: 'Blue.11.50', - missileType: 'MRBM', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_131', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-25T02:53:13.851Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-134', - title: 'Order item 138', - startDate: '2022-05-01T03:15:00.000Z', - endDate: '2022-05-01T04:05:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.11.30', - number: 1 - }, - { - asset: 'Green.4.172', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T03:15:00.000Z', - endDate: '2022-05-01T04:05:00.000Z', - force: 'f-green', - startTime: 1651374900000, - endTime: 1651377900000, - geomId: 'Transit-0', - name: 'f-green//2.3856099798576906//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.1701, - 15.6274 - ], - [ - 29.18, - 62.47 - ], - [ - 28.7673, - 62.1983 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_134', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-23T03:03:11.928Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-137', - title: 'Order item 141', - startDate: '2022-05-01T03:35:00.000Z', - endDate: '2022-05-01T04:25:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.10.395', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T03:35:00.000Z', - endDate: '2022-05-01T04:25:00.000Z', - force: 'f-blue', - startTime: 1651376100000, - endTime: 1651379100000, - geomId: 'Transit-0', - name: 'f-blue//4.403049644781277//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 0.7937, - 46.7283 - ], - [ - 44.08, - 23.63 - ], - [ - 87.67, - -0.16 - ], - [ - 87.3514, - 0.0352 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_137', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-21T15:31:37.331Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-140', - title: 'Order item 149', - startDate: '2022-05-01T03:35:00.000Z', - endDate: '2022-05-01T04:55:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.8.179', - number: 2, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.9.200', - number: 5, - missileType: 'MRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 5 - }, - { - asset: 'Red.5.351', - missileType: 'Standard Cruise', - number: 5 - }, - { - asset: 'Blue.11.50', - missileType: 'Propellor OWA UAV', - number: 5 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_140', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-24T12:35:10.453Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-143', - title: 'Order item 147', - startDate: '2022-05-01T03:40:00.000Z', - endDate: '2022-05-01T07:20:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.5.182', - number: 0 - }, - { - asset: 'Green.2.143', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T03:40:00.000Z', - endDate: '2022-05-01T04:30:00.000Z', - force: 'f-green', - startTime: 1651376400000, - endTime: 1651379400000, - geomId: 'Patrol-0', - name: 'f-green//5.118192482506856//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 18.8238, - 23.9297 - ], - [ - -7.3, - 66.72 - ], - [ - -6.9159, - 66.9968 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T04:30:00.000Z', - endDate: '2022-05-01T05:00:00.000Z', - force: 'f-green', - startTime: 1651379400000, - endTime: 1651381200000, - geomId: 'Patrol-1', - name: 'f-green//10.236384965013713//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -15.300834733934716, - 69.70077915675301 - ], - [ - -15.300834733934716, - 63.94265108076771 - ], - [ - -0.3026644873221972, - 63.94265108076771 - ], - [ - -0.3026644873221972, - 69.70077915675301 - ], - [ - -15.300834733934716, - 69.70077915675301 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T05:00:00.000Z', - endDate: '2022-05-01T07:20:00.000Z', - force: 'f-green', - startTime: 1651381200000, - endTime: 1651389600000, - geomId: 'Patrol-2', - name: 'f-green//15.354577447520569//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -6.9159, - 66.9968 - ], - [ - -0.56, - 56.14 - ], - [ - 5.8, - 45.29 - ], - [ - 12.44, - 34.73 - ], - [ - 18.37, - 23.45 - ], - [ - 18.8238, - 23.9297 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_143', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-27T21:57:10.902Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-146', - title: 'Order item 150', - startDate: '2022-05-01T04:00:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.11.5', - number: 1 - }, - { - asset: 'Green.2.306', - number: 0 - }, - { - asset: 'Green.4.320', - number: 2 - }, - { - asset: 'Green.9.47', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T04:00:00.000Z', - endDate: '2022-05-01T04:50:00.000Z', - force: 'f-green', - startTime: 1651377600000, - endTime: 1651380600000, - geomId: 'Transit-0', - name: 'f-green//3.8158956558909267//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.9288, - 11.076 - ], - [ - 50.72, - 70.74 - ], - [ - 50.9972, - 70.7758 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_146', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-27T13:03:12.141Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-149', - title: 'Order item 153', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T06:25:00.000Z', - activity: 'f-blue-Maritime-Mine Laying', - ownAssets: [ - { - asset: 'Blue.7.47', - number: 1 - }, - { - asset: 'Blue.5.288', - number: 5 - }, - { - asset: 'Blue.7.242', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Mine Laying-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route out', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-blue', - startTime: 1651378500000, - endTime: 1651381500000, - geomId: 'Mine Laying-0', - name: 'f-blue//6.407019997015595//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 48.23, - 35.75 - ], - [ - 47.48, - 27.06 - ], - [ - 47, - 18.65 - ], - [ - 45.81, - 9.53 - ], - [ - 46.0988, - 9.8518 - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Mine Area', - startDate: '2022-05-01T05:05:00.000Z', - endDate: '2022-05-01T05:55:00.000Z', - force: 'f-blue', - startTime: 1651381500000, - endTime: 1651384500000, - geomId: 'Mine Laying-1', - name: 'f-blue//12.81403999403119//Mine Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 43.45935153441363, - 12.419275892256158 - ], - [ - 43.45935153441363, - 7.264147317852601 - ], - [ - 48.697313551872504, - 7.264147317852601 - ], - [ - 48.697313551872504, - 12.419275892256158 - ], - [ - 43.45935153441363, - 12.419275892256158 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Laying-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Laying//Route back', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T06:25:00.000Z', - force: 'f-blue', - startTime: 1651384500000, - endTime: 1651386300000, - geomId: 'Mine Laying-2', - name: 'f-blue//19.221059991046786//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 46.0988, - 9.8518 - ], - [ - 47.21, - 27.18 - ], - [ - 48.83, - 44.01 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_149', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--TST', - timestamp: '2022-09-23T09:53:14.170Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-152', - title: 'Order item 156', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T07:55:00.000Z', - activity: 'f-blue-Air-Time Sensitive Targeting (TST)', - ownAssets: [ - { - asset: 'Blue.10.309', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Time Sensitive Targeting (TST)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route out', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-blue', - startTime: 1651378500000, - endTime: 1651381500000, - geomId: 'Time Sensitive Targeting (TST)-0', - name: 'f-blue//2.891565509373322//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -2.1916, - 64.5367 - ], - [ - 2.01, - 1.42 - ], - [ - 1.6071, - 1.1691 - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//TST Area', - startDate: '2022-05-01T05:05:00.000Z', - endDate: '2022-05-01T05:45:00.000Z', - force: 'f-blue', - startTime: 1651381500000, - endTime: 1651383900000, - geomId: 'Time Sensitive Targeting (TST)-1', - name: 'f-blue//5.783131018746644//TST Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -2.277364895618787, - 5.0358664160573445 - ], - [ - -2.277364895618787, - -2.7030217278082596 - ], - [ - 5.480864323798855, - -2.7030217278082596 - ], - [ - 5.480864323798855, - 5.0358664160573445 - ], - [ - -2.277364895618787, - 5.0358664160573445 - ] - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route back', - startDate: '2022-05-01T05:45:00.000Z', - endDate: '2022-05-01T07:55:00.000Z', - force: 'f-blue', - startTime: 1651383900000, - endTime: 1651391700000, - geomId: 'Time Sensitive Targeting (TST)-2', - name: 'f-blue//8.674696528119966//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.6071, - 1.1691 - ], - [ - 0.2, - 22.09 - ], - [ - -1.11, - 43.11 - ], - [ - -2.14, - 64.42 - ], - [ - -2.1916, - 64.5367 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_152', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-23T20:27:16.990Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-155', - title: 'Order item 159', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - activity: 'f-blue-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Blue.1.391', - number: 2 - }, - { - asset: 'Blue.4.111', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-blue', - startTime: 1651378500000, - endTime: 1651381500000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-blue//3.269532189471647//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.5642, - 35.0817 - ], - [ - 66.2, - 29.65 - ], - [ - 90.87, - 24.25 - ], - [ - 114.82, - 18.13 - ], - [ - 138.05, - 12.29 - ], - [ - 138.5403, - 12.7479 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T05:05:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-blue', - startTime: 1651381500000, - endTime: 1651381500000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-blue//6.539064378943294//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 137.5827432340505, - 13.67658783586171 - ], - [ - 137.5827432340505, - 11.815793190256842 - ], - [ - 139.49084653908756, - 11.815793190256842 - ], - [ - 139.49084653908756, - 13.67658783586171 - ], - [ - 137.5827432340505, - 13.67658783586171 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T05:05:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - force: 'f-blue', - startTime: 1651381500000, - endTime: 1651392300000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-blue//9.808596568414941//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 138.5403, - 12.7479 - ], - [ - 114.84, - 18.1 - ], - [ - 91.03, - 24.35 - ], - [ - 66.51, - 29.88 - ], - [ - 42.27, - 34.69 - ], - [ - 42.5642, - 35.0817 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_155', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-28T20:45:20.601Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-158', - title: 'Order item 162', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.10.291', - number: 3 - }, - { - asset: 'Blue.1.352', - number: 1 - }, - { - asset: 'Blue.12.125', - number: 2 - }, - { - asset: 'Blue.2.12', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-blue', - startTime: 1651378500000, - endTime: 1651381500000, - geomId: 'Transit-0', - name: 'f-blue//2.540920039638877//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.6974, - 56.9915 - ], - [ - 127.83, - 55.22 - ], - [ - 127.6631, - 54.8626 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_158', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-21T18:47:25.002Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-161', - title: 'Order item 165', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T08:35:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.6.12', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T04:15:00.000Z', - endDate: '2022-05-01T05:05:00.000Z', - force: 'f-green', - startTime: 1651378500000, - endTime: 1651381500000, - geomId: 'Raid-0', - name: 'f-green//5.705729058710858//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 107.99, - 63.69 - ], - [ - 108.4613, - 63.4804 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T05:05:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - force: 'f-green', - startTime: 1651381500000, - endTime: 1651392300000, - geomId: 'Raid-1', - name: 'f-green//11.411458117421716//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 106.65698686677688, - 64.25304110689304 - ], - [ - 106.65698686677688, - 62.68626227912504 - ], - [ - 110.16938335109876, - 62.68626227912504 - ], - [ - 110.16938335109876, - 64.25304110689304 - ], - [ - 106.65698686677688, - 64.25304110689304 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T08:05:00.000Z', - endDate: '2022-05-01T08:35:00.000Z', - force: 'f-green', - startTime: 1651392300000, - endTime: 1651394100000, - geomId: 'Raid-2', - name: 'f-green//17.117187176132575//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 108.4613, - 63.4804 - ], - [ - 79.85, - 54.29 - ], - [ - 51.14, - 45 - ], - [ - 22.73, - 36 - ], - [ - -6.4, - 26.28 - ], - [ - -5.9347, - 26.5316 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_161', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-27T14:33:30.194Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-164', - title: 'Order item 168', - startDate: '2022-05-01T04:20:00.000Z', - endDate: '2022-05-01T05:10:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.11.351', - number: 1 - }, - { - asset: 'Green.9.291', - number: 1 - }, - { - asset: 'Green.2.344', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T04:20:00.000Z', - endDate: '2022-05-01T05:10:00.000Z', - force: 'f-green', - startTime: 1651378800000, - endTime: 1651381800000, - geomId: 'Transit-0', - name: 'f-green//2.7639592478517443//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.1369, - -1.056 - ], - [ - 52.59, - 13.96 - ], - [ - 51.25, - 29.17 - ], - [ - 49.19, - 44.67 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_164', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T16:03:36.176Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-167', - title: 'Order item 171', - startDate: '2022-05-01T04:40:00.000Z', - endDate: '2022-05-01T07:10:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.12.111', - number: 5 - }, - { - asset: 'Green.3.390', - number: 3 - }, - { - asset: 'Green.7.383', - number: 1 - }, - { - asset: 'Green.11.89', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T04:40:00.000Z', - endDate: '2022-05-01T05:30:00.000Z', - force: 'f-green', - startTime: 1651380000000, - endTime: 1651383000000, - geomId: 'Land Close Combat-0', - name: 'f-green//3.715610605897382//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 8.3372, - 11.3141 - ], - [ - 78.53, - 37.41 - ], - [ - 78.6237, - 37.8206 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T05:30:00.000Z', - endDate: '2022-05-01T05:30:00.000Z', - force: 'f-green', - startTime: 1651383000000, - endTime: 1651383000000, - geomId: 'Land Close Combat-1', - name: 'f-green//7.431221211794764//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 74.17536829531441, - 41.09176831373278 - ], - [ - 74.17536829531441, - 34.39657635759673 - ], - [ - 82.68595747722287, - 34.39657635759673 - ], - [ - 82.68595747722287, - 41.09176831373278 - ], - [ - 74.17536829531441, - 41.09176831373278 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T05:30:00.000Z', - endDate: '2022-05-01T07:10:00.000Z', - force: 'f-green', - startTime: 1651383000000, - endTime: 1651389000000, - geomId: 'Land Close Combat-2', - name: 'f-green//11.146831817692146//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 78.6237, - 37.8206 - ], - [ - 43.58, - 24.33 - ], - [ - 8.03, - 11.33 - ], - [ - 8.3372, - 11.3141 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_167', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-27T23:17:42.948Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-170', - title: 'Order item 174', - startDate: '2022-05-01T04:55:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - activity: 'f-blue-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Blue.8.89', - number: 4 - }, - { - asset: 'Blue.10.309', - number: 2 - }, - { - asset: 'Blue.4.241', - number: 1 - }, - { - asset: 'Blue.3.287', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T04:55:00.000Z', - endDate: '2022-05-01T05:45:00.000Z', - force: 'f-blue', - startTime: 1651380900000, - endTime: 1651383900000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-blue//3.560683132847771//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.1709, - 55.1302 - ], - [ - 11.58, - 39.92 - ], - [ - 27.22, - 23.61 - ], - [ - 42.15, - 8.59 - ], - [ - 57.37, - -7.14 - ], - [ - 57.4913, - -7.5691 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T05:45:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - force: 'f-blue', - startTime: 1651383900000, - endTime: 1651390500000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-blue//7.121366265695542//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 55.85735704569108, - -5.940881541256462 - ], - [ - 55.85735704569108, - -9.191188525842358 - ], - [ - 59.137607961380326, - -9.191188525842358 - ], - [ - 59.137607961380326, - -5.940881541256462 - ], - [ - 55.85735704569108, - -5.940881541256462 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T07:35:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - force: 'f-blue', - startTime: 1651390500000, - endTime: 1651397100000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-blue//10.682049398543313//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 57.4913, - -7.5691 - ], - [ - 26.93, - 23.81 - ], - [ - -3.1, - 54.72 - ], - [ - -3.1709, - 55.1302 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_170', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-22T12:15:50.511Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-173', - title: 'Order item 177', - startDate: '2022-05-01T04:55:00.000Z', - endDate: '2022-05-01T05:45:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.4.287', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T04:55:00.000Z', - endDate: '2022-05-01T05:45:00.000Z', - force: 'f-green', - startTime: 1651380900000, - endTime: 1651383900000, - geomId: 'Transit-0', - name: 'f-green//2.2991768287029117//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 51.4418, - 16.0894 - ], - [ - 121.62, - 11.88 - ], - [ - 121.379, - 11.7918 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_173', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-24T11:57:11.540Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-176', - title: 'Order item 182', - startDate: '2022-05-01T05:00:00.000Z', - endDate: '2022-05-01T08:10:00.000Z', - activity: 'f-green-Maritime-Strike', - ownAssets: [ - { - asset: 'Green.8.305', - number: 4, - missileType: 'Propellor OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Propellor OWA UAV', - number: 0 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_176', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-25T07:24:08.009Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-179', - title: 'Order item 183', - startDate: '2022-05-01T05:20:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'Blue.3.142', - number: 4 - }, - { - asset: 'Blue.3.181', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T05:20:00.000Z', - endDate: '2022-05-01T06:10:00.000Z', - force: 'f-blue', - startTime: 1651382400000, - endTime: 1651385400000, - geomId: 'Patrol-0', - name: 'f-blue//6.456427729455754//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 105.14, - 35.28 - ], - [ - 105.5324, - 35.3148 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T06:10:00.000Z', - endDate: '2022-05-01T07:40:00.000Z', - force: 'f-blue', - startTime: 1651385400000, - endTime: 1651390800000, - geomId: 'Patrol-1', - name: 'f-blue//12.912855458911508//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 102.0150646099647, - 38.03530498384311 - ], - [ - 102.0150646099647, - 32.499157602025655 - ], - [ - 108.81689441513687, - 32.499157602025655 - ], - [ - 108.81689441513687, - 38.03530498384311 - ], - [ - 102.0150646099647, - 38.03530498384311 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T07:40:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651390800000, - endTime: 1651398000000, - geomId: 'Patrol-2', - name: 'f-blue//19.369283188367262//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 105.5324, - 35.3148 - ], - [ - 53.3, - 48.22 - ], - [ - 1.44, - 60.49 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_179', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-25T05:34:17.944Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-182', - title: 'Order item 186', - startDate: '2022-05-01T05:20:00.000Z', - endDate: '2022-05-01T10:40:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.3.198', - number: 5 - }, - { - asset: 'Green.6.177', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T05:20:00.000Z', - endDate: '2022-05-01T06:10:00.000Z', - force: 'f-green', - startTime: 1651382400000, - endTime: 1651385400000, - geomId: 'Land Close Combat-0', - name: 'f-green//6.875184934353456//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.9288, - 11.076 - ], - [ - 49.08, - 58.67 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T06:10:00.000Z', - endDate: '2022-05-01T08:00:00.000Z', - force: 'f-green', - startTime: 1651385400000, - endTime: 1651392000000, - geomId: 'Land Close Combat-1', - name: 'f-green//13.750369868706912//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 42.77421906804612, - 61.11778235149371 - ], - [ - 42.77421906804612, - 55.28386478517149 - ], - [ - 53.98712756152333, - 55.28386478517149 - ], - [ - 53.98712756152333, - 61.11778235149371 - ], - [ - 42.77421906804612, - 61.11778235149371 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T08:00:00.000Z', - endDate: '2022-05-01T10:40:00.000Z', - force: 'f-green', - startTime: 1651392000000, - endTime: 1651401600000, - geomId: 'Land Close Combat-2', - name: 'f-green//20.625554803060368//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.8429, - 58.3229 - ], - [ - 55.94, - 11.46 - ], - [ - 55.9288, - 11.076 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_182', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-29T17:28:28.669Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-185', - title: 'Order item 189', - startDate: '2022-05-01T05:25:00.000Z', - endDate: '2022-05-01T06:15:00.000Z', - activity: 'f-red-Maritime-Sea Denial', - ownAssets: [ - { - asset: 'Red.4.74', - number: 1 - }, - { - asset: 'Red.5.393', - number: 3 - }, - { - asset: 'Red.12.25', - number: 1 - }, - { - asset: 'Red.6.170', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Sea Denial-0', - geometry: { - type: 'Feature', - properties: { - id: 'Sea Denial//Area', - startDate: '2022-05-01T05:25:00.000Z', - endDate: '2022-05-01T06:15:00.000Z', - force: 'f-red', - startTime: 1651382700000, - endTime: 1651385700000, - geomId: 'Sea Denial-0', - name: 'f-red//6.187363308155909//Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 46.75707187301669, - 45.74300575290844 - ], - [ - 46.75707187301669, - 42.823026934112335 - ], - [ - 50.84136149714533, - 42.823026934112335 - ], - [ - 50.84136149714533, - 45.74300575290844 - ], - [ - 46.75707187301669, - 45.74300575290844 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_185', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-23T07:23:14.968Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-188', - title: 'Order item 194', - startDate: '2022-05-01T05:40:00.000Z', - endDate: '2022-05-01T08:20:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.5.170', - number: 0, - missileType: 'MRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'SRBM', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_188', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'SOF--SOFActivity', - timestamp: '2022-09-27T10:28:52.492Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-191', - title: 'Order item 195', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T10:05:00.000Z', - activity: 'f-blue-SOF-Activity', - ownAssets: [ - { - asset: 'Blue.3.85', - number: 3 - }, - { - asset: 'Blue.3.283', - number: 4 - }, - { - asset: 'Blue.6.194', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route out', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T06:45:00.000Z', - force: 'f-blue', - startTime: 1651384500000, - endTime: 1651387500000, - geomId: 'Activity-0', - name: 'f-blue//6.491983563639224//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 53.9672, - 70.2835 - ], - [ - 58.74, - 60.21 - ], - [ - 64.35, - 50.99 - ], - [ - 69.25, - 41.05 - ], - [ - 74.43, - 31.39 - ], - [ - 74.9363, - 31.4807 - ] - ] - } - } - }, - { - uniqid: 'Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Effect Location', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - force: 'f-blue', - startTime: 1651387500000, - endTime: 1651397100000, - geomId: 'Activity-1', - name: 'f-blue//12.983967127278447//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 72.26571631334251, - 33.67581799359774 - ], - [ - 72.26571631334251, - 29.23271194957788 - ], - [ - 77.48299358824599, - 29.23271194957788 - ], - [ - 77.48299358824599, - 33.67581799359774 - ], - [ - 72.26571631334251, - 33.67581799359774 - ] - ] - ] - } - } - }, - { - uniqid: 'Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route back', - startDate: '2022-05-01T09:25:00.000Z', - endDate: '2022-05-01T10:05:00.000Z', - force: 'f-blue', - startTime: 1651397100000, - endTime: 1651399500000, - geomId: 'Activity-2', - name: 'f-blue//19.47595069091767//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 74.9363, - 31.4807 - ], - [ - 64.86, - 50.7 - ], - [ - 54.1, - 70.23 - ], - [ - 53.9672, - 70.2835 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_191', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-28T23:35:05.588Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-194', - title: 'Order item 198', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T09:15:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.4.219', - number: 0 - }, - { - asset: 'Green.3.357', - number: 0 - }, - { - asset: 'Green.8.208', - number: 5 - }, - { - asset: 'Green.8.173', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T06:45:00.000Z', - force: 'f-green', - startTime: 1651384500000, - endTime: 1651387500000, - geomId: 'Land Close Combat-0', - name: 'f-green//2.4844254453200847//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.602, - 14.8231 - ], - [ - 69.03, - 5.62 - ], - [ - 95.97, - -3.05 - ], - [ - 95.7368, - -3.5136 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T06:55:00.000Z', - force: 'f-green', - startTime: 1651387500000, - endTime: 1651388100000, - geomId: 'Land Close Combat-1', - name: 'f-green//4.968850890640169//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 93.40425611369577, - -1.1786386961742812 - ], - [ - 93.40425611369577, - -5.8427243032523695 - ], - [ - 98.08103496633956, - -5.8427243032523695 - ], - [ - 98.08103496633956, - -1.1786386961742812 - ], - [ - 93.40425611369577, - -1.1786386961742812 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T09:15:00.000Z', - force: 'f-green', - startTime: 1651388100000, - endTime: 1651396500000, - geomId: 'Land Close Combat-2', - name: 'f-green//7.453276335960254//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 95.7368, - -3.5136 - ], - [ - 77.56, - 2.63 - ], - [ - 60.52, - 8.91 - ], - [ - 42.77, - 14.48 - ], - [ - 42.602, - 14.8231 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_194', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-28T14:33:31.045Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-197', - title: 'Order item 206', - startDate: '2022-05-01T05:55:00.000Z', - endDate: '2022-05-01T08:25:00.000Z', - activity: 'f-green-Maritime-Strike', - ownAssets: [ - { - asset: 'Green.8.173', - number: 5, - missileType: 'Standard Cruise' - }, - { - asset: 'Green.8.251', - number: 0, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.10.42', - number: 0, - missileType: 'Standard Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Low Obs Cruise', - number: 1 - }, - { - asset: 'Red.5.351', - missileType: 'SRBM', - number: 0 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_197', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Space--Effects', - timestamp: '2022-09-29T02:59:34.154Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-200', - title: 'Order item 204', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - activity: 'f-blue-Space-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.5.346', - number: 3 - }, - { - asset: 'Blue.5.364', - number: 0 - }, - { - asset: 'Blue.7.95', - number: 5 - }, - { - asset: 'Blue.10.339', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_200', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--ISTAR', - timestamp: '2022-09-27T17:17:49.622Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-203', - title: 'Order item 207', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - activity: 'f-red-Air-ISTAR', - ownAssets: [ - { - asset: 'Red.11.339', - number: 3 - }, - { - asset: 'Red.9.297', - number: 3 - }, - { - asset: 'Red.9.367', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T07:05:00.000Z', - force: 'f-red', - startTime: 1651385700000, - endTime: 1651388700000, - geomId: 'ISTAR-0', - name: 'f-red//3.8222781061194837//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 85.43, - 35.71 - ], - [ - 49.93, - 31.65 - ], - [ - 15.72, - 27.88 - ], - [ - 15.3978, - 28.1651 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T07:05:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-red', - startTime: 1651388700000, - endTime: 1651391100000, - geomId: 'ISTAR-1', - name: 'f-red//7.644556212238967//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 13.985500619989399, - 29.388464367802786 - ], - [ - 13.985500619989399, - 26.927578607353848 - ], - [ - 16.777989286251756, - 26.927578607353848 - ], - [ - 16.777989286251756, - 29.388464367802786 - ], - [ - 13.985500619989399, - 29.388464367802786 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T07:05:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-red', - startTime: 1651388700000, - endTime: 1651391100000, - geomId: 'ISTAR-2', - name: 'f-red//11.466834318358451//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 11.08907909097054, - 31.762460114209563 - ], - [ - 11.08907909097054, - 24.44181097512945 - ], - [ - 19.42138064420347, - 24.44181097512945 - ], - [ - 19.42138064420347, - 31.762460114209563 - ], - [ - 11.08907909097054, - 31.762460114209563 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T07:45:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - force: 'f-red', - startTime: 1651391100000, - endTime: 1651397100000, - geomId: 'ISTAR-3', - name: 'f-red//15.289112424477935//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - 50.1, - 31.5 - ], - [ - 84.92, - 34.95 - ], - [ - 120.01, - 38.68 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_203', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--Effects', - timestamp: '2022-09-22T13:20:05.881Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-206', - title: 'Order item 210', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T06:15:00.000Z', - activity: 'f-red-Space-Targeted Activity', - ownAssets: [ - { - asset: 'Red.5.151', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_206', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-21T23:06:22.930Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-209', - title: 'Order item 213', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - activity: 'f-red-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Red.10.183', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T07:05:00.000Z', - force: 'f-red', - startTime: 1651385700000, - endTime: 1651388700000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-red//5.847952391952276//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 121.8897, - 52.7554 - ], - [ - 96.61, - 54.06 - ], - [ - 71.38, - 55.42 - ], - [ - 46.44, - 57.06 - ], - [ - 46.81, - 56.6791 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T07:05:00.000Z', - endDate: '2022-05-01T09:15:00.000Z', - force: 'f-red', - startTime: 1651388700000, - endTime: 1651396500000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-red//11.695904783904552//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 39.47138864526534, - 60.13068839692325 - ], - [ - 39.47138864526534, - 52.87054639522726 - ], - [ - 52.85951538955552, - 52.87054639522726 - ], - [ - 52.85951538955552, - 60.13068839692325 - ], - [ - 39.47138864526534, - 60.13068839692325 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T09:15:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - force: 'f-red', - startTime: 1651396500000, - endTime: 1651407900000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-red//17.54385717585683//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 46.81, - 56.6791 - ], - [ - 84.35, - 54.6 - ], - [ - 122.38, - 53 - ], - [ - 121.8897, - 52.7554 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_209', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-25T22:36:40.770Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-212', - title: 'Order item 216', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T12:15:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.10.34', - number: 5 - }, - { - asset: 'Green.3.211', - number: 3 - }, - { - asset: 'Green.5.101', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T06:15:00.000Z', - endDate: '2022-05-01T07:05:00.000Z', - force: 'f-green', - startTime: 1651385700000, - endTime: 1651388700000, - geomId: 'Patrol-0', - name: 'f-green//5.200921290554106//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 21.0702, - -8.9792 - ], - [ - 33.92, - 14.66 - ], - [ - 46.9, - 39.43 - ], - [ - 60.17, - 63.48 - ], - [ - 59.7126, - 63.0865 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T07:05:00.000Z', - endDate: '2022-05-01T10:15:00.000Z', - force: 'f-green', - startTime: 1651388700000, - endTime: 1651400100000, - geomId: 'Patrol-1', - name: 'f-green//10.401842581108212//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 53.84680699966578, - 65.41224796129593 - ], - [ - 53.84680699966578, - 60.55511986333981 - ], - [ - 64.67503616430912, - 60.55511986333981 - ], - [ - 64.67503616430912, - 65.41224796129593 - ], - [ - 53.84680699966578, - 65.41224796129593 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T10:15:00.000Z', - endDate: '2022-05-01T12:15:00.000Z', - force: 'f-green', - startTime: 1651400100000, - endTime: 1651407300000, - geomId: 'Patrol-2', - name: 'f-green//15.602763871662319//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 59.7126, - 63.0865 - ], - [ - 46.46, - 38.85 - ], - [ - 34.42, - 14.83 - ], - [ - 20.67, - -8.9 - ], - [ - 21.0702, - -8.9792 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_212', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-26T03:50:59.401Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-215', - title: 'Order item 219', - startDate: '2022-05-01T06:25:00.000Z', - endDate: '2022-05-01T08:25:00.000Z', - activity: 'f-red-Land-ISTAR', - ownAssets: [ - { - asset: 'Red.10.105', - number: 4 - }, - { - asset: 'Red.9.222', - number: 0 - }, - { - asset: 'Red.12.52', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T06:25:00.000Z', - endDate: '2022-05-01T07:15:00.000Z', - force: 'f-red', - startTime: 1651386300000, - endTime: 1651389300000, - geomId: 'ISTAR-0', - name: 'f-red//3.4473113557323813//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 86.494, - 73.4871 - ], - [ - -5.77, - 26.74 - ], - [ - -5.9347, - 26.5316 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T07:15:00.000Z', - endDate: '2022-05-01T07:55:00.000Z', - force: 'f-red', - startTime: 1651389300000, - endTime: 1651391700000, - geomId: 'ISTAR-1', - name: 'f-red//6.894622711464763//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -9.447923156749942, - 29.54560694277891 - ], - [ - -9.447923156749942, - 23.435961379182313 - ], - [ - -2.603730065119331, - 23.435961379182313 - ], - [ - -2.603730065119331, - 29.54560694277891 - ], - [ - -9.447923156749942, - 29.54560694277891 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T07:15:00.000Z', - endDate: '2022-05-01T07:55:00.000Z', - force: 'f-red', - startTime: 1651389300000, - endTime: 1651391700000, - geomId: 'ISTAR-2', - name: 'f-red//10.341934067197144//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -7.289589898072984, - 27.724580946636998 - ], - [ - -7.289589898072984, - 25.32607924904804 - ], - [ - -4.607836409439183, - 25.32607924904804 - ], - [ - -4.607836409439183, - 27.724580946636998 - ], - [ - -7.289589898072984, - 27.724580946636998 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T07:55:00.000Z', - endDate: '2022-05-01T08:25:00.000Z', - force: 'f-red', - startTime: 1651391700000, - endTime: 1651393500000, - geomId: 'ISTAR-3', - name: 'f-red//13.789245422929525//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 40.77, - 49.55 - ], - [ - 86.88, - 72.98 - ], - [ - 86.494, - 73.4871 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_215', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-22T14:49:18.822Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-218', - title: 'Order item 222', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T11:15:00.000Z', - activity: 'f-red-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Red.12.395', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - force: 'f-red', - startTime: 1651387500000, - endTime: 1651390500000, - geomId: 'Air to Air Refuel-0', - name: 'f-red//5.587122592143714//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 67.6338, - 13.4044 - ], - [ - 22.34, - 19.99 - ], - [ - 22.5078, - 20.4081 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T07:35:00.000Z', - endDate: '2022-05-01T10:05:00.000Z', - force: 'f-red', - startTime: 1651390500000, - endTime: 1651399500000, - geomId: 'Air to Air Refuel-1', - name: 'f-red//11.174245184287429//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 20.78907587004494, - 21.993376608880084 - ], - [ - 20.78907587004494, - 18.806319100821252 - ], - [ - 24.191314583374336, - 18.806319100821252 - ], - [ - 24.191314583374336, - 21.993376608880084 - ], - [ - 20.78907587004494, - 21.993376608880084 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T11:15:00.000Z', - force: 'f-red', - startTime: 1651399500000, - endTime: 1651403700000, - geomId: 'Air to Air Refuel-2', - name: 'f-red//16.761367776431143//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 22.5078, - 20.4081 - ], - [ - 67.77, - 13.7 - ], - [ - 67.6338, - 13.4044 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_218', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-23T15:31:39.034Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-221', - title: 'Order item 225', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.5.105', - number: 5 - }, - { - asset: 'Green.5.101', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T06:45:00.000Z', - endDate: '2022-05-01T07:35:00.000Z', - force: 'f-green', - startTime: 1651387500000, - endTime: 1651390500000, - geomId: 'Transit-0', - name: 'f-green//6.620354997459799//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 56.867, - -9.2024 - ], - [ - 48.52, - 44.39 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_221', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T05:58:00.036Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-224', - title: 'Order item 228', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - activity: 'f-blue-Land-Raid', - ownAssets: [ - { - asset: 'Blue.8.34', - number: 3 - }, - { - asset: 'Blue.8.370', - number: 3 - }, - { - asset: 'Blue.12.19', - number: 3 - }, - { - asset: 'Blue.2.182', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-blue', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Raid-0', - name: 'f-blue//6.547008571680635//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 87.49, - 39.3 - ], - [ - 126.6, - 33.77 - ], - [ - 126.3555, - 34.2659 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T07:45:00.000Z', - endDate: '2022-05-01T09:15:00.000Z', - force: 'f-blue', - startTime: 1651391100000, - endTime: 1651396500000, - geomId: 'Raid-1', - name: 'f-blue//13.09401714336127//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 122.79503999718224, - 37.056865930791446 - ], - [ - 122.79503999718224, - 31.378681826533676 - ], - [ - 129.68336946892722, - 31.378681826533676 - ], - [ - 129.68336946892722, - 37.056865930791446 - ], - [ - 122.79503999718224, - 37.056865930791446 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T09:15:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - force: 'f-blue', - startTime: 1651396500000, - endTime: 1651407900000, - geomId: 'Raid-2', - name: 'f-blue//19.641025715041906//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 126.3555, - 34.2659 - ], - [ - 100.54, - 37.27 - ], - [ - 74.81, - 41.36 - ], - [ - 48.36, - 44.73 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_224', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-22T18:08:21.828Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-227', - title: 'Order item 231', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T09:55:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.5.182', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-green', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Raid-0', - name: 'f-green//5.367083317134529//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 40.2458, - 23.6413 - ], - [ - 59.32, - 25.78 - ], - [ - 79.45, - 27.97 - ], - [ - 98.87, - 29.44 - ], - [ - 98.6918, - 29.604 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T07:45:00.000Z', - endDate: '2022-05-01T09:55:00.000Z', - force: 'f-green', - startTime: 1651391100000, - endTime: 1651398900000, - geomId: 'Raid-1', - name: 'f-green//10.734166634269059//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 96.37292811080977, - 31.559984723244963 - ], - [ - 96.37292811080977, - 27.609252265329243 - ], - [ - 100.92155846626387, - 27.609252265329243 - ], - [ - 100.92155846626387, - 31.559984723244963 - ], - [ - 96.37292811080977, - 31.559984723244963 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T09:55:00.000Z', - endDate: '2022-05-01T09:55:00.000Z', - force: 'f-green', - startTime: 1651398900000, - endTime: 1651398900000, - geomId: 'Raid-2', - name: 'f-green//16.101249951403588//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 98.6918, - 29.604 - ], - [ - 40.32, - 23.84 - ], - [ - 40.2458, - 23.6413 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_227', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-29T04:02:44.411Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-230', - title: 'Order item 234', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - activity: 'f-blue-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Blue.4.150', - number: 3 - }, - { - asset: 'Blue.3.366', - number: 4 - }, - { - asset: 'Blue.1.295', - number: 3 - }, - { - asset: 'Blue.8.338', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-blue', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Area Activity-0', - name: 'f-blue//3.0805792291648686//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 137.77707171821572, - -2.1739572817393835 - ], - [ - 137.77707171821572, - -3.786252069383474 - ], - [ - 139.39171112052085, - -3.786252069383474 - ], - [ - 139.39171112052085, - -2.1739572817393835 - ], - [ - 137.77707171821572, - -2.1739572817393835 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_230', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Resupply', - timestamp: '2022-09-23T11:41:07.785Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-233', - title: 'Order item 237', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - activity: 'f-red-Land-Resupply', - ownAssets: [ - { - asset: 'Red.9.338', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-red', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Resupply-0', - name: 'f-red//4.687496312428266//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 94.0415, - 18.5478 - ], - [ - -19.05, - 26.53 - ], - [ - -19.2994, - 26.4284 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T07:45:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - force: 'f-red', - startTime: 1651391100000, - endTime: 1651392300000, - geomId: 'Resupply-1', - name: 'f-red//9.374992624856532//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -22.454928555266196, - 29.150131906132497 - ], - [ - -22.454928555266196, - 23.64063314842286 - ], - [ - -16.291205764235897, - 23.64063314842286 - ], - [ - -16.291205764235897, - 29.150131906132497 - ], - [ - -22.454928555266196, - 29.150131906132497 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T08:05:00.000Z', - endDate: '2022-05-01T08:05:00.000Z', - force: 'f-red', - startTime: 1651392300000, - endTime: 1651392300000, - geomId: 'Resupply-2', - name: 'f-red//14.062488937284797//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -19.2994, - 26.4284 - ], - [ - 8.78, - 24.78 - ], - [ - 37.75, - 22.03 - ], - [ - 66.01, - 20.55 - ], - [ - 93.55, - 18.36 - ], - [ - 94.0415, - 18.5478 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_233', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-22T09:03:31.949Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-236', - title: 'Order item 240', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - activity: 'f-blue-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Blue.10.345', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-blue', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Area Activity-0', - name: 'f-blue//5.187834564596415//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 78.8641404787248, - 25.938483434639732 - ], - [ - 78.8641404787248, - 25.45061685820108 - ], - [ - 79.40555044516536, - 25.45061685820108 - ], - [ - 79.40555044516536, - 25.938483434639732 - ], - [ - 78.8641404787248, - 25.938483434639732 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_236', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-25T20:09:56.904Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-239', - title: 'Order item 243', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.4.171', - number: 5 - }, - { - asset: 'Blue.5.206', - number: 1 - }, - { - asset: 'Blue.12.355', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-blue', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Transit-0', - name: 'f-blue//4.581593985669315//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -9.2135, - 52.7768 - ], - [ - 55.74, - 23.52 - ], - [ - 120.06, - -5.36 - ], - [ - 120.5176, - -5.8065 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_239', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-25T13:00:22.649Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-242', - title: 'Order item 246', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T11:15:00.000Z', - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'Blue.2.217', - number: 3 - }, - { - asset: 'Blue.2.192', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-blue', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Patrol-0', - name: 'f-blue//2.8687745756469667//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 19.46, - 39.31 - ], - [ - 37.38, - 19.61 - ], - [ - 55.58, - -0.8 - ], - [ - 55.1369, - -1.056 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T07:45:00.000Z', - endDate: '2022-05-01T08:25:00.000Z', - force: 'f-blue', - startTime: 1651391100000, - endTime: 1651393500000, - geomId: 'Patrol-1', - name: 'f-blue//5.737549151293933//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 54.82276132154994, - -0.7418717846958829 - ], - [ - 54.82276132154994, - -1.3700964721694076 - ], - [ - 55.451102175026215, - -1.3700964721694076 - ], - [ - 55.451102175026215, - -0.7418717846958829 - ], - [ - 54.82276132154994, - -0.7418717846958829 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T08:25:00.000Z', - endDate: '2022-05-01T11:15:00.000Z', - force: 'f-blue', - startTime: 1651393500000, - endTime: 1651403700000, - geomId: 'Patrol-2', - name: 'f-blue//8.6063237269409//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.1369, - -1.056 - ], - [ - 28.26, - 29.65 - ], - [ - 1.87, - 59.83 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_242', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-29T19:34:49.185Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-245', - title: 'Order item 249', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.9.82', - number: 1 - }, - { - asset: 'Green.10.397', - number: 2 - }, - { - asset: 'Green.7.25', - number: 0 - }, - { - asset: 'Green.7.167', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T06:55:00.000Z', - endDate: '2022-05-01T07:45:00.000Z', - force: 'f-green', - startTime: 1651388100000, - endTime: 1651391100000, - geomId: 'Transit-0', - name: 'f-green//5.04937633452937//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 46.7913, - 16.2854 - ], - [ - 44.78, - 25.95 - ], - [ - 42.3, - 35.15 - ], - [ - 41.9827, - 34.8416 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_245', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-23T00:36:41.834Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-248', - title: 'Order item 254', - startDate: '2022-05-01T07:00:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-red-Maritime-Strike', - ownAssets: [ - { - asset: 'Red.10.167', - number: 5, - missileType: 'MRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'SRBM', - number: 2 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_248', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'SOF--SOFActivity', - timestamp: '2022-09-27T01:55:44.628Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-251', - title: 'Order item 255', - startDate: '2022-05-01T07:00:00.000Z', - endDate: '2022-05-01T12:40:00.000Z', - activity: 'f-red-SOF-Activity', - ownAssets: [ - { - asset: 'Red.11.71', - number: 3 - }, - { - asset: 'Red.4.266', - number: 0 - }, - { - asset: 'Red.9.174', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route out', - startDate: '2022-05-01T07:00:00.000Z', - endDate: '2022-05-01T07:50:00.000Z', - force: 'f-red', - startTime: 1651388400000, - endTime: 1651391400000, - geomId: 'Activity-0', - name: 'f-red//6.090843363665044//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 113.9883, - 46.1522 - ], - [ - 58.16, - 52.78 - ], - [ - 1.81, - 59.9 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - }, - { - uniqid: 'Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Effect Location', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T10:40:00.000Z', - force: 'f-red', - startTime: 1651391400000, - endTime: 1651401600000, - geomId: 'Activity-1', - name: 'f-red//12.181686727330089//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -6.471867167244487, - 63.63666203564891 - ], - [ - -6.471867167244487, - 56.400156307608036 - ], - [ - 8.33909621229244, - 56.400156307608036 - ], - [ - 8.33909621229244, - 63.63666203564891 - ], - [ - -6.471867167244487, - 63.63666203564891 - ] - ] - ] - } - } - }, - { - uniqid: 'Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route back', - startDate: '2022-05-01T10:40:00.000Z', - endDate: '2022-05-01T12:40:00.000Z', - force: 'f-red', - startTime: 1651401600000, - endTime: 1651408800000, - geomId: 'Activity-2', - name: 'f-red//18.272530090995133//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 39.36, - 55.07 - ], - [ - 77.02, - 50.98 - ], - [ - 113.97, - 46.17 - ], - [ - 113.9883, - 46.1522 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_251', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-28T09:42:13.535Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-254', - title: 'Order item 258', - startDate: '2022-05-01T07:10:00.000Z', - endDate: '2022-05-01T11:10:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.3.195', - number: 3 - }, - { - asset: 'Green.3.329', - number: 3 - }, - { - asset: 'Green.6.177', - number: 3 - }, - { - asset: 'Green.2.138', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T07:10:00.000Z', - endDate: '2022-05-01T08:00:00.000Z', - force: 'f-green', - startTime: 1651389000000, - endTime: 1651392000000, - geomId: 'Land Close Combat-0', - name: 'f-green//4.951708631590009//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 40.7997, - -4.7516 - ], - [ - 70.77, - 20.43 - ], - [ - 99.78, - 44.66 - ], - [ - 130.08, - 69.17 - ], - [ - 129.7639, - 69.4742 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T08:00:00.000Z', - endDate: '2022-05-01T10:20:00.000Z', - force: 'f-green', - startTime: 1651392000000, - endTime: 1651400400000, - geomId: 'Land Close Combat-1', - name: 'f-green//9.903417263180017//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 128.81503016181537, - 69.79929987496504 - ], - [ - 128.81503016181537, - 69.1440948423258 - ], - [ - 130.68422477126103, - 69.1440948423258 - ], - [ - 130.68422477126103, - 69.79929987496504 - ], - [ - 128.81503016181537, - 69.79929987496504 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T10:20:00.000Z', - endDate: '2022-05-01T11:10:00.000Z', - force: 'f-green', - startTime: 1651400400000, - endTime: 1651403400000, - geomId: 'Land Close Combat-2', - name: 'f-green//14.855125894770026//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 129.7639, - 69.4742 - ], - [ - 107.24, - 51.1 - ], - [ - 85.69, - 32.7 - ], - [ - 63.43, - 13.58 - ], - [ - 40.45, - -4.25 - ], - [ - 40.7997, - -4.7516 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_254', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Resupply', - timestamp: '2022-09-25T23:12:43.233Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-257', - title: 'Order item 261', - startDate: '2022-05-01T07:20:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - activity: 'f-red-Air-Resupply', - ownAssets: [ - { - asset: 'Red.2.138', - number: 2 - }, - { - asset: 'Red.4.212', - number: 5 - }, - { - asset: 'Red.8.400', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T07:20:00.000Z', - endDate: '2022-05-01T08:10:00.000Z', - force: 'f-red', - startTime: 1651389600000, - endTime: 1651392600000, - geomId: 'Resupply-0', - name: 'f-red//2.7059950684197247//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 115.7368, - 5.4858 - ], - [ - 54.93, - 15.94 - ], - [ - -6.42, - 26.83 - ], - [ - -5.9347, - 26.5316 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T08:10:00.000Z', - endDate: '2022-05-01T09:00:00.000Z', - force: 'f-red', - startTime: 1651392600000, - endTime: 1651395600000, - geomId: 'Resupply-1', - name: 'f-red//5.411990136839449//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -6.393568318933953, - 26.939940182816247 - ], - [ - -6.393568318933953, - 26.121801550459846 - ], - [ - -5.479091440934528, - 26.121801550459846 - ], - [ - -5.479091440934528, - 26.939940182816247 - ], - [ - -6.393568318933953, - 26.939940182816247 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-red', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Resupply-2', - name: 'f-red//8.117985205259174//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 24.67, - 21.28 - ], - [ - 55.11, - 15.85 - ], - [ - 84.82, - 10.7 - ], - [ - 115.82, - 5.84 - ], - [ - 115.7368, - 5.4858 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_257', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Cyber--AreaEffects', - timestamp: '2022-09-28T02:27:13.721Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-260', - title: 'Order item 264', - startDate: '2022-05-01T07:40:00.000Z', - endDate: '2022-05-01T08:30:00.000Z', - activity: 'f-red-Cyber-Area Activity', - ownAssets: [ - { - asset: 'Red.3.301', - number: 5 - }, - { - asset: 'Red.7.315', - number: 2 - }, - { - asset: 'Red.10.42', - number: 5 - }, - { - asset: 'Red.7.283', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T07:40:00.000Z', - endDate: '2022-05-01T08:30:00.000Z', - force: 'f-red', - startTime: 1651390800000, - endTime: 1651393800000, - geomId: 'Area Activity-0', - name: 'f-red//4.353702674154192//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -20.79830989419904, - 2.2684412661454165 - ], - [ - -20.79830989419904, - -1.4264796104405206 - ], - [ - -17.101366589948462, - -1.4264796104405206 - ], - [ - -17.101366589948462, - 2.2684412661454165 - ], - [ - -20.79830989419904, - 2.2684412661454165 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_260', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-26T11:25:45.000Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-263', - title: 'Order item 267', - startDate: '2022-05-01T07:40:00.000Z', - endDate: '2022-05-01T11:30:00.000Z', - activity: 'f-red-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Red.7.283', - number: 1 - }, - { - asset: 'Red.6.237', - number: 2 - }, - { - asset: 'Red.2.304', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T07:40:00.000Z', - endDate: '2022-05-01T08:30:00.000Z', - force: 'f-red', - startTime: 1651390800000, - endTime: 1651393800000, - geomId: 'Air to Air Refuel-0', - name: 'f-red//4.894831448793411//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 93.9537, - 70.2825 - ], - [ - 54.37, - 49.35 - ], - [ - 15.3, - 27.93 - ], - [ - 15.3978, - 28.1651 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T08:30:00.000Z', - endDate: '2022-05-01T10:20:00.000Z', - force: 'f-red', - startTime: 1651393800000, - endTime: 1651400400000, - geomId: 'Air to Air Refuel-1', - name: 'f-red//9.789662897586823//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 14.965381437586622, - 28.544279832403532 - ], - [ - 14.965381437586622, - 27.78457174666219 - ], - [ - 15.827159562998217, - 27.78457174666219 - ], - [ - 15.827159562998217, - 28.544279832403532 - ], - [ - 14.965381437586622, - 28.544279832403532 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T10:20:00.000Z', - endDate: '2022-05-01T11:30:00.000Z', - force: 'f-red', - startTime: 1651400400000, - endTime: 1651404600000, - geomId: 'Air to Air Refuel-2', - name: 'f-red//14.684494346380234//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - 93.97, - 70.68 - ], - [ - 93.9537, - 70.2825 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_263', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-29T10:08:17.070Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-266', - title: 'Order item 270', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - activity: 'f-blue-Air-Transit', - ownAssets: [ - { - asset: 'Blue.3.85', - number: 3 - }, - { - asset: 'Blue.5.378', - number: 0 - }, - { - asset: 'Blue.10.385', - number: 5 - }, - { - asset: 'Blue.9.106', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - force: 'f-blue', - startTime: 1651391400000, - endTime: 1651394400000, - geomId: 'Transit-0', - name: 'f-blue//4.329381394665688//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.4383, - 46.8539 - ], - [ - 35.27, - 39.8 - ], - [ - 22.24, - 31.87 - ], - [ - 9.49, - 25.23 - ], - [ - 9.897, - 24.971 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_266', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-28T14:34:49.930Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-269', - title: 'Order item 273', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T11:10:00.000Z', - activity: 'f-green-Maritime-Patrol', - ownAssets: [ - { - asset: 'Green.2.106', - number: 0 - }, - { - asset: 'Green.9.339', - number: 0 - }, - { - asset: 'Green.2.286', - number: 2 - }, - { - asset: 'Green.6.346', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - force: 'f-green', - startTime: 1651391400000, - endTime: 1651394400000, - geomId: 'Patrol-0', - name: 'f-green//2.657352509442717//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.602, - 14.8231 - ], - [ - 82.59, - 33.43 - ], - [ - 122, - 52.47 - ], - [ - 121.8897, - 52.7554 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T08:40:00.000Z', - endDate: '2022-05-01T09:20:00.000Z', - force: 'f-green', - startTime: 1651394400000, - endTime: 1651396800000, - geomId: 'Patrol-1', - name: 'f-green//5.314705018885434//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 121.00154711856004, - 53.28310255646289 - ], - [ - 121.00154711856004, - 52.22122382512431 - ], - [ - 122.75646307625114, - 52.22122382512431 - ], - [ - 122.75646307625114, - 53.28310255646289 - ], - [ - 121.00154711856004, - 53.28310255646289 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T09:20:00.000Z', - endDate: '2022-05-01T11:10:00.000Z', - force: 'f-green', - startTime: 1651396800000, - endTime: 1651403400000, - geomId: 'Patrol-2', - name: 'f-green//7.9720575283281505//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 121.8897, - 52.7554 - ], - [ - 95.07, - 40.21 - ], - [ - 69.33, - 27.74 - ], - [ - 42.86, - 14.54 - ], - [ - 42.602, - 14.8231 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_269', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-24T00:45:23.580Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-272', - title: 'Order item 276', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.6.346', - number: 3 - }, - { - asset: 'Green.6.120', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T07:50:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - force: 'f-green', - startTime: 1651391400000, - endTime: 1651394400000, - geomId: 'Transit-0', - name: 'f-green//4.8787447907961905//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 30.2082, - 2.9062 - ], - [ - 43.19, - 4.42 - ], - [ - 56.14, - 5.91 - ], - [ - 69.38, - 6.68 - ], - [ - 82.89, - 8.73 - ], - [ - 83.0339, - 8.428 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_272', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-24T00:39:58.021Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-275', - title: 'Order item 279', - startDate: '2022-05-01T08:10:00.000Z', - endDate: '2022-05-01T08:40:00.000Z', - activity: 'f-blue-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.1.6', - number: 3 - }, - { - asset: 'Blue.8.119', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_275', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-28T14:18:33.253Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-278', - title: 'Order item 282', - startDate: '2022-05-01T08:10:00.000Z', - endDate: '2022-05-01T11:50:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.2.286', - number: 3 - }, - { - asset: 'Green.9.339', - number: 3 - }, - { - asset: 'Green.5.105', - number: 4 - }, - { - asset: 'Green.6.385', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T08:10:00.000Z', - endDate: '2022-05-01T09:00:00.000Z', - force: 'f-green', - startTime: 1651392600000, - endTime: 1651395600000, - geomId: 'Raid-0', - name: 'f-green//6.001792867202312//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - 12.39, - 36.63 - ], - [ - 8.38, - 44.09 - ], - [ - 4.66, - 51.83 - ], - [ - 2.22, - 59.86 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-green', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Raid-1', - name: 'f-green//12.003585734404624//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 0.056931065690790573, - 61.03247525568635 - ], - [ - 0.056931065690790573, - 59.39341110813406 - ], - [ - 3.3600993456889507, - 59.39341110813406 - ], - [ - 3.3600993456889507, - 61.03247525568635 - ], - [ - 0.056931065690790573, - 61.03247525568635 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T11:50:00.000Z', - force: 'f-green', - startTime: 1651398600000, - endTime: 1651405800000, - geomId: 'Raid-2', - name: 'f-green//18.005378601606935//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 4.96, - 52.38 - ], - [ - 8.11, - 44.48 - ], - [ - 11.54, - 35.86 - ], - [ - 15.25, - 28.53 - ], - [ - 15.3978, - 28.1651 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_278', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T09:41:09.275Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-281', - title: 'Order item 285', - startDate: '2022-05-01T08:15:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - activity: 'f-green-Land-Raid', - ownAssets: [ - { - asset: 'Green.6.385', - number: 4 - }, - { - asset: 'Green.11.377', - number: 5 - }, - { - asset: 'Green.3.83', - number: 3 - }, - { - asset: 'Green.10.303', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T08:15:00.000Z', - endDate: '2022-05-01T09:05:00.000Z', - force: 'f-green', - startTime: 1651392900000, - endTime: 1651395900000, - geomId: 'Raid-0', - name: 'f-green//4.9034486575983465//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 9.8208, - -8.025 - ], - [ - 37.42, - -8.24 - ], - [ - 64.83, - -8.65 - ], - [ - 92.53, - -9.77 - ], - [ - 120.51, - -9.61 - ], - [ - 120.4258, - -9.9971 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T09:05:00.000Z', - endDate: '2022-05-01T09:05:00.000Z', - force: 'f-green', - startTime: 1651395900000, - endTime: 1651395900000, - geomId: 'Raid-1', - name: 'f-green//9.806897315196693//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 117.32587729815442, - -6.905215008306218 - ], - [ - 117.32587729815442, - -13.059769111694774 - ], - [ - 123.58500842858936, - -13.059769111694774 - ], - [ - 123.58500842858936, - -6.905215008306218 - ], - [ - 117.32587729815442, - -6.905215008306218 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T09:05:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - force: 'f-green', - startTime: 1651395900000, - endTime: 1651406100000, - geomId: 'Raid-2', - name: 'f-green//14.71034597279504//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 120.4258, - -9.9971 - ], - [ - 9.73, - -7.62 - ], - [ - 9.8208, - -8.025 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_281', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-26T10:47:46.087Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-284', - title: 'Order item 288', - startDate: '2022-05-01T08:35:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.10.303', - number: 3 - }, - { - asset: 'Green.7.236', - number: 4 - }, - { - asset: 'Green.2.282', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T08:35:00.000Z', - endDate: '2022-05-01T09:25:00.000Z', - force: 'f-green', - startTime: 1651394100000, - endTime: 1651397100000, - geomId: 'Transit-0', - name: 'f-green//2.698525619227439//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.325, - 14.4275 - ], - [ - 49.01, - 19.53 - ], - [ - 62.6, - 23.55 - ], - [ - 75.48, - 28.86 - ], - [ - 87.64, - 33.44 - ], - [ - 88.1337, - 33.6791 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_284', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-28T01:38:23.690Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-287', - title: 'Order item 291', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-red-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Red.4.41', - number: 3 - }, - { - asset: 'Red.5.313', - number: 0 - }, - { - asset: 'Red.7.299', - number: 5 - }, - { - asset: 'Red.1.398', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-red', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Area Activity-0', - name: 'f-red//4.387023749761283//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 38.66864826334663, - -2.619494736184851 - ], - [ - 38.66864826334663, - -6.877122256270372 - ], - [ - 42.94395849688092, - -6.877122256270372 - ], - [ - 42.94395849688092, - -2.619494736184851 - ], - [ - 38.66864826334663, - -2.619494736184851 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_287', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--EWAttack', - timestamp: '2022-09-25T22:13:02.084Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-290', - title: 'Order item 294', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T13:00:00.000Z', - activity: 'f-blue-Air-EW Attack', - ownAssets: [ - { - asset: 'Blue.7.398', - number: 3 - }, - { - asset: 'Blue.12.210', - number: 3 - }, - { - asset: 'Blue.12.136', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'EW Attack-0', - name: 'f-blue//4.968943049199879//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.6069, - 61.0041 - ], - [ - 32.15, - 51 - ], - [ - 28.77, - 40.06 - ], - [ - 25.67, - 30.42 - ], - [ - 26.1757, - 29.9436 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - force: 'f-blue', - startTime: 1651398000000, - endTime: 1651406400000, - geomId: 'EW Attack-1', - name: 'f-blue//9.937886098399758//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 24.681242139624427, - 31.213364526559033 - ], - [ - 24.681242139624427, - 28.657403067343882 - ], - [ - 27.632239800868284, - 28.657403067343882 - ], - [ - 27.632239800868284, - 31.213364526559033 - ], - [ - 24.681242139624427, - 31.213364526559033 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-05-01T12:00:00.000Z', - endDate: '2022-05-01T13:00:00.000Z', - force: 'f-blue', - startTime: 1651406400000, - endTime: 1651410000000, - geomId: 'EW Attack-2', - name: 'f-blue//14.906829147599638//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 26.1757, - 29.9436 - ], - [ - 30.07, - 45.57 - ], - [ - 34.5, - 60.74 - ], - [ - 34.6069, - 61.0041 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_290', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-28T08:31:41.268Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-293', - title: 'Order item 297', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-blue-Air-Transit', - ownAssets: [ - { - asset: 'Blue.11.175', - number: 5 - }, - { - asset: 'Blue.1.327', - number: 1 - }, - { - asset: 'Blue.2.192', - number: 5 - }, - { - asset: 'Blue.4.171', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Transit-0', - name: 'f-blue//4.44428351521492//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 50.1324, - 69.8033 - ], - [ - 18.62, - 48.28 - ], - [ - -12.39, - 26.24 - ], - [ - -12.5211, - 26.6354 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_293', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-27T00:34:21.243Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-296', - title: 'Order item 300', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T12:40:00.000Z', - activity: 'f-red-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Red.11.171', - number: 4 - }, - { - asset: 'Red.9.263', - number: 5 - }, - { - asset: 'Red.6.68', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-red', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Air to Air Refuel-0', - name: 'f-red//2.813045152463019//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 61.4549, - 56.7233 - ], - [ - 30, - 38.43 - ], - [ - -1.04, - 19.53 - ], - [ - -0.7267, - 19.325 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T12:20:00.000Z', - force: 'f-red', - startTime: 1651398000000, - endTime: 1651407600000, - geomId: 'Air to Air Refuel-1', - name: 'f-red//5.626090304926038//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -2.429048042842662, - 20.90741235214527 - ], - [ - -2.429048042842662, - 17.727097573469955 - ], - [ - 0.9428268094637161, - 17.727097573469955 - ], - [ - 0.9428268094637161, - 20.90741235214527 - ], - [ - -2.429048042842662, - 20.90741235214527 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T12:20:00.000Z', - endDate: '2022-05-01T12:40:00.000Z', - force: 'f-red', - startTime: 1651407600000, - endTime: 1651408800000, - geomId: 'Air to Air Refuel-2', - name: 'f-red//8.439135457389057//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -0.7267, - 19.325 - ], - [ - 61.53, - 56.93 - ], - [ - 61.4549, - 56.7233 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_296', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--AreaEffects', - timestamp: '2022-09-21T22:21:02.008Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-299', - title: 'Order item 303', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-blue-Cyber-Area Activity', - ownAssets: [ - { - asset: 'Blue.3.387', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Area Activity-0', - name: 'f-blue//5.075227960944176//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -12.992257344609609, - 20.6656219708998 - ], - [ - -12.992257344609609, - 19.92709781034912 - ], - [ - -12.204819610419799, - 19.92709781034912 - ], - [ - -12.204819610419799, - 20.6656219708998 - ], - [ - -12.992257344609609, - 20.6656219708998 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_299', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-29T17:51:43.564Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-302', - title: 'Order item 306', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T13:20:00.000Z', - activity: 'f-green-Maritime-Patrol', - ownAssets: [ - { - asset: 'Green.2.22', - number: 5 - }, - { - asset: 'Green.8.394', - number: 3 - }, - { - asset: 'Green.11.79', - number: 5 - }, - { - asset: 'Green.9.277', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-green', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Patrol-0', - name: 'f-green//6.230831936001778//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.004, - -1.9803 - ], - [ - 32.37, - 17.35 - ], - [ - 31.61, - 36.55 - ], - [ - 30.14, - 55.04 - ], - [ - 27.94, - 73.81 - ], - [ - 28.2963, - 74.1053 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T12:20:00.000Z', - force: 'f-green', - startTime: 1651398000000, - endTime: 1651407600000, - geomId: 'Patrol-1', - name: 'f-green//12.461663872003555//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 14.069574296428636, - 76.91226530968794 - ], - [ - 14.069574296428636, - 70.65523611334092 - ], - [ - 37.967890955998314, - 70.65523611334092 - ], - [ - 37.967890955998314, - 76.91226530968794 - ], - [ - 14.069574296428636, - 76.91226530968794 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T12:20:00.000Z', - endDate: '2022-05-01T13:20:00.000Z', - force: 'f-green', - startTime: 1651407600000, - endTime: 1651411200000, - geomId: 'Patrol-2', - name: 'f-green//18.692495808005333//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 28.2963, - 74.1053 - ], - [ - 30.94, - 36.15 - ], - [ - 34.07, - -2.31 - ], - [ - 34.004, - -1.9803 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_302', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-25T11:06:25.910Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-305', - title: 'Order item 309', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T15:20:00.000Z', - activity: 'f-blue-Land-ISTAR', - ownAssets: [ - { - asset: 'Blue.1.277', - number: 3 - }, - { - asset: 'Blue.11.188', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'ISTAR-0', - name: 'f-blue//6.2798570822924376//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -4.6979, - 69.349 - ], - [ - 33.83, - -2.41 - ], - [ - 34.004, - -1.9803 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - force: 'f-blue', - startTime: 1651398000000, - endTime: 1651409400000, - geomId: 'ISTAR-1', - name: 'f-blue//12.559714164584875//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 30.838024272115742, - 1.1880203057281502 - ], - [ - 30.838024272115742, - -5.1425570648036905 - ], - [ - 37.182100139092896, - -5.1425570648036905 - ], - [ - 37.182100139092896, - 1.1880203057281502 - ], - [ - 30.838024272115742, - 1.1880203057281502 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - force: 'f-blue', - startTime: 1651398000000, - endTime: 1651409400000, - geomId: 'ISTAR-2', - name: 'f-blue//18.839571246877313//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 30.229655537092636, - 1.7964881742271621 - ], - [ - 30.229655537092636, - -5.7484654385111105 - ], - [ - 37.795581396164785, - -5.7484654385111105 - ], - [ - 37.795581396164785, - 1.7964881742271621 - ], - [ - 30.229655537092636, - 1.7964881742271621 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T12:50:00.000Z', - endDate: '2022-05-01T15:20:00.000Z', - force: 'f-blue', - startTime: 1651409400000, - endTime: 1651418400000, - geomId: 'ISTAR-3', - name: 'f-blue//25.11942832916975//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.004, - -1.9803 - ], - [ - 24.58, - 15.8 - ], - [ - 14.97, - 33.41 - ], - [ - 4.65, - 51.31 - ], - [ - -4.37, - 69.48 - ], - [ - -4.6979, - 69.349 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_305', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'SOF--SOFActivity', - timestamp: '2022-09-25T18:05:09.046Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-308', - title: 'Order item 312', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T11:40:00.000Z', - activity: 'f-red-SOF-Activity', - ownAssets: [ - { - asset: 'Red.5.351', - number: 1 - }, - { - asset: 'Red.6.202', - number: 4 - }, - { - asset: 'Red.10.167', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-red', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Activity-0', - name: 'f-red//5.222303399816155//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 120.4258, - -9.9971 - ], - [ - 80.09, - 8.96 - ], - [ - 40.88, - 28.05 - ], - [ - 0.96, - 46.42 - ], - [ - 0.7937, - 46.7283 - ] - ] - } - } - }, - { - uniqid: 'Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Effect Location', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T10:10:00.000Z', - force: 'f-red', - startTime: 1651398000000, - endTime: 1651399800000, - geomId: 'Activity-1', - name: 'f-red//10.44460679963231//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -3.514885316740183, - 49.451040566804295 - ], - [ - -3.514885316740183, - 43.859653436512716 - ], - [ - 4.677685840728589, - 43.859653436512716 - ], - [ - 4.677685840728589, - 49.451040566804295 - ], - [ - -3.514885316740183, - 49.451040566804295 - ] - ] - ] - } - } - }, - { - uniqid: 'Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route back', - startDate: '2022-05-01T10:10:00.000Z', - endDate: '2022-05-01T11:40:00.000Z', - force: 'f-red', - startTime: 1651399800000, - endTime: 1651405200000, - geomId: 'Activity-2', - name: 'f-red//15.666910199448466//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 0.7937, - 46.7283 - ], - [ - 31.18, - 32.29 - ], - [ - 60.39, - 18.67 - ], - [ - 90.87, - 4.33 - ], - [ - 120.64, - -9.72 - ], - [ - 120.4258, - -9.9971 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_308', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-23T09:14:37.692Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-311', - title: 'Order item 318', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-blue-Maritime-Strike', - ownAssets: [ - { - asset: 'Blue.6.245', - number: 2, - missileType: 'Jet OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Red.8.78', - missileType: 'IRBM', - number: 3 - }, - { - asset: 'Green.11.351', - missileType: 'Low Obs Cruise', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_311', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-23T09:14:37.692Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-314', - title: 'Order item 318', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T14:30:00.000Z', - activity: 'f-blue-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Blue.9.358', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-blue', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Air to Air Refuel-0', - name: 'f-blue//4.787459539249539//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.7042, - 62.6482 - ], - [ - 88.96, - 3.5 - ], - [ - 89.2852, - 3.6407 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T11:30:00.000Z', - force: 'f-blue', - startTime: 1651398000000, - endTime: 1651404600000, - geomId: 'Air to Air Refuel-1', - name: 'f-blue//9.574919078499079//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 86.50035458657545, - 6.403880574157678 - ], - [ - 86.50035458657545, - 0.8689959096165449 - ], - [ - 92.0529740138367, - 0.8689959096165449 - ], - [ - 92.0529740138367, - 6.403880574157678 - ], - [ - 86.50035458657545, - 6.403880574157678 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T11:30:00.000Z', - endDate: '2022-05-01T14:30:00.000Z', - force: 'f-blue', - startTime: 1651404600000, - endTime: 1651415400000, - geomId: 'Air to Air Refuel-2', - name: 'f-blue//14.362378617748618//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 89.2852, - 3.6407 - ], - [ - 71.88, - 23.72 - ], - [ - 54.63, - 42.96 - ], - [ - 36.67, - 62.48 - ], - [ - 36.7042, - 62.6482 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_314', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-29T01:25:23.200Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-317', - title: 'Order item 321', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T10:10:00.000Z', - activity: 'f-red-Land-Patrol', - ownAssets: [ - { - asset: 'Red.2.290', - number: 1 - }, - { - asset: 'Red.3.361', - number: 2 - }, - { - asset: 'Red.3.145', - number: 3 - }, - { - asset: 'Red.10.42', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T08:50:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - force: 'f-red', - startTime: 1651395000000, - endTime: 1651398000000, - geomId: 'Patrol-0', - name: 'f-red//5.410169361159205//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 79.1354, - 25.6948 - ], - [ - 67.59, - 38.63 - ], - [ - 56.35, - 50.86 - ], - [ - 56.0324, - 51.0716 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T10:10:00.000Z', - force: 'f-red', - startTime: 1651398000000, - endTime: 1651399800000, - geomId: 'Patrol-1', - name: 'f-red//10.82033872231841//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 53.18367250675234, - 52.761659815245636 - ], - [ - 53.18367250675234, - 49.31724112781968 - ], - [ - 58.6767266527555, - 49.31724112781968 - ], - [ - 58.6767266527555, - 52.761659815245636 - ], - [ - 53.18367250675234, - 52.761659815245636 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T10:10:00.000Z', - endDate: '2022-05-01T10:10:00.000Z', - force: 'f-red', - startTime: 1651399800000, - endTime: 1651399800000, - geomId: 'Patrol-2', - name: 'f-red//16.230508083477616//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 56.0324, - 51.0716 - ], - [ - 79.52, - 25.71 - ], - [ - 79.1354, - 25.6948 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_317', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-22T15:20:09.499Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-320', - title: 'Order item 324', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.1.42', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-blue', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'Transit-0', - name: 'f-blue//4.9263003543019295//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -14.1439, - 56.886 - ], - [ - -9.8, - 49.55 - ], - [ - -5.6, - 42.08 - ], - [ - -1.11, - 33.88 - ], - [ - 3.64, - 26.98 - ], - [ - 3.5468, - 26.6941 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_320', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-29T02:58:56.588Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-323', - title: 'Order item 327', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.3.14', - number: 2 - }, - { - asset: 'Green.10.364', - number: 2 - }, - { - asset: 'Green.3.28', - number: 3 - }, - { - asset: 'Green.9.205', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-green', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'Transit-0', - name: 'f-green//3.3358525140210986//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.6461, - 0.9649 - ], - [ - 17.29, - 15.85 - ], - [ - 33.18, - 29.99 - ], - [ - 48.36, - 44.41 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_323', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-23T12:21:44.468Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-326', - title: 'Order item 330', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T13:25:00.000Z', - activity: 'f-blue-Land-Raid', - ownAssets: [ - { - asset: 'Blue.8.205', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Raid-0', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-blue', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'Raid-0', - name: 'f-blue//5.638825844973326//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -6.9159, - 66.9968 - ], - [ - 0.62, - 53.71 - ], - [ - 8.19, - 41.48 - ], - [ - 15.06, - 28.53 - ], - [ - 15.3978, - 28.1651 - ] - ] - } - } - }, - { - uniqid: 'Raid-1', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Raid Location', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T12:35:00.000Z', - force: 'f-blue', - startTime: 1651398300000, - endTime: 1651408500000, - geomId: 'Raid-1', - name: 'f-blue//11.277651689946651//Raid Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 12.285127133406553, - 30.80399768985434 - ], - [ - 12.285127133406553, - 25.459260138678765 - ], - [ - 18.358760248551995, - 25.459260138678765 - ], - [ - 18.358760248551995, - 30.80399768985434 - ], - [ - 12.285127133406553, - 30.80399768985434 - ] - ] - ] - } - } - }, - { - uniqid: 'Raid-2', - geometry: { - type: 'Feature', - properties: { - id: 'Raid//Route back', - startDate: '2022-05-01T12:35:00.000Z', - endDate: '2022-05-01T13:25:00.000Z', - force: 'f-blue', - startTime: 1651408500000, - endTime: 1651411500000, - geomId: 'Raid-2', - name: 'f-blue//16.916477534919977//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - -6.63, - 67.15 - ], - [ - -6.9159, - 66.9968 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_326', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--Effects', - timestamp: '2022-09-22T11:28:33.138Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-329', - title: 'Order item 333', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:55:00.000Z', - activity: 'f-red-Space-Targeted Activity', - ownAssets: [ - { - asset: 'Red.2.215', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_329', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-26T00:19:22.599Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-332', - title: 'Order item 336', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - activity: 'f-blue-Maritime-ASW Barrier', - ownAssets: [ - { - asset: 'Blue.5.45', - number: 3 - }, - { - asset: 'Blue.8.215', - number: 4 - }, - { - asset: 'Blue.3.98', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'ASW Barrier-0', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-blue', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'ASW Barrier-0', - name: 'f-blue//6.925036015920341//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 38.6562, - 38.2322 - ], - [ - 66.3, - 42.83 - ], - [ - 94.03, - 47.53 - ], - [ - 122.06, - 52.51 - ], - [ - 121.8897, - 52.7554 - ] - ] - } - } - }, - { - uniqid: 'ASW Barrier-1', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//ASW Area', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T12:55:00.000Z', - force: 'f-blue', - startTime: 1651398300000, - endTime: 1651409700000, - geomId: 'ASW Barrier-1', - name: 'f-blue//13.850072031840682//ASW Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 119.29094283882097, - 54.24610521413357 - ], - [ - 119.29094283882097, - 51.21170417188925 - ], - [ - 124.31353546069857, - 51.21170417188925 - ], - [ - 124.31353546069857, - 54.24610521413357 - ], - [ - 119.29094283882097, - 54.24610521413357 - ] - ] - ] - } - } - }, - { - uniqid: 'ASW Barrier-2', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//Route back', - startDate: '2022-05-01T12:55:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-blue', - startTime: 1651409700000, - endTime: 1651421100000, - geomId: 'ASW Barrier-2', - name: 'f-blue//20.775108047761023//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 121.8897, - 52.7554 - ], - [ - 38.37, - 38.18 - ], - [ - 38.6562, - 38.2322 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_332', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-25T18:54:12.851Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-335', - title: 'Order item 339', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'Blue.7.94', - number: 0 - }, - { - asset: 'Blue.5.204', - number: 0 - }, - { - asset: 'Blue.12.27', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-blue', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'Patrol-0', - name: 'f-blue//5.908272851258516//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.8429, - 58.3229 - ], - [ - 37.4, - 49.25 - ], - [ - 25.78, - 40 - ], - [ - 13.44, - 31.03 - ], - [ - 2.38, - 22.34 - ], - [ - 2.0734, - 22.1834 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T11:05:00.000Z', - force: 'f-blue', - startTime: 1651398300000, - endTime: 1651403100000, - geomId: 'Patrol-1', - name: 'f-blue//11.816545702517033//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 1.5127557994353769, - 22.6996602026953 - ], - [ - 1.5127557994353769, - 21.66523584369591 - ], - [ - 2.6299320265720385, - 21.66523584369591 - ], - [ - 2.6299320265720385, - 22.6996602026953 - ], - [ - 1.5127557994353769, - 22.6996602026953 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-blue', - startTime: 1651403100000, - endTime: 1651413900000, - geomId: 'Patrol-2', - name: 'f-blue//17.72481855377555//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.0734, - 22.1834 - ], - [ - 13.46, - 31.36 - ], - [ - 25.86, - 40.54 - ], - [ - 37.53, - 49.01 - ], - [ - 48.5, - 58.75 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_335', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-21T19:13:03.893Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-338', - title: 'Order item 342', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T12:35:00.000Z', - activity: 'f-red-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Red.3.363', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T08:55:00.000Z', - endDate: '2022-05-01T09:45:00.000Z', - force: 'f-red', - startTime: 1651395300000, - endTime: 1651398300000, - geomId: 'Air to Air Refuel-0', - name: 'f-red//3.7849308624863625//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 107.7928, - 13.7584 - ], - [ - 85.61, - 18.67 - ], - [ - 62.57, - 22.73 - ], - [ - 40.81, - 27.06 - ], - [ - 40.5023, - 27.5372 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - force: 'f-red', - startTime: 1651398300000, - endTime: 1651402500000, - geomId: 'Air to Air Refuel-1', - name: 'f-red//7.569861724972725//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 37.00028385747693, - 30.511135351684967 - ], - [ - 37.00028385747693, - 24.480197329434855 - ], - [ - 43.817192034679515, - 24.480197329434855 - ], - [ - 43.817192034679515, - 30.511135351684967 - ], - [ - 37.00028385747693, - 30.511135351684967 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T12:35:00.000Z', - force: 'f-red', - startTime: 1651402500000, - endTime: 1651408500000, - geomId: 'Air to Air Refuel-2', - name: 'f-red//11.354792587459087//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 40.5023, - 27.5372 - ], - [ - 107.8, - 14.22 - ], - [ - 107.7928, - 13.7584 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_338', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--AirToAir', - timestamp: '2022-09-22T09:15:55.725Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-341', - title: 'Order item 345', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T13:20:00.000Z', - activity: 'f-blue-Air-Air to Air Refuel', - ownAssets: [ - { - asset: 'Blue.3.51', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Air to Air Refuel-0', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route out', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-blue', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Air to Air Refuel-0', - name: 'f-blue//5.555010040290654//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 43.7766, - 46.2261 - ], - [ - 59.7, - 33.06 - ], - [ - 76.02, - 19.3 - ], - [ - 76.0625, - 19.3411 - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-1', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//AAR at this location', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T12:30:00.000Z', - force: 'f-blue', - startTime: 1651398600000, - endTime: 1651408200000, - geomId: 'Air to Air Refuel-1', - name: 'f-blue//11.110020080581307//AAR at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 73.81635202713558, - 21.418471595572534 - ], - [ - 73.81635202713558, - 17.236908467817663 - ], - [ - 78.25182575248209, - 17.236908467817663 - ], - [ - 78.25182575248209, - 21.418471595572534 - ], - [ - 73.81635202713558, - 21.418471595572534 - ] - ] - ] - } - } - }, - { - uniqid: 'Air to Air Refuel-2', - geometry: { - type: 'Feature', - properties: { - id: 'Air to Air Refuel//Route back', - startDate: '2022-05-01T12:30:00.000Z', - endDate: '2022-05-01T13:20:00.000Z', - force: 'f-blue', - startTime: 1651408200000, - endTime: 1651411200000, - geomId: 'Air to Air Refuel-2', - name: 'f-blue//16.66503012087196//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 76.0625, - 19.3411 - ], - [ - 43.58, - 46.1 - ], - [ - 43.7766, - 46.2261 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_341', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-27T13:02:48.348Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-344', - title: 'Order item 348', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T12:20:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.6.359', - number: 5 - }, - { - asset: 'Green.6.288', - number: 1 - }, - { - asset: 'Green.8.330', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-green', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Land Close Combat-0', - name: 'f-green//6.21851038467139//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -15.2784, - 24.2773 - ], - [ - -1.04, - 27.02 - ], - [ - 13.21, - 29.78 - ], - [ - 27.74, - 32.83 - ], - [ - 42.56, - 35.15 - ], - [ - 42.5642, - 35.0817 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-green', - startTime: 1651398600000, - endTime: 1651398600000, - geomId: 'Land Close Combat-1', - name: 'f-green//12.43702076934278//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 41.643843797268374, - 35.82448157366349 - ], - [ - 41.643843797268374, - 34.33209099021314 - ], - [ - 43.467871759500056, - 34.33209099021314 - ], - [ - 43.467871759500056, - 35.82448157366349 - ], - [ - 41.643843797268374, - 35.82448157366349 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T12:20:00.000Z', - force: 'f-green', - startTime: 1651398600000, - endTime: 1651407600000, - geomId: 'Land Close Combat-2', - name: 'f-green//18.65553115401417//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.5642, - 35.0817 - ], - [ - 27.87, - 32.63 - ], - [ - 14.08, - 30.1 - ], - [ - -0.4, - 26.86 - ], - [ - -15.62, - 23.89 - ], - [ - -15.2784, - 24.2773 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_344', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-28T22:33:41.762Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-347', - title: 'Order item 351', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - activity: 'f-blue-Land-Patrol', - ownAssets: [ - { - asset: 'Blue.12.86', - number: 2 - }, - { - asset: 'Blue.12.355', - number: 2 - }, - { - asset: 'Blue.12.337', - number: 3 - }, - { - asset: 'Blue.9.33', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-blue', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Patrol-0', - name: 'f-blue//5.775431900285184//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.0723, - 37.7242 - ], - [ - 10.63, - 25.99 - ], - [ - 6.36, - 13.43 - ], - [ - 1.38, - 1.15 - ], - [ - 1.6071, - 1.1691 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T10:30:00.000Z', - force: 'f-blue', - startTime: 1651398600000, - endTime: 1651401000000, - geomId: 'Patrol-1', - name: 'f-blue//11.550863800570369//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -1.2554266176585005, - 4.023110144308207 - ], - [ - -1.2554266176585005, - -1.6878209366020873 - ], - [ - 4.46380744933699, - -1.6878209366020873 - ], - [ - 4.46380744933699, - 4.023110144308207 - ], - [ - -1.2554266176585005, - 4.023110144308207 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T10:30:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - force: 'f-blue', - startTime: 1651401000000, - endTime: 1651409400000, - geomId: 'Patrol-2', - name: 'f-blue//17.326295700855553//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.6071, - 1.1691 - ], - [ - 8.27, - 19.54 - ], - [ - 15.34, - 37.33 - ], - [ - 15.0723, - 37.7242 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_347', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-26T13:48:35.966Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-350', - title: 'Order item 354', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T11:50:00.000Z', - activity: 'f-red-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Red.4.33', - number: 2 - }, - { - asset: 'Red.3.242', - number: 3 - }, - { - asset: 'Red.1.164', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-red', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-red//4.225774587132037//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 91.1207, - 69.9759 - ], - [ - 27.68, - 4.6 - ], - [ - 28.057, - 4.6146 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T11:40:00.000Z', - force: 'f-red', - startTime: 1651398600000, - endTime: 1651405200000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-red//8.451549174264073//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 27.13720632702431, - 5.529521938366145 - ], - [ - 27.13720632702431, - 3.6984970322674515 - ], - [ - 28.974424086768636, - 3.6984970322674515 - ], - [ - 28.974424086768636, - 5.529521938366145 - ], - [ - 27.13720632702431, - 5.529521938366145 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T11:40:00.000Z', - endDate: '2022-05-01T11:50:00.000Z', - force: 'f-red', - startTime: 1651405200000, - endTime: 1651405800000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-red//12.67732376139611//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 28.057, - 4.6146 - ], - [ - 60.05, - 37.65 - ], - [ - 91.56, - 70.21 - ], - [ - 91.1207, - 69.9759 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_350', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Space--Effects', - timestamp: '2022-09-28T18:47:30.961Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-353', - title: 'Order item 357', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:40:00.000Z', - activity: 'f-blue-Space-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.8.199', - number: 3 - }, - { - asset: 'Blue.10.348', - number: 1 - }, - { - asset: 'Blue.10.209', - number: 3 - }, - { - asset: 'Blue.12.185', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_353', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--ISTAR', - timestamp: '2022-09-27T05:30:26.746Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-356', - title: 'Order item 360', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T13:40:00.000Z', - activity: 'f-blue-Air-ISTAR', - ownAssets: [ - { - asset: 'Blue.12.185', - number: 4 - }, - { - asset: 'Blue.3.273', - number: 0 - }, - { - asset: 'Blue.2.75', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-blue', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'ISTAR-0', - name: 'f-blue//2.8067234652116895//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 46.1576, - 64.9645 - ], - [ - 46.15, - 45.9 - ], - [ - 47.32, - 27 - ], - [ - 47.77, - 7.39 - ], - [ - 47.5333, - 7.8478 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T11:40:00.000Z', - force: 'f-blue', - startTime: 1651398600000, - endTime: 1651405200000, - geomId: 'ISTAR-1', - name: 'f-blue//5.613446930423379//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 44.67782988254114, - 10.644535854652824 - ], - [ - 44.67782988254114, - 5.032076650933155 - ], - [ - 50.350460457711854, - 5.032076650933155 - ], - [ - 50.350460457711854, - 10.644535854652824 - ], - [ - 44.67782988254114, - 10.644535854652824 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T09:50:00.000Z', - endDate: '2022-05-01T11:40:00.000Z', - force: 'f-blue', - startTime: 1651398600000, - endTime: 1651405200000, - geomId: 'ISTAR-2', - name: 'f-blue//8.420170395635068//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 45.93676327364825, - 9.419805826586236 - ], - [ - 45.93676327364825, - 6.269822461009986 - ], - [ - 49.117782794218066, - 6.269822461009986 - ], - [ - 49.117782794218066, - 9.419805826586236 - ], - [ - 45.93676327364825, - 9.419805826586236 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T11:40:00.000Z', - endDate: '2022-05-01T13:40:00.000Z', - force: 'f-blue', - startTime: 1651405200000, - endTime: 1651412400000, - geomId: 'ISTAR-3', - name: 'f-blue//11.226893860846758//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.5333, - 7.8478 - ], - [ - 47.12, - 36.29 - ], - [ - 46.05, - 65.08 - ], - [ - 46.1576, - 64.9645 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_356', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Space--AreaEffects', - timestamp: '2022-09-21T21:57:23.321Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-359', - title: 'Order item 363', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - activity: 'f-red-Space-Area Activity', - ownAssets: [ - { - asset: 'Red.7.390', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T09:50:00.000Z', - force: 'f-red', - startTime: 1651395600000, - endTime: 1651398600000, - geomId: 'Area Activity-0', - name: 'f-red//2.937329661101103//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 47.39572399850211, - 18.95882883175932 - ], - [ - 47.39572399850211, - 15.047924321978556 - ], - [ - 51.488526670849396, - 15.047924321978556 - ], - [ - 51.488526670849396, - 18.95882883175932 - ], - [ - 47.39572399850211, - 18.95882883175932 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_359', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-24T06:11:44.283Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-362', - title: 'Order item 373', - startDate: '2022-05-01T09:00:00.000Z', - endDate: '2022-05-01T11:00:00.000Z', - activity: 'f-green-Maritime-Strike', - ownAssets: [ - { - asset: 'Green.3.14', - number: 0, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.4.382', - number: 3, - missileType: 'SRBM' - }, - { - asset: 'Green.10.64', - number: 0, - missileType: 'IRBM' - }, - { - asset: 'Green.1.258', - number: 3, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'MRBM', - number: 3 - }, - { - asset: 'Red.5.351', - missileType: 'Low Obs Cruise', - number: 1 - }, - { - asset: 'Blue.11.50', - missileType: 'IRBM', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_362', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-25T00:03:18.844Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-365', - title: 'Order item 369', - startDate: '2022-05-01T09:05:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.1.258', - number: 5 - }, - { - asset: 'Green.8.166', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T09:05:00.000Z', - endDate: '2022-05-01T09:55:00.000Z', - force: 'f-green', - startTime: 1651395900000, - endTime: 1651398900000, - geomId: 'Land Close Combat-0', - name: 'f-green//4.878805552609265//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 3.3413, - 2.9433 - ], - [ - 19.92, - 19.53 - ], - [ - 36.36, - 35.98 - ], - [ - 53.08, - 51.71 - ], - [ - 70.09, - 67.73 - ], - [ - 70.2592, - 68.1903 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T09:55:00.000Z', - endDate: '2022-05-01T12:05:00.000Z', - force: 'f-green', - startTime: 1651398900000, - endTime: 1651406700000, - geomId: 'Land Close Combat-1', - name: 'f-green//9.75761110521853//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 63.676486898339896, - 70.28791009608477 - ], - [ - 63.676486898339896, - 65.8767272754372 - ], - [ - 75.68797284424065, - 65.8767272754372 - ], - [ - 75.68797284424065, - 70.28791009608477 - ], - [ - 63.676486898339896, - 70.28791009608477 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T12:05:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-green', - startTime: 1651406700000, - endTime: 1651413900000, - geomId: 'Land Close Combat-2', - name: 'f-green//14.636416657827795//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 70.2592, - 68.1903 - ], - [ - 3.3, - 3.43 - ], - [ - 3.3413, - 2.9433 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_365', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-25T01:42:17.791Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-368', - title: 'Order item 372', - startDate: '2022-05-01T09:25:00.000Z', - endDate: '2022-05-01T10:15:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.6.322', - number: 1 - }, - { - asset: 'Green.8.169', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T09:25:00.000Z', - endDate: '2022-05-01T10:15:00.000Z', - force: 'f-green', - startTime: 1651397100000, - endTime: 1651400100000, - geomId: 'Transit-0', - name: 'f-green//6.689675252884626//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 17.96, - 32.21 - ], - [ - 42.32, - 37.37 - ], - [ - 42.0758, - 37.8488 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_368', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--Resupply', - timestamp: '2022-09-29T17:05:17.529Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-371', - title: 'Order item 375', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - activity: 'f-blue-Maritime-Resupply', - ownAssets: [ - { - asset: 'Blue.8.205', - number: 1 - }, - { - asset: 'Blue.9.392', - number: 4 - }, - { - asset: 'Blue.4.293', - number: 3 - }, - { - asset: 'Blue.3.307', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T10:30:00.000Z', - force: 'f-blue', - startTime: 1651398000000, - endTime: 1651401000000, - geomId: 'Resupply-0', - name: 'f-blue//2.393966124393046//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 45.0923, - 59.4373 - ], - [ - 68, - 50.8 - ], - [ - 91.14, - 41.39 - ], - [ - 113.56, - 32.27 - ], - [ - 113.8022, - 32.3971 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T10:30:00.000Z', - endDate: '2022-05-01T11:50:00.000Z', - force: 'f-blue', - startTime: 1651401000000, - endTime: 1651405800000, - geomId: 'Resupply-1', - name: 'f-blue//4.787932248786092//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 109.03725331197926, - 36.156938378069015 - ], - [ - 109.03725331197926, - 28.472567988096216 - ], - [ - 118.17801673626421, - 28.472567988096216 - ], - [ - 118.17801673626421, - 36.156938378069015 - ], - [ - 109.03725331197926, - 36.156938378069015 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T11:50:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-blue', - startTime: 1651405800000, - endTime: 1651413000000, - geomId: 'Resupply-2', - name: 'f-blue//7.181898373179138//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 113.8022, - 32.3971 - ], - [ - 91.26, - 41.49 - ], - [ - 67.92, - 50.78 - ], - [ - 44.87, - 59.36 - ], - [ - 45.0923, - 59.4373 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_371', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-27T17:03:19.376Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-374', - title: 'Order item 381', - startDate: '2022-05-01T09:40:00.000Z', - endDate: '2022-05-01T11:30:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.2.307', - number: 4, - missileType: 'Standard Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Propellor OWA UAV', - number: 3 - }, - { - asset: 'Red.5.351', - missileType: 'Propellor OWA UAV', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_374', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-27T17:03:19.376Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-377', - title: 'Order item 381', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T10:35:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.1.229', - number: 1 - }, - { - asset: 'Green.5.296', - number: 4 - }, - { - asset: 'Green.6.77', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T09:45:00.000Z', - endDate: '2022-05-01T10:35:00.000Z', - force: 'f-green', - startTime: 1651398300000, - endTime: 1651401300000, - geomId: 'Transit-0', - name: 'f-green//5.482811371795833//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.0734, - 22.1834 - ], - [ - 10.26, - 62.96 - ], - [ - 10.3398, - 63.3434 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_377', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 2', - roleId: 'blue-mtg-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-29T09:38:21.485Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-380', - title: 'Order item 384', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T13:45:00.000Z', - activity: 'f-blue-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Blue.8.370', - number: 3 - }, - { - asset: 'Blue.8.377', - number: 0 - }, - { - asset: 'Blue.3.98', - number: 3 - }, - { - asset: 'Blue.4.331', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - force: 'f-blue', - startTime: 1651399500000, - endTime: 1651402500000, - geomId: 'Land Close Combat-0', - name: 'f-blue//2.8673657523468137//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 7.3497, - 33.1036 - ], - [ - 3.58, - 25.76 - ], - [ - -0.67, - 18.94 - ], - [ - -0.7267, - 19.325 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:25:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651404300000, - geomId: 'Land Close Combat-1', - name: 'f-blue//5.734731504693627//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -4.1197268934287665, - 22.430290000956944 - ], - [ - -4.1197268934287665, - 16.159332255007897 - ], - [ - 2.5384929969968058, - 16.159332255007897 - ], - [ - 2.5384929969968058, - 22.430290000956944 - ], - [ - -4.1197268934287665, - 22.430290000956944 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T13:45:00.000Z', - force: 'f-blue', - startTime: 1651404300000, - endTime: 1651412700000, - geomId: 'Land Close Combat-2', - name: 'f-blue//8.602097257040441//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -0.7267, - 19.325 - ], - [ - 2.13, - 23.45 - ], - [ - 5.06, - 28.66 - ], - [ - 7.28, - 33.14 - ], - [ - 7.3497, - 33.1036 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_380', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-27T07:57:24.385Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-383', - title: 'Order item 387', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-red-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Red.10.331', - number: 5 - }, - { - asset: 'Red.8.278', - number: 5 - }, - { - asset: 'Red.9.338', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - force: 'f-red', - startTime: 1651399500000, - endTime: 1651402500000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-red//4.145341299474239//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.1574, - 46.4901 - ], - [ - 82.71, - 40.33 - ], - [ - 56.06, - 33.98 - ], - [ - 28.7, - 27.91 - ], - [ - 1.62, - 22.12 - ], - [ - 2.0734, - 22.1834 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T12:15:00.000Z', - force: 'f-red', - startTime: 1651402500000, - endTime: 1651407300000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-red//8.290682598948479//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -1.8285397918152126, - 25.65488209343755 - ], - [ - -1.8285397918152126, - 18.62355501607119 - ], - [ - 5.7847575597577325, - 18.62355501607119 - ], - [ - 5.7847575597577325, - 25.65488209343755 - ], - [ - -1.8285397918152126, - 25.65488209343755 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T12:15:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-red', - startTime: 1651407300000, - endTime: 1651413900000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-red//12.436023898422718//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.0734, - 22.1834 - ], - [ - 109.43, - 46.64 - ], - [ - 109.1574, - 46.4901 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_383', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-29T20:00:28.076Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-386', - title: 'Order item 390', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - activity: 'f-red-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Red.5.111', - number: 3 - }, - { - asset: 'Red.1.398', - number: 4 - }, - { - asset: 'Red.10.331', - number: 4 - }, - { - asset: 'Red.8.278', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - force: 'f-red', - startTime: 1651399500000, - endTime: 1651402500000, - geomId: 'Area Activity-0', - name: 'f-red//4.316738017834723//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -9.720464451964325, - 27.154166525781278 - ], - [ - -9.720464451964325, - 22.943587410062566 - ], - [ - -5.067320636237322, - 22.943587410062566 - ], - [ - -5.067320636237322, - 27.154166525781278 - ], - [ - -9.720464451964325, - 27.154166525781278 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_386', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--MissileStrike', - timestamp: '2022-09-23T02:33:43.890Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-389', - title: 'Order item 399', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - activity: 'f-red-Air-Stand Off Strike', - ownAssets: [ - { - asset: 'Red.5.111', - number: 4, - missileType: 'MRBM' - }, - { - asset: 'Red.9.338', - number: 1, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Red.10.277', - number: 3, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Red.4.330', - number: 5, - missileType: 'MRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Low Obs Cruise', - number: 0 - }, - { - asset: 'Green.11.351', - missileType: 'Propellor OWA UAV', - number: 0 - } - ], - location: [ - { - uniqid: 'Stand Off Strike-0', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route out', - startDate: '2022-05-01T10:05:00.000Z', - endDate: '2022-05-01T10:55:00.000Z', - force: 'f-red', - startTime: 1651399500000, - endTime: 1651402500000, - geomId: 'Stand Off Strike-0', - name: 'f-red//3.1914551816880703//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 86.4196, - 42.3049 - ], - [ - 76.29, - 47.56 - ], - [ - 67.18, - 52.83 - ], - [ - 57.35, - 57.39 - ], - [ - 46.81, - 62.23 - ], - [ - 47.3061, - 62.6839 - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-1', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Launch Location', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - force: 'f-red', - startTime: 1651402500000, - endTime: 1651407900000, - geomId: 'Stand Off Strike-1', - name: 'f-red//6.382910363376141//Launch Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 42.625675970694296, - 64.61570199756329 - ], - [ - 42.625675970694296, - 60.6156866872184 - ], - [ - 51.39424467751944, - 60.6156866872184 - ], - [ - 51.39424467751944, - 64.61570199756329 - ], - [ - 42.625675970694296, - 64.61570199756329 - ] - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-2', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route back', - startDate: '2022-05-01T12:25:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - force: 'f-red', - startTime: 1651407900000, - endTime: 1651415700000, - geomId: 'Stand Off Strike-2', - name: 'f-red//9.574365545064211//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.3061, - 62.6839 - ], - [ - 86.82, - 42.36 - ], - [ - 86.4196, - 42.3049 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_389', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-23T13:18:37.828Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-392', - title: 'Order item 396', - startDate: '2022-05-01T10:15:00.000Z', - endDate: '2022-05-01T11:05:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.8.330', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T10:15:00.000Z', - endDate: '2022-05-01T11:05:00.000Z', - force: 'f-green', - startTime: 1651400100000, - endTime: 1651403100000, - geomId: 'Transit-0', - name: 'f-green//6.3397949589416385//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.6079, - 21.2893 - ], - [ - 95.8, - 30.96 - ], - [ - 95.4523, - 30.8262 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_392', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-23T02:33:43.890Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-395', - title: 'Order item 399', - startDate: '2022-05-01T10:25:00.000Z', - endDate: '2022-05-01T13:35:00.000Z', - activity: 'f-red-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Red.6.369', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_395', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-27T05:32:50.742Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-398', - title: 'Order item 402', - startDate: '2022-05-01T10:45:00.000Z', - endDate: '2022-05-01T17:15:00.000Z', - activity: 'f-red-Maritime-ASW Barrier', - ownAssets: [ - { - asset: 'Red.1.227', - number: 3 - }, - { - asset: 'Red.4.273', - number: 3 - }, - { - asset: 'Red.11.32', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'ASW Barrier-0', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//Route out', - startDate: '2022-05-01T10:45:00.000Z', - endDate: '2022-05-01T11:35:00.000Z', - force: 'f-red', - startTime: 1651401900000, - endTime: 1651404900000, - geomId: 'ASW Barrier-0', - name: 'f-red//3.93653657566756//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 123.9566, - 14.9459 - ], - [ - 86.8, - 29.24 - ], - [ - 49.05, - 43.96 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - }, - { - uniqid: 'ASW Barrier-1', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//ASW Area', - startDate: '2022-05-01T11:35:00.000Z', - endDate: '2022-05-01T14:25:00.000Z', - force: 'f-red', - startTime: 1651404900000, - endTime: 1651415100000, - geomId: 'ASW Barrier-1', - name: 'f-red//7.87307315133512//ASW Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 45.22251044955829, - 46.73165503519795 - ], - [ - 45.22251044955829, - 41.76520231090981 - ], - [ - 52.18308174928105, - 41.76520231090981 - ], - [ - 52.18308174928105, - 46.73165503519795 - ], - [ - 45.22251044955829, - 46.73165503519795 - ] - ] - ] - } - } - }, - { - uniqid: 'ASW Barrier-2', - geometry: { - type: 'Feature', - properties: { - id: 'ASW Barrier//Route back', - startDate: '2022-05-01T14:25:00.000Z', - endDate: '2022-05-01T17:15:00.000Z', - force: 'f-red', - startTime: 1651415100000, - endTime: 1651425300000, - geomId: 'ASW Barrier-2', - name: 'f-red//11.80960972700268//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 124.08, - 15.23 - ], - [ - 123.9566, - 14.9459 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_398', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-27T14:15:58.385Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-401', - title: 'Order item 405', - startDate: '2022-05-01T10:45:00.000Z', - endDate: '2022-05-01T14:15:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.8.305', - number: 3 - }, - { - asset: 'Green.9.291', - number: 2 - }, - { - asset: 'Green.3.390', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T10:45:00.000Z', - endDate: '2022-05-01T11:35:00.000Z', - force: 'f-green', - startTime: 1651401900000, - endTime: 1651404900000, - geomId: 'Patrol-0', - name: 'f-green//3.575039140880108//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 16.4598, - -8.5671 - ], - [ - 119.84, - 39.24 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T11:35:00.000Z', - endDate: '2022-05-01T12:25:00.000Z', - force: 'f-green', - startTime: 1651404900000, - endTime: 1651407900000, - geomId: 'Patrol-1', - name: 'f-green//7.150078281760216//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 117.48160528851577, - 40.6760469697387 - ], - [ - 117.48160528851577, - 36.90102252712842 - ], - [ - 122.33302410675626, - 36.90102252712842 - ], - [ - 122.33302410675626, - 40.6760469697387 - ], - [ - 117.48160528851577, - 40.6760469697387 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T12:25:00.000Z', - endDate: '2022-05-01T14:15:00.000Z', - force: 'f-green', - startTime: 1651407900000, - endTime: 1651414500000, - geomId: 'Patrol-2', - name: 'f-green//10.725117422640324//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 93.67, - 27.41 - ], - [ - 68.28, - 14.92 - ], - [ - 42.18, - 3.72 - ], - [ - 16.36, - -8.19 - ], - [ - 16.4598, - -8.5671 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_401', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--MissileStrike', - timestamp: '2022-09-26T20:12:49.298Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-404', - title: 'Order item 413', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - activity: 'f-blue-Air-Stand Off Strike', - ownAssets: [ - { - asset: 'Blue.10.202', - number: 4, - missileType: 'Propellor OWA UAV' - }, - { - asset: 'Blue.11.127', - number: 3, - missileType: 'Propellor OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Red.8.78', - missileType: 'Standard Cruise', - number: 3 - }, - { - asset: 'Green.11.351', - missileType: 'IRBM', - number: 4 - }, - { - asset: 'Red.10.50', - missileType: 'IRBM', - number: 1 - } - ], - location: [ - { - uniqid: 'Stand Off Strike-0', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Stand Off Strike-0', - name: 'f-blue//6.089993918314576//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.699, - 53.1382 - ], - [ - -9.79, - 40.52 - ], - [ - -13.7, - 27.1 - ], - [ - -18.31, - 13.97 - ], - [ - -18.2386, - 14.1781 - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-1', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Launch Location', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T14:25:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651415100000, - geomId: 'Stand Off Strike-1', - name: 'f-blue//12.179987836629152//Launch Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -18.69729901764863, - 14.621508327058695 - ], - [ - -18.69729901764863, - 13.73382301054433 - ], - [ - -17.781692858348606, - 13.73382301054433 - ], - [ - -17.781692858348606, - 14.621508327058695 - ], - [ - -18.69729901764863, - 14.621508327058695 - ] - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-2', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route back', - startDate: '2022-05-01T14:25:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-blue', - startTime: 1651415100000, - endTime: 1651419900000, - geomId: 'Stand Off Strike-2', - name: 'f-blue//18.26998175494373//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -18.2386, - 14.1781 - ], - [ - -5.27, - 53.41 - ], - [ - -5.699, - 53.1382 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_404', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-25T08:54:16.043Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-407', - title: 'Order item 411', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T14:45:00.000Z', - activity: 'f-blue-Air-Suppression of Air Defences (SEAD)', - ownAssets: [ - { - asset: 'Blue.10.318', - number: 4 - }, - { - asset: 'Blue.1.184', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Suppression of Air Defences (SEAD)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Suppression of Air Defences (SEAD)-0', - name: 'f-blue//4.532307775691152//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 10.3398, - 63.3434 - ], - [ - 109.54, - 62.66 - ], - [ - 109.4429, - 63.1047 - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//SEAD Area', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651413900000, - geomId: 'Suppression of Air Defences (SEAD)-1', - name: 'f-blue//9.064615551382303//SEAD Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 108.07090025268558, - 63.705929858120655 - ], - [ - 108.07090025268558, - 62.490756510097384 - ], - [ - 110.75870972401765, - 62.490756510097384 - ], - [ - 110.75870972401765, - 63.705929858120655 - ], - [ - 108.07090025268558, - 63.705929858120655 - ] - ] - ] - } - } - }, - { - uniqid: 'Suppression of Air Defences (SEAD)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Suppression of Air Defences (SEAD)//Route back', - startDate: '2022-05-01T14:05:00.000Z', - endDate: '2022-05-01T14:45:00.000Z', - force: 'f-blue', - startTime: 1651413900000, - endTime: 1651416300000, - geomId: 'Suppression of Air Defences (SEAD)-2', - name: 'f-blue//13.596923327073455//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.4429, - 63.1047 - ], - [ - 60.08, - 63.16 - ], - [ - 10.08, - 63.58 - ], - [ - 10.3398, - 63.3434 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_407', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--ISTAR', - timestamp: '2022-09-22T18:49:26.057Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-410', - title: 'Order item 414', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - activity: 'f-blue-Maritime-ISTAR', - ownAssets: [ - { - asset: 'Blue.4.254', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'ISTAR-0', - name: 'f-blue//5.8510738499462605//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 6.0923, - 57.453 - ], - [ - 25.2, - 53.47 - ], - [ - 44.5, - 49.68 - ], - [ - 64.09, - 46.18 - ], - [ - 64.0937, - 46.4545 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651415700000, - geomId: 'ISTAR-1', - name: 'f-blue//11.702147699892521//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 59.378776695879, - 49.42759463292888 - ], - [ - 59.378776695879, - 43.30808086217546 - ], - [ - 68.30701534514183, - 43.30808086217546 - ], - [ - 68.30701534514183, - 49.42759463292888 - ], - [ - 59.378776695879, - 49.42759463292888 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651415700000, - geomId: 'ISTAR-2', - name: 'f-blue//17.55322154983878//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 62.102847618128415, - 47.77543013298219 - ], - [ - 62.102847618128415, - 45.10067558902583 - ], - [ - 65.98911490100137, - 45.10067558902583 - ], - [ - 65.98911490100137, - 47.77543013298219 - ], - [ - 62.102847618128415, - 47.77543013298219 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T14:35:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-blue', - startTime: 1651415700000, - endTime: 1651419900000, - geomId: 'ISTAR-3', - name: 'f-blue//23.404295399785042//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 64.0937, - 46.4545 - ], - [ - 6.09, - 57.11 - ], - [ - 6.0923, - 57.453 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_410', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-25T06:38:23.294Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-413', - title: 'Order item 422', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T13:35:00.000Z', - activity: 'f-red-Maritime-Strike', - ownAssets: [ - { - asset: 'Red.9.10', - number: 4, - missileType: 'Low Obs Cruise' - }, - { - asset: 'Red.8.155', - number: 5, - missileType: 'MRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'SRBM', - number: 3 - }, - { - asset: 'Green.11.351', - missileType: 'IRBM', - number: 5 - }, - { - asset: 'Blue.11.50', - missileType: 'SRBM', - number: 3 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_413', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Resupply', - timestamp: '2022-09-22T23:51:48.458Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-416', - title: 'Order item 420', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T14:45:00.000Z', - activity: 'f-blue-Land-Resupply', - ownAssets: [ - { - asset: 'Blue.10.385', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Resupply-0', - name: 'f-blue//5.1688694935292006//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -17.9238, - 35.5132 - ], - [ - 5.69, - 42.57 - ], - [ - 28.17, - 50.49 - ], - [ - 51.93, - 57.69 - ], - [ - 74.98, - 64.18 - ], - [ - 75.1944, - 64.5979 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T12:05:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651406700000, - geomId: 'Resupply-1', - name: 'f-blue//10.337738987058401//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 72.96840081025873, - 65.50446139803333 - ], - [ - 72.96840081025873, - 63.660009664565536 - ], - [ - 77.27446831357396, - 63.660009664565536 - ], - [ - 77.27446831357396, - 65.50446139803333 - ], - [ - 72.96840081025873, - 65.50446139803333 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T12:05:00.000Z', - endDate: '2022-05-01T14:45:00.000Z', - force: 'f-blue', - startTime: 1651406700000, - endTime: 1651416300000, - geomId: 'Resupply-2', - name: 'f-blue//15.506608480587602//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 75.1944, - 64.5979 - ], - [ - 29.03, - 49.68 - ], - [ - -17.7, - 35.18 - ], - [ - -17.9238, - 35.5132 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_416', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-28T10:25:27.988Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-419', - title: 'Order item 429', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T12:55:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.8.179', - number: 4, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.6.204', - number: 5, - missileType: 'MRBM' - }, - { - asset: 'Green.10.342', - number: 2, - missileType: 'Low Obs Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 0 - }, - { - asset: 'Red.5.351', - missileType: 'Propellor OWA UAV', - number: 4 - }, - { - asset: 'Blue.11.50', - missileType: 'Standard Cruise', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_419', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Resupply', - timestamp: '2022-09-24T19:50:14.021Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-422', - title: 'Order item 426', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - activity: 'f-blue-Land-Resupply', - ownAssets: [ - { - asset: 'Blue.6.193', - number: 2 - }, - { - asset: 'Blue.2.158', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-blue', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Resupply-0', - name: 'f-blue//5.060349822044373//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 8.0315, - 41.784 - ], - [ - 18.84, - 36.63 - ], - [ - 29.79, - 32.61 - ], - [ - 40.01, - 27.87 - ], - [ - 40.5023, - 27.5372 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - force: 'f-blue', - startTime: 1651405500000, - endTime: 1651415700000, - geomId: 'Resupply-1', - name: 'f-blue//10.120699644088745//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 40.126401248233826, - 27.868997036470954 - ], - [ - 40.126401248233826, - 27.204398065821394 - ], - [ - 40.87593221275936, - 27.204398065821394 - ], - [ - 40.87593221275936, - 27.868997036470954 - ], - [ - 40.126401248233826, - 27.868997036470954 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T14:35:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - force: 'f-blue', - startTime: 1651415700000, - endTime: 1651420500000, - geomId: 'Resupply-2', - name: 'f-blue//15.181049466133118//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 40.5023, - 27.5372 - ], - [ - 24.32, - 34.5 - ], - [ - 7.62, - 41.95 - ], - [ - 8.0315, - 41.784 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_422', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-28T10:25:27.988Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-425', - title: 'Order item 429', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.5.27', - number: 2 - }, - { - asset: 'Green.2.331', - number: 4 - }, - { - asset: 'Green.3.348', - number: 3 - }, - { - asset: 'Green.11.79', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-green', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Transit-0', - name: 'f-green//5.8462217431515455//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -0.7267, - 19.325 - ], - [ - 56.22, - 51.48 - ], - [ - 56.0324, - 51.0716 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_425', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-28T06:44:42.746Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-428', - title: 'Order item 432', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-red-Maritime-Patrol', - ownAssets: [ - { - asset: 'Red.8.79', - number: 5 - }, - { - asset: 'Red.3.323', - number: 3 - }, - { - asset: 'Red.10.281', - number: 4 - }, - { - asset: 'Red.1.352', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-red', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Patrol-0', - name: 'f-red//5.525514826178551//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 120.3721, - 12.936 - ], - [ - 79.14, - 15.92 - ], - [ - 38.21, - 18.2 - ], - [ - 38.0032, - 18.3247 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T11:45:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - force: 'f-red', - startTime: 1651405500000, - endTime: 1651406100000, - geomId: 'Patrol-1', - name: 'f-red//11.051029652357101//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 36.279775439831006, - 19.93714330632101 - ], - [ - 36.279775439831006, - 16.697072297679213 - ], - [ - 39.69464200813719, - 16.697072297679213 - ], - [ - 39.69464200813719, - 19.93714330632101 - ], - [ - 36.279775439831006, - 19.93714330632101 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-red', - startTime: 1651406100000, - endTime: 1651413900000, - geomId: 'Patrol-2', - name: 'f-red//16.576544478535652//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 38.0032, - 18.3247 - ], - [ - 79.58, - 16.01 - ], - [ - 120.69, - 13.24 - ], - [ - 120.3721, - 12.936 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_428', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Direct Action', - roleId: 'red-direct', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Cyber--AreaEffects', - timestamp: '2022-09-24T08:47:58.294Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-431', - title: 'Order item 435', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - activity: 'f-red-Cyber-Area Activity', - ownAssets: [ - { - asset: 'Red.1.352', - number: 2 - }, - { - asset: 'Red.4.136', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-red', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Area Activity-0', - name: 'f-red//4.09822908975184//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 9.246141610241121, - 9.352498364192327 - ], - [ - 9.246141610241121, - 2.5788753139039424 - ], - [ - 16.069014224914017, - 2.5788753139039424 - ], - [ - 16.069014224914017, - 9.352498364192327 - ], - [ - 9.246141610241121, - 9.352498364192327 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_431', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-25T00:35:14.633Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-434', - title: 'Order item 438', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.8.43', - number: 4 - }, - { - asset: 'Green.7.167', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T10:55:00.000Z', - endDate: '2022-05-01T11:45:00.000Z', - force: 'f-green', - startTime: 1651402500000, - endTime: 1651405500000, - geomId: 'Transit-0', - name: 'f-green//6.564364515244961//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 0.6258, - 14.0797 - ], - [ - 48.91, - 56.34 - ], - [ - 49.2264, - 56.341 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_434', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-21T22:06:31.762Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-437', - title: 'Order item 441', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - activity: 'f-red-Maritime-Mine Clearance', - ownAssets: [ - { - asset: 'Red.11.355', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Mine Clearance-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Route out', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - force: 'f-red', - startTime: 1651403100000, - endTime: 1651406100000, - geomId: 'Mine Clearance-0', - name: 'f-red//2.92392111197114//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 131.8719, - -3.9085 - ], - [ - 89.75, - 22.81 - ], - [ - 48.08, - 48.98 - ], - [ - 47.8056, - 49.4354 - ] - ] - } - } - }, - { - uniqid: 'Mine Clearance-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Mine Clearance Area Area', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T13:55:00.000Z', - force: 'f-red', - startTime: 1651406100000, - endTime: 1651413300000, - geomId: 'Mine Clearance-1', - name: 'f-red//5.84784222394228//Mine Clearance Area Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 44.42528585750437, - 51.49212881014698 - ], - [ - 44.42528585750437, - 47.28818614073313 - ], - [ - 50.90810811972443, - 47.28818614073313 - ], - [ - 50.90810811972443, - 51.49212881014698 - ], - [ - 44.42528585750437, - 51.49212881014698 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Clearance-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Route back', - startDate: '2022-05-01T13:55:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-red', - startTime: 1651413300000, - endTime: 1651421100000, - geomId: 'Mine Clearance-2', - name: 'f-red//8.77176333591342//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.8056, - 49.4354 - ], - [ - 75.9, - 31.27 - ], - [ - 104.07, - 14.19 - ], - [ - 131.53, - -3.6 - ], - [ - 131.8719, - -3.9085 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_437', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Resupply', - timestamp: '2022-09-23T09:21:49.682Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-440', - title: 'Order item 444', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T17:05:00.000Z', - activity: 'f-red-Maritime-Resupply', - ownAssets: [ - { - asset: 'Red.12.85', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - force: 'f-red', - startTime: 1651403100000, - endTime: 1651406100000, - geomId: 'Resupply-0', - name: 'f-red//3.1768988706171513//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 70.6627, - -1.7799 - ], - [ - 52.09, - 7.63 - ], - [ - 34.33, - 17.86 - ], - [ - 15.86, - 27.36 - ], - [ - -2.33, - 37.15 - ], - [ - -1.9279, - 37.2722 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T14:35:00.000Z', - force: 'f-red', - startTime: 1651406100000, - endTime: 1651415700000, - geomId: 'Resupply-1', - name: 'f-red//6.3537977412343025//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -5.305824755560522, - 39.819694419849384 - ], - [ - -5.305824755560522, - 34.63509299696441 - ], - [ - 1.225118423965944, - 34.63509299696441 - ], - [ - 1.225118423965944, - 39.819694419849384 - ], - [ - -5.305824755560522, - 39.819694419849384 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T14:35:00.000Z', - endDate: '2022-05-01T17:05:00.000Z', - force: 'f-red', - startTime: 1651415700000, - endTime: 1651424700000, - geomId: 'Resupply-2', - name: 'f-red//9.530696611851454//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -1.9279, - 37.2722 - ], - [ - 16.01, - 27.82 - ], - [ - 34.83, - 18.24 - ], - [ - 52.93, - 7.94 - ], - [ - 70.31, - -2.06 - ], - [ - 70.6627, - -1.7799 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_440', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-29T10:21:08.392Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-443', - title: 'Order item 447', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-red-Land-ISTAR', - ownAssets: [ - { - asset: 'Red.7.35', - number: 2 - }, - { - asset: 'Red.1.379', - number: 3 - }, - { - asset: 'Red.12.85', - number: 4 - }, - { - asset: 'Red.9.205', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T11:05:00.000Z', - endDate: '2022-05-01T11:55:00.000Z', - force: 'f-red', - startTime: 1651403100000, - endTime: 1651406100000, - geomId: 'ISTAR-0', - name: 'f-red//2.3232978098094463//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 79.1354, - 25.6948 - ], - [ - 71.37, - 33.98 - ], - [ - 62.89, - 42.54 - ], - [ - 54.69, - 50.39 - ], - [ - 55.1545, - 50.3805 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T13:55:00.000Z', - force: 'f-red', - startTime: 1651406100000, - endTime: 1651413300000, - geomId: 'ISTAR-1', - name: 'f-red//4.646595619618893//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 52.56866672225713, - 51.946357908214736 - ], - [ - 52.56866672225713, - 48.76101980254821 - ], - [ - 57.572330739294, - 48.76101980254821 - ], - [ - 57.572330739294, - 51.946357908214736 - ], - [ - 52.56866672225713, - 51.946357908214736 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T13:55:00.000Z', - force: 'f-red', - startTime: 1651406100000, - endTime: 1651413300000, - geomId: 'ISTAR-2', - name: 'f-red//6.969893429428339//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 50.69996885657084, - 52.98043979185407 - ], - [ - 50.69996885657084, - 47.62843486809436 - ], - [ - 59.13332352979899, - 47.62843486809436 - ], - [ - 59.13332352979899, - 52.98043979185407 - ], - [ - 50.69996885657084, - 52.98043979185407 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T13:55:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-red', - startTime: 1651413300000, - endTime: 1651413900000, - geomId: 'ISTAR-3', - name: 'f-red//9.293191239237785//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.1545, - 50.3805 - ], - [ - 67.33, - 37.76 - ], - [ - 78.98, - 25.61 - ], - [ - 79.1354, - 25.6948 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_443', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-23T09:04:27.893Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-446', - title: 'Order item 450', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - activity: 'f-blue-Land-Transit', - ownAssets: [ - { - asset: 'Blue.8.205', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - force: 'f-blue', - startTime: 1651403400000, - endTime: 1651406400000, - geomId: 'Transit-0', - name: 'f-blue//5.363117910921574//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 29.8277, - 67.2351 - ], - [ - 23.28, - 39.62 - ], - [ - 16.18, - 13.45 - ], - [ - 15.8325, - 12.9898 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_446', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-21T21:31:48.184Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-449', - title: 'Order item 453', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.8.194', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - force: 'f-green', - startTime: 1651403400000, - endTime: 1651406400000, - geomId: 'Transit-0', - name: 'f-green//2.296359183266759//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.6461, - 0.9649 - ], - [ - 19.54, - 17.33 - ], - [ - 37.64, - 33.91 - ], - [ - 56.02, - 50.77 - ], - [ - 56.0324, - 51.0716 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_449', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-24T23:43:09.266Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-452', - title: 'Order item 456', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T15:50:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.12.3', - number: 5 - }, - { - asset: 'Green.11.165', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T11:10:00.000Z', - endDate: '2022-05-01T12:00:00.000Z', - force: 'f-green', - startTime: 1651403400000, - endTime: 1651406400000, - geomId: 'Patrol-0', - name: 'f-green//3.123021626845002//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 12.2652, - 20.2774 - ], - [ - 25.21, - 27.34 - ], - [ - 38.63, - 33.88 - ], - [ - 38.9265, - 33.8711 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T12:00:00.000Z', - endDate: '2022-05-01T13:10:00.000Z', - force: 'f-green', - startTime: 1651406400000, - endTime: 1651410600000, - geomId: 'Patrol-1', - name: 'f-green//6.246043253690004//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 34.215641004878215, - 37.52016598148041 - ], - [ - 34.215641004878215, - 30.05774561636695 - ], - [ - 43.24261689023114, - 30.05774561636695 - ], - [ - 43.24261689023114, - 37.52016598148041 - ], - [ - 34.215641004878215, - 37.52016598148041 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T13:10:00.000Z', - endDate: '2022-05-01T15:50:00.000Z', - force: 'f-green', - startTime: 1651410600000, - endTime: 1651420200000, - geomId: 'Patrol-2', - name: 'f-green//9.369064880535007//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 38.9265, - 33.8711 - ], - [ - 11.89, - 20.15 - ], - [ - 12.2652, - 20.2774 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_452', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-24T07:38:31.139Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-455', - title: 'Order item 459', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T13:05:00.000Z', - activity: 'f-blue-Land-ISTAR', - ownAssets: [ - { - asset: 'Blue.8.31', - number: 1 - }, - { - asset: 'Blue.3.133', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T12:15:00.000Z', - force: 'f-blue', - startTime: 1651404300000, - endTime: 1651407300000, - geomId: 'ISTAR-0', - name: 'f-blue//2.8431052323430777//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 30.32, - 54.3 - ], - [ - 58.11, - 48.6 - ], - [ - 86.19, - 42.19 - ], - [ - 86.4196, - 42.3049 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T12:15:00.000Z', - endDate: '2022-05-01T12:35:00.000Z', - force: 'f-blue', - startTime: 1651407300000, - endTime: 1651408500000, - geomId: 'ISTAR-1', - name: 'f-blue//5.686210464686155//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 83.07938373367479, - 44.63448429039222 - ], - [ - 83.07938373367479, - 39.88538863583777 - ], - [ - 89.51699526294053, - 39.88538863583777 - ], - [ - 89.51699526294053, - 44.63448429039222 - ], - [ - 83.07938373367479, - 44.63448429039222 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T12:15:00.000Z', - endDate: '2022-05-01T12:35:00.000Z', - force: 'f-blue', - startTime: 1651407300000, - endTime: 1651408500000, - geomId: 'ISTAR-2', - name: 'f-blue//8.529315697029233//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 86.04216608282438, - 42.58219037793585 - ], - [ - 86.04216608282438, - 42.02638282413883 - ], - [ - 86.79371640317237, - 42.02638282413883 - ], - [ - 86.79371640317237, - 42.58219037793585 - ], - [ - 86.04216608282438, - 42.58219037793585 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T12:35:00.000Z', - endDate: '2022-05-01T13:05:00.000Z', - force: 'f-blue', - startTime: 1651408500000, - endTime: 1651410300000, - geomId: 'ISTAR-3', - name: 'f-blue//11.37242092937231//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 86.4196, - 42.3049 - ], - [ - 2.17, - 60.31 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_455', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-25T11:27:36.423Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-458', - title: 'Order item 469', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T13:25:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.6.278', - number: 1, - missileType: 'SRBM' - }, - { - asset: 'Green.10.321', - number: 5, - missileType: 'IRBM' - }, - { - asset: 'Green.11.76', - number: 4, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.11.345', - number: 2, - missileType: 'Low Obs Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'MRBM', - number: 2 - }, - { - asset: 'Red.5.351', - missileType: 'Jet OWA UAV', - number: 0 - }, - { - asset: 'Blue.11.50', - missileType: 'Propellor OWA UAV', - number: 1 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_458', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-28T08:41:17.255Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-461', - title: 'Order item 465', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - activity: 'f-red-Maritime-Mine Clearance', - ownAssets: [ - { - asset: 'Red.7.345', - number: 0 - }, - { - asset: 'Red.1.327', - number: 5 - }, - { - asset: 'Red.2.23', - number: 2 - }, - { - asset: 'Red.6.232', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Mine Clearance-0', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Route out', - startDate: '2022-05-01T11:25:00.000Z', - endDate: '2022-05-01T12:15:00.000Z', - force: 'f-red', - startTime: 1651404300000, - endTime: 1651407300000, - geomId: 'Mine Clearance-0', - name: 'f-red//3.9635359663516283//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 83.0339, - 8.428 - ], - [ - 58.46, - -2.86 - ], - [ - 58.5328, - -2.4913 - ] - ] - } - } - }, - { - uniqid: 'Mine Clearance-1', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Mine Clearance Area Area', - startDate: '2022-05-01T12:15:00.000Z', - endDate: '2022-05-01T12:55:00.000Z', - force: 'f-red', - startTime: 1651407300000, - endTime: 1651409700000, - geomId: 'Mine Clearance-1', - name: 'f-red//7.927071932703257//Mine Clearance Area Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 57.892352380224835, - -1.8510310709269047 - ], - [ - 57.892352380224835, - -3.131257744395712 - ], - [ - 59.173870558377814, - -3.131257744395712 - ], - [ - 59.173870558377814, - -1.8510310709269047 - ], - [ - 57.892352380224835, - -1.8510310709269047 - ] - ] - ] - } - } - }, - { - uniqid: 'Mine Clearance-2', - geometry: { - type: 'Feature', - properties: { - id: 'Mine Clearance//Route back', - startDate: '2022-05-01T12:55:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - force: 'f-red', - startTime: 1651409700000, - endTime: 1651420500000, - geomId: 'Mine Clearance-2', - name: 'f-red//11.890607899054885//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 58.5328, - -2.4913 - ], - [ - 82.68, - 8.35 - ], - [ - 83.0339, - 8.428 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_461', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-24T17:48:41.499Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-464', - title: 'Order item 468', - startDate: '2022-05-01T11:40:00.000Z', - endDate: '2022-05-01T12:30:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.10.232', - number: 5 - }, - { - asset: 'Green.3.154', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T11:40:00.000Z', - endDate: '2022-05-01T12:30:00.000Z', - force: 'f-green', - startTime: 1651405200000, - endTime: 1651408200000, - geomId: 'Transit-0', - name: 'f-green//5.363883085548878//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - 47.13, - 40.12 - ], - [ - 77.94, - 51.15 - ], - [ - 109.04, - 63.47 - ], - [ - 109.4429, - 63.1047 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_464', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--AreaEffects', - timestamp: '2022-09-25T16:40:06.533Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-467', - title: 'Order item 471', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T12:45:00.000Z', - activity: 'f-blue-Cyber-Area Activity', - ownAssets: [ - { - asset: 'Blue.12.337', - number: 3 - }, - { - asset: 'Blue.8.199', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T12:45:00.000Z', - force: 'f-blue', - startTime: 1651406100000, - endTime: 1651409100000, - geomId: 'Area Activity-0', - name: 'f-blue//5.657651366665959//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 95.29763971231885, - 58.24160648156795 - ], - [ - 95.29763971231885, - 55.65745809699665 - ], - [ - 100.04664459234989, - 55.65745809699665 - ], - [ - 100.04664459234989, - 58.24160648156795 - ], - [ - 95.29763971231885, - 58.24160648156795 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_467', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-24T15:34:58.974Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-470', - title: 'Order item 477', - startDate: '2022-05-01T11:55:00.000Z', - endDate: '2022-05-01T13:25:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.12.263', - number: 1, - missileType: 'Propellor OWA UAV' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 0 - }, - { - asset: 'Red.5.351', - missileType: 'Low Obs Cruise', - number: 2 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_470', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-24T15:34:58.974Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-473', - title: 'Order item 477', - startDate: '2022-05-01T12:00:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.9.8', - number: 4 - }, - { - asset: 'Green.2.149', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T12:00:00.000Z', - endDate: '2022-05-01T12:50:00.000Z', - force: 'f-green', - startTime: 1651406400000, - endTime: 1651409400000, - geomId: 'Transit-0', - name: 'f-green//2.9254514519125223//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 25.3362, - 8.2507 - ], - [ - 48.73, - 44.76 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_473', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Resupply', - timestamp: '2022-09-22T15:38:26.380Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-476', - title: 'Order item 480', - startDate: '2022-05-01T12:20:00.000Z', - endDate: '2022-05-01T16:20:00.000Z', - activity: 'f-blue-Land-Resupply', - ownAssets: [ - { - asset: 'Blue.10.372', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T12:20:00.000Z', - endDate: '2022-05-01T13:10:00.000Z', - force: 'f-blue', - startTime: 1651407600000, - endTime: 1651410600000, - geomId: 'Resupply-0', - name: 'f-blue//4.899483246728778//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -6.9159, - 66.9968 - ], - [ - 20.8, - 55.72 - ], - [ - 49.49, - 44.42 - ], - [ - 77.46, - 32.39 - ], - [ - 104.71, - 20.66 - ], - [ - 105.205, - 21.0042 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T13:10:00.000Z', - endDate: '2022-05-01T15:50:00.000Z', - force: 'f-blue', - startTime: 1651410600000, - endTime: 1651420200000, - geomId: 'Resupply-1', - name: 'f-blue//9.798966493457556//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 104.88289960569784, - 21.303987411799973 - ], - [ - 104.88289960569784, - 20.70380910591191 - ], - [ - 105.52580753664371, - 20.70380910591191 - ], - [ - 105.52580753664371, - 21.303987411799973 - ], - [ - 104.88289960569784, - 21.303987411799973 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T15:50:00.000Z', - endDate: '2022-05-01T16:20:00.000Z', - force: 'f-blue', - startTime: 1651420200000, - endTime: 1651422000000, - geomId: 'Resupply-2', - name: 'f-blue//14.698449740186334//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 105.205, - 21.0042 - ], - [ - 67.98, - 35.83 - ], - [ - 30.85, - 51.77 - ], - [ - -6.98, - 66.98 - ], - [ - -6.9159, - 66.9968 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_476', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-25T14:04:20.068Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-479', - title: 'Order item 487', - startDate: '2022-05-01T12:20:00.000Z', - endDate: '2022-05-01T13:10:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.6.156', - number: 4, - missileType: 'Jet OWA UAV' - }, - { - asset: 'Green.6.177', - number: 0, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'IRBM', - number: 3 - }, - { - asset: 'Red.5.351', - missileType: 'Standard Cruise', - number: 4 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_479', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-24T00:57:23.564Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-482', - title: 'Order item 486', - startDate: '2022-05-01T12:25:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.3.159', - number: 3 - }, - { - asset: 'Green.6.120', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T12:25:00.000Z', - endDate: '2022-05-01T13:15:00.000Z', - force: 'f-green', - startTime: 1651407900000, - endTime: 1651410900000, - geomId: 'Patrol-0', - name: 'f-green//5.527810350060463//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 58.7477, - 0.3181 - ], - [ - 53.57, - 22.49 - ], - [ - 48.85, - 44.1 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T13:15:00.000Z', - endDate: '2022-05-01T13:45:00.000Z', - force: 'f-green', - startTime: 1651410900000, - endTime: 1651412700000, - geomId: 'Patrol-1', - name: 'f-green//11.055620700120926//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 45.57976879194043, - 46.50648204488414 - ], - [ - 45.57976879194043, - 42.00946016961638 - ], - [ - 51.87898054912595, - 42.00946016961638 - ], - [ - 51.87898054912595, - 46.50648204488414 - ], - [ - 45.57976879194043, - 46.50648204488414 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T13:45:00.000Z', - endDate: '2022-05-01T14:05:00.000Z', - force: 'f-green', - startTime: 1651412700000, - endTime: 1651413900000, - geomId: 'Patrol-2', - name: 'f-green//16.58343105018139//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 53.64, - 22.48 - ], - [ - 58.84, - 0.09 - ], - [ - 58.7477, - 0.3181 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_482', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-26T02:08:40.941Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-485', - title: 'Order item 493', - startDate: '2022-05-01T12:45:00.000Z', - endDate: '2022-05-01T15:05:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.4.382', - number: 1, - missileType: 'IRBM' - }, - { - asset: 'Green.2.282', - number: 0, - missileType: 'IRBM' - }, - { - asset: 'Green.5.296', - number: 1, - missileType: 'Standard Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Low Obs Cruise', - number: 5 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_485', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Maritime--ISTAR', - timestamp: '2022-09-27T01:12:23.910Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-488', - title: 'Order item 492', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - activity: 'f-blue-Maritime-ISTAR', - ownAssets: [ - { - asset: 'Blue.5.24', - number: 2 - }, - { - asset: 'Blue.12.264', - number: 5 - }, - { - asset: 'Blue.6.218', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-blue', - startTime: 1651410000000, - endTime: 1651413000000, - geomId: 'ISTAR-0', - name: 'f-blue//6.729822129011154//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 2.6402, - 44.3131 - ], - [ - 17.59, - 35.16 - ], - [ - 31.8, - 26.25 - ], - [ - 46.28, - 16.63 - ], - [ - 46.4742, - 16.8165 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T16:00:00.000Z', - force: 'f-blue', - startTime: 1651413000000, - endTime: 1651420800000, - geomId: 'ISTAR-1', - name: 'f-blue//13.459644258022308//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 43.28124960616041, - 19.796331656501152 - ], - [ - 43.28124960616041, - 13.788935504485643 - ], - [ - 49.56750741983554, - 13.788935504485643 - ], - [ - 49.56750741983554, - 19.796331656501152 - ], - [ - 43.28124960616041, - 19.796331656501152 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T16:00:00.000Z', - force: 'f-blue', - startTime: 1651413000000, - endTime: 1651420800000, - geomId: 'ISTAR-2', - name: 'f-blue//20.189466387033463//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 44.804776242941145, - 18.393930823759977 - ], - [ - 44.804776242941145, - 15.2258222376164 - ], - [ - 48.11595303032262, - 15.2258222376164 - ], - [ - 48.11595303032262, - 18.393930823759977 - ], - [ - 44.804776242941145, - 18.393930823759977 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T16:00:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - force: 'f-blue', - startTime: 1651420800000, - endTime: 1651423200000, - geomId: 'ISTAR-3', - name: 'f-blue//26.919288516044617//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 46.4742, - 16.8165 - ], - [ - 31.52, - 25.7 - ], - [ - 16.8, - 34.83 - ], - [ - 2.36, - 44.24 - ], - [ - 2.6402, - 44.3131 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_488', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'Sub-Surface', - roleId: 'blue-sub', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--MissileStrike', - timestamp: '2022-09-23T08:23:27.417Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-491', - title: 'Order item 498', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T19:50:00.000Z', - activity: 'f-blue-Air-Stand Off Strike', - ownAssets: [ - { - asset: 'Blue.5.285', - number: 3, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Red.8.78', - missileType: 'Standard Cruise', - number: 5 - }, - { - asset: 'Green.11.351', - missileType: 'Low Obs Cruise', - number: 4 - } - ], - location: [ - { - uniqid: 'Stand Off Strike-0', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route out', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-blue', - startTime: 1651410000000, - endTime: 1651413000000, - geomId: 'Stand Off Strike-0', - name: 'f-blue//3.5055185835808516//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.1709, - 55.1302 - ], - [ - 63.52, - 62.08 - ], - [ - 129.63, - 69.46 - ], - [ - 129.7639, - 69.4742 - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-1', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Launch Location', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T17:00:00.000Z', - force: 'f-blue', - startTime: 1651413000000, - endTime: 1651424400000, - geomId: 'Stand Off Strike-1', - name: 'f-blue//7.011037167161703//Launch Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 124.21778156221076, - 71.17980024053344 - ], - [ - 124.21778156221076, - 67.61888472272145 - ], - [ - 134.46071085301767, - 67.61888472272145 - ], - [ - 134.46071085301767, - 71.17980024053344 - ], - [ - 124.21778156221076, - 71.17980024053344 - ] - ] - ] - } - } - }, - { - uniqid: 'Stand Off Strike-2', - geometry: { - type: 'Feature', - properties: { - id: 'Stand Off Strike//Route back', - startDate: '2022-05-01T17:00:00.000Z', - endDate: '2022-05-01T19:50:00.000Z', - force: 'f-blue', - startTime: 1651424400000, - endTime: 1651434600000, - geomId: 'Stand Off Strike-2', - name: 'f-blue//10.516555750742555//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 129.7639, - 69.4742 - ], - [ - -3.1, - 54.68 - ], - [ - -3.1709, - 55.1302 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_491', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Resupply', - timestamp: '2022-09-23T08:23:27.417Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-494', - title: 'Order item 498', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T19:50:00.000Z', - activity: 'f-blue-Air-Resupply', - ownAssets: [ - { - asset: 'Blue.1.367', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-blue', - startTime: 1651410000000, - endTime: 1651413000000, - geomId: 'Resupply-0', - name: 'f-blue//3.5055185835808516//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -3.1709, - 55.1302 - ], - [ - 63.52, - 62.08 - ], - [ - 129.63, - 69.46 - ], - [ - 129.7639, - 69.4742 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T17:00:00.000Z', - force: 'f-blue', - startTime: 1651413000000, - endTime: 1651424400000, - geomId: 'Resupply-1', - name: 'f-blue//7.011037167161703//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 124.21778156221076, - 71.17980024053344 - ], - [ - 124.21778156221076, - 67.61888472272145 - ], - [ - 134.46071085301767, - 67.61888472272145 - ], - [ - 134.46071085301767, - 71.17980024053344 - ], - [ - 124.21778156221076, - 71.17980024053344 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T17:00:00.000Z', - endDate: '2022-05-01T19:50:00.000Z', - force: 'f-blue', - startTime: 1651424400000, - endTime: 1651434600000, - geomId: 'Resupply-2', - name: 'f-blue//10.516555750742555//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 129.7639, - 69.4742 - ], - [ - -3.1, - 54.68 - ], - [ - -3.1709, - 55.1302 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_494', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--Resupply', - timestamp: '2022-09-28T08:35:00.357Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-497', - title: 'Order item 501', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T17:00:00.000Z', - activity: 'f-blue-Land-Resupply', - ownAssets: [ - { - asset: 'Blue.8.267', - number: 4 - }, - { - asset: 'Blue.1.327', - number: 3 - }, - { - asset: 'Blue.8.101', - number: 5 - }, - { - asset: 'Blue.3.387', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-blue', - startTime: 1651410000000, - endTime: 1651413000000, - geomId: 'Resupply-0', - name: 'f-blue//2.7334985584020615//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.85, - 44.3012 - ], - [ - 64.48, - 35.16 - ], - [ - 79, - 26.9 - ], - [ - 94.81, - 17.93 - ], - [ - 109.9, - 9.24 - ], - [ - 109.675, - 9.1496 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T15:10:00.000Z', - force: 'f-blue', - startTime: 1651413000000, - endTime: 1651417800000, - geomId: 'Resupply-1', - name: 'f-blue//5.466997116804123//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 106.16493843853479, - 12.558863305206748 - ], - [ - 106.16493843853479, - 5.7072315916025245 - ], - [ - 113.11806290067113, - 5.7072315916025245 - ], - [ - 113.11806290067113, - 12.558863305206748 - ], - [ - 106.16493843853479, - 12.558863305206748 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T15:10:00.000Z', - endDate: '2022-05-01T17:00:00.000Z', - force: 'f-blue', - startTime: 1651417800000, - endTime: 1651424400000, - geomId: 'Resupply-2', - name: 'f-blue//8.200495675206184//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.675, - 9.1496 - ], - [ - 88.94, - 20.92 - ], - [ - 69.34, - 32.82 - ], - [ - 49.02, - 43.99 - ], - [ - 48.85, - 44.3012 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_497', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-29T14:30:34.087Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-500', - title: 'Order item 504', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T15:10:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.2.387', - number: 4 - }, - { - asset: 'Green.6.267', - number: 3 - }, - { - asset: 'Green.3.100', - number: 2 - }, - { - asset: 'Green.1.327', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T13:00:00.000Z', - endDate: '2022-05-01T13:50:00.000Z', - force: 'f-green', - startTime: 1651410000000, - endTime: 1651413000000, - geomId: 'Patrol-0', - name: 'f-green//5.854899713769555//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -19.3931, - 12.1242 - ], - [ - 109.83, - 63.32 - ], - [ - 109.4429, - 63.1047 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T13:50:00.000Z', - endDate: '2022-05-01T14:10:00.000Z', - force: 'f-green', - startTime: 1651413000000, - endTime: 1651414200000, - geomId: 'Patrol-1', - name: 'f-green//11.70979942753911//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 102.89118864744974, - 65.66220393626115 - ], - [ - 102.89118864744974, - 60.295132777118056 - ], - [ - 114.88803516391998, - 60.295132777118056 - ], - [ - 114.88803516391998, - 65.66220393626115 - ], - [ - 102.89118864744974, - 65.66220393626115 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T14:10:00.000Z', - endDate: '2022-05-01T15:10:00.000Z', - force: 'f-green', - startTime: 1651414200000, - endTime: 1651417800000, - geomId: 'Patrol-2', - name: 'f-green//17.564699141308665//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 109.4429, - 63.1047 - ], - [ - 45.22, - 37.69 - ], - [ - -19.7, - 12.56 - ], - [ - -19.3931, - 12.1242 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_500', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Transit', - timestamp: '2022-09-27T02:10:08.608Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-503', - title: 'Order item 507', - startDate: '2022-05-01T13:05:00.000Z', - endDate: '2022-05-01T13:55:00.000Z', - activity: 'f-green-Maritime-Transit', - ownAssets: [ - { - asset: 'Green.1.327', - number: 0 - }, - { - asset: 'Green.10.266', - number: 5 - }, - { - asset: 'Green.1.319', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T13:05:00.000Z', - endDate: '2022-05-01T13:55:00.000Z', - force: 'f-green', - startTime: 1651410300000, - endTime: 1651413300000, - geomId: 'Transit-0', - name: 'f-green//2.869722031056881//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.004, - -1.9803 - ], - [ - 105.26, - 20.55 - ], - [ - 105.205, - 21.0042 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_503', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-29T03:33:43.920Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-506', - title: 'Order item 510', - startDate: '2022-05-01T13:25:00.000Z', - endDate: '2022-05-01T14:15:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.8.86', - number: 4 - }, - { - asset: 'Green.8.365', - number: 5 - }, - { - asset: 'Green.1.358', - number: 0 - }, - { - asset: 'Green.10.64', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T13:25:00.000Z', - endDate: '2022-05-01T14:15:00.000Z', - force: 'f-green', - startTime: 1651411500000, - endTime: 1651414500000, - geomId: 'Transit-0', - name: 'f-green//3.777965519577265//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 15.3978, - 28.1651 - ], - [ - 41.34, - 31.24 - ], - [ - 68.1, - 33.13 - ], - [ - 94.15, - 36.3 - ], - [ - 119.48, - 38.76 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_506', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Air--Resupply', - timestamp: '2022-09-27T10:41:20.021Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-509', - title: 'Order item 513', - startDate: '2022-05-01T13:40:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - activity: 'f-blue-Air-Resupply', - ownAssets: [ - { - asset: 'Blue.1.64', - number: 0 - }, - { - asset: 'Blue.3.283', - number: 2 - }, - { - asset: 'Blue.3.216', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T13:40:00.000Z', - endDate: '2022-05-01T14:30:00.000Z', - force: 'f-blue', - startTime: 1651412400000, - endTime: 1651415400000, - geomId: 'Resupply-0', - name: 'f-blue//3.5796301793307066//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.8429, - 58.3229 - ], - [ - -16.82, - 2.24 - ], - [ - -16.8161, - 2.6929 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T14:30:00.000Z', - endDate: '2022-05-01T16:00:00.000Z', - force: 'f-blue', - startTime: 1651415400000, - endTime: 1651420800000, - geomId: 'Resupply-1', - name: 'f-blue//7.159260358661413//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -17.023879203605368, - 2.9003953608817095 - ], - [ - -17.023879203605368, - 2.485369288995706 - ], - [ - -16.608391574566415, - 2.485369288995706 - ], - [ - -16.608391574566415, - 2.9003953608817095 - ], - [ - -17.023879203605368, - 2.9003953608817095 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T16:00:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - force: 'f-blue', - startTime: 1651420800000, - endTime: 1651423200000, - geomId: 'Resupply-2', - name: 'f-blue//10.73889053799212//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -16.8161, - 2.6929 - ], - [ - 48.4, - 58.08 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_509', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-21T23:32:56.914Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-512', - title: 'Order item 516', - startDate: '2022-05-01T13:40:00.000Z', - endDate: '2022-05-01T14:30:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.9.262', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T13:40:00.000Z', - endDate: '2022-05-01T14:30:00.000Z', - force: 'f-green', - startTime: 1651412400000, - endTime: 1651415400000, - geomId: 'Transit-0', - name: 'f-green//2.2747160103172064//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 55.9288, - 11.076 - ], - [ - 88.97, - 40.77 - ], - [ - 122.4, - 69.85 - ], - [ - 122.1194, - 70.2085 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_512', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--MissileStrike', - timestamp: '2022-09-26T14:29:32.264Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-515', - title: 'Order item 526', - startDate: '2022-05-01T13:45:00.000Z', - endDate: '2022-05-01T14:15:00.000Z', - activity: 'f-green-Maritime-Strike', - ownAssets: [ - { - asset: 'Green.12.279', - number: 2, - missileType: 'Low Obs Cruise' - }, - { - asset: 'Green.1.378', - number: 4, - missileType: 'SRBM' - }, - { - asset: 'Green.12.191', - number: 0, - missileType: 'Propellor OWA UAV' - }, - { - asset: 'Green.1.116', - number: 2, - missileType: 'Low Obs Cruise' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Standard Cruise', - number: 2 - }, - { - asset: 'Red.5.351', - missileType: 'IRBM', - number: 0 - }, - { - asset: 'Blue.11.50', - missileType: 'IRBM', - number: 4 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_515', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-24T18:28:13.070Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-518', - title: 'Order item 522', - startDate: '2022-05-01T14:05:00.000Z', - endDate: '2022-05-01T15:35:00.000Z', - activity: 'f-blue-Land-ISTAR', - ownAssets: [ - { - asset: 'Blue.6.116', - number: 3 - }, - { - asset: 'Blue.8.155', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T14:05:00.000Z', - endDate: '2022-05-01T14:55:00.000Z', - force: 'f-blue', - startTime: 1651413900000, - endTime: 1651416900000, - geomId: 'ISTAR-0', - name: 'f-blue//6.345151167362928//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 42.0758, - 37.8488 - ], - [ - 23.94, - 18.24 - ], - [ - 5.13, - -1.04 - ], - [ - 4.873, - -0.857 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T15:35:00.000Z', - force: 'f-blue', - startTime: 1651416900000, - endTime: 1651419300000, - geomId: 'ISTAR-1', - name: 'f-blue//12.690302334725857//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 2.001182715785622, - 2.0141185144661473 - ], - [ - 2.001182715785622, - -3.7259630316872285 - ], - [ - 7.749126019453577, - -3.7259630316872285 - ], - [ - 7.749126019453577, - 2.0141185144661473 - ], - [ - 2.001182715785622, - 2.0141185144661473 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T15:35:00.000Z', - force: 'f-blue', - startTime: 1651416900000, - endTime: 1651419300000, - geomId: 'ISTAR-2', - name: 'f-blue//19.035453502088785//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 3.9919217123110076, - 0.024179544611184284 - ], - [ - 3.9919217123110076, - -1.7379768272072897 - ], - [ - 5.754483743861469, - -1.7379768272072897 - ], - [ - 5.754483743861469, - 0.024179544611184284 - ], - [ - 3.9919217123110076, - 0.024179544611184284 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T15:35:00.000Z', - endDate: '2022-05-01T15:35:00.000Z', - force: 'f-blue', - startTime: 1651419300000, - endTime: 1651419300000, - geomId: 'ISTAR-3', - name: 'f-blue//25.380604669451714//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 4.873, - -0.857 - ], - [ - 23.74, - 18.04 - ], - [ - 42.12, - 37.46 - ], - [ - 42.0758, - 37.8488 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_518', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-24T16:31:52.334Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-521', - title: 'Order item 525', - startDate: '2022-05-01T14:05:00.000Z', - endDate: '2022-05-01T14:55:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.4.172', - number: 2 - }, - { - asset: 'Green.9.151', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T14:05:00.000Z', - endDate: '2022-05-01T14:55:00.000Z', - force: 'f-green', - startTime: 1651413900000, - endTime: 1651416900000, - geomId: 'Transit-0', - name: 'f-green//6.720500502735376//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 3.5468, - 26.6941 - ], - [ - 42.08, - 35.25 - ], - [ - 42.5642, - 35.0817 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_521', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-29T04:19:32.388Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-524', - title: 'Order item 528', - startDate: '2022-05-01T14:10:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - activity: 'f-red-Maritime-Patrol', - ownAssets: [ - { - asset: 'Red.9.48', - number: 4 - }, - { - asset: 'Red.9.367', - number: 1 - }, - { - asset: 'Red.1.398', - number: 5 - }, - { - asset: 'Red.12.143', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T14:10:00.000Z', - endDate: '2022-05-01T15:00:00.000Z', - force: 'f-red', - startTime: 1651414200000, - endTime: 1651417200000, - geomId: 'Patrol-0', - name: 'f-red//5.989271009340882//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 107.2321, - 34.7419 - ], - [ - 73.49, - 42.63 - ], - [ - 40.02, - 49.8 - ], - [ - 5.84, - 57.25 - ], - [ - 6.0923, - 57.453 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T15:00:00.000Z', - endDate: '2022-05-01T16:30:00.000Z', - force: 'f-red', - startTime: 1651417200000, - endTime: 1651422600000, - geomId: 'Patrol-1', - name: 'f-red//11.978542018681765//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -2.225399290238209, - 61.203532491646385 - ], - [ - -2.225399290238209, - 53.25998535012357 - ], - [ - 12.781970475426794, - 53.25998535012357 - ], - [ - 12.781970475426794, - 61.203532491646385 - ], - [ - -2.225399290238209, - 61.203532491646385 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T16:30:00.000Z', - endDate: '2022-05-01T16:40:00.000Z', - force: 'f-red', - startTime: 1651422600000, - endTime: 1651423200000, - geomId: 'Patrol-2', - name: 'f-red//17.967813028022647//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 6.0923, - 57.453 - ], - [ - 40.3, - 49.68 - ], - [ - 73.79, - 42.18 - ], - [ - 107.56, - 34.97 - ], - [ - 107.2321, - 34.7419 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_524', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-26T21:06:54.869Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-527', - title: 'Order item 534', - startDate: '2022-05-01T14:25:00.000Z', - endDate: '2022-05-01T16:15:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.2.143', - number: 3, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Jet OWA UAV', - number: 1 - }, - { - asset: 'Red.5.351', - missileType: 'IRBM', - number: 2 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_527', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 2', - roleId: 'blue-aew-2', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-26T21:06:54.869Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-530', - title: 'Order item 534', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T15:30:00.000Z', - activity: 'f-blue-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Blue.12.58', - number: 5 - }, - { - asset: 'Blue.9.256', - number: 0 - }, - { - asset: 'Blue.8.168', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Red.10.50' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T15:30:00.000Z', - force: 'f-blue', - startTime: 1651416000000, - endTime: 1651419000000, - geomId: 'Area Activity-0', - name: 'f-blue//6.207075526937842//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 119.1690408843725, - 22.70568843877314 - ], - [ - 119.1690408843725, - 17.039056223894704 - ], - [ - 125.20508330441064, - 17.039056223894704 - ], - [ - 125.20508330441064, - 22.70568843877314 - ], - [ - 119.1690408843725, - 22.70568843877314 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_530', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-28T10:06:37.295Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-533', - title: 'Order item 537', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T15:50:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.5.192', - number: 5 - }, - { - asset: 'Green.8.330', - number: 2 - }, - { - asset: 'Green.5.181', - number: 3 - }, - { - asset: 'Green.7.146', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T15:30:00.000Z', - force: 'f-green', - startTime: 1651416000000, - endTime: 1651419000000, - geomId: 'Land Close Combat-0', - name: 'f-green//2.1561095379292965//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 22.5078, - 20.4081 - ], - [ - 93.72, - 7.68 - ], - [ - 93.9771, - 7.6827 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T15:30:00.000Z', - endDate: '2022-05-01T15:40:00.000Z', - force: 'f-green', - startTime: 1651419000000, - endTime: 1651419600000, - geomId: 'Land Close Combat-1', - name: 'f-green//4.312219075858593//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 90.30704492778021, - 11.26649952000075 - ], - [ - 90.30704492778021, - 4.068287887286769 - ], - [ - 97.58543984007406, - 4.068287887286769 - ], - [ - 97.58543984007406, - 11.26649952000075 - ], - [ - 90.30704492778021, - 11.26649952000075 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T15:40:00.000Z', - endDate: '2022-05-01T15:50:00.000Z', - force: 'f-green', - startTime: 1651419600000, - endTime: 1651420200000, - geomId: 'Land Close Combat-2', - name: 'f-green//6.4683286137878895//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 93.9771, - 7.6827 - ], - [ - 70.32, - 12.41 - ], - [ - 46.76, - 16.24 - ], - [ - 22.48, - 20.35 - ], - [ - 22.5078, - 20.4081 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_533', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Maritime--Patrol', - timestamp: '2022-09-26T04:50:20.511Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-536', - title: 'Order item 540', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T17:20:00.000Z', - activity: 'f-green-Maritime-Patrol', - ownAssets: [ - { - asset: 'Green.7.146', - number: 1 - }, - { - asset: 'Green.11.224', - number: 5 - }, - { - asset: 'Green.12.15', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T14:40:00.000Z', - endDate: '2022-05-01T15:30:00.000Z', - force: 'f-green', - startTime: 1651416000000, - endTime: 1651419000000, - geomId: 'Patrol-0', - name: 'f-green//6.998564720153809//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -0.7267, - 19.325 - ], - [ - 52.31, - 7.34 - ], - [ - 104.87, - -5.1 - ], - [ - 104.5546, - -5.4254 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T15:30:00.000Z', - endDate: '2022-05-01T15:30:00.000Z', - force: 'f-green', - startTime: 1651419000000, - endTime: 1651419000000, - geomId: 'Patrol-1', - name: 'f-green//13.997129440307617//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 103.54199570194527, - -4.414957092803186 - ], - [ - 103.54199570194527, - -6.434152817166107 - ], - [ - 105.57059941819564, - -6.434152817166107 - ], - [ - 105.57059941819564, - -4.414957092803186 - ], - [ - 103.54199570194527, - -4.414957092803186 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T15:30:00.000Z', - endDate: '2022-05-01T17:20:00.000Z', - force: 'f-green', - startTime: 1651419000000, - endTime: 1651425600000, - geomId: 'Patrol-2', - name: 'f-green//20.995694160461426//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 104.5546, - -5.4254 - ], - [ - -0.63, - 18.93 - ], - [ - -0.7267, - 19.325 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_536', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-28T13:18:04.519Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-539', - title: 'Order item 543', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T17:15:00.000Z', - activity: 'f-blue-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.3.319', - number: 4 - }, - { - asset: 'Blue.12.337', - number: 3 - }, - { - asset: 'Blue.5.67', - number: 4 - }, - { - asset: 'Blue.4.312', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_539', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Activity', - timestamp: '2022-09-27T03:29:49.316Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-542', - title: 'Order item 546', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T18:35:00.000Z', - activity: 'f-red-Air-Defensive Counter Air', - ownAssets: [ - { - asset: 'Red.8.312', - number: 2 - }, - { - asset: 'Red.2.269', - number: 1 - }, - { - asset: 'Red.10.340', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Defensive Counter Air-0', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//Route out', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-red', - startTime: 1651416900000, - endTime: 1651419900000, - geomId: 'Defensive Counter Air-0', - name: 'f-red//3.3637385983020067//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 119.9716, - 38.8136 - ], - [ - 88.62, - 35.46 - ], - [ - 57.27, - 33.11 - ], - [ - 25.2, - 30.04 - ], - [ - -5.57, - 26.26 - ], - [ - -5.9347, - 26.5316 - ] - ] - } - } - }, - { - uniqid: 'Defensive Counter Air-1', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//DCA Area', - startDate: '2022-05-01T15:45:00.000Z', - endDate: '2022-05-01T16:55:00.000Z', - force: 'f-red', - startTime: 1651419900000, - endTime: 1651424100000, - geomId: 'Defensive Counter Air-1', - name: 'f-red//6.727477196604013//DCA Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -10.035919081110602, - 30.024858574451496 - ], - [ - -10.035919081110602, - 22.928050751148515 - ], - [ - -2.0796111265750334, - 22.928050751148515 - ], - [ - -2.0796111265750334, - 30.024858574451496 - ], - [ - -10.035919081110602, - 30.024858574451496 - ] - ] - ] - } - } - }, - { - uniqid: 'Defensive Counter Air-2', - geometry: { - type: 'Feature', - properties: { - id: 'Defensive Counter Air//Route back', - startDate: '2022-05-01T16:55:00.000Z', - endDate: '2022-05-01T18:35:00.000Z', - force: 'f-red', - startTime: 1651424100000, - endTime: 1651430100000, - geomId: 'Defensive Counter Air-2', - name: 'f-red//10.09121579490602//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 25.99, - 29.13 - ], - [ - 56.85, - 32.67 - ], - [ - 87.99, - 35.49 - ], - [ - 120.42, - 38.59 - ], - [ - 119.9716, - 38.8136 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_542', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-21T23:25:34.904Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-545', - title: 'Order item 549', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T17:25:00.000Z', - activity: 'f-red-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Red.4.124', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_545', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--Resupply', - timestamp: '2022-09-29T17:05:21.283Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-548', - title: 'Order item 552', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - activity: 'f-red-Air-Resupply', - ownAssets: [ - { - asset: 'Red.8.155', - number: 0 - }, - { - asset: 'Red.1.392', - number: 0 - }, - { - asset: 'Red.1.342', - number: 4 - }, - { - asset: 'Red.10.6', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-red', - startTime: 1651416900000, - endTime: 1651419900000, - geomId: 'Resupply-0', - name: 'f-red//5.302597142755985//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 85.5999, - -2.1256 - ], - [ - 34.29, - 60.65 - ], - [ - 34.6069, - 61.0041 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T15:45:00.000Z', - endDate: '2022-05-01T18:35:00.000Z', - force: 'f-red', - startTime: 1651419900000, - endTime: 1651430100000, - geomId: 'Resupply-1', - name: 'f-red//10.60519428551197//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 27.247745126124457, - 64.03764395345901 - ], - [ - 27.247745126124457, - 57.64171028467038 - ], - [ - 40.620873927622, - 57.64171028467038 - ], - [ - 40.620873927622, - 64.03764395345901 - ], - [ - 27.247745126124457, - 64.03764395345901 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T18:35:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - force: 'f-red', - startTime: 1651430100000, - endTime: 1651431300000, - geomId: 'Resupply-2', - name: 'f-red//15.907791428267956//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 34.6069, - 61.0041 - ], - [ - 46.9, - 44.94 - ], - [ - 59.98, - 29.67 - ], - [ - 72.35, - 13.69 - ], - [ - 86, - -2.01 - ], - [ - 85.5999, - -2.1256 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_548', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-25T08:29:08.452Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-551', - title: 'Order item 555', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T17:05:00.000Z', - activity: 'f-green-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Green.10.6', - number: 4 - }, - { - asset: 'Green.7.183', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T14:55:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-green', - startTime: 1651416900000, - endTime: 1651419900000, - geomId: 'Land Close Combat-0', - name: 'f-green//4.6121581718325615//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -7.3539, - 25.067 - ], - [ - 40.09, - 8 - ], - [ - 86.96, - -7.62 - ], - [ - 86.6046, - -8.1088 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T15:45:00.000Z', - endDate: '2022-05-01T15:45:00.000Z', - force: 'f-green', - startTime: 1651419900000, - endTime: 1651419900000, - geomId: 'Land Close Combat-1', - name: 'f-green//9.224316343665123//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 84.89459674904812, - -6.405898208428025 - ], - [ - 84.89459674904812, - -9.804515036809573 - ], - [ - 88.3291185280012, - -9.804515036809573 - ], - [ - 88.3291185280012, - -6.405898208428025 - ], - [ - 84.89459674904812, - -6.405898208428025 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T15:45:00.000Z', - endDate: '2022-05-01T17:05:00.000Z', - force: 'f-green', - startTime: 1651419900000, - endTime: 1651424700000, - geomId: 'Land Close Combat-2', - name: 'f-green//13.836474515497684//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 86.6046, - -8.1088 - ], - [ - 39.54, - 8.56 - ], - [ - -7.08, - 24.65 - ], - [ - -7.3539, - 25.067 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_551', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'MAR', - roleId: 'red-mar', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'SOF--SOFActivity', - timestamp: '2022-09-25T13:36:56.412Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-554', - title: 'Order item 558', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T20:05:00.000Z', - activity: 'f-red-SOF-Activity', - ownAssets: [ - { - asset: 'Red.11.77', - number: 0 - }, - { - asset: 'Red.7.193', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route out', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - force: 'f-red', - startTime: 1651417500000, - endTime: 1651420500000, - geomId: 'Activity-0', - name: 'f-red//2.8151403721421957//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 113.8022, - 32.3971 - ], - [ - 94.47, - 33.14 - ], - [ - 75.15, - 33.88 - ], - [ - 56.1, - 34.9 - ], - [ - 36.34, - 36.21 - ], - [ - 36.2378, - 36.2315 - ] - ] - } - } - }, - { - uniqid: 'Activity-1', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Effect Location', - startDate: '2022-05-01T15:55:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - force: 'f-red', - startTime: 1651420500000, - endTime: 1651431300000, - geomId: 'Activity-1', - name: 'f-red//5.630280744284391//Effect Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 34.88668904164936, - 37.298762999189975 - ], - [ - 34.88668904164936, - 35.149458054269864 - ], - [ - 37.552275944722, - 35.149458054269864 - ], - [ - 37.552275944722, - 37.298762999189975 - ], - [ - 34.88668904164936, - 37.298762999189975 - ] - ] - ] - } - } - }, - { - uniqid: 'Activity-2', - geometry: { - type: 'Feature', - properties: { - id: 'Activity//Route back', - startDate: '2022-05-01T18:55:00.000Z', - endDate: '2022-05-01T20:05:00.000Z', - force: 'f-red', - startTime: 1651431300000, - endTime: 1651435500000, - geomId: 'Activity-2', - name: 'f-red//8.445421116426587//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 36.2378, - 36.2315 - ], - [ - 61.72, - 34.8 - ], - [ - 88.39, - 33.55 - ], - [ - 113.34, - 32.59 - ], - [ - 113.8022, - 32.3971 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_554', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'CO', - roleId: 'red-CO', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Activity', - timestamp: '2022-09-22T00:28:45.162Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-557', - title: 'Order item 561', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - activity: 'f-red-Maritime-Sea Denial', - ownAssets: [ - { - asset: 'Red.6.366', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Sea Denial-0', - geometry: { - type: 'Feature', - properties: { - id: 'Sea Denial//Area', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - force: 'f-red', - startTime: 1651417500000, - endTime: 1651420500000, - geomId: 'Sea Denial-0', - name: 'f-red//4.911543734371662//Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -9.014820859654773, - 67.77709857897023 - ], - [ - -9.014820859654773, - 66.19057907005173 - ], - [ - -4.94953568841155, - 66.19057907005173 - ], - [ - -4.94953568841155, - 67.77709857897023 - ], - [ - -9.014820859654773, - 67.77709857897023 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_557', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Transit', - timestamp: '2022-09-23T01:04:34.703Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-560', - title: 'Order item 564', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - activity: 'f-green-Land-Transit', - ownAssets: [ - { - asset: 'Green.11.76', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T15:05:00.000Z', - endDate: '2022-05-01T15:55:00.000Z', - force: 'f-green', - startTime: 1651417500000, - endTime: 1651420500000, - geomId: 'Transit-0', - name: 'f-green//5.901368277147412//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 47.8344, - 7.0962 - ], - [ - 47.79, - 23.94 - ], - [ - 48.97, - 41.02 - ], - [ - 48.44, - 58.38 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_560', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 3', - roleId: 'blue-mtg-3', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--ISTAR', - timestamp: '2022-09-28T15:24:25.034Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-563', - title: 'Order item 567', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T20:15:00.000Z', - activity: 'f-blue-Land-ISTAR', - ownAssets: [ - { - asset: 'Blue.5.5', - number: 4 - }, - { - asset: 'Blue.7.341', - number: 2 - }, - { - asset: 'Blue.4.390', - number: 1 - }, - { - asset: 'Blue.11.153', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'ISTAR-0', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route out', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-blue', - startTime: 1651418100000, - endTime: 1651421100000, - geomId: 'ISTAR-0', - name: 'f-blue//5.784613981842995//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 76.54, - 19.36 - ], - [ - 76.0625, - 19.3411 - ] - ] - } - } - }, - { - uniqid: 'ISTAR-1', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Patrol Area', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T18:35:00.000Z', - force: 'f-blue', - startTime: 1651421100000, - endTime: 1651430100000, - geomId: 'ISTAR-1', - name: 'f-blue//11.56922796368599//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 72.15043326536062, - 22.903511758584163 - ], - [ - 72.15043326536062, - 15.698833157441667 - ], - [ - 79.80553411066819, - 15.698833157441667 - ], - [ - 79.80553411066819, - 22.903511758584163 - ], - [ - 72.15043326536062, - 22.903511758584163 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-2', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Observation Area', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T18:35:00.000Z', - force: 'f-blue', - startTime: 1651421100000, - endTime: 1651430100000, - geomId: 'ISTAR-2', - name: 'f-blue//17.353841945528984//Observation Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 75.28318366499342, - 20.07143345973979 - ], - [ - 75.28318366499342, - 18.607483639263428 - ], - [ - 76.83485820853501, - 18.607483639263428 - ], - [ - 76.83485820853501, - 20.07143345973979 - ], - [ - 75.28318366499342, - 20.07143345973979 - ] - ] - ] - } - } - }, - { - uniqid: 'ISTAR-3', - geometry: { - type: 'Feature', - properties: { - id: 'ISTAR//Route back', - startDate: '2022-05-01T18:35:00.000Z', - endDate: '2022-05-01T20:15:00.000Z', - force: 'f-blue', - startTime: 1651430100000, - endTime: 1651436100000, - geomId: 'ISTAR-3', - name: 'f-blue//23.13845592737198//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 76.0625, - 19.3411 - ], - [ - 51.01, - 32.56 - ], - [ - 26.23, - 47.05 - ], - [ - 1.73, - 59.83 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_563', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-22T03:28:16.156Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-566', - title: 'Order item 570', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T20:05:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.6.153', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - }, - { - asset: 'Blue.11.50' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-green', - startTime: 1651418100000, - endTime: 1651421100000, - geomId: 'Patrol-0', - name: 'f-green//4.561280857771635//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 10.8677, - 30.5608 - ], - [ - 32.97, - 32.81 - ], - [ - 56.32, - 35.31 - ], - [ - 78.96, - 38.09 - ], - [ - 78.6237, - 37.8206 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T16:55:00.000Z', - force: 'f-green', - startTime: 1651421100000, - endTime: 1651424100000, - geomId: 'Patrol-1', - name: 'f-green//9.12256171554327//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 73.26902699926563, - 41.701206428458384 - ], - [ - 73.26902699926563, - 33.72228193996869 - ], - [ - 83.42905179908965, - 33.72228193996869 - ], - [ - 83.42905179908965, - 41.701206428458384 - ], - [ - 73.26902699926563, - 41.701206428458384 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T16:55:00.000Z', - endDate: '2022-05-01T20:05:00.000Z', - force: 'f-green', - startTime: 1651424100000, - endTime: 1651435500000, - geomId: 'Patrol-2', - name: 'f-green//13.683842573314905//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 78.6237, - 37.8206 - ], - [ - 10.43, - 30.46 - ], - [ - 10.8677, - 30.5608 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_566', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'MTG 1', - roleId: 'blue-mtg-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-28T13:16:08.068Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-569', - title: 'Order item 573', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T17:45:00.000Z', - activity: 'f-blue-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.11.121', - number: 1 - }, - { - asset: 'Blue.12.337', - number: 1 - }, - { - asset: 'Blue.3.266', - number: 5 - }, - { - asset: 'Blue.10.308', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_569', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Air & AD', - roleId: 'red-air', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Land--Activity', - timestamp: '2022-09-22T20:48:00.771Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-572', - title: 'Order item 576', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T22:05:00.000Z', - activity: 'f-red-Land-Land Close Combat', - ownAssets: [ - { - asset: 'Red.7.308', - number: 2 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Land Close Combat-0', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route out', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-red', - startTime: 1651418100000, - endTime: 1651421100000, - geomId: 'Land Close Combat-0', - name: 'f-red//3.794878114014864//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 126.659, - 6.4886 - ], - [ - 60.57, - 16.27 - ], - [ - -6.07, - 26.5 - ], - [ - -5.9347, - 26.5316 - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-1', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Combat Location', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - force: 'f-red', - startTime: 1651421100000, - endTime: 1651431300000, - geomId: 'Land Close Combat-1', - name: 'f-red//7.589756228029728//Combat Location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - -7.784270818643676, - 28.150562198784375 - ], - [ - -7.784270818643676, - 24.889444515632835 - ], - [ - -4.136957450947561, - 24.889444515632835 - ], - [ - -4.136957450947561, - 28.150562198784375 - ], - [ - -7.784270818643676, - 28.150562198784375 - ] - ] - ] - } - } - }, - { - uniqid: 'Land Close Combat-2', - geometry: { - type: 'Feature', - properties: { - id: 'Land Close Combat//Route back', - startDate: '2022-05-01T18:55:00.000Z', - endDate: '2022-05-01T22:05:00.000Z', - force: 'f-red', - startTime: 1651431300000, - endTime: 1651442700000, - geomId: 'Land Close Combat-2', - name: 'f-red//11.384634342044592//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -5.9347, - 26.5316 - ], - [ - 126.8, - 6.82 - ], - [ - 126.659, - 6.4886 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_572', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Cyber--Effects', - timestamp: '2022-09-21T18:03:54.264Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-575', - title: 'Order item 579', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T17:35:00.000Z', - activity: 'f-blue-Cyber-Targeted Activity', - ownAssets: [ - { - asset: 'Blue.3.315', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - }, - { - asset: 'Green.11.351' - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_575', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--Patrol', - timestamp: '2022-09-25T05:03:48.548Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-578', - title: 'Order item 582', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T19:05:00.000Z', - activity: 'f-green-Land-Patrol', - ownAssets: [ - { - asset: 'Green.4.141', - number: 4 - }, - { - asset: 'Green.11.176', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Patrol-0', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route out', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-green', - startTime: 1651418100000, - endTime: 1651421100000, - geomId: 'Patrol-0', - name: 'f-green//3.602160055190325//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.6461, - 0.9649 - ], - [ - 17.85, - 19.94 - ], - [ - 33.31, - 39.18 - ], - [ - 49.06, - 58.7 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - }, - { - uniqid: 'Patrol-1', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Patrol Area', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T17:55:00.000Z', - force: 'f-green', - startTime: 1651421100000, - endTime: 1651427700000, - geomId: 'Patrol-1', - name: 'f-green//7.20432011038065//Patrol Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 46.5177117501403, - 59.48298629801334 - ], - [ - 46.5177117501403, - 57.12335016281206 - ], - [ - 51.01793038323904, - 57.12335016281206 - ], - [ - 51.01793038323904, - 59.48298629801334 - ], - [ - 46.5177117501403, - 59.48298629801334 - ] - ] - ] - } - } - }, - { - uniqid: 'Patrol-2', - geometry: { - type: 'Feature', - properties: { - id: 'Patrol//Route back', - startDate: '2022-05-01T17:55:00.000Z', - endDate: '2022-05-01T19:05:00.000Z', - force: 'f-green', - startTime: 1651427700000, - endTime: 1651431900000, - geomId: 'Patrol-2', - name: 'f-green//10.806480165570974//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.8429, - 58.3229 - ], - [ - 1.79, - 1.29 - ], - [ - 1.6461, - 0.9649 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_578', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Blue', - forceColor: '#3dd0ff', - roleName: 'AEW 1', - roleId: 'blue-aew-1', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-blue' - }, - messageType: 'Land--EWAttack', - timestamp: '2022-09-24T21:47:43.623Z', - turnNumber: 3 - }, - message: { - Reference: 'Blue-581', - title: 'Order item 585', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - activity: 'f-blue-Land-EW Attack', - ownAssets: [ - { - asset: 'Blue.12.186', - number: 2 - }, - { - asset: 'Blue.8.162', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Red.8.78' - } - ], - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:05:00.000Z', - force: 'f-blue', - startTime: 1651418100000, - endTime: 1651421100000, - geomId: 'EW Attack-0', - name: 'f-blue//6.845932777971029//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 1.7498, - 60.2232 - ], - [ - 78.35, - 37.72 - ], - [ - 78.6237, - 37.8206 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-05-01T16:05:00.000Z', - endDate: '2022-05-01T17:55:00.000Z', - force: 'f-blue', - startTime: 1651421100000, - endTime: 1651427700000, - geomId: 'EW Attack-1', - name: 'f-blue//13.691865555942059//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 76.68381877730447, - 39.30593054382421 - ], - [ - 76.68381877730447, - 36.30472006106523 - ], - [ - 80.48627186790318, - 36.30472006106523 - ], - [ - 80.48627186790318, - 39.30593054382421 - ], - [ - 76.68381877730447, - 39.30593054382421 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-05-01T17:55:00.000Z', - endDate: '2022-05-01T18:55:00.000Z', - force: 'f-blue', - startTime: 1651427700000, - endTime: 1651431300000, - geomId: 'EW Attack-2', - name: 'f-blue//20.537798333913088//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 78.6237, - 37.8206 - ], - [ - 59.83, - 43.88 - ], - [ - 40.02, - 48.92 - ], - [ - 20.49, - 54.25 - ], - [ - 1.25, - 59.85 - ], - [ - 1.7498, - 60.2232 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-blue_581', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Land--MissileStrike', - timestamp: '2022-09-22T09:06:41.019Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-584', - title: 'Order item 593', - startDate: '2022-05-01T15:15:00.000Z', - endDate: '2022-05-01T16:55:00.000Z', - activity: 'f-green-Land-Strike', - ownAssets: [ - { - asset: 'Green.3.52', - number: 2, - missileType: 'Standard Cruise' - }, - { - asset: 'Green.10.367', - number: 1, - missileType: 'IRBM' - }, - { - asset: 'Green.6.395', - number: 5, - missileType: 'Low Obs Cruise' - }, - { - asset: 'Green.12.136', - number: 3, - missileType: 'SRBM' - } - ], - otherAssets: [ - { - asset: 'Blue.11.78', - missileType: 'Jet OWA UAV', - number: 2 - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_584', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Maritime--Resupply', - timestamp: '2022-09-29T16:27:36.143Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-587', - title: 'Order item 591', - startDate: '2022-05-01T15:20:00.000Z', - endDate: '2022-05-01T17:20:00.000Z', - activity: 'f-red-Maritime-Resupply', - ownAssets: [ - { - asset: 'Red.4.136', - number: 1 - }, - { - asset: 'Red.9.391', - number: 0 - }, - { - asset: 'Red.3.359', - number: 1 - }, - { - asset: 'Red.2.40', - number: 1 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Resupply-0', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route out', - startDate: '2022-05-01T15:20:00.000Z', - endDate: '2022-05-01T16:10:00.000Z', - force: 'f-red', - startTime: 1651418400000, - endTime: 1651421400000, - geomId: 'Resupply-0', - name: 'f-red//5.0137417279183865//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 64.0937, - 46.4545 - ], - [ - 49.99, - 28.18 - ], - [ - 35.38, - 10.39 - ], - [ - 35.7959, - 10.2395 - ] - ] - } - } - }, - { - uniqid: 'Resupply-1', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Resupply at this location', - startDate: '2022-05-01T16:10:00.000Z', - endDate: '2022-05-01T16:50:00.000Z', - force: 'f-red', - startTime: 1651421400000, - endTime: 1651423800000, - geomId: 'Resupply-1', - name: 'f-red//10.027483455836773//Resupply at this location' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 34.50829091473217, - 11.498740571306847 - ], - [ - 34.50829091473217, - 8.975237800902198 - ], - [ - 37.07330464398166, - 8.975237800902198 - ], - [ - 37.07330464398166, - 11.498740571306847 - ], - [ - 34.50829091473217, - 11.498740571306847 - ] - ] - ] - } - } - }, - { - uniqid: 'Resupply-2', - geometry: { - type: 'Feature', - properties: { - id: 'Resupply//Route back', - startDate: '2022-05-01T16:50:00.000Z', - endDate: '2022-05-01T17:20:00.000Z', - force: 'f-red', - startTime: 1651423800000, - endTime: 1651425600000, - geomId: 'Resupply-2', - name: 'f-red//15.04122518375516//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 35.7959, - 10.2395 - ], - [ - 42.63, - 19.55 - ], - [ - 50.39, - 28.77 - ], - [ - 57.42, - 37.28 - ], - [ - 63.74, - 46.07 - ], - [ - 64.0937, - 46.4545 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_587', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Info Ops--AreaEffects', - timestamp: '2022-09-26T10:23:33.589Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-590', - title: 'Order item 594', - startDate: '2022-05-01T15:20:00.000Z', - endDate: '2022-05-01T16:10:00.000Z', - activity: 'f-red-Info Ops-Area Activity', - ownAssets: [ - { - asset: 'Red.2.40', - number: 3 - }, - { - asset: 'Red.4.235', - number: 5 - }, - { - asset: 'Red.12.143', - number: 4 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'Area Activity-0', - geometry: { - type: 'Feature', - properties: { - id: 'Area Activity//Area of effect', - startDate: '2022-05-01T15:20:00.000Z', - endDate: '2022-05-01T16:10:00.000Z', - force: 'f-red', - startTime: 1651418400000, - endTime: 1651421400000, - geomId: 'Area Activity-0', - name: 'f-red//4.937777955085039//Area of effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 6.937290223849417, - 19.18916021205628 - ], - [ - 6.937290223849417, - 18.614546457880802 - ], - [ - 7.54466688492044, - 18.614546457880802 - ], - [ - 7.54466688492044, - 19.18916021205628 - ], - [ - 6.937290223849417, - 19.18916021205628 - ] - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_590', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Green', - forceColor: '#7ed321', - roleName: 'CO', - roleId: 'green-co', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-green' - }, - messageType: 'Air--Transit', - timestamp: '2022-09-27T18:03:31.825Z', - turnNumber: 3 - }, - message: { - Reference: 'Green-593', - title: 'Order item 597', - startDate: '2022-05-01T15:30:00.000Z', - endDate: '2022-05-01T16:20:00.000Z', - activity: 'f-green-Air-Transit', - ownAssets: [ - { - asset: 'Green.11.164', - number: 0 - }, - { - asset: 'Green.12.298', - number: 0 - }, - { - asset: 'Green.7.146', - number: 3 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Red.5.351' - } - ], - location: [ - { - uniqid: 'Transit-0', - geometry: { - type: 'Feature', - properties: { - id: 'Transit//Route out', - startDate: '2022-05-01T15:30:00.000Z', - endDate: '2022-05-01T16:20:00.000Z', - force: 'f-green', - startTime: 1651419000000, - endTime: 1651422000000, - geomId: 'Transit-0', - name: 'f-green//3.755235344171524//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - -10.9186, - 4.5739 - ], - [ - 24.69, - 17.8 - ], - [ - 61.42, - 31.14 - ], - [ - 96.43, - 44.76 - ], - [ - 96.8897, - 44.4168 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-green_593', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Land & Fires', - roleId: 'red-land', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--EWAttack', - timestamp: '2022-09-25T07:27:30.852Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-596', - title: 'Order item 600', - startDate: '2022-05-01T15:40:00.000Z', - endDate: '2022-05-01T19:00:00.000Z', - activity: 'f-red-Air-EW Attack', - ownAssets: [ - { - asset: 'Red.3.107', - number: 5 - }, - { - asset: 'Red.11.181', - number: 0 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - }, - { - asset: 'Green.11.351' - } - ], - location: [ - { - uniqid: 'EW Attack-0', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route out', - startDate: '2022-05-01T15:40:00.000Z', - endDate: '2022-05-01T16:30:00.000Z', - force: 'f-red', - startTime: 1651419600000, - endTime: 1651422600000, - geomId: 'EW Attack-0', - name: 'f-red//6.466113913804293//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 135.1768, - -6.9834 - ], - [ - 113.68, - 1.96 - ], - [ - 93.12, - 9.84 - ], - [ - 71.84, - 19.01 - ], - [ - 50.84, - 27.46 - ], - [ - 50.4674, - 27.6081 - ] - ] - } - } - }, - { - uniqid: 'EW Attack-1', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//EW Area of Effect', - startDate: '2022-05-01T16:30:00.000Z', - endDate: '2022-05-01T16:50:00.000Z', - force: 'f-red', - startTime: 1651422600000, - endTime: 1651423800000, - geomId: 'EW Attack-1', - name: 'f-red//12.932227827608585//EW Area of Effect' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 47.09696749818455, - 30.472906805583875 - ], - [ - 47.09696749818455, - 24.666073227705635 - ], - [ - 53.6637526273547, - 24.666073227705635 - ], - [ - 53.6637526273547, - 30.472906805583875 - ], - [ - 47.09696749818455, - 30.472906805583875 - ] - ] - ] - } - } - }, - { - uniqid: 'EW Attack-2', - geometry: { - type: 'Feature', - properties: { - id: 'EW Attack//Route back', - startDate: '2022-05-01T16:50:00.000Z', - endDate: '2022-05-01T19:00:00.000Z', - force: 'f-red', - startTime: 1651423800000, - endTime: 1651431600000, - geomId: 'EW Attack-2', - name: 'f-red//19.398341741412878//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 50.4674, - 27.6081 - ], - [ - 92.34, - 9.91 - ], - [ - 135.58, - -7.41 - ], - [ - 135.1768, - -6.9834 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_596', - _rev: '2' - }, - { - messageType: 'PlanningMessage', - details: { - channel: 'channel-planning', - from: { - force: 'Red', - forceColor: '#ff3d43', - roleName: 'Threat Network', - roleId: 'red-threat', - iconURL: 'default_img/umpireDefault.png', - forceId: 'f-red' - }, - messageType: 'Air--TST', - timestamp: '2022-09-27T10:35:30.670Z', - turnNumber: 3 - }, - message: { - Reference: 'Red-599', - title: 'Order item 603', - startDate: '2022-05-01T16:00:00.000Z', - endDate: '2022-05-01T17:10:00.000Z', - activity: 'f-red-Air-Time Sensitive Targeting (TST)', - ownAssets: [ - { - asset: 'Red.2.269', - number: 0 - }, - { - asset: 'Red.7.283', - number: 2 - }, - { - asset: 'Red.9.10', - number: 5 - } - ], - otherAssets: [ - { - asset: 'Blue.11.78' - } - ], - location: [ - { - uniqid: 'Time Sensitive Targeting (TST)-0', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route out', - startDate: '2022-05-01T16:00:00.000Z', - endDate: '2022-05-01T16:50:00.000Z', - force: 'f-red', - startTime: 1651420800000, - endTime: 1651423800000, - geomId: 'Time Sensitive Targeting (TST)-0', - name: 'f-red//3.070413663983345//Route out' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 121.8838, - 26.9991 - ], - [ - 85, - 42.97 - ], - [ - 48.57, - 58.39 - ], - [ - 48.8429, - 58.3229 - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-1', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//TST Area', - startDate: '2022-05-01T16:50:00.000Z', - endDate: '2022-05-01T17:00:00.000Z', - force: 'f-red', - startTime: 1651423800000, - endTime: 1651424400000, - geomId: 'Time Sensitive Targeting (TST)-1', - name: 'f-red//6.14082732796669//TST Area' - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [ - 48.21484833907206, - 58.64814149981237 - ], - [ - 48.21484833907206, - 57.99463810945147 - ], - [ - 49.45944912365143, - 57.99463810945147 - ], - [ - 49.45944912365143, - 58.64814149981237 - ], - [ - 48.21484833907206, - 58.64814149981237 - ] - ] - ] - } - } - }, - { - uniqid: 'Time Sensitive Targeting (TST)-2', - geometry: { - type: 'Feature', - properties: { - id: 'Time Sensitive Targeting (TST)//Route back', - startDate: '2022-05-01T17:00:00.000Z', - endDate: '2022-05-01T17:10:00.000Z', - force: 'f-red', - startTime: 1651424400000, - endTime: 1651425000000, - geomId: 'Time Sensitive Targeting (TST)-2', - name: 'f-red//9.211240991950035//Route back' - }, - geometry: { - type: 'LineString', - coordinates: [ - [ - 48.8429, - 58.3229 - ], - [ - 67.15, - 50.63 - ], - [ - 85.28, - 42.77 - ], - [ - 103.7, - 35.2 - ], - [ - 121.41, - 26.91 - ], - [ - 121.8838, - 26.9991 - ] - ] - } - } - } - ] - }, - hasBeenRead: false, - _id: 'm_f-red_599', - _rev: '2' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'umpire', - roleName: 'Game Designer' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 1, - interaction: { - startTime: '2022-05-01T05:55:00.000Z', - endTime: '2022-05-01T05:35:00.000Z', - id: 'umpire-1', - orders1: 'm_f-blue_191', - orders2: 'm_f-red_11', - complete: true - } - }, - message: { - Reference: 'umpire-1', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//0' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'umpire', - roleName: 'Game Designer' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 2, - interaction: { - startTime: '2022-05-01T10:55:00.000Z', - endTime: '2022-05-01T08:05:00.000Z', - id: 'umpire-2', - orders1: 'm_f-blue_155', - orders2: 'm_f-red_431', - complete: true - } - }, - message: { - Reference: 'umpire-2', - healthOutcomes: [], - important: true, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//1' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'umpire', - roleName: 'Game Designer' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 3, - interaction: { - startTime: '2022-05-01T07:20:00.000Z', - endTime: '2022-05-01T06:25:00.000Z', - id: 'umpire-3', - orders1: 'm_f-blue_149', - orders2: 'm_f-red_257', - complete: true - } - }, - message: { - Reference: 'umpire-3', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//2' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'umpire', - roleName: 'Game Designer' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 4, - interaction: { - startTime: '2022-05-01T10:55:00.000Z', - endTime: '2022-05-01T05:05:00.000Z', - id: 'umpire-4', - orders1: 'm_f-blue_158', - orders2: 'm_f-red_428', - complete: true - } - }, - message: { - Reference: 'umpire-4', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//3' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'umpire', - roleName: 'Game Designer' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 5, - interaction: { - startTime: '2022-05-01T15:20:00.000Z', - endTime: '2022-05-01T15:30:00.000Z', - id: 'umpire-5', - orders1: 'm_f-blue_530', - orders2: 'm_f-red_590', - complete: true - } - }, - message: { - Reference: 'umpire-5', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//4' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-1', - roleName: 'Adjudicator 1' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 6, - interaction: { - startTime: '2022-05-01T16:00:00.000Z', - endTime: '2022-05-01T11:15:00.000Z', - id: 'umpire-6', - orders1: 'm_f-blue_242', - orders2: 'm_f-red_599', - complete: true - } - }, - message: { - Reference: 'umpire-6', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//5' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-1', - roleName: 'Adjudicator 1' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 7, - interaction: { - startTime: '2022-05-01T15:15:00.000Z', - endTime: '2022-05-01T06:00:00.000Z', - id: 'umpire-7', - orders1: 'm_f-blue_563', - orders2: 'm_f-red_98', - complete: true - } - }, - message: { - Reference: 'umpire-7', - healthOutcomes: [], - important: true, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//6' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-1', - roleName: 'Adjudicator 1' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 8, - interaction: { - startTime: '2022-05-01T09:00:00.000Z', - endTime: '2022-05-01T05:10:00.000Z', - id: 'umpire-8', - orders1: 'm_f-blue_341', - orders2: 'm_f-red_47', - complete: true - } - }, - message: { - Reference: 'umpire-8', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//7' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-1', - roleName: 'Adjudicator 1' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 9, - interaction: { - startTime: '2022-05-01T10:25:00.000Z', - endTime: '2022-05-01T07:55:00.000Z', - id: 'umpire-9', - orders1: 'm_f-blue_152', - orders2: 'm_f-red_395', - complete: true - } - }, - message: { - Reference: 'umpire-9', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//8' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-1', - roleName: 'Adjudicator 1' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.057Z', - turnNumber: 3, - counter: 10, - interaction: { - startTime: '2022-05-01T11:25:00.000Z', - endTime: '2022-05-01T13:05:00.000Z', - id: 'umpire-10', - orders1: 'm_f-blue_455', - orders2: 'm_f-red_383', - complete: true - } - }, - message: { - Reference: 'umpire-10', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.057Z//9' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-2', - roleName: 'Adjudicator 2' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.058Z', - turnNumber: 3, - counter: 11, - interaction: { - startTime: '2022-05-01T11:05:00.000Z', - endTime: '2022-05-01T09:25:00.000Z', - id: 'umpire-11', - orders1: 'm_f-blue_170', - orders2: 'm_f-red_440', - complete: true - } - }, - message: { - Reference: 'umpire-11', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.058Z//10' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-2', - roleName: 'Adjudicator 2' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.058Z', - turnNumber: 3, - counter: 12, - interaction: { - startTime: '2022-05-01T13:00:00.000Z', - endTime: '2022-05-01T02:00:00.000Z', - id: 'umpire-12', - orders1: 'm_f-blue_497', - orders2: 'm_f-red_44', - complete: true - } - }, - message: { - Reference: 'umpire-12', - healthOutcomes: [], - important: true, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.058Z//11' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-2', - roleName: 'Adjudicator 2' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.058Z', - turnNumber: 3, - counter: 13, - interaction: { - startTime: '2022-05-01T05:25:00.000Z', - endTime: '2022-05-01T06:15:00.000Z', - id: 'umpire-13', - orders1: 'm_f-blue_152', - orders2: 'm_f-red_185', - complete: true - } - }, - message: { - Reference: 'umpire-13', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.058Z//12' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-2', - roleName: 'Adjudicator 2' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.058Z', - turnNumber: 3, - counter: 14, - interaction: { - startTime: '2022-05-01T02:00:00.000Z', - endTime: '2022-05-01T05:10:00.000Z', - id: 'umpire-14', - orders1: 'm_f-blue_71', - orders2: 'm_f-red_47', - complete: true - } - }, - message: { - Reference: 'umpire-14', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.058Z//13' - }, - { - messageType: 'InteractionMessage', - details: { - from: { - force: 'Umpire', - forceColor: '#000000', - forceId: 'umpire', - iconURL: '', - roleId: 'adjud-2', - roleName: 'Adjudicator 2' - }, - channel: 'channel-planning', - messageType: 'p9adjudicate', - timestamp: '2023-03-01T16:40:49.058Z', - turnNumber: 3, - counter: 15, - interaction: { - startTime: '2022-05-01T06:55:00.000Z', - endTime: '2022-05-01T02:50:00.000Z', - id: 'umpire-15', - orders1: 'm_f-blue_230', - orders2: 'm_f-red_92', - complete: true - } - }, - message: { - Reference: 'umpire-15', - healthOutcomes: [], - important: false, - locationOutcomes: [], - perceptionOutcomes: [], - narrative: '', - messageType: 'AdjudicationOutcomes' - }, - _id: '2023-03-01T16:40:49.058Z//14' - } -] diff --git a/client/src/mocks/turn-period.mock.ts b/client/src/mocks/turn-period.mock.ts deleted file mode 100644 index 56245a7908..0000000000 --- a/client/src/mocks/turn-period.mock.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { TurnPeriods } from 'src/custom-types' - -const turnPeriod: TurnPeriods = [ - { - gameDate: '2022-05-01T00:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 1 - }, - { - gameDate: '2022-05-04T00:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 2 - }, - { - gameDate: '2022-05-07T00:00', - gameTurnTime: { - millis: 259200000, - unit: 'millis' - }, - gameTurn: 3 - } -] - -export default turnPeriod diff --git a/client/src/Components/local/map-control/styles.module.scss b/server/.config.json similarity index 100% rename from client/src/Components/local/map-control/styles.module.scss rename to server/.config.json diff --git a/server/providers/couchdb.js b/server/providers/couchdb.js index db537533e3..d4d992eb40 100644 --- a/server/providers/couchdb.js +++ b/server/providers/couchdb.js @@ -250,42 +250,6 @@ const couchDb = (app, io, pouchOptions) => { .catch(() => res.send([])) }) - app.get('/:wargame/turns', (req, res) => { - const databaseName = checkSqliteExists(req.params.wargame) - - if (!databaseName) { - res.status(404).send({ msg: 'Wrong Wargame Name', data: null }) - } - - const db = new CouchDB(couchDbURL(databaseName)) - - db.find({ - selector: { - adjudicationStartTime: { $exists: true } - }, - fields: ['data', 'gameTurn'] - }).then((result) => { - const uniqBy = (data, key) => { - return [ - ...new Map( - data.map(x => [key(x), - { - gameTurn: x.gameTurn, - gameTurnTime: x.data.overview.gameTurnTime, - gameDate: x.data.overview.gameDate - - }]) - ).values() - ] - } - - const resaultData = uniqBy(result.docs, it => it.gameTurn) - - res.send({ msg: 'ok', data: resaultData }) - }) - .catch(() => res.send([])) - }) - app.get('/:wargame/:force/:id/counter', (req, res) => { const databaseName = checkSqliteExists(req.params.wargame) diff --git a/server/providers/pouchdb.js b/server/providers/pouchdb.js index b5f6276125..cb54100b39 100644 --- a/server/providers/pouchdb.js +++ b/server/providers/pouchdb.js @@ -228,42 +228,6 @@ const pouchDb = (app, io, pouchOptions) => { .catch(() => res.send([])) }) - app.get('/:wargame/turns', (req, res) => { - const databaseName = checkSqliteExists(req.params.wargame) - - if (!databaseName) { - res.status(404).send({ msg: 'Wrong Wargame Name', data: null }) - } - - const db = new PouchDB(databaseName, pouchOptions) - - db.find({ - selector: { - adjudicationStartTime: { $exists: true } - }, - fields: ['data', 'gameTurn'] - - }).then((result) => { - const uniqBy = (data, key) => { - return [ - ...new Map( - data.map(x => [key(x), - { - gameTurn: x.gameTurn, - gameTurnTime: x.data.overview.gameTurnTime, - gameDate: x.data.overview.gameDate - - }]) - ).values() - ] - } - const resaultData = uniqBy(result.docs, it => it.gameTurn) - - res.send({ msg: 'ok', data: resaultData }) - }) - .catch(() => res.send([])) - }) - app.get('/:wargame/:dbname/logs', (req, res) => { const databaseName = checkSqliteExists(req.params.dbname)