Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add new GLA schemas #3267

Merged
merged 19 commits into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 31 additions & 17 deletions editor.planx.uk/src/@planx/components/List/Editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,18 @@ import InputRowLabel from "ui/shared/InputRowLabel";
import { EditorProps, ICONS, InternalNotes, MoreInformation } from "../ui";
import { List, parseContent } from "./model";
import { ResidentialUnitsExisting } from "./schemas/ResidentialUnits/Existing";
import { ResidentialUnitsGLANew } from "./schemas/ResidentialUnits/GLA/New";
import { ResidentialUnitsGLARebuilt } from "./schemas/ResidentialUnits/GLA/Rebuilt";
import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Removed";
import { ResidentialUnitsGLARetained } from "./schemas/ResidentialUnits/GLA/Retained";
import { ResidentialUnitsProposed } from "./schemas/ResidentialUnits/Proposed";
// import { ResidentialUnitsGLANew } from "./schemas/ResidentialUnits/GLA/New";
// import { ResidentialUnitsGLARebuilt } from "./schemas/ResidentialUnits/GLA/Rebuilt";
// import { ResidentialUnitsGLARemoved } from "./schemas/ResidentialUnits/GLA/Removed";
// import { ResidentialUnitsGLARetained } from "./schemas/ResidentialUnits/GLA/Retained";
import { ResidentialUnitsGLAGained } from "./schemas/ResidentialUnits/GLA/Gained";
import { ResidentialUnitsGLALost } from "./schemas/ResidentialUnits/GLA/Lost";
import { ExistingAndProposedUsesGLA } from "./schemas/GLA/ExistingAndProposedUses";
import { CommunalSpaceGLA } from "./schemas/GLA/CommunalSpace";
import { BuildingDetailsGLA } from "./schemas/GLA/BuildingDetails";
import { ProtectedSpaceGLA } from "./schemas/GLA/ProtectedSpace";
import { OpenSpaceGLA } from "./schemas/GLA/OpenSpace";
import { Zoo } from "./schemas/Zoo";
import { ProposedAdvertisements } from "./schemas/Adverts";

Expand All @@ -27,19 +34,26 @@ type Props = EditorProps<TYPES.List, List>;
export const SCHEMAS = [
{ name: "Residential units - Existing", schema: ResidentialUnitsExisting },
{ name: "Residential units - Proposed", schema: ResidentialUnitsProposed },
{ name: "Residential units (GLA) - New", schema: ResidentialUnitsGLANew },
{
name: "Residential units (GLA) - Rebuilt",
schema: ResidentialUnitsGLARebuilt,
},
{
name: "Residentail units (GLA) - Removed",
schema: ResidentialUnitsGLARemoved,
},
{
name: "Residential units (GLA) - Retained",
schema: ResidentialUnitsGLARetained,
},
{ name: "Residential units (GLA) - Gained", schema: ResidentialUnitsGLAGained },
{ name: "Residential units (GLA) - Lost", schema: ResidentialUnitsGLALost },
{ name: "Existing and proposed uses (GLA)", schema: ExistingAndProposedUsesGLA },
{ name: "Communal spaces (GLA)", schema: CommunalSpaceGLA },
{ name: "Building details (GLA)", schema: BuildingDetailsGLA },
{ name: "Protected spaces (GLA)", schema: ProtectedSpaceGLA },
{ name: "Open spaces (GLA)", schema: OpenSpaceGLA },
// { name: "Residential units (GLA) - New", schema: ResidentialUnitsGLANew },
// {
// name: "Residential units (GLA) - Rebuilt",
// schema: ResidentialUnitsGLARebuilt,
// },
// {
// name: "Residentail units (GLA) - Removed",
// schema: ResidentialUnitsGLARemoved,
// },
// {
// name: "Residential units (GLA) - Retained",
// schema: ResidentialUnitsGLARetained,
// },
{ name: "Zoo (test)", schema: Zoo },
{ name: "Proposed advertisements", schema: ProposedAdvertisements },
];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { TextInputType } from "@planx/components/TextInput/model";
import { Schema } from "@planx/components/List/model";

