Skip to content

Commit 92e6d45

Browse files
committed
Let capacities be unlimited
1 parent 69de1f4 commit 92e6d45

File tree

4 files changed

+45
-11
lines changed

4 files changed

+45
-11
lines changed

frontend/src/components/programOccurrence/ProgramOccurrence.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import React, {useEffect, useState} from 'react';
22
import GenericForm from "../shared/GenericForm";
33
import {fetchInternalTypeByFormType} from "../../api/internalTypeApi";
44
import {ProgramAndNeedSatisfierField} from "./ProgramAndNeedSatisfierField";
5-
import FieldGroup from '../shared/FieldGroup';
65
import {fetchCharacteristics} from '../../api/characteristicApi';
76
import {getInstancesInClass} from '../../api/dynamicFormApi';
87
import {Box} from '@mui/material';
98
import {Loading} from '../shared';
109
import SelectField from '../shared/fields/SelectField';
10+
import {CapacityField} from '../shared/CapacityField';
1111

1212
export default function ProgramOccurrenceForm() {
1313
const formType = 'programOccurrence';
@@ -51,13 +51,12 @@ export default function ProgramOccurrenceForm() {
5151
} else if (implementation.optionsFromClass?.endsWith('#NeedSatisfier')) {
5252
return "";
5353
} else if (implementation.label === 'Capacity') {
54-
return <FieldGroup component={implementation.fieldType.type} key={`${type}_${id}`}
55-
label={implementation.label} required={required} inputProps={{min: 0}}
56-
value={fields[`${type}_${id}`]} onChange={handleChange(`${type}_${id}`)}/>;
54+
return <CapacityField fields={fields} handleChange={handleChange}
55+
capacityFieldId={characteristics['Capacity']._id} />;
5756
} else if (implementation.label === 'Occupancy') {
5857
return ''; // Not editable by the user
5958
} else if (implementation.label === "Occurrence Status") {
60-
const statusFieldKey = `characteristic_${characteristics['Occurrence Status']?._id}`;
59+
const statusFieldKey = `characteristic_${characteristics['Occurrence Status']._id}`;
6160
if (!statusFieldKey || !statusOptions) {
6261
return <Box minWidth={"350px"}><Loading message=""/></Box>;
6362
}

frontend/src/components/serviceOccurrence/ServiceOccurrence.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import React, {useEffect, useState} from 'react';
22
import GenericForm from "../shared/GenericForm";
33
import {fetchInternalTypeByFormType} from "../../api/internalTypeApi";
44
import {ServiceAndNeedSatisfierField} from "./ServiceAndNeedSatisfierField";
5-
import FieldGroup from '../shared/FieldGroup';
65
import {fetchCharacteristics} from '../../api/characteristicApi';
76
import {getInstancesInClass} from '../../api/dynamicFormApi';
87
import {Box} from '@mui/material';
98
import {Loading} from '../shared';
109
import SelectField from '../shared/fields/SelectField';
10+
import {CapacityField} from '../shared/CapacityField';
1111

1212
export default function ServiceOccurrenceForm() {
1313
const formType = 'serviceOccurrence';
@@ -52,13 +52,12 @@ export default function ServiceOccurrenceForm() {
5252
} else if (implementation.optionsFromClass?.endsWith('#NeedSatisfier')) {
5353
return "";
5454
} else if (implementation.label === 'Capacity') {
55-
return <FieldGroup component={implementation.fieldType.type} key={`${type}_${id}`}
56-
label={implementation.label} required={required} inputProps={{min: 0}}
57-
value={fields[`${type}_${id}`]} onChange={handleChange(`${type}_${id}`)}/>;
55+
return <CapacityField fields={fields} handleChange={handleChange}
56+
capacityFieldId={characteristics['Capacity']._id} />;
5857
} else if (implementation.label === 'Occupancy') {
5958
return ''; // Not editable by the user
6059
} else if (implementation.label === "Occurrence Status") {
61-
const statusFieldKey = `characteristic_${characteristics['Occurrence Status']?._id}`;
60+
const statusFieldKey = `characteristic_${characteristics['Occurrence Status']._id}`;
6261
if (!statusFieldKey || !statusOptions) {
6362
return <Box minWidth={"350px"}><Loading message=""/></Box>;
6463
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React from "react";
2+
import {useState} from "react";
3+
import SelectField from "../shared/fields/SelectField";
4+
import {Fade} from "@mui/material";
5+
import FieldGroup from "./FieldGroup";
6+
7+
export function CapacityField({fields, handleChange, capacityFieldId}) {
8+
const capacityFieldKey = `characteristic_${capacityFieldId}`;
9+
const [isCapacityLimited, setIsCapacityLimited] = useState(typeof fields[capacityFieldKey] !== 'undefined'
10+
? 'Yes' : 'No');
11+
12+
const handleChangeCapacity = e => {
13+
const value = e.target.value;
14+
setIsCapacityLimited(value);
15+
16+
// if the new isCapacityLimited value is No, unset the inner field
17+
if (value === 'No') {
18+
handleChange(capacityFieldKey)(null);
19+
}
20+
}
21+
22+
return <>
23+
<SelectField key={capacityFieldKey} label="Is Capacity Limited?" required value={isCapacityLimited}
24+
options={['Yes', 'No']} onChange={e => handleChangeCapacity(e)}/>
25+
{isCapacityLimited === "Yes"
26+
? <Fade in={isCapacityLimited === "Yes"}>
27+
<div>
28+
<FieldGroup component={'NumberField'} key={capacityFieldKey}
29+
label={'Capacity'} required inputProps={{min: 0}}
30+
value={fields[capacityFieldKey]} onChange={handleChange(capacityFieldKey)}/>
31+
</div>
32+
</Fade>
33+
: null
34+
}
35+
</>
36+
}

frontend/src/components/shared/fields/GeneralField.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default function GeneralField({type, onChange, value: defaultValue, ...pr
3535
else
3636
return null;
3737
}
38-
return defaultValue || '';
38+
return defaultValue ?? '';
3939
});
4040

4141
const handleChange = useCallback(e => {

0 commit comments

Comments
 (0)