Files
bigcapital/client/src/store/receipt/receipt.selector.js
2020-11-17 11:31:49 +02:00

66 lines
2.0 KiB
JavaScript

import { createSelector } from '@reduxjs/toolkit';
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
const receiptsPageSelector = (state) => {
const viewId = state.salesReceipts.currentViewId;
const currentView = state.salesReceipts.views?.[viewId];
const currentPageId = currentView?.paginationMeta?.page;
return currentView?.pages?.[currentPageId];
};
const receiptsPaginationSelector = (state, props) => {
const viewId = state.salesReceipts.currentViewId;
return state.salesReceipts.views?.[viewId];
};
const receiptItemsSelector = (state) => state.salesReceipts.items;
const receiptTableQuery = (state) => state.salesReceipts.tableQuery;
const receiptByIdSelector = (state, props) => state.salesReceipts.items[props.receiptId];
const receiptsCurrentViewIdSelector = (state) => state.salesReceipts.currentViewId;
// Retrieve current page sale receipts results.
export const getReceiptCurrentPageFactory = () =>
createSelector(
receiptsPageSelector,
receiptItemsSelector,
(receiptPage, receiptItems) => {
return typeof receiptPage === 'object'
? pickItemsFromIds(receiptItems, receiptPage.ids) || []
: [];
},
);
// Retrieve receipts table query.
export const getReceiptsTableQueryFactory = () =>
createSelector(
paginationLocationQuery,
receiptTableQuery,
(locationQuery, tableQuery) => {
return {
...locationQuery,
...tableQuery,
};
},
);
// Retrieve specific receipts by the passed receipt id.
export const getReceiptByIdFactory = () =>
createSelector(receiptByIdSelector, (receipt) => {
return receipt;
});
// Retrieve receipts pagination meta.
export const getReceiptsPaginationMetaFactory = () =>
createSelector(receiptsPaginationSelector, (receiptPage) => {
return receiptPage?.paginationMeta || {};
});
// Retrieve receipts current view id.
export const getReceiptsCurrentViewIdFactory = () =>
createSelector(
receiptsCurrentViewIdSelector,
(currentViewId) => currentViewId);