export const BuildingDetailsGLA: Schema = {
type: "Building detail",
fields: [
{
type: "text",
data: {
title: "Building reference",
fn: "reference",
type: TextInputType.Short,
},
},
{
type: "number",
data: {
title: "What is the maximum height of the building?",
units: "m",
fn: "height",
allowNegatives: false,
},
},
{
type: "number",
data: {
title: "How many storeys does the building have?",
fn: "storeys",
allowNegatives: false,
},
},
],
min: 1,
} as const;
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Schema } from "@planx/components/List/model";

export const CommunalSpaceGLA: Schema = {
type: "Unit of communal space",
fields: [
{
type: "question",
data: {
title: "Is this unit of communal space lost or gained?",
fn: "development",
options: [
{ id: "gain", data: { text: "Gained", val: "gain" } },
{ id: "loss", data: { text: "Lost", val: "loss" } },
],
},
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

my first go at summing identical units by development type was only accounting for the previous three options, but I'll update it to work the same when gained & lost are options too 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also nit picky thing: you use loss in later schemas, but lost here as "development" options - are they actually different in legislation or can we standardise?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for spotting. loss/gain is what the data hub has in their technical schema across categories (including resi units), so I updated the lost/gained to loss/gain.

},
{
type: "number",
data: {
title: "What is the Gross Internal Floor Area (GIA) of this unit?",
units: "m²",
fn: "area",
allowNegatives: false,
},
},
{
type: "number",
data: {
title: "How many identical units does the description above apply to?",
fn: "identicalUnits",
allowNegatives: false,
},
},
],
min: 1,
} as const;
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { Schema } from "@planx/components/List/model";

export const ExistingAndProposedUsesGLA: Schema = {
type: "Existing and proposed uses",
fields: [
{
type: "question",
data: {
title: "What is the use class?",
fn: "useClass",
options: [
{ id: "bTwo", data: { text: "B2 - General industry", val: "bTwo" } },
{ id: "bEight", data: { text: "B8 - Storage and distribution", val: "bEight" } },
{ id: "cOne", data: { text: "C1 - Hotels", val: "cOne" } },
{ id: "cTwo", data: { text: "C2 - Residential institutions", val: "cTwo" } },
{ id: "cTwoA", data: { text: "C2a - Secure residential institutions", val: "cTwoA" } },
{ id: "cThree", data: { text: "C3 - Dwellinghouses", val: "cThree" } },
{ id: "cFour", data: { text: "C4 - Houses in multiple occupation", val: "cFour" } },
{ id: "e", data: { text: "E - Commercial, business and service", val: "e" } },
{ id: "fOne", data: { text: "F1 - Learning and non-residential institutions", val: "fOne" } },
{ id: "fTwo", data: { text: "F2 - Local community uses", val: "fTwo" } },
{ id: "SG", data: { text: "Sui generis", val: "SG" } },
{ id: "unknown", data: { text: "Unknown", val: "unknown" } },
],
},
},
{
type: "number",
data: {
title: "What is the existing gross internal floor area?",
units: "m²",
fn: "areaExisting", // area.existing
allowNegatives: false,
},
},
{
type: "number",
data: {
title: "What is the gross internal floor area lost?",
units: "m²",
fn: "areaLoss", // area.loss
allowNegatives: false,
},
},
{
type: "number",
data: {
title: "What is the gross internal floor area gained?",
units: "m²",
fn: "areaGain", // area.gain
allowNegatives: false,
},
},
],
min: 1,
} as const;
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { TextInputType } from "@planx/components/TextInput/model";
import { Schema } from "@planx/components/List/model";

