Skip to content

Commit 81aac47

Browse files
authored
Merge pull request #697 from IFRCGo/feature/drones-to-cos
CoS Update with UAV
2 parents b3c52ff + f58c470 commit 81aac47

File tree

5 files changed

+183
-1
lines changed

5 files changed

+183
-1
lines changed

app/src/App/routes/SurgeRoutes.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,20 @@ const surgeCatalogueOtherGreenResponse = customWrapRoute({
11471147
},
11481148
});
11491149

1150+
const surgeCatalogueOtherUAV = customWrapRoute({
1151+
parent: surgeCatalogueLayout,
1152+
path: 'other/uav',
1153+
component: {
1154+
render: () => import('#views/SurgeCatalogueOtherUAV'),
1155+
props: {},
1156+
},
1157+
wrapperComponent: Auth,
1158+
context: {
1159+
title: 'Uncrewed Aerial Vehicles (Drones)',
1160+
visibility: 'anything',
1161+
},
1162+
});
1163+
11501164
const allDeployedPersonnel = customWrapRoute({
11511165
parent: rootLayout,
11521166
path: 'deployed-personnels/all',
@@ -1356,6 +1370,7 @@ function DeploymentCatalogueNavigate() {
13561370
'preparedness-for-effective-response-per': surgeCatalogueOtherPreparednessEffectiveResponse,
13571371
recovery: surgeCatalogueOtherRecovery,
13581372
greenresponse: surgeCatalogueOtherGreenResponse,
1373+
uav: surgeCatalogueOtherUAV,
13591374
},
13601375
};
13611376

@@ -1496,6 +1511,7 @@ export default {
14961511
surgeCatalogueOtherPreparednessEffectiveResponse,
14971512
surgeCatalogueOtherRecovery,
14981513
surgeCatalogueOtherGreenResponse,
1514+
surgeCatalogueOtherUAV,
14991515

15001516
allDeployedPersonnel,
15011517
allDeployedEmergencyResponseUnits,

app/src/views/SurgeCatalogueOther/i18n.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
"otherRecovery": "Recovery",
2525
"otherRecoveryDetail": "Supporting NS and Ops Management to ensure that recovery is considered early in the operation.",
2626
"otherGreen": "Green Response",
27-
"otherGreenDetail": "Analyse the environmental context, identify environmental risks caused by the crisis, and the potential environmental impact of the response and recovery interventions."
27+
"otherGreenDetail": "Analyse the environmental context, identify environmental risks caused by the crisis, and the potential environmental impact of the response and recovery interventions.",
28+
"otherUAV": " Drones – Uncrewed Aerial Vehicles (UAV) Team",
29+
"otherUAVDetail": "An Uncrewed Aerial Vehicle (UAV) Team, or colloquially a “Drone” Team, collects high quality, detailed aerial imagery for communications media, mapping, site survey, and situational awareness."
2830
}
2931
}

app/src/views/SurgeCatalogueOther/index.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ export function Component() {
9090
},
9191
];
9292

