@zeniai/client-epic-state 5.2.90 → 5.2.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,3 +14,10 @@ export function getFinanceStatementAdditionalBalances(requestedBalances, isCompa
14
14
  : [compareBalanceFromMode]),
15
15
  ];
16
16
  }
17
+ // The table has one change column with a $/% picker, so only the first selected compare type is
18
+ // shown; the rest of the selection still reaches the download.
19
+ export function getDisplayedAdditionalBalances(selectedBalances) {
20
+ const otherBalances = stripCompareAdditionalBalanceTypes(selectedBalances);
21
+ const displayedCompareBalance = selectedBalances.find((balance) => !otherBalances.includes(balance));
22
+ return selectedBalances.filter((balance) => otherBalances.includes(balance) || balance === displayedCompareBalance);
23
+ }
@@ -1,5 +1,5 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
- import { stripCompareAdditionalBalanceTypes } from '../../commonStateTypes/coaBalance/coaBalanceType';
2
+ import { stripCompareAdditionalBalanceTypes, } from '../../commonStateTypes/coaBalance/coaBalanceType';
3
3
  import { newBalancesFilter, newBalancesFilterForDateRange, } from '../../commonStateTypes/coaBalance/coaBalancesFilter';
4
4
  import { newBalancesFilterClassesView } from '../../commonStateTypes/coaBalance/coaBalancesFilterClassesView';
5
5
  import { newBalancesFilterProjectView } from '../../commonStateTypes/coaBalance/coaBalancesFilterProjectView';
@@ -17,6 +17,17 @@ import { getProfitAndLossReport, } from '../profitAndLoss/profitAndLossSelector'
17
17
  import { getProfitAndLossClassesHorizontalView } from '../profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector';
18
18
  import { getProfitAndLossClassesView } from '../profitAndLossClassesView/profitAndLossClassesViewSelector';
19
19
  import { getProfitAndLossProjectView } from '../profitAndLossProjectView/profitAndLossProjectViewSelector';
