I am working on a codebase written in Typescript that uses a lot of immutable reselect. I haven't been working with reselect yet and I have come across an example that I don't understand:
export const panelsSelector: (
order: Order,
events: List<List<Event>>,
adminRole: boolean,
packageEvents: List<List<PackageEvent>>,
) => List<PanelProps> = createImmutableEqualSelector(
(order: Order) => order,
(order: Order, events: List<List<Event>>) => events,
(order: Order, events: List<List<Event>>, adminRole: boolean) => adminRole,
(order: Order, events: List<List<Event>>, adminRole: boolean, packageEvents: List<List<PackageEvent>>) => packageEvents,
(order, events, adminRole, packageEvents) => List<PanelProps>([
{
content: <Events packageEvents={packageEvents}
events={events}
/>
},
{
content: <MyComponent packages={order.get('packages')}
adminRole={adminRole}
packagesCount={order.get('noOfPackages')}/>
},
)
If I am reading this right panelsSelector
is assigned I guess an anonymous type which is a function. In this case I guess createImmutableEqualSelector
returns a function which returns List<PanelProps>
. To simplify something like this:
const panelsSelector:(arg) => List<PanelProps> = createImmutableEqualSelector((arg) => List<PanelProps>)
What I don't understand in this example is why the selectors need to have an argument added from its predecessor to an argument list?
(order: Order) => order,
(order: Order, events: List<List<Event>>) => events,
(order: Order, events: List<List<Event>>, adminRole: boolean) => adminRole,
(order: Order, events: List<List<Event>>, adminRole: boolean, packageEvents: List<List<PackageEvent>>) => packageEvents
If I remove an argument from a predecessor for example for the second selector:
(events: List<List<Event>>) => events
I get a typescript error:
Types of parameters 'state' and 'order' are incompatible.
So, why do this selectors need to be written like that? So far I have only seen simple examples like this one where we get the data from the state:
const selectShopItems = state => state.shop.items
But, I don't understand the former example. If order is not state, then where is that data coming from?