export const OpenSpaceGLA: Schema = {
type: "Open space details",
fields: [
{
type: "question",
data: {
title: "What is the project's impact on this open space?",
fn: "development",
options: [
{ id: "loss", data: { text: "Loss", val: "loss" } },
{ id: "gain", data: { text: "Gain", val: "gain" } },
{ id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } },
],
},
},
{
type: "question",
data: {
title: "What best describes the type of this open space?",
fn: "type",
options: [
{ id: "park", data: { text: "Parks and gardens", val: "park" } },
{ id: "natural", data: { text: "Natural and semi-natural", val: "natural" } },
{ id: "greenCorridor", data: { text: "Green corridors", val: "greenCorridor" } },
{ id: "sport", data: { text: "Outdoor sports facilities", val: "sport" } },
{ id: "amenity", data: { text: "Amenity", val: "amenity" } },
{ id: "children", data: { text: "Provision for children and young people", val: "children" } },
{ id: "allotment", data: { text: "Allotments, community gardens and city farms", val: "allotment" } },
{ id: "burial", data: { text: "Cemeteries, churchyards and other burial grounds", val: "burial" } },
{ id: "fringe", data: { text: "Countryside in urban fringe areas", val: "fringe" } },
{ id: "civic", data: { text: "Civic spaces", val: "civic" } },
{ id: "brownfield", data: { text: "Brownfield land", val: "brownfield" } },
{ id: "nonResidential", data: { text: "Non-residential institution grounds or garden", val: "nonResidential" } },
{ id: "residential", data: { text: "Residential garden", val: "residential" } },
],
},
},
{
type: "question",
data: {
title: "What best describes the designation of this open space?",
fn: "designation",
options: [
{ id: "greenBelt", data: { text: "Green Belt", val: "greenBelt" } },
{ id: "metropolitan", data: { text: "Metropolitan Open Land", val: "metropolitan" } },
{ id: "local", data: { text: "Local Open Spaces", val: "local" } },
{ id: "other", data: { text: "Other designation", val: "other" } },
{ id: "none", data: { text: "Not designated", val: "none" } },
],
},
},
{
type: "text",
data: {
title: "Describe the open space",
fn: "description",
type: TextInputType.Long,
},
},
{
type: "question",
data: {
title: "What is the access to this open space?",
fn: "access",
options: [
{ id: "restricted", data: { text: "Restricted", val: "restricted" } },
{ id: "unrestricted", data: { text: "Unrestricted", val: "unrestricted" } },
],
},
},
{
type: "number",
data: {
title: "What is the area of this open space?",
units: "ha",
fn: "area",
allowNegatives: false,
},
},
{
type: "question",
data: {
title: "Do the changes to this open space involve a land swap?",
fn: "swap",
options: [
{ id: "true", data: { text: "Yes", val: "true" } },
{ id: "false", data: { text: "No", val: "false" } },
],
},
},
],
min: 1,
} as const;
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { TextInputType } from "@planx/components/TextInput/model";
import { Schema } from "@planx/components/List/model";

export const ProtectedSpaceGLA: Schema = {
type: "Protected space details",
fields: [
{
type: "question",
data: {
title: "What is the project's impact on this protected space?",
fn: "development",
options: [
{ id: "loss", data: { text: "Loss", val: "loss" } },
{ id: "gain", data: { text: "Gain", val: "gain" } },
{ id: "changeOfUse", data: { text: "Change of use", val: "changeOfUse" } },
],
},
},
{
type: "question",
data: {
title: "What best describes the designation of this protected space?",
fn: "designation",
options: [
{ id: "SSSI", data: { text: "Sites of Special Scientific Interest", val: "SSSI" } },
{ id: "localReserve", data: { text: "Local Nature Reserve", val: "localReserve" } },
{ id: "metropolitan", data: { text: "Site of Metropolitan Importance", val: "metropolitan" } },
{ id: "boroughGradeOne", data: { text: "Site of Borough Grade 1 Importance", val: "boroughGradeOne" } },
{ id: "boroughGradeTwo", data: { text: "Site of Borough Grade 2 Importance", val: "boroughGradeTwo" } },
{ id: "local", data: { text: "Site of Local Importance", val: "local" } },
{ id: "none", data: { text: "Not designated", val: "none" } },
],
},
},
{
type: "text",
data: {
title: "Describe the protected space",
fn: "description",
type: TextInputType.Long,
},
},
{
type: "question",
data: {
title: "What is the access to this open space?",
fn: "access",
options: [
{ id: "restricted", data: { text: "Restricted", val: "restricted" } },
{ id: "unrestricted", data: { text: "Unrestricted", val: "unrestricted" } },
],
},
},
{
type: "number",
data: {
title: "What is the area of this open space?",
units: "ha",
fn: "area",
allowNegatives: false,
},
},
],
min: 1,
} as const;
Loading
Loading