diff --git a/src/Bundle/ChillPersonBundle/Resources/public/lib/household.js b/src/Bundle/ChillPersonBundle/Resources/public/lib/household.js new file mode 100644 index 000000000..cd9a31d3f --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/lib/household.js @@ -0,0 +1,46 @@ +const _fetchHouseholdByAddressReference = (reference, page) => { + const perPage = 50; + const url = `/api/1.0/person/household/by-address-reference/${reference.id}.json?` + + new URLSearchParams({item_per_page: perPage, page }); + + return fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json;charset=utf-8' + }, + }).then(response => { + if (response.ok()) { return response.json(); } + throw Error({m: response.statusText }); + }); +} + +const fetchHouseholdByAddressReference = async (reference) => { + const url = `/api/1.0/person/household/by-address-reference/${reference.id}.json?` + + new URLSearchParams({}); + + return _fetchHouseholdByAddressReference(reference, 1).then(data => { + let promises = []; + promises.push(Promise.resolve(data.results)); + if (data.pagination.more) { + let count = data.count; + let per_page = data.pagination.item_per_page; + let at_end = data.count + let page = 1; + while ((at_end + per_page) < count) { + page = page + 1; + at_end = at_end + per_page; + promises.push(_fetchHouseholdByAddressReference(reference, page).then(data => { + return Promise.resolve(data.results); + })); + } + + } + return Promise.all(promises).then(results => { + return results.flat(); + }); + }); +}; + +export { + fetchHouseholdByAddressReference +}; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js index 5f45e31eb..8826d0c97 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/store/index.js @@ -1,5 +1,6 @@ import { createStore } from 'vuex'; import { householdMove, fetchHouseholdSuggestionByAccompanyingPeriod, fetchAddressSuggestionByPerson} from './../api.js'; +import { fetchHouseholdByAddressReference } from 'ChillPersonAssets/chill/lib/household.js'; import { datetimeToISO } from 'ChillMainAssets/chill/js/date.js'; const debug = process.env.NODE_ENV !== 'production'; @@ -42,7 +43,12 @@ const store = createStore({ allowHouseholdSearch: window.household_members_editor_data.allowHouseholdSearch, allowLeaveWithoutHousehold: window.household_members_editor_data.allowLeaveWithoutHousehold, forceLeaveWithoutHousehold: false, - householdSuggestionByAccompanyingPeriod: [], + /** + * Household suggestions + * + * (this is not restricted to "suggestion by accompanying periods") + */ + householdSuggestionByAccompanyingPeriod: [], // TODO rename into householdsSuggestion showHouseholdSuggestion: window.household_members_editor_expand_suggestions === 1, addressesSuggestion: [], showAddressSuggestion: true, @@ -426,6 +432,13 @@ const store = createStore({ fetchAddressSuggestionByPerson(state.concerned[i].person.id) .then(addresses => { commit('addAddressesSuggestion', addresses); + let promises = []; + addresses.forEach(a => { + if (a.addressReference !== null) { + let households = fetchHouseholdByAddressReference(a.addressReference); + } + }) + }) .catch(e => { console.log(e);