mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
73 lines
2.1 KiB
JavaScript
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;
|
|
},
|
|
); |