Skip to content

Commit

Permalink
TP2000-1458: Limit erga omnes exclusions to erga omnes group members (#…
Browse files Browse the repository at this point in the history
…1273)

* Limit erga omnes exclusions to erga omnes group members

* Update query
  • Loading branch information
eadpearce authored Jul 31, 2024
1 parent 4db1b7f commit b186db9
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ function ErgaOmnesForm({
data,
errors,
ergaOmnesExclusionsInitial,
exclusionsOptions,
ergaOmnesExclusions,
}) {
if (renderCondition) {
return (
Expand All @@ -24,7 +24,7 @@ function ErgaOmnesForm({
<Select
className="react-select-container"
classNamePrefix="react-select"
options={exclusionsOptions}
options={ergaOmnesExclusions}
defaultValue={ergaOmnesExclusionsInitial}
value={data.ergaOmnesExclusions}
onChange={(value) => updateForm("ergaOmnesExclusions", value)}
Expand Down Expand Up @@ -58,7 +58,7 @@ ErgaOmnesForm.propTypes = {
}).isRequired,
errors: PropTypes.objectOf(PropTypes.string).isRequired,
ergaOmnesExclusionsInitial: PropTypes.arrayOf(PropTypes.number),
exclusionsOptions: PropTypes.arrayOf(
ergaOmnesExclusions: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.oneOf([""]), PropTypes.number]),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ function GeoAreaField({
errors,
updateForm,
data,
ergaOmnesExclusions,
exclusionsOptions,
groupsOptions,
countryRegionsOptions,
Expand Down Expand Up @@ -73,7 +74,7 @@ function GeoAreaField({
data={data}
errors={errors}
ergaOmnesExclusionsInitial={ergaOmnesExclusionsInitial}
exclusionsOptions={exclusionsOptions}
ergaOmnesExclusions={ergaOmnesExclusions}
/>
<div className="govuk-radios__item">
<input
Expand Down Expand Up @@ -157,6 +158,12 @@ GeoAreaField.propTypes = {
geoGroupExclusions: PropTypes.arrayOf(PropTypes.number),
countryRegions: PropTypes.arrayOf(PropTypes.number),
}).isRequired,
ergaOmnesExclusions: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.oneOf([""]), PropTypes.number]),
}),
).isRequired,
exclusionsOptions: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
Expand Down
15 changes: 11 additions & 4 deletions common/static/common/js/components/GeoAreaForm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function GeoAreaForm({
errors,
csrfToken,
helpText,
exclusionsOptions,
ergaOmnesExclusions,
groupsOptions,
countryRegionsOptions,
groupsWithMembers,
Expand Down Expand Up @@ -51,7 +51,8 @@ function GeoAreaForm({
errors={errors}
data={data}
updateForm={updateForm}
exclusionsOptions={exclusionsOptions}
ergaOmnesExclusions={ergaOmnesExclusions}
exclusionsOptions={countryRegionsOptions}
groupsOptions={groupsOptions}
countryRegionsOptions={countryRegionsOptions}
groupsWithMembers={groupsWithMembers}
Expand Down Expand Up @@ -118,14 +119,14 @@ function init() {
if (!container) return;
const root = createRoot(container);
/* eslint-disable */
// initial, geoAreaErrors, exclusionsOptions, groupsOptions, countryRegionsOptions, groupsWithMembers come from template measures/jinja2/includes/measures/geo_area_script.jinja and MeasureGeographicalAreaForm.init_layout
// initial, geoAreaErrors, ergaOmnesExclusions, groupsOptions, countryRegionsOptions, groupsWithMembers come from template measures/jinja2/includes/measures/geo_area_script.jinja and MeasureGeographicalAreaForm.init_layout
root.render(
<GeoAreaForm
initial={initial}
errors={geoAreaErrors}
csrfToken={csrfToken}
helpText={helpText}
exclusionsOptions={exclusionsOptions}
ergaOmnesExclusions={ergaOmnesExclusions}
groupsOptions={groupsOptions}
countryRegionsOptions={countryRegionsOptions}
groupsWithMembers={groupsWithMembers}
Expand All @@ -152,6 +153,12 @@ GeoAreaForm.propTypes = {
errors: PropTypes.objectOf(PropTypes.string).isRequired,
csrfToken: PropTypes.string.isRequired,
helpText: PropTypes.string.isRequired,
ergaOmnesExclusions: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
value: PropTypes.number.isRequired,
}),
).isRequired,
exclusionsOptions: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
Expand Down
35 changes: 18 additions & 17 deletions common/static/common/js/components/GeoAreaForm/tests/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ const mockCountryRegionsOptions = [
label: "Costa Rica",
value: 3,
},
{
label: "Jersey",
value: 4,
},
{
label: "Germany",
value: 5,
Expand All @@ -43,27 +39,28 @@ const mockCountryRegionsOptions = [
label: "Panama",
value: 7,
},
{
label: "Guernsey",
value: 8,
},
{
label: "Sweden",
value: 9,
},
{
label: "Jersey",
value: 4,
},
{
label: "Guernsey",
value: 8,
},
];

const mockErgaOmnesExclusions = mockCountryRegionsOptions.slice(0, 6);

const mockGroupsWithMembers = {
11: [5, 6, 9],
12: [3, 7],
13: [4, 8],
};

const mockExclusionsOptions = [
...mockGroupsOptions,
...mockCountryRegionsOptions,
];

const mockCsrfToken = "123456789";
const mockErrors = {};
const helpText = "Some help text";
Expand All @@ -84,7 +81,8 @@ describe("GeoAreaField", () => {
errors={mockErrors}
csrfToken={mockCsrfToken}
helpText={helpText}
exclusionsOptions={mockExclusionsOptions}
ergaOmnesExclusions={mockErgaOmnesExclusions}
exclusionsOptions={mockCountryRegionsOptions}
groupsOptions={mockGroupsOptions}
countryRegionsOptions={mockCountryRegionsOptions}
groupsWithMembers={mockGroupsWithMembers}
Expand All @@ -110,7 +108,8 @@ describe("GeoAreaField", () => {
errors={mockErrors}
csrfToken={mockCsrfToken}
helpText={helpText}
exclusionsOptions={mockExclusionsOptions}
ergaOmnesExclusions={mockErgaOmnesExclusions}
exclusionsOptions={mockCountryRegionsOptions}
groupsOptions={mockGroupsOptions}
countryRegionsOptions={mockCountryRegionsOptions}
groupsWithMembers={mockGroupsWithMembers}
Expand All @@ -137,7 +136,8 @@ describe("GeoAreaField", () => {
errors={mockErrors}
csrfToken={mockCsrfToken}
helpText={helpText}
exclusionsOptions={mockExclusionsOptions}
ergaOmnesExclusions={mockErgaOmnesExclusions}
exclusionsOptions={mockCountryRegionsOptions}
groupsOptions={mockGroupsOptions}
countryRegionsOptions={mockCountryRegionsOptions}
groupsWithMembers={mockGroupsWithMembers}
Expand Down Expand Up @@ -188,7 +188,8 @@ describe("GeoAreaField", () => {
errors={mockErrors}
csrfToken={mockCsrfToken}
helpText={helpText}
exclusionsOptions={mockExclusionsOptions}
ergaOmnesExclusions={mockErgaOmnesExclusions}
exclusionsOptions={mockCountryRegionsOptions}
groupsOptions={mockGroupsOptions}
countryRegionsOptions={mockCountryRegionsOptions}
groupsWithMembers={mockGroupsWithMembers}
Expand Down
4 changes: 2 additions & 2 deletions measures/jinja2/includes/measures/geo_area_script.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
{% endfor %}
};
const initial = {{initial|safe}};
const exclusionsOptions = [
const ergaOmnesExclusions = [
{"label": "", "value": ""},
{% for geo_area in exclusions_options %}
{% for geo_area in erga_omnes_exclusions %}
{
"label": "{{ geo_area.area_id ~ " - " ~ geo_area.description }}",
"value": {{ geo_area.pk }},
Expand Down
11 changes: 9 additions & 2 deletions measures/views/wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,14 @@ def get_react_script(self, form):
.as_at_today_and_beyond()
.order_by("description")
)
exclusions_options = all_geo_areas
erga_omnes = GeographicalArea.objects.erga_omnes().first()
erga_omnes_exclusions_pks = [
membership.member.pk
for membership in GeographicalMembership.objects.filter(
geo_group__pk=erga_omnes.pk,
).prefetch_related("member")
]
erga_omnes_exclusions = all_geo_areas.filter(pk__in=erga_omnes_exclusions_pks)
groups_options = all_geo_areas.filter(area_code=AreaCode.GROUP)
country_regions_options = all_geo_areas.exclude(
area_code=AreaCode.GROUP,
Expand Down Expand Up @@ -678,7 +685,7 @@ def get_react_script(self, form):
"request": self.request,
"initial": react_initial,
"groups_with_members": groups_with_members,
"exclusions_options": exclusions_options,
"erga_omnes_exclusions": erga_omnes_exclusions,
"groups_options": groups_options,
"country_regions_options": country_regions_options,
"errors": form.errors,
Expand Down

0 comments on commit b186db9

Please sign in to comment.