NGRX формы - как работать с несколькими похожими формами? - PullRequest
0 голосов
/ 04 октября 2019

в моем приложении я использую формы ngrx ( LINK ).

Существует 4 различных вида транспортных билетов (самолет, поезд, автобус, судно). Они похожи друг на друга (например, дата начала / окончания, место начала / окончания), но некоторые поля о деталях различны (например, у самолета есть предел багажа)

export interface FormOffer {
    title: string;
    price: number;
    description: string;
    startDate: string
    endDate: string
    information: PlaneInformation | TrainInformation | BusInformation |  ShipInformation;
}

Я не являюсьуверен, какой подход будет лучше:

  1. Создать 4 редуктора, по одному на каждую форму и сохранить его в отдельных модулях?
    Каждый модуль имеет forFeature:

    StoreModule.forFeature('planeForm', reducer)
    

    (я так и сделал)

  2. Избегать повторения какой-то части кода и как-то использовать общий редуктор? Но я понятия не имею, как с этим

моим редуктором для плоскости выглядит примерно так. Это будет похоже на другие виды транспорта:

export const validateAndUpdateForm = updateGroup<FormOffer>({
    title: validate(required),
    startDate: validate(required),
    endDate: validate(required),
    information: updateGroup<PlaneInformation>({
        numberOfTickets: validate(required),
        flightNumber: validate(required),
        airline: validate(required),
        ticketClass: validate(required)
    })
});
const reducers = combineReducers<State['planeForm'], any>({
    formState(s = INITIAL_STATE, a: Action) {
        return validateAndUpdateForm(formGroupReducer(s, a));
    }
})
...