93+
const uavData: LinkData[] = [
94+
{
95+
title: strings.otherLearnMore,
96+
to: 'surgeCatalogueOtherUAV',
97+
withLinkIcon: true,
98+
},
99+
];
100+
93101
return (
94102
<SurgeCatalogueContainer
95103
heading={strings.otherTitle}
@@ -148,6 +156,11 @@ export function Component() {
148156
data={greenData}
149157
description={strings.otherGreenDetail}
150158
/>
159+
<CatalogueInfoCard
160+
title={strings.otherUAV}
161+
data={uavData}
162+
description={strings.otherUAVDetail}
163+
/>
151164
</SurgeCardContainer>
152165
</SurgeCatalogueContainer>
153166
);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"namespace": "surgeCatalogueOtherUAV",
3+
"strings": {
4+
"uavHeading": "Drones – Uncrewed Aerial Vehicles (UAV) Team",
5+
"capacity": "Capacity",
6+
"capacityDetails": "An Uncrewed Aerial Vehicle (UAV) Team, or colloquially a “Drone” Team, collects high quality, detailed aerial imagery for communications media, mapping, site survey, and situational awareness.",
7+
"emergencyServices": "Emergency Services",
8+
"emergencyServicesDetails": "A UAV deployment can be requested to support an operation for the following use-cases:",
9+
"otherUAVEmergencyListItemOneBullet": "Media communications: ",
10+
"otherUAVEmergencyListItemOne": "UAVs facilitate the targeted collection of digital aerial images and videos for use in media communications. Aerial imagery can serve as a broad and comprehensive tool to communicate the impact of certain disasters to a general audience. UAV collected imagery has a significant and timely impact with the media and broader public when used as a communication tool immediately post disaster.",
11+
"otherUAVEmergencyListItemTwoBullet": "Mapping: ",
12+
"otherUAVEmergencyListItemTwo": "UAVs can be used to systematically collect a large number of aerial images that can then be stitched together using processing software generating an operational field map. Mapping of affected areas can provide an important input for assessment and planning, as well as for establishing a baseline for recovery programs. Various limitations mean that mapping can cover smaller areas such as communities and will not cover an entire disaster-affected region.",
13+
"otherUAVEmergencyListItemThreeBullet": "Site survey: ",
14+
"otherUAVEmergencyListItemThree": "Baseline aerial mapping can be a key input to optimal planning of basecamp facilities, field hospitals, community latrines, distribution sites, water filtration installations and water distribution sites, etc. UAVs allow for rapid initial and ongoing site surveillance with minimal resources. ",
15+
"otherUAVEmergencyListItemFourBullet": "Situational awareness: ",
16+
"otherUAVEmergencyListItemFour": "UAVs facilitate immediate situational awareness as well as the ability to monitor evolving situations with limited risk to support staff. UAV technology can be utilized to scout safe routes and rapidly disseminate that information to a response team.",
17+
"mustAllow": "Note that the laws and regulations in the receiving National Society’s country must allow for the operation of drones, and accepting of the credentials of any deployed personnel.",
18+
"otherUAVPersonnel": "Personnel",
19+
"otherUAVPersonnelDetails": "The minimum team consists of an individual acting as a combined UAV Team Lead (UTL) / Pilot in Command (PIC) in addition to a Safety Officer (SA). The SA may be staffed/provided by the receiving National Society. The UTL and PIC can be separate individuals",
20+
"otherUAVstandardComponents": "Standard Components",
21+
"otherUAVstandardComponentsListItemOne": "2x quadcopter drone systems (e.g. DJI or Autel camera drones) with extra batteries and spare parts to enable extended daily missions and equipment redundancy",
22+
"otherUAVstandardComponentsListItemTwo": "Computer equipment for image processing and file storage/sharing",
23+
"otherUAVspecifications": "Specifications",
24+
"otherUAVcostHeader": "Cost (indicative)",
25+
"otherUAVcost": "CHF 12,000 (approximately 4,000 per drone system and 4,000 for computer equipment)",
26+
"otherUAVproviderHeader": "National societies providing this service",
27+
"otherUAVprovider": "American Red Cross",
28+
"rapidResponse": "Rapid Response Personnel Role Profile",
29+
"rapidResponseDetail": "Details about the expectations for this specialty can be found in the Role Profile: {link}",
30+
"otherLink": "Pilot in Command and UAV Team Lead"
31+
}
32+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import { useMemo } from 'react';
2+
import { useTranslation } from '@ifrc-go/ui/hooks';
3+
import { resolveToComponent } from '@ifrc-go/ui/utils';
4+
5+
import SurgeCatalogueContainer from '#components/domain/SurgeCatalogueContainer';
6+
import SurgeContentContainer from '#components/domain/SurgeContentContainer';
7+
import Link from '#components/Link';
8+
9+
import i18n from './i18n.json';
10+
11+
// eslint-disable-next-line import/prefer-default-export
12+
export function Component() {
13+
const strings = useTranslation(i18n);
14+
15+
const imageList = useMemo(
16+
() => ([
17+
{ src: 'https://prddsgofilestorage.blob.core.windows.net/api/documents/surge/uav1.jpg' },
18+
{ src: 'https://prddsgofilestorage.blob.core.windows.net/api/documents/surge/uav2.jpg' },
19+
{ src: 'https://prddsgofilestorage.blob.core.windows.net/api/documents/surge/uav3.jpg' },
20+
{ src: 'https://prddsgofilestorage.blob.core.windows.net/api/documents/surge/uav4.jpg' },
21+
]),
22+
[],
23+
);
24+
25+
return (
26+
<SurgeCatalogueContainer
27+
heading={strings.uavHeading}
28+
goBackFallbackLink="surgeCatalogueOther"
29+
imageList={imageList}
30+
>
31+
<SurgeContentContainer
32+
heading={strings.capacity}
33+
>
34+
<div>{strings.capacityDetails}</div>
35+
</SurgeContentContainer>
36+
37+
<SurgeContentContainer
38+
heading={strings.emergencyServices}
39+
>
40+
<div>{strings.emergencyServicesDetails}</div>
41+
<ul>
42+
<li>
43+
<strong>{strings.otherUAVEmergencyListItemOneBullet}</strong>
44+
{strings.otherUAVEmergencyListItemOne}
45+
</li>
46+
<li>
47+
<strong>{strings.otherUAVEmergencyListItemTwoBullet}</strong>
48+
{strings.otherUAVEmergencyListItemTwo}
49+
</li>
50+
<li>
51+
<strong>{strings.otherUAVEmergencyListItemThreeBullet}</strong>
52+
{strings.otherUAVEmergencyListItemThree}
53+
</li>
54+
<li>
55+
<strong>{strings.otherUAVEmergencyListItemFourBullet}</strong>
56+
{strings.otherUAVEmergencyListItemFour}
57+
</li>
58+
</ul>
59+
<div>{strings.mustAllow}</div>
60+
</SurgeContentContainer>
61+
62+
<SurgeContentContainer
63+
heading={strings.otherUAVPersonnel}
64+
>
65+
<div>{strings.otherUAVPersonnelDetails}</div>
66+
</SurgeContentContainer>
67+
68+
<SurgeContentContainer
69+
heading={strings.otherUAVstandardComponents}
70+
>
71+
<ul>
72+
<li>
73+
{strings.otherUAVstandardComponentsListItemOne}
74+
</li>
75+
<li>
76+
{strings.otherUAVstandardComponentsListItemTwo}
77+
</li>
78+
</ul>
79+
</SurgeContentContainer>
80+
81+
<SurgeContentContainer
82+
heading={strings.otherUAVspecifications}
83+
>
84+
<div>
85+
<strong>{strings.otherUAVcostHeader}</strong>
86+
<br />
87+
{strings.otherUAVcost}
88+
</div>
89+
<div>
90+
<strong>{strings.otherUAVproviderHeader}</strong>
91+
<br />
92+
{strings.otherUAVprovider}
93+
</div>
94+
</SurgeContentContainer>
95+
96+
<SurgeContentContainer
97+
heading={strings.rapidResponse}
98+
>
99+
<div>
100+
{resolveToComponent(
101+
strings.rapidResponseDetail,
102+
{
103+
link: (
104+
<Link
105+
href="https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/EVJrxE_3BpxOliHeThEBk_oB3nAcku47-5BxA-sXV2s8YQ"
106+
external
107+
>
108+
{strings.otherLink}
109+
</Link>
110+
),
111+
},
112+
)}
113+
</div>
114+
</SurgeContentContainer>
115+
</SurgeCatalogueContainer>
116+
);
117+
}
118+
119+
Component.displayName = 'SurgeCatalogueOtherUAV';

0 commit comments

Comments
 (0)