Index: CHANGELOG.md =================================================================== diff -u -N -rd337a0ac836544c6a7201f924878e2fd5f88370e -r7f9ffae3458e2f9994249398a1d526a3cbe861d6 --- CHANGELOG.md (.../CHANGELOG.md) (revision d337a0ac836544c6a7201f924878e2fd5f88370e) +++ CHANGELOG.md (.../CHANGELOG.md) (revision 7f9ffae3458e2f9994249398a1d526a3cbe861d6) @@ -1,6 +1,8 @@ 2.1.4-SNAPSHOT / WIP ================== +mobile app * [OLMIS-7654](https://openlmis.atlassian.net/browse/OLMIS-7654): Create template page for program/facility selection - mobile app +* [OLMIS-7655](https://openlmis.atlassian.net/browse/OLMIS-7655): Enable selecting program and facility on program/facility selection page - mobile app 2.1.3 / 2022-10-07 ================== Index: src/stock-on-hand-mobile/pages/program-select.jsx =================================================================== diff -u -N -rd337a0ac836544c6a7201f924878e2fd5f88370e -r7f9ffae3458e2f9994249398a1d526a3cbe861d6 --- src/stock-on-hand-mobile/pages/program-select.jsx (.../program-select.jsx) (revision d337a0ac836544c6a7201f924878e2fd5f88370e) +++ src/stock-on-hand-mobile/pages/program-select.jsx (.../program-select.jsx) (revision 7f9ffae3458e2f9994249398a1d526a3cbe861d6) @@ -17,24 +17,48 @@ import { useSelector } from 'react-redux'; import RadioButton from '../../react-components/buttons/radio-button'; import Select from '../../react-components/inputs/select'; +import InputWithSuggestions from '../../react-components/inputs/input-with-suggestions'; const ProgramSelect = ({ offlineService }) => { - const facility = useSelector(state => state[`facilitiesStockOnHand`][`userHomeFacilityStockOnHand`]); - - const programs = facility.supportedPrograms.map(({ id, name }) => ({ value: id, name })); + const convertIntoSelectOptions = (values) => { + return values.map(({ id, name }) => ({ value: id, name })); + }; - const menu = document.getElementsByClassName('header ng-scope')[0]; + const facility = useSelector(state => state['facilitiesStockOnHand']['userHomeFacilityStockOnHand']); + const supervisedPrograms = useSelector(state => convertIntoSelectOptions(state['programsStockOnHand']['supervisedProgramsStockOnHand'])); + const supervisedFacilities = useSelector(state => state['facilitiesStockOnHand']['supervisedFacilitiesStockOnHand']); + const programs = convertIntoSelectOptions(facility.supportedPrograms); const [facilityId, setFacilityId] = useState(null); const [programId, setProgramId] = useState(null); - const [programName, setProgramName] = useState(null); const [facilityType, setFacilityType] = useState('MyFacility'); + const [supervisedFacilitiesOptions, setSupervisedFacilitiesOptions] = useState([]); - const radioChangeHandler = e => setFacilityType(e.target.value); + const radioChangeHandler = (e) => { + if (facilityType !== e.target.value) { + if (e.target.value == 'MyFacility') { + setFacilityId(facility.id); + } else { + setFacilityId(null); + } + setFacilityType(e.target.value); + setProgramId(null); + } + }; - useEffect(() => menu.style.display = '', [menu]); + const supervisedProgramsHandler = (value) => { + setProgramId(value); + setSupervisedFacilitiesOptions(supervisedFacilities[value]); + }; + const menu = document.getElementsByClassName('header ng-scope')[0]; + + useEffect(() => { + setFacilityId(facility.id); + menu.style.display = ''; + }, [menu, programId]); + return ( <>
@@ -64,6 +88,7 @@ isSelected={facilityType === 'SupervisedFacility'} label='Supervised Facility' value='SupervisedFacility' + disabled={!supervisedPrograms} />
@@ -72,33 +97,44 @@ Program
-
+ {facilityType !== 'SupervisedFacility' ? +
+ setProgramId(value)} + options={supervisedPrograms} + onChange={supervisedProgramsHandler} /> -
- {facilityType === 'SupervisedFacility' && ( - <> +
-
-