в моем приложении я использую формы ngrx ( LINK ).
Существует 4 различных вида транспортных билетов (самолет, поезд, автобус, судно). Они похожи друг на друга (например, дата начала / окончания, место начала / окончания), но некоторые поля о деталях различны (например, у самолета есть предел багажа)
export interface FormOffer {
title: string;
price: number;
description: string;
startDate: string
endDate: string
information: PlaneInformation | TrainInformation | BusInformation | ShipInformation;
}
Я не являюсьуверен, какой подход будет лучше:
Создать 4 редуктора, по одному на каждую форму и сохранить его в отдельных модулях?
Каждый модуль имеет forFeature:
StoreModule.forFeature('planeForm', reducer)
(я так и сделал)
Избегать повторения какой-то части кода и как-то использовать общий редуктор? Но я понятия не имею, как с этим
моим редуктором для плоскости выглядит примерно так. Это будет похоже на другие виды транспорта:
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));
}
})