20
+ import { getDisplayedAdditionalBalances } from './financeStatementCompareBalances';
21
+ /**
22
+ * Reports are built from the displayed columns, but their filter carries the full selection: the
23
+ * download and the Add Columns picker read it from there.
24
+ */
25
+ function withSelectedAdditionalBalances(report, selectedAdditionalBalances) {
26
+ return {
27
+ ...report,
28
+ filter: { ...report.filter, additionalBalances: selectedAdditionalBalances },
29
+ };
30
+ }
20
31
  function getDateRangeForFinanceReports(profitAndLossState, balanceSheetState, cashFlowState) {
21
32
  const datesSorted = [
22
33
  profitAndLossState.dataAvailable?.startDate,
@@ -71,7 +82,7 @@ export const getFinanceStatement = createSelector((state) => state.accountState,
71
82
  const additionalBalancesForFilter = useHorizontalClassesLayout
72
83
  ? stripCompareAdditionalBalanceTypes(rawAdditionalBalances)
73
84
  : rawAdditionalBalances;
74
- const filter = newBalancesFilter(firstMonthOfFY, financeStatementState.timeframe, Math.min(getNumberOfPeriods(firstMonthOfFY, financeStatementState.timeframe, dataAvailable) ?? financeStatementState.selectedCOABalancesRange.numberOfPeriods, financeStatementState.selectedCOABalancesRange.numberOfPeriods), thisPeriod, 'ascending_date', additionalBalancesForFilter);
85
+ const filter = newBalancesFilter(firstMonthOfFY, financeStatementState.timeframe, Math.min(getNumberOfPeriods(firstMonthOfFY, financeStatementState.timeframe, dataAvailable) ?? financeStatementState.selectedCOABalancesRange.numberOfPeriods, financeStatementState.selectedCOABalancesRange.numberOfPeriods), thisPeriod, 'ascending_date', getDisplayedAdditionalBalances(additionalBalancesForFilter));
75
86
  const profitAndLossReport = getProfitAndLossReport(filter, undefined, accountState, accountGroupState, sectionAccountsViewState, profitAndLossState, forecastState);
76
87
  const classFilter = newBalancesFilterClassesView(filter.firstMonthOfFY, filter.timeframe, filter.balancesRange.numberOfPeriods, filter.balancesRange.thisPeriod, filter.balancesRange.orderBy, filter.additionalBalances, profitAndLossClassesViewState.uiState.classesToFilterOut);
77
88
  const profitAndLossByClassReport = getProfitAndLossClassesView(classFilter, accountState, classState, sectionsState, profitAndLossClassesViewState);
@@ -163,17 +174,17 @@ export const getFinanceStatement = createSelector((state) => state.accountState,
163
174
  reportFormat: financeStatementState.reportFormat,
164
175
  firstMonthOfFY,
165
176
  dataAvailable,
166
- profitAndLossReport,
167
- profitAndLossByClassReport,
168
- profitAndLossByProjectReport,
177
+ profitAndLossReport: withSelectedAdditionalBalances(profitAndLossReport, additionalBalancesForFilter),
178
+ profitAndLossByClassReport: withSelectedAdditionalBalances(profitAndLossByClassReport, additionalBalancesForFilter),
179
+ profitAndLossByProjectReport: withSelectedAdditionalBalances(profitAndLossByProjectReport, additionalBalancesForFilter),
169
180
  profitAndLossByClassHorizontalReport,
170
- balanceSheetReport,
171
- balanceSheetByClassReport,
172
- cashFlowByClassReport,
173
- cashFlowByProjectReport,
174
- balanceSheetByProjectReport,
175
- cashFlowReport,
176
- filter,
181
+ balanceSheetReport: withSelectedAdditionalBalances(balanceSheetReport, additionalBalancesForFilter),
182
+ balanceSheetByClassReport: withSelectedAdditionalBalances(balanceSheetByClassReport, additionalBalancesForFilter),
183
+ cashFlowByClassReport: withSelectedAdditionalBalances(cashFlowByClassReport, additionalBalancesForFilter),
184
+ cashFlowByProjectReport: withSelectedAdditionalBalances(cashFlowByProjectReport, additionalBalancesForFilter),
185
+ balanceSheetByProjectReport: withSelectedAdditionalBalances(balanceSheetByProjectReport, additionalBalancesForFilter),
186
+ cashFlowReport: withSelectedAdditionalBalances(cashFlowReport, additionalBalancesForFilter),
187
+ filter: { ...filter, additionalBalances: additionalBalancesForFilter },
177
188
  selectedReportId: financeStatementState.selectedReportId,
178
189
  downloadState: financeStatementState.downloadState,
179
190
  isCompareModeOn: useHorizontalClassesLayout
@@ -2,12 +2,12 @@ import { of } from 'rxjs';
2
2
  import { filter, switchMap } from 'rxjs/operators';
3
3
  import { updateCashInCashOutAdditionalBalancesSelection } from '../cashInCashOut/cashInCashOutReducer';
4
4
  import { updateCashPositionAdditionalBalancesSelection } from '../cashPosition/cashPositionReducer';
5
+ import { getFinanceStatementAdditionalBalances } from '../financeStatement/financeStatementCompareBalances';
5
6
  import { updateFinanceStatementAdditionalBalancesSelection } from '../financeStatement/financeStatementReducer';
6
7
  import { getFinanceStatement } from '../financeStatement/financeStatementSelector';
7
8
  import { updateNetBurnOrIncomeAdditionalBalancesSelection } from '../netBurnOrIncome/netBurnOrIncomeReducer';
8
9
  import { updateOpExAdditionalBalancesSelection } from '../opEx/opExReducer';
9
10
  import { updateRevenueAdditionalBalancesSelection } from '../revenue/revenueReducer';
10
- import { getFinanceStatementAdditionalBalances } from './financeStatementCompareBalances';
11
11
  import { updateReportUIOptionCompareMode } from './reportUIOptionsReducer';
12
12
  export const updateReportUIOptionIsCompareModeEpic = (actions$, state) => actions$.pipe(filter(updateReportUIOptionCompareMode.match), switchMap((action) => {
13
13
  const { additionalBalances } = action.payload;
@@ -2,12 +2,12 @@ import { from } from 'rxjs';
2
2
  import { filter, switchMap } from 'rxjs/operators';
3
3
  import { updateCashInCashOutAdditionalBalancesSelection } from '../cashInCashOut/cashInCashOutReducer';
4
4
  import { updateCashPositionAdditionalBalancesSelection } from '../cashPosition/cashPositionReducer';
5
+ import { getFinanceStatementAdditionalBalances } from '../financeStatement/financeStatementCompareBalances';
5
6
  import { updateFinanceStatementAdditionalBalancesSelection } from '../financeStatement/financeStatementReducer';
6
7
  import { getFinanceStatement } from '../financeStatement/financeStatementSelector';
7
8
  import { updateNetBurnOrIncomeAdditionalBalancesSelection } from '../netBurnOrIncome/netBurnOrIncomeReducer';
8
9
  import { updateOpExAdditionalBalancesSelection } from '../opEx/opExReducer';
9
10
  import { updateRevenueAdditionalBalancesSelection } from '../revenue/revenueReducer';
10
- import { getFinanceStatementAdditionalBalances } from './financeStatementCompareBalances';
11
11
  import { toggleReportUIOptionForecastMode, updateReportUIOptionIsCompareModeOn, } from './reportUIOptionsReducer';
12
12
  export const updateReportUIOptionIsCompareModeOnEpic = (actions$, state) => actions$.pipe(filter(updateReportUIOptionIsCompareModeOn.match), switchMap((action) => {
13
13
  const { additionalBalances } = action.payload;
@@ -1,2 +1,3 @@
1
1
  import { COABalanceType } from '../../commonStateTypes/coaBalance/coaBalanceType';
2
2
  export declare function getFinanceStatementAdditionalBalances(requestedBalances: COABalanceType[], isCompareModeOn: boolean, compareBalanceFromMode: COABalanceType): COABalanceType[];
3
+ export declare function getDisplayedAdditionalBalances(selectedBalances: COABalanceType[]): COABalanceType[];
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFinanceStatementAdditionalBalances = getFinanceStatementAdditionalBalances;
4
+ exports.getDisplayedAdditionalBalances = getDisplayedAdditionalBalances;
4
5
  const coaBalanceType_1 = require("../../commonStateTypes/coaBalance/coaBalanceType");
5
6
  // Reports can show the $ and % change columns together, so every requested compare type is kept;
6
7
  // compareMode picks one only when none was requested.
@@ -17,3 +18,10 @@ function getFinanceStatementAdditionalBalances(requestedBalances, isCompareModeO
17
18
  : [compareBalanceFromMode]),
18
19
  ];
19
20
  }
21
+ // The table has one change column with a $/% picker, so only the first selected compare type is
22
+ // shown; the rest of the selection still reaches the download.
23
+ function getDisplayedAdditionalBalances(selectedBalances) {
24
+ const otherBalances = (0, coaBalanceType_1.stripCompareAdditionalBalanceTypes)(selectedBalances);
25
+ const displayedCompareBalance = selectedBalances.find((balance) => !otherBalances.includes(balance));
26
+ return selectedBalances.filter((balance) => otherBalances.includes(balance) || balance === displayedCompareBalance);
27
+ }
@@ -20,6 +20,17 @@ const profitAndLossSelector_1 = require("../profitAndLoss/profitAndLossSelector"
20
20
  const profitAndLossClassesByClassHorizontalSelector_1 = require("../profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector");
21
21
  const profitAndLossClassesViewSelector_1 = require("../profitAndLossClassesView/profitAndLossClassesViewSelector");
22
22
  const profitAndLossProjectViewSelector_1 = require("../profitAndLossProjectView/profitAndLossProjectViewSelector");
23
+ const financeStatementCompareBalances_1 = require("./financeStatementCompareBalances");
24
+ /**
25
+ * Reports are built from the displayed columns, but their filter carries the full selection: the
26
+ * download and the Add Columns picker read it from there.
27
+ */
28
+ function withSelectedAdditionalBalances(report, selectedAdditionalBalances) {
29
+ return {
30
+ ...report,
31
+ filter: { ...report.filter, additionalBalances: selectedAdditionalBalances },
32
+ };
33
+ }
23
34
  function getDateRangeForFinanceReports(profitAndLossState, balanceSheetState, cashFlowState) {
24
35
  const datesSorted = [
25
36
  profitAndLossState.dataAvailable?.startDate,
@@ -74,7 +85,7 @@ exports.getFinanceStatement = (0, toolkit_1.createSelector)((state) => state.acc
74
85
  const additionalBalancesForFilter = useHorizontalClassesLayout
75
86
  ? (0, coaBalanceType_1.stripCompareAdditionalBalanceTypes)(rawAdditionalBalances)
76
87
  : rawAdditionalBalances;
77
- const filter = (0, coaBalancesFilter_1.newBalancesFilter)(firstMonthOfFY, financeStatementState.timeframe, Math.min((0, dataAvailable_1.getNumberOfPeriods)(firstMonthOfFY, financeStatementState.timeframe, dataAvailable) ?? financeStatementState.selectedCOABalancesRange.numberOfPeriods, financeStatementState.selectedCOABalancesRange.numberOfPeriods), thisPeriod, 'ascending_date', additionalBalancesForFilter);
88
+ const filter = (0, coaBalancesFilter_1.newBalancesFilter)(firstMonthOfFY, financeStatementState.timeframe, Math.min((0, dataAvailable_1.getNumberOfPeriods)(firstMonthOfFY, financeStatementState.timeframe, dataAvailable) ?? financeStatementState.selectedCOABalancesRange.numberOfPeriods, financeStatementState.selectedCOABalancesRange.numberOfPeriods), thisPeriod, 'ascending_date', (0, financeStatementCompareBalances_1.getDisplayedAdditionalBalances)(additionalBalancesForFilter));
78
89
  const profitAndLossReport = (0, profitAndLossSelector_1.getProfitAndLossReport)(filter, undefined, accountState, accountGroupState, sectionAccountsViewState, profitAndLossState, forecastState);
79
90
  const classFilter = (0, coaBalancesFilterClassesView_1.newBalancesFilterClassesView)(filter.firstMonthOfFY, filter.timeframe, filter.balancesRange.numberOfPeriods, filter.balancesRange.thisPeriod, filter.balancesRange.orderBy, filter.additionalBalances, profitAndLossClassesViewState.uiState.classesToFilterOut);
80
91
  const profitAndLossByClassReport = (0, profitAndLossClassesViewSelector_1.getProfitAndLossClassesView)(classFilter, accountState, classState, sectionsState, profitAndLossClassesViewState);
@@ -166,17 +177,17 @@ exports.getFinanceStatement = (0, toolkit_1.createSelector)((state) => state.acc
166
177
  reportFormat: financeStatementState.reportFormat,
167
178
  firstMonthOfFY,
168
179
  dataAvailable,
169
- profitAndLossReport,
170
- profitAndLossByClassReport,
171
- profitAndLossByProjectReport,
180
+ profitAndLossReport: withSelectedAdditionalBalances(profitAndLossReport, additionalBalancesForFilter),
181
+ profitAndLossByClassReport: withSelectedAdditionalBalances(profitAndLossByClassReport, additionalBalancesForFilter),
182
+ profitAndLossByProjectReport: withSelectedAdditionalBalances(profitAndLossByProjectReport, additionalBalancesForFilter),
172
183
  profitAndLossByClassHorizontalReport,
173
- balanceSheetReport,
174
- balanceSheetByClassReport,
175
- cashFlowByClassReport,
176
- cashFlowByProjectReport,
177
- balanceSheetByProjectReport,
178
- cashFlowReport,
179
- filter,
184
+ balanceSheetReport: withSelectedAdditionalBalances(balanceSheetReport, additionalBalancesForFilter),
185
+ balanceSheetByClassReport: withSelectedAdditionalBalances(balanceSheetByClassReport, additionalBalancesForFilter),
186
+ cashFlowByClassReport: withSelectedAdditionalBalances(cashFlowByClassReport, additionalBalancesForFilter),
187
+ cashFlowByProjectReport: withSelectedAdditionalBalances(cashFlowByProjectReport, additionalBalancesForFilter),
188
+ balanceSheetByProjectReport: withSelectedAdditionalBalances(balanceSheetByProjectReport, additionalBalancesForFilter),
189
+ cashFlowReport: withSelectedAdditionalBalances(cashFlowReport, additionalBalancesForFilter),
190
+ filter: { ...filter, additionalBalances: additionalBalancesForFilter },
180
191
  selectedReportId: financeStatementState.selectedReportId,
181
192
  downloadState: financeStatementState.downloadState,
182
193
  isCompareModeOn: useHorizontalClassesLayout
@@ -5,12 +5,12 @@ const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
6
  const cashInCashOutReducer_1 = require("../cashInCashOut/cashInCashOutReducer");
7
7
  const cashPositionReducer_1 = require("../cashPosition/cashPositionReducer");
8
+ const financeStatementCompareBalances_1 = require("../financeStatement/financeStatementCompareBalances");
8
9
  const financeStatementReducer_1 = require("../financeStatement/financeStatementReducer");
9
10
  const financeStatementSelector_1 = require("../financeStatement/financeStatementSelector");
10
11
  const netBurnOrIncomeReducer_1 = require("../netBurnOrIncome/netBurnOrIncomeReducer");
11
12
  const opExReducer_1 = require("../opEx/opExReducer");
12
13
  const revenueReducer_1 = require("../revenue/revenueReducer");
13
- const financeStatementCompareBalances_1 = require("./financeStatementCompareBalances");
14
14
  const reportUIOptionsReducer_1 = require("./reportUIOptionsReducer");
15
15
  const updateReportUIOptionIsCompareModeEpic = (actions$, state) => actions$.pipe((0, operators_1.filter)(reportUIOptionsReducer_1.updateReportUIOptionCompareMode.match), (0, operators_1.switchMap)((action) => {
16
16
  const { additionalBalances } = action.payload;
@@ -5,12 +5,12 @@ const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
6
  const cashInCashOutReducer_1 = require("../cashInCashOut/cashInCashOutReducer");
7
7
  const cashPositionReducer_1 = require("../cashPosition/cashPositionReducer");
8
+ const financeStatementCompareBalances_1 = require("../financeStatement/financeStatementCompareBalances");
8
9
  const financeStatementReducer_1 = require("../financeStatement/financeStatementReducer");
9
10
  const financeStatementSelector_1 = require("../financeStatement/financeStatementSelector");
10
11
  const netBurnOrIncomeReducer_1 = require("../netBurnOrIncome/netBurnOrIncomeReducer");
11
12
  const opExReducer_1 = require("../opEx/opExReducer");
12
13
  const revenueReducer_1 = require("../revenue/revenueReducer");
13
- const financeStatementCompareBalances_1 = require("./financeStatementCompareBalances");
14
14
  const reportUIOptionsReducer_1 = require("./reportUIOptionsReducer");
15
15
  const updateReportUIOptionIsCompareModeOnEpic = (actions$, state) => actions$.pipe((0, operators_1.filter)(reportUIOptionsReducer_1.updateReportUIOptionIsCompareModeOn.match), (0, operators_1.switchMap)((action) => {
16
16
  const { additionalBalances } = action.payload;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.2.90",
3
+ "version": "5.2.91",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",