Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [UPDATE_PASSENGER](state, { id, form: passenger, fieldName }) {
- const hasBirthdayField = has('birthday', passenger.fields);
- let updatedPassenger;
- let newState = evolve({
- fields: {
- passengers: map(
- (p) => {
- if (p.id === id) {
- updatedPassenger = mergeWithKey(
- (k, l, r) => (k === 'fields' ? merge(l, omit(SWAP_FIELDS, r)) : r),
- p,
- passenger
- );
- if (hasBirthdayField) {
- updatedPassenger = resetDocuments(updatedPassenger);
- }
- if (hasBirthdayField) {
- updatedPassenger = {
- ...updatedPassenger,
- isAdult: isAdult(passenger),
- };
- }
- return resetChildCheckbox(updatedPassenger);
- }
- return p;
- }
- ),
- },
- }, state);
- if (hasBirthdayField && (!fieldName || fieldName === 'birthday') &&
- isValidBirthday(updatedPassenger) &&
- needSwap(updatedPassenger)
- ) {
- const passengers = compose(
- filter(
- converge(
- or,
- [compose(not, isValidBirthday), needSwap]
- )
- ),
- getPassengers
- )(newState);
- const passengerAge = getPassengerAge(updatedPassenger);
- const groupedByAge = groupBy(
- compose(
- age => (isNil(age) ? -1 : age),
- getFormAge
- )
- )(passengers);
- const withSeats = getWithSeats(passengers);
- let swapOnlyAge = false;
- let anotherPassenger;
- if (DISABLE_AGE_VALIDATION || isAdult(updatedPassenger)) {
- swapOnlyAge = hasSeats(updatedPassenger);
- anotherPassenger = withSeats.shift();
- } else {
- anotherPassenger = groupedByAge[passengerAge].shift();
- swapOnlyAge = hasSeats(updatedPassenger) === hasSeats(anotherPassenger);
- }
- if (anotherPassenger) {
- newState = evolve({
- fields: {
- passengers: map(
- cond([
- [propEq('id', anotherPassenger.id), evolve({
- fields: merge(__, getSwapFields(updatedPassenger, swapOnlyAge)),
- })],
- [propEq('id', updatedPassenger.id), evolve({
- fields: merge(__, getSwapFields(anotherPassenger, swapOnlyAge)),
- })],
- [T, identity],
- ])
- ),
- },
- })(newState);
- }
- }
- return newState;
- },
Add Comment
Please, Sign In to add comment