'Redux/reselect selector function arguments explanation?

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?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source