Skip to content

Commit c3e23fa

Browse files
authored
Merge pull request #1708 from IFRCGo/feature/surge-cos-updates-2025-febr
Add Surge CoS Administration section
2 parents b95d52f + 0ad7a38 commit c3e23fa

File tree

19 files changed

+2488
-65
lines changed

19 files changed

+2488
-65
lines changed

.changeset/wild-clocks-return.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"go-web-app": patch
3+
---
4+
5+
- Add Surge CoS Administration section
6+
- Add Surge CoS Faecal Sludge Management (FSM) section
7+
- Update Surge CoS IT&T section
8+
- Update Surge CoS Basecamp section (as OSH)

app/src/App/routes/SurgeRoutes.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,20 @@ const surgeCatalogueEmergencyNeedsAssessmentCell = customWrapRoute({
150150
},
151151
});
152152

153+
const surgeCatalogueAdministration = customWrapRoute({
154+
parent: surgeCatalogueLayout,
155+
path: 'administration',
156+
component: {
157+
render: () => import('#views/SurgeCatalogueAdministration'),
158+
props: {},
159+
},
160+
wrapperComponent: Auth,
161+
context: {
162+
title: 'Administration',
163+
visibility: 'anything',
164+
},
165+
});
166+
153167
const surgeCatalogueBasecamp = customWrapRoute({
154168
parent: surgeCatalogueLayout,
155169
path: 'basecamp',
@@ -220,6 +234,34 @@ const surgeCatalogueBasecampFacilityManagement = customWrapRoute({
220234
},
221235
});
222236

237+
const surgeCatalogueBasecampOffice = customWrapRoute({
238+
parent: surgeCatalogueLayout,
239+
path: 'basecamp/office',
240+
component: {
241+
render: () => import('#views/SurgeCatalogueBasecampOffice'),
242+
props: {},
243+
},
244+
wrapperComponent: Auth,
245+
context: {
246+
title: 'Basecamp Office',
247+
visibility: 'anything',
248+
},
249+
});
250+
251+
const surgeCatalogueBasecampWelcome = customWrapRoute({
252+
parent: surgeCatalogueLayout,
253+
path: 'basecamp/welcome',
254+
component: {
255+
render: () => import('#views/SurgeCatalogueBasecampWelcome'),
256+
props: {},
257+
},
258+
wrapperComponent: Auth,
259+
context: {
260+
title: 'Basecamp Admin and Welcome Service',
261+
visibility: 'anything',
262+
},
263+
});
264+
223265
const surgeCatalogueCash = customWrapRoute({
224266
parent: surgeCatalogueLayout,
225267
path: 'cash',
@@ -951,6 +993,20 @@ const surgeCatalogueWashHwts = customWrapRoute({
951993
},
952994
});
953995

996+
const surgeCatalogueWashSludge = customWrapRoute({
997+
parent: surgeCatalogueLayout,
998+
path: 'wash/sludge',
999+
component: {
1000+
render: () => import('#views/SurgeCatalogueWashSludge'),
1001+
props: {},
1002+
},
1003+
wrapperComponent: Auth,
1004+
context: {
1005+
title: 'Faecal Sludge Management',
1006+
visibility: 'anything',
1007+
},
1008+
});
1009+
9541010
const surgeCatalogueRelief = customWrapRoute({
9551011
parent: surgeCatalogueLayout,
9561012
path: 'relief',
@@ -1272,6 +1328,7 @@ function DeploymentCatalogueNavigate() {
12721328
const catalogueRouteMap: Record<string, WrappedRoute> = {
12731329
overview: surgeCatalogueOverview,
12741330
emergency: surgeCatalogueEmergencyNeedsAssessment,
1331+
administration: surgeCatalogueAdministration,
12751332
basecamp: surgeCatalogueBasecamp,
12761333
cash: surgeCatalogueCash,
12771334
community: surgeCatalogueCommunityEngagement,
@@ -1299,6 +1356,8 @@ function DeploymentCatalogueNavigate() {
12991356
'eru-base-camp-medium': surgeCatalogueBasecampEruMedium,
13001357
'eru-base-camp-large': surgeCatalogueBasecampEruLarge,
13011358
'facility-management': surgeCatalogueBasecampFacilityManagement,
1359+
office: surgeCatalogueBasecampOffice,
1360+
welcome: surgeCatalogueBasecampWelcome,
13021361
},
13031362
cash: {
13041363
cva: surgeCatalogueCashRapidResponse,
@@ -1365,6 +1424,7 @@ function DeploymentCatalogueNavigate() {
13651424
'sct-shelter-coordination-team': surgeCatalogueShelterCoordinatorTeam,
13661425
},
13671426
water: {
1427+
'faecal-sludge-management': surgeCatalogueWashSludge,
13681428
'household-water-treatment-and-safe-storage-hwts': surgeCatalogueWashHwts,
13691429
'water-supply-rehabilitation-wsr': surgeCatalogueWashWaterSupplyRehabilitation,
13701430
'm40-eru': surgeCatalogueWashKitM40Eru,
@@ -1470,11 +1530,14 @@ export default {
14701530
surgeCatalogueOverview,
14711531
surgeCatalogueEmergencyNeedsAssessment,
14721532
surgeCatalogueEmergencyNeedsAssessmentCell,
1533+
surgeCatalogueAdministration,
14731534
surgeCatalogueBasecamp,
14741535
surgeCatalogueBasecampEruSmall,
14751536
surgeCatalogueBasecampEruMedium,
14761537
surgeCatalogueBasecampEruLarge,
14771538
surgeCatalogueBasecampFacilityManagement,
1539+
surgeCatalogueBasecampOffice,
1540+
surgeCatalogueBasecampWelcome,
14781541
surgeCatalogueCash,
14791542
surgeCatalogueCashRapidResponse,
14801543
surgeCatalogueCommunityEngagement,
@@ -1533,6 +1596,7 @@ export default {
15331596
surgeCatalogueWashKitM40Eru,
15341597
surgeCatalogueWashWaterSupplyRehabilitation,
15351598
surgeCatalogueWashHwts,
1599+
surgeCatalogueWashSludge,
15361600
surgeCatalogueOtherCivilMilitaryRelations,
15371601
surgeCatalogueOtherDisasterRiskReduction,
15381602
surgeCatalogueOtherHumanitarianDiplomacy,

app/src/views/SurgeCatalogue/i18n.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"strings": {
44
"catalogueServiceOverview": "Catalogue",
55
"catalogueEmergency": "Emergency Needs Assessment",
6-
"catalogueBasecamp": "Basecamp",
6+
"catalogueAdministration": "Administration",
7+
"catalogueBasecamp": "Operations Support HUB (OSH)",
78
"catalogueCash": "Cash and Vouchers Assistance (CVA)",
89
"catalogueCommunityEngagement": "Community Engagement and Accountability (CEA)",
910
"catalogueCommunication": "Communications",

app/src/views/SurgeCatalogue/index.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
CoordinatedAssessementIcon,
88
DisasterRiskReductionIcon,
99
DroneTwoIcon,
10+
EditLineTwoIcon,
1011
EmergencyTelecommunicationsIcon,
1112
GreenResponseIcon,
1213
GroupIcon,
@@ -54,11 +55,11 @@ export function Component() {
5455
{strings.catalogueServiceOverview}
5556
</NavigationTab>
5657
<NavigationTab
57-
to="surgeCatalogueBasecamp"
58+
to="surgeCatalogueAdministration"
5859
parentRoute
5960
>
60-
<BasecampIcon className={styles.icon} />
61-
{strings.catalogueBasecamp}
61+
<EditLineTwoIcon className={styles.icon} />
62+
{strings.catalogueAdministration}
6263
</NavigationTab>
6364
<NavigationTab
6465
to="surgeCatalogueCash"
@@ -193,6 +194,13 @@ export function Component() {
193194
<GroupIcon className={styles.icon} />
194195
{strings.catalogueOperations}
195196
</NavigationTab>
197+
<NavigationTab
198+
to="surgeCatalogueBasecamp"
199+
parentRoute
200+
>
201+
<BasecampIcon className={styles.icon} />
202+
{strings.catalogueBasecamp}
203+
</NavigationTab>
196204
<NavigationTab
197205
to="surgeCataloguePmer"
198206
parentRoute
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"namespace": "surgeCatalogueAdministration",
3+
"strings": {
4+
"catalogueAdministrationTitle": "Administration",
5+
"catalogueAdministrationOverview": "Overview",
6+
"administrationDetails": "The Administration function is a key pillar in delivering value-added services to member National Societies and the IFRC Secretariat at the global level.",
7+
"administrationContexts": "Administrative colleagues operate across various contexts, including emergency operations, ensuring stakeholders benefit from the efficient establishment and management of:",
8+
"administrationItemOne": "Welcome services",
9+
"administrationItemTwo": "Accommodation arrangements",
10+
"administrationItemThree": "Visa and residency processes",
11+
"administrationItemFour": "Office management",
12+
"administrationItemFive": "Administrative procurement",
13+
"administrationItemSix": "Filing and archiving systems",
14+
"administrationItemSeven": "Event management",
15+
"administrationFootnote": "These services ensure smooth and effective support across all operational contexts.",
16+
"administrationRapidResponsePersonnelTitle": "Rapid Response Personnel",
17+
"administrationRoleProfiles": "Role Profiles",
18+
"administrationRoleProfileOne": "Welcome Services Officer",
19+
"administrationRoleProfileTwo": "Administration Officer",
20+
"administrationRoleProfileThree": "Administration Coordinator"
21+
}
22+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { useTranslation } from '@ifrc-go/ui/hooks';
2+
3+
import CatalogueInfoCard, { type LinkData } from '#components/CatalogueInfoCard';
4+
import SurgeCardContainer from '#components/domain/SurgeCardContainer';
5+
import SurgeCatalogueContainer from '#components/domain/SurgeCatalogueContainer';
6+
import SurgeContentContainer from '#components/domain/SurgeContentContainer';
7+
8+
import i18n from './i18n.json';
9+
10+
/** @knipignore */
11+
// eslint-disable-next-line import/prefer-default-export
12+
export function Component() {
13+
const strings = useTranslation(i18n);
14+
15+
const roleProfiles: LinkData[] = [
16+
{
17+
title: strings.administrationRoleProfileOne,
18+
href: 'https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/EZBuZvMv9lFGiPaObl1N9CYBzrWJfMy6kC4WxfrfsnGyAw',
19+
external: true,
20+
withLinkIcon: true,
21+
},
22+
{
23+
title: strings.administrationRoleProfileTwo,
24+
href: 'https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/EV6AfXJjToZGlxfswDSc_0YB3VVqNlw4ZQRL4pO0KBsbOQ',
25+
external: true,
26+
withLinkIcon: true,
27+
},
28+
{
29+
title: strings.administrationRoleProfileThree,
30+
href: 'https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/EW0VBtdVygNHoynmE_2RX1wBcv8CiS2D9zgeBeeiTrq-9A',
31+
external: true,
32+
withLinkIcon: true,
33+
},
34+
];
35+
36+
return (
37+
<SurgeCatalogueContainer
38+
heading={strings.catalogueAdministrationTitle}
39+
>
40+
<SurgeContentContainer
41+
heading={strings.catalogueAdministrationOverview}
42+
>
43+
<div>{strings.administrationDetails}</div>
44+
<div>{strings.administrationContexts}</div>
45+
<ul>
46+
<li>{strings.administrationItemOne}</li>
47+
<li>{strings.administrationItemTwo}</li>
48+
<li>{strings.administrationItemThree}</li>
49+
<li>{strings.administrationItemFour}</li>
50+
<li>{strings.administrationItemFive}</li>
51+
<li>{strings.administrationItemSix}</li>
52+
<li>{strings.administrationItemSeven}</li>
53+
</ul>
54+
<div>{strings.administrationFootnote}</div>
55+
</SurgeContentContainer>
56+
<SurgeCardContainer
57+
heading={strings.administrationRapidResponsePersonnelTitle}
58+
>
59+
<CatalogueInfoCard
60+
title={strings.administrationRoleProfiles}
61+
data={roleProfiles}
62+
/>
63+
</SurgeCardContainer>
64+
</SurgeCatalogueContainer>
65+
);
66+
}
67+
68+
Component.displayName = 'SurgeCatalogueAdministration';

app/src/views/SurgeCatalogueBasecamp/i18n.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"namespace": "surgeCatalogueBasecamp",
33
"strings": {
4-
"catalogueBasecampTitle": "Basecamp",
4+
"catalogueBasecampTitle": "Operations Support HUB (OSH)",
55
"basecampDetails": "The Base Camp provides Red Cross Red Crescent staff (both host National Society and International Federation staff) engaged in emergency operations with appropriate living and working conditions. The Base Camp offers tented accommodation, conditioned for hot and cold climates, toilets, hot showers, recreational facilities, a kitchen, offices, administrative, and coordination facilities in locations where these are not available for Red Cross Red Crescent staff.",
66
"basecampServicesTitle": "Services",
77
"basecampEmergencyResponseUnit": "Emergency Response Unit",
@@ -13,6 +13,13 @@
1313
"eruLargeDetails": "Accommodation up to 60 - 100 persons.",
1414
"basecampFacilityManagementTitle": "Facility Management",
1515
"basecampFacilityManagementDetails": "All aspects of facility management.",
16-
"learnMore": "Learn More"
16+
"basecampLinkOneIntro": "The details of the {link}",
17+
"basecampLinkOneText": "Operations Support Hub ERU are here.",
18+
"basecampLinkTwoIntro": "The two-pager summary of the {link}",
19+
"basecampLinkTwoText": "Emergency Operations Support Hub ERU is here.",
20+
"basecampOfficeTitle": "Office",
21+
"basecampOfficeDetails": "Accommodate up to 150 workspaces, office space and meeting facilities.",
22+
"basecampWelcomeTitle": "Admin and Welcome Service",
23+
"basecampWelcomeDetails": "Administrative support services to the surge team and welcome services for delegates."
1724
}
1825
}

app/src/views/SurgeCatalogueBasecamp/index.tsx

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { useTranslation } from '@ifrc-go/ui/hooks';
2+
import { resolveToComponent } from '@ifrc-go/ui/utils';
23

34
import CatalogueInfoCard, { type LinkData } from '#components/CatalogueInfoCard';
45
import SurgeCardContainer from '#components/domain/SurgeCardContainer';
56
import SurgeCatalogueContainer from '#components/domain/SurgeCatalogueContainer';
7+
import Link from '#components/Link';
68

79
import i18n from './i18n.json';
810

@@ -37,17 +39,66 @@ export function Component() {
3739

3840
const facilityManagement: LinkData[] = [
3941
{
40-
title: strings.learnMore,
42+
title: strings.basecampFacilityManagementTitle,
4143
to: 'surgeCatalogueBasecampFacilityManagement',
4244
withLinkIcon: true,
4345
},
4446
];
4547

48+
const office: LinkData[] = [
49+
{
50+
title: strings.basecampOfficeTitle,
51+
to: 'surgeCatalogueBasecampOffice',
52+
withLinkIcon: true,
53+
},
54+
];
55+
56+
const welcome: LinkData[] = [
57+
{
58+
title: strings.basecampWelcomeTitle,
59+
to: 'surgeCatalogueBasecampWelcome',
60+
withLinkIcon: true,
61+
},
62+
];
63+
4664
return (
4765
<SurgeCatalogueContainer
4866
heading={strings.catalogueBasecampTitle}
4967
description={strings.basecampDetails}
5068
>
69+
<p>
70+
{resolveToComponent(
71+
strings.basecampLinkOneIntro,
72+
{
73+
link: (
74+
<Link
75+
href="https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/ETxoUV5FKsRAiORGfZkhU60B5k8ULQWzA0QrHFQplNQX4A"
76+
external
77+
withUnderline
78+
withLinkIcon
79+
>
80+
{strings.basecampLinkOneText}
81+
</Link>
82+
),
83+
},
84+
)}
85+
<br />
86+
{resolveToComponent(
87+
strings.basecampLinkTwoIntro,
88+
{
89+
link: (
90+
<Link
91+
href="https://ifrcorg.sharepoint.com/:b:/s/IFRCSharing/EQ9p02JRIBBDr2dLmommwNgBOBeDA4JvEUGwSb7E-bprKw"
92+
external
93+
withUnderline
94+
withLinkIcon
95+
>
96+
{strings.basecampLinkTwoText}
97+
</Link>
98+
),
99+
},
100+
)}
101+
</p>
51102
<SurgeCardContainer
52103
heading={strings.basecampServicesTitle}
53104
>
@@ -71,6 +122,16 @@ export function Component() {
71122
data={facilityManagement}
72123
description={strings.basecampFacilityManagementDetails}
73124
/>
125+
<CatalogueInfoCard
126+
title={strings.basecampOfficeTitle}
127+
data={office}
128+
description={strings.basecampOfficeDetails}
129+
/>
130+
<CatalogueInfoCard
131+
title={strings.basecampWelcomeTitle}
132+
data={welcome}
133+
description={strings.basecampWelcomeDetails}
134+
/>
74135
</SurgeCardContainer>
75136
</SurgeCatalogueContainer>
76137
);

0 commit comments

Comments
 (0)