Files
bigcapital/client/src/store/vendors/vendors.selectors.js
Ahmed Bouhuolia 9eebaf5a6e feat: style vendor form and list.
feat: items state selectors.
2020-11-21 19:58:02 +02:00

60 lines
1.6 KiB
JavaScript

import { createSelector } from '@reduxjs/toolkit';
import {
pickItemsFromIds,
paginationLocationQuery,
defaultPaginationMeta,
} from 'store/selectors';
const vendorsTableQuery = (state) => state.vendors.tableQuery;
const vendorByIdSelector = (state, props) =>
state.vendors.items[props.vendorId];
const vendorsItemsSelector = (state) => state.vendors.items;
const vendorsPaginationSelector = (state, props) => {
const viewId = state.vendors.currentViewId;
return state.vendors.views?.[viewId];
};
export const getVendorsTableQuery = createSelector(
paginationLocationQuery,
vendorsTableQuery,
(locationQuery, tableQuery) => {
return {
...locationQuery,
...tableQuery,
};
},
);
const vendorsPageSelector = (state, props, query) => {
const viewId = state.vendors.currentViewId;
const currentView = state.vendors.views?.[viewId];
const currentPageId = currentView?.pages;
return currentView?.pages?.[currentPageId];
};
export const getVendorCurrentPageFactory = () =>
createSelector(
vendorsPageSelector,
vendorsItemsSelector,
(vendorPage, vendorItems) => {
return typeof vendorPage === 'object'
? pickItemsFromIds(vendorItems, vendorPage.ids) || []
: [];
},
);
export const getVendorsPaginationMetaFactory = () =>
createSelector(vendorsPaginationSelector, (vendorPage) => {
return {
...defaultPaginationMeta(),
...(vendorPage?.paginationMeta || {}),
};
});
export const getVendorByIdFactory = () =>
createSelector(vendorByIdSelector, (vendor) => {
return vendor;
});