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

73 lines
2.1 KiB
JavaScript

import { createSelector } from '@reduxjs/toolkit';
import { pickItemsFromIds, paginationLocationQuery } from 'store/selectors';
const expensesTableQuery = (state) => state.expenses.tableQuery;
const getPageExpensesQuery = (state, props) => {
const currentPageId = state.expenses.views?.[props.viewId]?.paginationMeta?.page;
return currentPageId || 0;
};
const getExpensesCurrentViewIdSelector = (state) => state.expenses.currentViewId;
const expensesPageSelector = (state, props, query) => {
const viewId = state.expenses.currentViewId;
const currentPageId = getPageExpensesQuery(state, { viewId });
return state.expenses.views?.[viewId]?.pages?.[currentPageId];
};
const expensesItemsSelector = (state) => state.expenses.items;
const expenseByIdSelector = (state, props) => state.expenses.items[props.expenseId];
const manualJournalsPaginationSelector = (state, props) => {
const viewId = state.expenses.currentViewId;
return state.expenses.views?.[viewId];
};
// Retrive expenses table query.
export const getExpensesTableQuery = createSelector(
paginationLocationQuery,
expensesTableQuery,
(locationQuery, tableQuery) => {
return {
...locationQuery,
...tableQuery,
};
},
);
// Retrieve expenses results of the current page.
export const getExpensesCurrentPageFactory = () => createSelector(
expensesPageSelector,
expensesItemsSelector,
(expensesPage, expensesItems) => {
return typeof expensesPage === 'object'
? pickItemsFromIds(expensesItems, expensesPage.ids) || []
: [];
},
);
// Retrieve specific expense by the passed expense id.
export const getExpenseByIdFactory = () => createSelector(
expenseByIdSelector,
(expense) => {
return expense;
}
);
// Retrieve expenses pagination meta.
export const getExpensesPaginationMetaFactory = () => createSelector(
manualJournalsPaginationSelector,
(expensesPage) => {
return expensesPage?.paginationMeta || {};
},
);
// Retrieve expenses current view id.
export const getExpensesCurrentViewIdFactory = () => createSelector(
getExpensesCurrentViewIdSelector,
(currentViewId) => {
return currentViewId;
},
);