Skip to content

Commit d273e31

Browse files
authored
Merge pull request #362 from UKSpaceAgency/develop
Release
2 parents b9d06ac + f358fe8 commit d273e31

59 files changed

Lines changed: 503 additions & 465 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy-to-aws-dev.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,4 @@ jobs:
7070
ref: main
7171
token: ${{ secrets.INFRA_REPO_TOKEN }}
7272
inputs: '{ "invoker": "frontend", "env": "dev", "image-tag":"${{ github.sha }}"}'
73+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: Rebuild backend email-renderer
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
paths:
8+
- 'src/emails/**'
9+
- 'src/locales/en.json'
10+
11+
jobs:
12+
dispatch:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Trigger backend email-renderer rebuild
16+
uses: peter-evans/repository-dispatch@v3
17+
with:
18+
token: ${{ secrets.INFRA_REPO_TOKEN }}
19+
repository: UKSpaceAgency/sst-beta-python-backend
20+
event-type: fe-email-templates-updated
213 KB
Binary file not shown.

src/app/(auth)/account/alert-settings/[id]/page.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { notFound } from 'next/navigation';
33

44
import type { TypeAlertSettingsIn } from '@/__generated__/data-contracts';
55
import { getAlertsUserUserId } from '@/actions/getAlertsUserUserId';
6-
import { getUsersMe } from '@/actions/getUsersMe';
6+
import { getSession } from '@/actions/getSession';
7+
import { getUsersById } from '@/actions/getUserById';
78
import { patchAlertsUserUserId } from '@/actions/patchAlertsUserUserId';
89
import { AlertSettingsForm } from '@/components/account/alert-settings/AlertSettingsForm';
910
import { isAgencyApprover } from '@/utils/Roles';
@@ -20,10 +21,11 @@ export default async function EditUserAlertSettingsPage({
2021
}) {
2122
const { id } = await params;
2223

23-
const user = await getUsersMe();
24+
const session = await getSession();
2425
const alertSettings = await getAlertsUserUserId(id);
26+
const user = await getUsersById(id);
2527

26-
if (!isAgencyApprover(user.role)) {
28+
if (!isAgencyApprover(session?.user.role)) {
2729
notFound();
2830
}
2931

@@ -45,6 +47,7 @@ export default async function EditUserAlertSettingsPage({
4547
return (
4648
<div>
4749
<AlertSettingsForm
50+
user={user}
4851
defaultValues={defaultValues}
4952
selfEdit={false}
5053
onSubmit={onSubmit}

src/app/(auth)/activity/page.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import type { Metadata } from 'next';
2+
import { notFound } from 'next/navigation';
23
import { getTranslations } from 'next-intl/server';
34
import { Suspense } from 'react';
45

56
import type { TypeGetActivityEventsParams } from '@/__generated__/data-contracts';
6-
import { getActivityEvents } from '@/actions/getActivityEvents';
7-
import { ActivitiesDataTable } from '@/components/activities/data-table/ActivitiesDataTable';
7+
import { getSession } from '@/actions/getSession';
8+
import { ActivitiesEventsTable } from '@/components/activities/ActivitiesEventsTable';
89
import { SearchBar } from '@/components/SearchBar';
910
import Details from '@/ui/details/details';
1011
import Spinner from '@/ui/spinner/spinner';
12+
import { isAgencyUser, isRegulatorUser } from '@/utils/Roles';
1113

1214
export const metadata: Metadata = {
1315
title: 'Monitor UK satellite activity',
@@ -21,6 +23,7 @@ type PageProps = {
2123

2224
export default async function ActivitiesPage(props: PageProps) {
2325
const t = await getTranslations('Activities');
26+
const session = await getSession();
2427

2528
const searchParams = await props.searchParams;
2629

@@ -29,15 +32,17 @@ export default async function ActivitiesPage(props: PageProps) {
2932
limit: 50,
3033
};
3134

32-
const initialData = await getActivityEvents(params);
35+
if (!isAgencyUser(session?.user.role) && !isRegulatorUser(session?.user.role)) {
36+
notFound();
37+
}
3338

3439
return (
3540
<div>
3641
<h1 className="govuk-heading-xl">{t('title')}</h1>
3742
{t.rich('description')}
3843
<SearchBar label={t('search_bar.label')} id="satellites_search_bar" placeholder={t('search_bar.placeholder')} ariaLabel="Satellite Search Bar" />
3944
<Suspense fallback={<Spinner />}>
40-
<ActivitiesDataTable initialData={initialData} params={params} />
45+
<ActivitiesEventsTable params={params} />
4146
</Suspense>
4247
<Details summary={t.rich('help.title')}>
4348
{t.rich('help.content')}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { getOrganisation } from '@/actions/getOrganisation';
2+
3+
type PageProps = {
4+
params: Promise<{ id: string }>;
5+
};
6+
7+
export async function generateMetadata({
8+
params,
9+
}: PageProps) {
10+
const { id } = await params;
11+
const organisations = await getOrganisation(id);
12+
return {
13+
title: organisations.name,
14+
};
15+
}
16+
17+
export default async function OrganisationPage({
18+
params,
19+
}: PageProps) {
20+
const { id } = await params;
21+
const organisations = await getOrganisation(id);
22+
23+
return (
24+
<div>
25+
<h1 className="govuk-heading-xl">
26+
{organisations.name}
27+
</h1>
28+
{/* <ContentNavigation className="mb-8" /> */}
29+
</div>
30+
);
31+
}

src/app/(unauth)/accessibility-statement/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { HtmlMapper } from '@/components/HtmlMapper';
44
import { getPage } from '@/libs/Cms';
55

66
export const metadata: Metadata = {
7-
title: 'Accessibility statement for NSpOC\'s Monitor Space Hazards service',
7+
title: 'Accessibility statement for NSpOC Monitor Space Hazards service',
88
};
99

1010
export default async function AccessibilityStatement() {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { getTranslations } from 'next-intl/server';
2+
3+
import { getUsersById } from '@/actions/getUserById';
4+
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage } from '@/ui/breadcrumbs/breadcrumbs';
5+
6+
export default async function BreadcrumbOrganisationSlot({
7+
params,
8+
}: { params: Promise<{ id: string }> }) {
9+
const { id } = await params;
10+
const t = await getTranslations('Breadcrumb');
11+
const user = await getUsersById(id);
12+
13+
return (
14+
<Breadcrumb>
15+
<BreadcrumbList>
16+
<BreadcrumbItem>
17+
<BreadcrumbLink href="/">Home</BreadcrumbLink>
18+
</BreadcrumbItem>
19+
<BreadcrumbItem>
20+
<BreadcrumbLink href="/account">{t('account')}</BreadcrumbLink>
21+
</BreadcrumbItem>
22+
<BreadcrumbItem>
23+
<BreadcrumbLink href="/account/distribution-list">{t('distribution-list')}</BreadcrumbLink>
24+
</BreadcrumbItem>
25+
<BreadcrumbItem>
26+
<BreadcrumbPage>
27+
{user.first_name}
28+
{' '}
29+
{user.last_name}
30+
</BreadcrumbPage>
31+
</BreadcrumbItem>
32+
</BreadcrumbList>
33+
</Breadcrumb>
34+
);
35+
}

src/components/account/alert-settings/AlertSettingsForm.tsx

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useState } from 'react';
55
import type { SubmitHandler, UseFormRegister } from 'react-hook-form';
66
import { FormProvider, useForm } from 'react-hook-form';
77

8-
import type { TypeAlertSettingsIn } from '@/__generated__/data-contracts';
8+
import type { TypeAlertSettingsIn, TypeUserOut } from '@/__generated__/data-contracts';
99
import Accordion from '@/ui/accordion/accordion';
1010
import Button from '@/ui/button/button';
1111
import Checkboxes from '@/ui/checkboxes/checkboxes';
@@ -49,12 +49,13 @@ function Option({
4949
}
5050

5151
type AlertSettingsFormProps = {
52+
user?: TypeUserOut;
5253
defaultValues: AlertSettingsSchema;
5354
selfEdit?: boolean;
5455
onSubmit: (data: TypeAlertSettingsIn) => Promise<void>;
5556
};
5657

57-
const AlertSettingsForm = ({ defaultValues, selfEdit = true, onSubmit: onSubmitAction }: AlertSettingsFormProps) => {
58+
const AlertSettingsForm = ({ user, defaultValues, selfEdit = true, onSubmit: onSubmitAction }: AlertSettingsFormProps) => {
5859
const t = useTranslations('Forms.Alert_settings');
5960
const tCommon = useTranslations('Common');
6061

@@ -105,8 +106,8 @@ const AlertSettingsForm = ({ defaultValues, selfEdit = true, onSubmit: onSubmitA
105106
)
106107
: (
107108
<>
108-
<h1 className="govuk-heading-xl">{t('title', { whose: selfEdit ? 'your' : 'user\'s' })}</h1>
109-
<p className="govuk-body">{t('description')}</p>
109+
<h1 className="govuk-heading-xl">{t('title', { whose: selfEdit ? 'your' : user?.first_name ? `${user.first_name}'s` : 'user\'s' })}</h1>
110+
<p className="govuk-body">{t('description', { to: user?.first_name ? `${user.first_name} ${user.last_name}` : 'you' })}</p>
110111
{selfEdit && (
111112
<WarningText>
112113
{t('warning')}
@@ -119,43 +120,6 @@ const AlertSettingsForm = ({ defaultValues, selfEdit = true, onSubmit: onSubmitA
119120
<Accordion
120121
id="alert-settings"
121122
initialItems={[
122-
{
123-
id: 'conjunction_alerts',
124-
heading: t('conjunction_alerts'),
125-
content: (
126-
<>
127-
<Checkboxes
128-
aria-label="Conjunction Alerts"
129-
legend={t(
130-
`${selfEdit ? 'self_which' : 'their_which'}`,
131-
{ type: 'conjunction' },
132-
)}
133-
hint={t('select_one_option')}
134-
items={[{
135-
id: 'receive_all_conjunction_alerts',
136-
value: 'standard',
137-
children: t('receive_all_conjunction_alerts'),
138-
hint: t('recommended_for'),
139-
...register('conjunctionAlerts'),
140-
}, {
141-
id: 'only_priority_conjunction_alerts',
142-
value: 'priority',
143-
children: t('only_priority_conjunction_alerts'),
144-
hint: t('recommended_for_all_other'),
145-
...register('conjunctionAlerts'),
146-
}]}
147-
/>
148-
<AlertSettingsDetails type="conjunction" />
149-
<Option
150-
id="receiveConjunction"
151-
name="receiveConjunction"
152-
hint={t('select_one_option')}
153-
label={t('how_would_you_like_conjunction')}
154-
register={register}
155-
/>
156-
</>
157-
),
158-
},
159123
{
160124
id: 're_entry_alerts',
161125
heading: t('re_entry_alerts'),
@@ -251,6 +215,43 @@ const AlertSettingsForm = ({ defaultValues, selfEdit = true, onSubmit: onSubmitA
251215
</>
252216
),
253217
},
218+
{
219+
id: 'conjunction_alerts',
220+
heading: t('conjunction_alerts'),
221+
content: (
222+
<>
223+
<Checkboxes
224+
aria-label="Conjunction Alerts"
225+
legend={t(
226+
`${selfEdit ? 'self_which' : 'their_which'}`,
227+
{ type: 'conjunction' },
228+
)}
229+
hint={t('select_one_option')}
230+
items={[{
231+
id: 'receive_all_conjunction_alerts',
232+
value: 'standard',
233+
children: t('receive_all_conjunction_alerts'),
234+
hint: t('recommended_for'),
235+
...register('conjunctionAlerts'),
236+
}, {
237+
id: 'only_priority_conjunction_alerts',
238+
value: 'priority',
239+
children: t('only_priority_conjunction_alerts'),
240+
hint: t('recommended_for_all_other'),
241+
...register('conjunctionAlerts'),
242+
}]}
243+
/>
244+
<AlertSettingsDetails type="conjunction" />
245+
<Option
246+
id="receiveConjunction"
247+
name="receiveConjunction"
248+
hint={t('select_one_option')}
249+
label={t('how_would_you_like_conjunction')}
250+
register={register}
251+
/>
252+
</>
253+
),
254+
},
254255
]}
255256
/>
256257
<div className="govuk-button-group">

0 commit comments

Comments
 (0)