@zeniai/client-epic-state 5.2.52 → 5.2.53-beta0ND
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.
- package/lib/entity/notificationRegistry/notificationRegistryReducer.d.ts +2 -1
- package/lib/entity/notificationRegistry/notificationRegistryReducer.js +20 -9
- package/lib/entity/notificationRegistry/notificationRegistrySelector.d.ts +2 -1
- package/lib/entity/notificationRegistry/notificationRegistrySelector.js +7 -1
- package/lib/entity/notificationRegistry/notificationRegistryState.d.ts +5 -0
- package/lib/entity/notificationRegistry/notificationRegistryState.js +7 -1
- package/lib/entity/sectionProjectView/sectionProjectViewReducer.js +3 -1
- package/lib/epic.js +4 -4
- package/lib/esm/entity/notificationRegistry/notificationRegistryReducer.js +20 -9
- package/lib/esm/entity/notificationRegistry/notificationRegistrySelector.js +5 -0
- package/lib/esm/entity/notificationRegistry/notificationRegistryState.js +5 -0
- package/lib/esm/entity/sectionProjectView/sectionProjectViewReducer.js +3 -1
- package/lib/esm/epic.js +4 -4
- package/lib/esm/index.js +4 -4
- package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +4 -2
- package/lib/esm/view/aiCfoView/epics/fetchRoutineRunsEpic.js +3 -1
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +15 -4
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +10 -0
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +28 -11
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +19 -3
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +21 -21
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +57 -9
- package/lib/esm/view/notificationPreferencesView/epics/saveNotificationPreferencesEpic.js +20 -7
- package/lib/esm/view/notificationPreferencesView/notificationPreferencesViewReducer.js +43 -17
- package/lib/esm/view/notificationPreferencesView/notificationPreferencesViewSelector.js +24 -4
- package/lib/esm/view/settingsView/epic/fetchNotificationSettingsEpic.js +12 -2
- package/lib/index.d.ts +4 -4
- package/lib/index.js +21 -14
- package/lib/view/aiCfoView/aiCfoViewReducer.js +4 -2
- package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +1 -1
- package/lib/view/aiCfoView/epics/fetchRoutineRunsEpic.js +3 -1
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +15 -4
- package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +18 -7
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +10 -0
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +8 -4
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +27 -10
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +8 -5
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.d.ts +7 -0
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +18 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.d.ts +3 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +19 -19
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +49 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +59 -10
- package/lib/view/notificationPreferencesView/epics/saveNotificationPreferencesEpic.js +19 -6
- package/lib/view/notificationPreferencesView/notificationPreferencesViewReducer.d.ts +8 -5
- package/lib/view/notificationPreferencesView/notificationPreferencesViewReducer.js +43 -17
- package/lib/view/notificationPreferencesView/notificationPreferencesViewSelector.d.ts +4 -0
- package/lib/view/notificationPreferencesView/notificationPreferencesViewSelector.js +30 -5
- package/lib/view/notificationPreferencesView/notificationPreferencesViewState.d.ts +4 -3
- package/lib/view/settingsView/epic/fetchNotificationSettingsEpic.js +12 -2
- package/lib/view/settingsView/settingsViewPayload.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createSelector } from '@reduxjs/toolkit';
|
|
2
|
+
import { toInvoicingQboAccountMappingSlot, } from '../../../entity/invoicing/invoicingCommonPayload';
|
|
1
3
|
import { getAccountList, getNestedAccountListHierarchy, } from '../../accountList/accountListSelector';
|
|
2
4
|
import { getClassList, getNestedClassListHierarchy, } from '../../classList/classListSelector';
|
|
3
5
|
// The shared bucket, fetched with the same arguments as the other consumers so
|
|
@@ -82,14 +84,20 @@ export const getInvoicingCatalogAccountingLookup = (state) => ({
|
|
|
82
84
|
classByQboId: (qboId) => invoicingQboClassByQboId(state, qboId),
|
|
83
85
|
});
|
|
84
86
|
/**
|
|
85
|
-
* Accounts
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
87
|
+
* Accounts as the invoicing pickers need them, from the shared
|
|
88
|
+
* accounting-service list, so whatever another screen already loaded is reused.
|
|
89
|
+
* `qboId` is the submitted value because that is what the invoicing API stores;
|
|
90
|
+
* an account without one cannot be posted, so it is dropped rather than offered.
|
|
91
|
+
*
|
|
92
|
+
* Memoized on the two slices it reads: the pickers and the lists derived from
|
|
93
|
+
* them are handed straight to forms, and a fresh array on every store change
|
|
94
|
+
* re-seeds a form the user is editing.
|
|
90
95
|
*/
|
|
91
|
-
const
|
|
92
|
-
|
|
96
|
+
export const getInvoicingQboAccountOptions = createSelector([
|
|
97
|
+
(state) => state.accountState,
|
|
98
|
+
(state) => state.accountListState,
|
|
99
|
+
], (accountState, accountListState) => {
|
|
100
|
+
const { accounts } = getAccountList(accountState, accountListState, INVOICING_ACCOUNT_LIST_KEY);
|
|
93
101
|
return accounts.flatMap((account) => {
|
|
94
102
|
if (account.qboId == null || account.isDeleted === true) {
|
|
95
103
|
return [];
|
|
@@ -102,7 +110,7 @@ const invoicingAccountingOptions = (state) => {
|
|
|
102
110
|
},
|
|
103
111
|
];
|
|
104
112
|
});
|
|
105
|
-
};
|
|
113
|
+
});
|
|
106
114
|
/**
|
|
107
115
|
* Normalises an account-type name for comparison. The config's mapping kinds
|
|
108
116
|
* name QuickBooks types the way QuickBooks displays them ("Other Current
|
|
@@ -138,6 +146,46 @@ export const invoicingAccountsForQboAccountTypes = (accounts, accountTypes) => {
|
|
|
138
146
|
return accounts.filter((account) => account.accountType != null &&
|
|
139
147
|
wanted.has(normalizeAccountTypeName(account.accountType)));
|
|
140
148
|
};
|
|
149
|
+
/**
|
|
150
|
+
* The account-mapping slot a catalog price point's income account shares with
|
|
151
|
+
* the settings page, and the one a discount's account shares with it.
|
|
152
|
+
*/
|
|
153
|
+
export const INVOICING_INCOME_ACCOUNT_MAPPING_SLOT = 'default_income_account';
|
|
154
|
+
export const INVOICING_DISCOUNTS_ACCOUNT_MAPPING_SLOT = 'discounts_account';
|
|
155
|
+
/**
|
|
156
|
+
* The account types a slot falls back to when the config carries no kind for
|
|
157
|
+
* it. QuickBooks posts a product, a price and a discount line to an income
|
|
158
|
+
* account; offering every account instead would let a save be rejected.
|
|
159
|
+
*/
|
|
160
|
+
export const INVOICING_DEFAULT_INCOME_ACCOUNT_TYPES = 'Income';
|
|
161
|
+
/**
|
|
162
|
+
* The QuickBooks ids a mapping slot's picker may offer, from the account types
|
|
163
|
+
* the config gives that slot — so every picker filling the same slot offers the
|
|
164
|
+
* same accounts, and widening one stays a config change.
|
|
165
|
+
*
|
|
166
|
+
* Ids rather than a filtered tree: the pickers flatten the tree into options by
|
|
167
|
+
* walking each node's children, so dropping a parent that is not itself of the
|
|
168
|
+
* wanted type would drop its matching descendants with it.
|
|
169
|
+
*
|
|
170
|
+
* Matched on the slot rather than the code as written, since a config naming
|
|
171
|
+
* the kind `discounts_account_id` means the same slot. A slot the config does
|
|
172
|
+
* not carry falls back to `defaultAccountTypes` rather than to every account.
|
|
173
|
+
*/
|
|
174
|
+
export const invoicingQboAccountIdsForMappingSlot = (accounts, accountMappingKindOptions, mappingSlot, defaultAccountTypes) => {
|
|
175
|
+
const accountTypes = accountMappingKindOptions.find((kindOption) => toInvoicingQboAccountMappingSlot(kindOption.code) === mappingSlot)?.accountTypes ?? defaultAccountTypes;
|
|
176
|
+
return invoicingAccountsForQboAccountTypes(accounts, accountTypes).map((account) => account.id);
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Stable empties for a tenant with no QBO connection.
|
|
180
|
+
*
|
|
181
|
+
* `?? []` builds a fresh array per call, and the invoicing forms re-seed their
|
|
182
|
+
* fields whenever their option lists change identity — so a form open against a
|
|
183
|
+
* disconnected tenant would reset itself on every unrelated store change, until
|
|
184
|
+
* the first edit disarms the re-seed.
|
|
185
|
+
*/
|
|
186
|
+
export const NO_INVOICING_ACCOUNT_HIERARCHY = [];
|
|
187
|
+
export const NO_INVOICING_CLASS_HIERARCHY = [];
|
|
188
|
+
export const NO_INVOICING_ACCOUNT_IDS = [];
|
|
141
189
|
/** Classes as the invoicing pickers need them, from the shared class list. */
|
|
142
190
|
const invoicingAccountingClassOptions = (state) => {
|
|
143
191
|
const { classes } = getClassList(state.classState, state.classListState);
|
|
@@ -159,7 +207,7 @@ export const getInvoicingQboView = (state) => {
|
|
|
159
207
|
const qboState = state.invoicingQboViewState;
|
|
160
208
|
const accountList = state.accountListState.byReportId[INVOICING_ACCOUNT_LIST_KEY];
|
|
161
209
|
return {
|
|
162
|
-
accounts:
|
|
210
|
+
accounts: getInvoicingQboAccountOptions(state),
|
|
163
211
|
accountsFetchState: {
|
|
164
212
|
fetchState: accountList.fetchState,
|
|
165
213
|
error: accountList.error,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { EMPTY, of } from 'rxjs';
|
|
2
2
|
import { catchError, filter, finalize, mergeMap, switchMap, takeUntil, withLatestFrom, } from 'rxjs/operators';
|
|
3
|
+
import { NOTIFICATION_DOMAINS } from '../../../entity/notificationRegistry/notificationRegistryState';
|
|
3
4
|
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
4
5
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../responsePayload';
|
|
5
6
|
import { notificationPreferencesUrl } from '../notificationPreferencesEndpoint';
|
|
6
7
|
import { mapPreferencesToPayload, } from '../notificationPreferencesViewPayload';
|
|
7
8
|
import { clearAllNotificationPreferencesView, clearNotificationPreferencesLocalOverrides, saveNotificationPreferences, saveNotificationPreferencesFailure, saveNotificationPreferencesSuccess, } from '../notificationPreferencesViewReducer';
|
|
8
|
-
import {
|
|
9
|
+
import { getNotificationLocalOverridesForDomain } from '../notificationPreferencesViewSelector';
|
|
9
10
|
export const saveNotificationPreferencesEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter((action) => saveNotificationPreferences.match(action)), withLatestFrom(state$),
|
|
10
11
|
// `switchMap` unsubscribes from any in-flight PUT observable when a newer
|
|
11
12
|
// Save fires. The prior HTTP request has already left the
|
|
@@ -13,9 +14,19 @@ export const saveNotificationPreferencesEpic = (actions$, state$, zeniAPI) => ac
|
|
|
13
14
|
// ignored, so stale success/failure actions cannot clobber the newer
|
|
14
15
|
// batch's state. Server-side ordering is arrival-order LWW.
|
|
15
16
|
switchMap(([, state]) => {
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
17
|
+
// A clean domain is omitted entirely: an empty patch is still a write against it.
|
|
18
|
+
const overridesByDomain = {};
|
|
19
|
+
const body = {};
|
|
20
|
+
NOTIFICATION_DOMAINS.forEach((domain) => {
|
|
21
|
+
const overrides = getNotificationLocalOverridesForDomain(state, domain);
|
|
22
|
+
const preferencesPatch = mapPreferencesToPayload(overrides);
|
|
23
|
+
if (Object.keys(preferencesPatch).length === 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
overridesByDomain[domain] = overrides;
|
|
27
|
+
body[`${domain}_preferences`] = preferencesPatch;
|
|
28
|
+
});
|
|
29
|
+
if (Object.keys(body).length === 0) {
|
|
19
30
|
// No diff → do not dispatch a synthetic success (that would wipe
|
|
20
31
|
// stored preferences via the reducer). Simply no-op.
|
|
21
32
|
return EMPTY;
|
|
@@ -28,7 +39,6 @@ switchMap(([, state]) => {
|
|
|
28
39
|
// in-flight save's response (Success/Failure never dispatched, so
|
|
29
40
|
// the counter never drained and future saves got their merge dropped).
|
|
30
41
|
const cancelEpochAtDispatch = state.notificationPreferencesViewState.cancelEpoch;
|
|
31
|
-
const body = { task_checklist_preferences: preferencesPatch };
|
|
32
42
|
// Suppress the error snackbar when the response lands AFTER the user
|
|
33
43
|
// pressed Cancel — the Failure reducer already swallows the state
|
|
34
44
|
// update, so the toast would be a stale error for a save the user
|
|
@@ -57,8 +67,11 @@ switchMap(([, state]) => {
|
|
|
57
67
|
if (isSuccessResponse(response)) {
|
|
58
68
|
return of(saveNotificationPreferencesSuccess({
|
|
59
69
|
cancelEpochAtDispatch,
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
savedOverridesByDomain: overridesByDomain,
|
|
71
|
+
serverEchoByDomain: {
|
|
72
|
+
task_checklist: response.data?.task_checklist_preferences,
|
|
73
|
+
commenting: response.data?.commenting_preferences,
|
|
74
|
+
},
|
|
62
75
|
}));
|
|
63
76
|
}
|
|
64
77
|
const actions = [
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { createSlice } from '@reduxjs/toolkit';
|
|
2
|
+
import { DEFAULT_NOTIFICATION_DOMAIN, } from '../../entity/notificationRegistry/notificationRegistryState';
|
|
2
3
|
import { clearAll } from '../../rootActions';
|
|
3
4
|
import { mapPayloadToPreferences, } from './notificationPreferencesViewPayload';
|
|
4
5
|
import { emptyNotificationPreferences, } from './notificationPreferencesViewState';
|
|
5
6
|
export const initialState = {
|
|
6
7
|
cancelEpoch: 0,
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
localOverridesByDomain: {},
|
|
9
|
+
preferencesByDomain: {},
|
|
9
10
|
saveEpoch: 0,
|
|
10
11
|
savePreferencesState: { fetchState: 'Not-Started' },
|
|
11
12
|
};
|
|
13
|
+
// Lazy: a gate-off tenant never receives that domain's key at all.
|
|
14
|
+
const overridesFor = (byDomain, domain) => {
|
|
15
|
+
const existing = byDomain[domain];
|
|
16
|
+
if (existing != null) {
|
|
17
|
+
return existing;
|
|
18
|
+
}
|
|
19
|
+
const created = emptyNotificationPreferences();
|
|
20
|
+
byDomain[domain] = created;
|
|
21
|
+
return created;
|
|
22
|
+
};
|
|
12
23
|
const mergePreferences = (base, patch) => {
|
|
13
24
|
const eventEnabledByChannel = {
|
|
14
25
|
...base.eventEnabledByChannel,
|
|
@@ -146,7 +157,8 @@ const notificationPreferencesView = createSlice({
|
|
|
146
157
|
// Success/Failure never dispatches, subsequent legitimate saves
|
|
147
158
|
// still work because their captured epoch matches the current one.
|
|
148
159
|
draft.cancelEpoch += 1;
|
|
149
|
-
|
|
160
|
+
// One shared Save/Cancel footer, so Cancel discards every domain.
|
|
161
|
+
draft.localOverridesByDomain = {};
|
|
150
162
|
// Also drop `savePreferencesState` back to Not-Started so any
|
|
151
163
|
// "Saving…" affordance bound to `getNotificationPreferencesSaveState`
|
|
152
164
|
// clears on Cancel. Without this, a Cancel-during-save whose stale
|
|
@@ -163,9 +175,6 @@ const notificationPreferencesView = createSlice({
|
|
|
163
175
|
// them; the save-success path is the only clearer.
|
|
164
176
|
// A `null`/`undefined` payload isn't a snapshot at all (e.g. the
|
|
165
177
|
// envelope key was omitted); no-op instead of wiping preferences.
|
|
166
|
-
if (action.payload.preferences == null) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
178
|
// Stale-GET guard (Cursor Bugbot 3632510237): if the fetch epic
|
|
170
179
|
// captured a `saveEpoch` lower than the current one, a save has
|
|
171
180
|
// succeeded since this GET dispatched — the response is carrying
|
|
@@ -175,7 +184,13 @@ const notificationPreferencesView = createSlice({
|
|
|
175
184
|
if (action.payload.saveEpochAtDispatch < draft.saveEpoch) {
|
|
176
185
|
return;
|
|
177
186
|
}
|
|
178
|
-
|
|
187
|
+
Object.entries(action.payload.preferencesByDomain).forEach(([domain, payload]) => {
|
|
188
|
+
if (payload == null) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
draft.preferencesByDomain[domain] =
|
|
192
|
+
mapPayloadToPreferences(payload);
|
|
193
|
+
});
|
|
179
194
|
},
|
|
180
195
|
saveNotificationPreferences(draft) {
|
|
181
196
|
draft.savePreferencesState = { fetchState: 'In-Progress' };
|
|
@@ -234,33 +249,44 @@ const notificationPreferencesView = createSlice({
|
|
|
234
249
|
// skip the `preferences` replace. Cursor Bugbot 3632510237.
|
|
235
250
|
draft.saveEpoch += 1;
|
|
236
251
|
draft.savePreferencesState = { fetchState: 'Completed' };
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
252
|
+
Object.entries(action.payload.savedOverridesByDomain).forEach(([rawDomain, savedOverrides]) => {
|
|
253
|
+
if (savedOverrides == null) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const domain = rawDomain;
|
|
257
|
+
const serverEcho = action.payload.serverEchoByDomain[domain];
|
|
258
|
+
const patch = serverEcho == null
|
|
259
|
+
? savedOverrides
|
|
260
|
+
: mapPayloadToPreferences(serverEcho);
|
|
261
|
+
draft.preferencesByDomain[domain] = mergePreferences(draft.preferencesByDomain[domain] ?? emptyNotificationPreferences(), patch);
|
|
262
|
+
draft.localOverridesByDomain[domain] = subtractSavedOverrides(draft.localOverridesByDomain[domain] ??
|
|
263
|
+
emptyNotificationPreferences(), savedOverrides);
|
|
264
|
+
});
|
|
242
265
|
},
|
|
243
266
|
setGroupChannelMaster(draft, action) {
|
|
244
267
|
// Mirror of `toggleEventChannel` but scoped to the group-channel master
|
|
245
268
|
// held under `groupChannelEnabledByGroupId[groupId][channel]`.
|
|
246
269
|
const { channel, enabled, groupId } = action.payload;
|
|
270
|
+
const overrides = overridesFor(draft.localOverridesByDomain, action.payload.domain ?? DEFAULT_NOTIFICATION_DOMAIN);
|
|
247
271
|
const groupMap = {
|
|
248
|
-
...(
|
|
272
|
+
...(overrides.groupChannelEnabledByGroupId[groupId] ?? {}),
|
|
249
273
|
};
|
|
250
274
|
groupMap[channel] = enabled;
|
|
251
|
-
|
|
275
|
+
overrides.groupChannelEnabledByGroupId[groupId] = groupMap;
|
|
252
276
|
},
|
|
253
277
|
setGroupFrequency(draft, action) {
|
|
254
|
-
draft.
|
|
278
|
+
const overrides = overridesFor(draft.localOverridesByDomain, action.payload.domain ?? DEFAULT_NOTIFICATION_DOMAIN);
|
|
279
|
+
overrides.groupFrequencyByGroupId[action.payload.groupId] =
|
|
255
280
|
action.payload.frequency;
|
|
256
281
|
},
|
|
257
282
|
toggleEventChannel(draft, action) {
|
|
258
283
|
const { channel, enabled, eventId } = action.payload;
|
|
284
|
+
const overrides = overridesFor(draft.localOverridesByDomain, action.payload.domain ?? DEFAULT_NOTIFICATION_DOMAIN);
|
|
259
285
|
const eventMap = {
|
|
260
|
-
...(
|
|
286
|
+
...(overrides.eventEnabledByChannel[eventId] ?? {}),
|
|
261
287
|
};
|
|
262
288
|
eventMap[channel] = enabled;
|
|
263
|
-
|
|
289
|
+
overrides.eventEnabledByChannel[eventId] = eventMap;
|
|
264
290
|
},
|
|
265
291
|
},
|
|
266
292
|
extraReducers: (builder) => {
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { createSelector } from '@reduxjs/toolkit';
|
|
2
|
+
import { DEFAULT_NOTIFICATION_DOMAIN, } from '../../entity/notificationRegistry/notificationRegistryState';
|
|
3
|
+
import { emptyNotificationPreferences, } from './notificationPreferencesViewState';
|
|
2
4
|
const getView = (state) => state.notificationPreferencesViewState;
|
|
3
5
|
export const getNotificationPreferencesSaveState = (state) => getView(state).savePreferencesState;
|
|
4
6
|
// Memoised on `preferences` + `localOverrides` so the merged shape keeps a
|
|
5
7
|
// stable reference while neither input changes — a plain function would
|
|
6
8
|
// allocate a fresh object on every call and re-render every `useSelector`
|
|
7
9
|
// consumer on any unrelated dispatch.
|
|
8
|
-
|
|
10
|
+
const EMPTY_PREFERENCES = emptyNotificationPreferences();
|
|
11
|
+
// One per domain: a shared createSelector has a cache of one and would thrash across two.
|
|
12
|
+
const effectivePreferencesSelectorByDomain = new Map();
|
|
13
|
+
const createEffectivePreferencesSelector = (domain) => createSelector((state) => getView(state).preferencesByDomain[domain], (state) => getView(state).localOverridesByDomain[domain], (storedPreferences, storedOverrides) => {
|
|
14
|
+
const preferences = storedPreferences ?? EMPTY_PREFERENCES;
|
|
15
|
+
const localOverrides = storedOverrides ?? EMPTY_PREFERENCES;
|
|
9
16
|
const mergedEventEnabledByChannel = { ...preferences.eventEnabledByChannel };
|
|
10
17
|
Object.entries(localOverrides.eventEnabledByChannel).forEach(([eventId, channels]) => {
|
|
11
18
|
mergedEventEnabledByChannel[eventId] = {
|
|
@@ -29,7 +36,20 @@ export const getEffectiveNotificationPreferences = createSelector((state) => get
|
|
|
29
36
|
},
|
|
30
37
|
};
|
|
31
38
|
});
|
|
32
|
-
export const
|
|
33
|
-
|
|
39
|
+
export const getEffectiveNotificationPreferencesForDomain = (state, domain) => {
|
|
40
|
+
let selector = effectivePreferencesSelectorByDomain.get(domain);
|
|
41
|
+
if (selector == null) {
|
|
42
|
+
selector = createEffectivePreferencesSelector(domain);
|
|
43
|
+
effectivePreferencesSelectorByDomain.set(domain, selector);
|
|
44
|
+
}
|
|
45
|
+
return selector(state);
|
|
46
|
+
};
|
|
47
|
+
export const getEffectiveNotificationPreferences = (state) => getEffectiveNotificationPreferencesForDomain(state, DEFAULT_NOTIFICATION_DOMAIN);
|
|
48
|
+
export const getNotificationLocalOverridesForDomain = (state, domain) => getView(state).localOverridesByDomain[domain] ?? EMPTY_PREFERENCES;
|
|
49
|
+
export const getNotificationLocalOverrides = (state) => getNotificationLocalOverridesForDomain(state, DEFAULT_NOTIFICATION_DOMAIN);
|
|
50
|
+
const isDirty = (localOverrides) => Object.keys(localOverrides.eventEnabledByChannel).length > 0 ||
|
|
34
51
|
Object.keys(localOverrides.groupChannelEnabledByGroupId).length > 0 ||
|
|
35
|
-
Object.keys(localOverrides.groupFrequencyByGroupId).length > 0
|
|
52
|
+
Object.keys(localOverrides.groupFrequencyByGroupId).length > 0;
|
|
53
|
+
export const hasUnsavedNotificationPreferencesForDomain = (state, domain) => isDirty(getNotificationLocalOverridesForDomain(state, domain));
|
|
54
|
+
// Drives the shared page-level Save/Cancel footer.
|
|
55
|
+
export const hasUnsavedNotificationPreferences = (state) => Object.values(getView(state).localOverridesByDomain).some((localOverrides) => localOverrides != null && isDirty(localOverrides));
|
|
@@ -38,11 +38,21 @@ export const fetchNotificationSettingsEpic = (actions$, state$, zeniAPI) => acti
|
|
|
38
38
|
// 67d6918e.
|
|
39
39
|
updateActions.push(updateNotificationRegistry({
|
|
40
40
|
registry: response.data.task_checklist_registry ?? undefined,
|
|
41
|
+
// An absent `<domain>_registry` means that domain's gate is off.
|
|
42
|
+
registriesByDomain: {
|
|
43
|
+
task_checklist: response.data.task_checklist_registry ?? undefined,
|
|
44
|
+
commenting: response.data.commenting_registry ?? undefined,
|
|
45
|
+
},
|
|
41
46
|
registryEpochAtDispatch,
|
|
42
47
|
}));
|
|
43
|
-
|
|
48
|
+
// One action so the domains cannot land on different store epochs.
|
|
49
|
+
const preferencesByDomain = {
|
|
50
|
+
task_checklist: response.data.task_checklist_preferences ?? undefined,
|
|
51
|
+
commenting: response.data.commenting_preferences ?? undefined,
|
|
52
|
+
};
|
|
53
|
+
if (Object.values(preferencesByDomain).some((preferences) => preferences != null)) {
|
|
44
54
|
updateActions.push(fetchNotificationPreferencesSuccess({
|
|
45
|
-
|
|
55
|
+
preferencesByDomain,
|
|
46
56
|
saveEpochAtDispatch,
|
|
47
57
|
}));
|
|
48
58
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -116,8 +116,8 @@ import { updateCommentsNotifications, updateCommentsNotificationsStatuses } from
|
|
|
116
116
|
import { NotificationWithAuthors } from './entity/notification/types/notificationSelectorTypes';
|
|
117
117
|
import { Notification, NotificationActivity, NotificationEventData, NotificationMetaData, NotificationUpdates, NotificationValueFormat } from './entity/notification/types/notificationStateTypes';
|
|
118
118
|
import { ExternalNotificationData, NotificationActivityType, NotificationGroup, NotificationIdentifierType, NotificationMode, NotificationStatus, NotificationUpdateValue, toNotificationModeStrict } from './entity/notification/types/notificationTypes';
|
|
119
|
-
import { getNotificationRegistry } from './entity/notificationRegistry/notificationRegistrySelector';
|
|
120
|
-
import { NotificationChannel, NotificationFrequency, NotificationRegistry, RegistryNotificationEvent, RegistryNotificationGroup, toNotificationChannel, toNotificationFrequency } from './entity/notificationRegistry/notificationRegistryState';
|
|
119
|
+
import { getNotificationRegistry, getNotificationRegistryForDomain } from './entity/notificationRegistry/notificationRegistrySelector';
|
|
120
|
+
import { DEFAULT_NOTIFICATION_DOMAIN, NOTIFICATION_DOMAINS, NotificationChannel, NotificationDomain, NotificationFrequency, NotificationRegistry, RegistryNotificationEvent, RegistryNotificationGroup, toNotificationChannel, toNotificationDomain, toNotificationFrequency } from './entity/notificationRegistry/notificationRegistryState';
|
|
121
121
|
import { getPlaidPaymentAccounts } from './entity/paymentAccount/paymentAccountSelector';
|
|
122
122
|
import { Logo, PaymentAccount, VERIFIED_PAYMENT_ACCOUNT_PROVIDER_VERIFICATION_STATUS } from './entity/paymentAccount/paymentAccountState';
|
|
123
123
|
import { PaymentInstrument } from './entity/paymentInstrument/paymentInstrument';
|
|
@@ -382,7 +382,7 @@ import { getNetBurnOrIncomeStoryCardReport } from './view/netBurnOrIncomeStoryCa
|
|
|
382
382
|
import { AccountingMethod, NetBurnOrIncomeStoryCardReport } from './view/netBurnOrIncomeStoryCard/netBurnOrIncomeStoryCardSelectorTypes';
|
|
383
383
|
import { AverageMonthsCount, NetBurnOrIncomeRunway, NetBurnOrIncomeStoryCardState, TimeSpanIdForAverage } from './view/netBurnOrIncomeStoryCard/netBurnOrIncomeStoryCardState';
|
|
384
384
|
import { clearAllNotificationPreferencesView, clearNotificationPreferencesLocalOverrides, saveNotificationPreferences, setGroupChannelMaster, setGroupFrequency, toggleEventChannel } from './view/notificationPreferencesView/notificationPreferencesViewReducer';
|
|
385
|
-
import { getEffectiveNotificationPreferences, getNotificationLocalOverrides, getNotificationPreferencesSaveState, hasUnsavedNotificationPreferences } from './view/notificationPreferencesView/notificationPreferencesViewSelector';
|
|
385
|
+
import { getEffectiveNotificationPreferences, getEffectiveNotificationPreferencesForDomain, getNotificationLocalOverrides, getNotificationLocalOverridesForDomain, getNotificationPreferencesSaveState, hasUnsavedNotificationPreferences, hasUnsavedNotificationPreferencesForDomain } from './view/notificationPreferencesView/notificationPreferencesViewSelector';
|
|
386
386
|
import { NotificationPreferences } from './view/notificationPreferencesView/notificationPreferencesViewState';
|
|
387
387
|
import { fetchNotificationUnreadCount, fetchNotificationUnreadCountSuccess, fetchNotificationView, updateNotificationViewAllNotificationsStatus, updateNotificationViewCurrentTabAndSubTab, updateNotificationViewNotificationStatus, updateNotificationViewSubTab, updateNotificationViewTabState, updateNotificationViewUIState } from './view/notificationView/notificationViewReducer';
|
|
388
388
|
import { NotificationView, getExternalNotificationsForSelectedSubTab, getNotificationView, getNotificationsForSelectedSubTab } from './view/notificationView/notificationViewSelector';
|
|
@@ -970,7 +970,7 @@ export { ExternalNotificationData, NotificationGroup, NotificationActivityType,
|
|
|
970
970
|
export { NotificationView, NotificationViewUIState, NotificationTabState, NotificationTabType, NotificationSubTabType, toNotificationSubTabTypeStrict, toNotificationTabTypeStrict, fetchNotificationView, fetchNotificationUnreadCount, fetchNotificationUnreadCountSuccess, updateNotificationViewAllNotificationsStatus, updateNotificationViewNotificationStatus, updateNotificationViewTabState, updateNotificationViewCurrentTabAndSubTab, updateNotificationViewSubTab, updateNotificationViewUIState, getNotificationView, getExternalNotificationsForSelectedSubTab, getNotificationsForSelectedSubTab, };
|
|
971
971
|
export { fetchRegisteredInterests, notifyMeForFeature, getFeatureNotificationView, getRegisteredInterests, getRegisteredInterestsByFeature, isFeatureInterestRegistered, FeatureInterest, FeatureNotificationViewState, };
|
|
972
972
|
export { pushToastNotification, ToastNotification, ToastNotificationPayload, getLastNotificationTime, getNotifications, };
|
|
973
|
-
export { getEffectiveNotificationPreferences, getNotificationLocalOverrides, getNotificationPreferencesSaveState, getNotificationRegistry, hasUnsavedNotificationPreferences, NotificationChannel, NotificationFrequency, NotificationPreferences, NotificationRegistry, RegistryNotificationEvent, RegistryNotificationGroup, clearAllNotificationPreferencesView, clearNotificationPreferencesLocalOverrides, saveNotificationPreferences, setGroupChannelMaster, setGroupFrequency, toggleEventChannel, toNotificationChannel, toNotificationFrequency, };
|
|
973
|
+
export { getEffectiveNotificationPreferences, getEffectiveNotificationPreferencesForDomain, getNotificationLocalOverrides, getNotificationLocalOverridesForDomain, getNotificationPreferencesSaveState, getNotificationRegistry, getNotificationRegistryForDomain, hasUnsavedNotificationPreferences, hasUnsavedNotificationPreferencesForDomain, NOTIFICATION_DOMAINS, NotificationChannel, DEFAULT_NOTIFICATION_DOMAIN, NotificationDomain, NotificationFrequency, NotificationPreferences, NotificationRegistry, RegistryNotificationEvent, RegistryNotificationGroup, clearAllNotificationPreferencesView, clearNotificationPreferencesLocalOverrides, saveNotificationPreferences, setGroupChannelMaster, setGroupFrequency, toggleEventChannel, toNotificationChannel, toNotificationDomain, toNotificationFrequency, };
|
|
974
974
|
export { getReferralListView, getInviteFormView, ReferralListSelectorView, ReferralViewState, InviteCompanyLocalData, ReferralInvitation, ReferralListViewSortKey, ReferralViewUIState, toReferralListViewSortKeyType, ReferralStatus, ReferralAmountStatus, StatusTypes, AmountStatusTypes, DEFAULT_REFERRER_AMOUNT, fetchReferrals, sendReferralInvite, clearReferrals, saveReferralFormDataInLocalStore, updateReferralListSortUiState, resendReferralInvite, fetchRewardsPlan, RewardsPlanCardReport, getRewardsPlanCard, updateReferViewed, RewardsPlanData, };
|
|
975
975
|
export { ALL_WEEK_DAYS, DayOfWeek, RecurringDatePickerOptions, RecurringFrequencyType, SEMI_WEEKLY_REQUIRED_DAYS_COUNT, getMinAllowedEndDate, getRecurringEndDateFromCount, toDayOfWeek, toRecurringFrequency, };
|
|
976
976
|
export { fetchCockpitContext, fetchCompanyTaskManagerView, fetchTaskManagerMetrics, CompanyTaskManagerSelectorView, CompanyTaskManagerViewUIState, TaskManagerMetrics, getCompanyTaskManagerView, TaskWithCompanyDetail, createTaskFromTaskGroupTemplate, TaskGroupTemplate, };
|
package/lib/index.js
CHANGED
|
@@ -72,20 +72,20 @@ exports.clearSelectedJELinkRowIndex = exports.fetchRecommendedTransactionRowInde
|
|
|
72
72
|
exports.fetchVendorTabView = exports.resetMarkAsCompleteStatus = exports.markAsCompleteScheduleDetail = exports.getDefaultSelectedTimeframeForScheduleType = exports.getFetchStateForScheduleListByType = exports.updatedJELinkWithRecommendedLocalData = exports.resetJELinkInLocalData = exports.updateAmountsInScheduleDetail = exports.updatedJELinkInLocalData = exports.getThirdPartyIDFromQBOURL = exports.getQBOUrlForLink = exports.updatedSelectedJELinkRowIndex = exports.updateAccruedJEScheduleAccruedByListKey = exports.updateScheduleListDownloadState = exports.updateScheduleDetailsLocalData = exports.createNewSchedules = exports.deleteScheduleDetail = exports.saveScheduleDetails = exports.fetchScheduleDetailsPage = exports.getAccruedScheduleDetailsView = exports.getScheduleDetailsView = exports.fetchScheduleDetails = exports.updateSelectedJEScheduleKey = exports.updateScheduleListSortState = exports.updateScheduleListScrollState = exports.updateScheduleListSearchText = exports.updateScheduleListSubTab = exports.toScheduleSubTabType = exports.toScheduleListTabsFileTypeStrict = exports.toScheduleTypesTypeStrict = exports.toScheduleTypesType = exports.getFetchStateForScheduleAccountList = exports.updateScheduleListLocalData = exports.fetchSchedulesAccount = exports.fetchDownloadSchedules = exports.fetchAccruedScheduleList = exports.fetchScheduleList = exports.getAccruedScheduleListReport = exports.getScheduleListReport = exports.ALL_SCHEDULES_TYPES = exports.ALL_ONE_TIME_ACCRUAL_REVERT_REASONS = exports.ALL_ONE_TIME_ACCRUAL_IGNORE_REASONS = exports.ALL_JE_SCHEDULE_REVERT_REASONS = exports.ALL_JE_SCHEDULE_IGNORE_REASONS = exports.getJEScheduleTransactionKey = exports.resetAccruedDetailNewScheduleState = exports.resetSelectedJEAccruedScheduleKey = exports.updateSelectedJEAccruedScheduleKey = exports.updateScheduleAccruedDetailsLocalData = exports.updateLinkBillExpenseLocalData = void 0;
|
|
73
73
|
exports.saveTaskDetail = exports.saveTaskUpdatesToLocalStore = exports.fetchTaskDetailPage = exports.getTaskDetail = exports.fetchTaskListPage = exports.getAllTasks = exports.getTaskGroupById = exports.toRecurringBillFrequencyStrict = exports.toRecurringBillFrequency = exports.updateArAgingNodeCollapseState = exports.getArAgingDetailForCustomer = exports.getArAgingReport = exports.updateArAgingDetailUIState = exports.fetchArAgingDetail = exports.updateArAgingUIState = exports.fetchArAging = exports.updateVendorGlobalReviewViewLocalData = exports.toVendorGlobalReviewColumnSortKeyType = exports.getTenantMerchantByMerchantId = exports.getVendorGlobalReviewView = exports.updateVendorGlobalReviewViewUIState = exports.updateSelectedGlobalMerchant = exports.fetchVendorGlobalReviewView = exports.rejectVendorGlobalReview = exports.approveVendorGlobalReview = exports.getGlobalMerchantView = exports.clearGlobalMerchantView = exports.updateCreateGlobalMerchantLocalData = exports.createGlobalMerchant = exports.fetchGlobalMerchantRecommendation = exports.getVendorDetailSelectorView = exports.saveVendorDetailsView = exports.updateReviewVendorDetailLocalData = exports.clearGlobalMerchantAutoCompleteResults = exports.fetchGlobalMerchantAutoCompleteView = exports.updateVendorFirstReviewSortUiState = exports.updateVendorFirstReviewViewLocalData = exports.saveVendorFirstReviewView = exports.clearRecentlySavedErroredVendorData = exports.updateVendorFirstReviewViewPageToken = exports.resetVendorFirstReviewLocalData = exports.updateVendorFirstReviewViewScrollYOffset = exports.fetchVendorFirstReviewAttachments = exports.fetchVendorFirstReviewView = exports.getVendorFirstReviewAttachmentView = exports.getVendorFirstReviewView = exports.getGlobalMerchantAutoCompleteResults = exports.toVendorFirstReviewViewColumnKeyType = exports.getVendorTabView = exports.updateVendorTabViewTab = void 0;
|
|
74
74
|
exports.addCardPaymentSource = exports.confirmCardSetupIntent = exports.createCardSetupIntent = exports.getAllCardsAndBankPaymentMethods = exports.deleteTag = exports.createTag = exports.fetchTagList = exports.getAllTags = exports.ALL_TASK_LIST_TABS = exports.initialTaskDetailLocalData = exports.convertHHMMStrToMinutes = exports.unsnoozeTask = exports.snoozeTask = exports.removeTaskFromList = exports.updateTaskListTab = exports.updateTaskFromListView = exports.toDueDateGroupKeyType = exports.toTaskStatusCodeType = exports.toPriorityCodeType = exports.getDueDateValueFromDueDateGroupId = exports.initialTaskDetail = exports.fetchAllTaskGroups = exports.sortSubtasks = exports.getTaskUpdates = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.updateTaskGroupName = exports.dragNDropTasks = exports.updateTaskListLocalData = exports.deleteTaskGroup = exports.initiateTaskListLocalData = exports.createNewTaskGroup = exports.bulkUpdateTaskList = exports.discardTaskUpdatesInLocalStore = exports.deleteTask = exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.updateTaskFilters = exports.allTaskPriority = exports.allTaskStatus = exports.updateTaskListUIState = exports.updateTaskListSearchText = exports.getCannedResponsesView = exports.deleteCannedResponse = exports.saveCannedResponse = exports.fetchCannedResponses = exports.archiveTask = exports.fetchSubTasks = exports.resetSubTaskCreateStatus = exports.createSubTask = void 0;
|
|
75
|
-
exports.
|
|
76
|
-
exports.
|
|
77
|
-
exports.
|
|
78
|
-
exports.
|
|
79
|
-
exports.
|
|
80
|
-
exports.
|
|
81
|
-
exports.
|
|
82
|
-
exports.
|
|
83
|
-
exports.
|
|
84
|
-
exports.
|
|
85
|
-
exports.
|
|
86
|
-
exports.
|
|
87
|
-
exports.
|
|
88
|
-
exports.isPendingReviewAccrual = exports.isManuallyReversedAccrual = exports.isAutoReversedAccrual = exports.getExpenseAutomationActualMatchingView = exports.getExpenseAutomationActualMatchingMatchView = exports.parseActualMatchingMatchId = exports.getCloseMatchAfterUndo = exports.getActualMatchingReversalDate = exports.getActualMatchingAmount = exports.isPendingReviewRow = exports.isRenderableOneTimeAccrual = exports.isOneTimeAccrualRow = exports.isExistingTabRow = exports.isAiAccountantSchedule = exports.isAccruedScheduleRow = exports.getJEScheduleRowType = exports.getExpenseAutomationJEOneTimeAccrualDetailView = exports.getInvoicingOnboardingGateView = exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.acceptInvoicingTerms = exports.toInvoicingQboCustomerMatchingMode = exports.toInvoicingNamedOptionsByKey = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.invoicingAccountsForQboAccountTypes = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingAccountingPickers = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = void 0;
|
|
75
|
+
exports.getNotificationLocalOverridesForDomain = exports.getNotificationLocalOverrides = exports.getEffectiveNotificationPreferencesForDomain = exports.getEffectiveNotificationPreferences = exports.getNotifications = exports.getLastNotificationTime = exports.pushToastNotification = exports.isFeatureInterestRegistered = exports.getRegisteredInterestsByFeature = exports.getRegisteredInterests = exports.getFeatureNotificationView = exports.notifyMeForFeature = exports.fetchRegisteredInterests = exports.getNotificationsForSelectedSubTab = exports.getExternalNotificationsForSelectedSubTab = exports.getNotificationView = exports.updateNotificationViewUIState = exports.updateNotificationViewSubTab = exports.updateNotificationViewCurrentTabAndSubTab = exports.updateNotificationViewTabState = exports.updateNotificationViewNotificationStatus = exports.updateNotificationViewAllNotificationsStatus = exports.fetchNotificationUnreadCountSuccess = exports.fetchNotificationUnreadCount = exports.fetchNotificationView = exports.toNotificationTabTypeStrict = exports.toNotificationSubTabTypeStrict = exports.updateCommentsNotificationsStatuses = exports.updateCommentsNotifications = exports.toNotificationModeStrict = exports.parseOAuthParams = exports.getZeniOAuthApproveRedirectUrl = exports.getZeniOAuthApproveFetchState = exports.getZeniOAuthApproveError = exports.clearZeniOAuthView = exports.approveOAuthConsentSuccess = exports.approveOAuthConsentFailure = exports.approveOAuthConsent = exports.getAuthenticationView = exports.fetchCollaborationAuthToken = exports.clearAuditReportGroupViewByCompanyId = exports.saveReasonForAuditRule = exports.fetchAuditReportGroupView = exports.fetchAuditRuleGroupView = exports.getUserFromAllUsers = exports.getAuditRuleGroupViewSelectorView = exports.getAuditReportGroupViewSelectorView = exports.clearCardPaymentView = exports.resetCardPaymentErrorStatuses = exports.fetchPaymentSources = void 0;
|
|
76
|
+
exports.resetExpressPayLocalData = exports.submitExpressPay = exports.updateExpressPayFormLocalData = exports.fetchExpressPayInitialDetails = exports.getIntlWireVerificationView = exports.updateVerificationFormLocalData = exports.submitInternationalVerificationForm = exports.fetchInternationalVerificationForm = exports.createTaskFromTaskGroupTemplate = exports.getCompanyTaskManagerView = exports.fetchTaskManagerMetrics = exports.fetchCompanyTaskManagerView = exports.fetchCockpitContext = exports.toRecurringFrequency = exports.toDayOfWeek = exports.getRecurringEndDateFromCount = exports.getMinAllowedEndDate = exports.SEMI_WEEKLY_REQUIRED_DAYS_COUNT = exports.ALL_WEEK_DAYS = exports.updateReferViewed = exports.getRewardsPlanCard = exports.fetchRewardsPlan = exports.resendReferralInvite = exports.updateReferralListSortUiState = exports.saveReferralFormDataInLocalStore = exports.clearReferrals = exports.sendReferralInvite = exports.fetchReferrals = exports.DEFAULT_REFERRER_AMOUNT = exports.AmountStatusTypes = exports.StatusTypes = exports.toReferralListViewSortKeyType = exports.getInviteFormView = exports.getReferralListView = exports.toNotificationFrequency = exports.toNotificationDomain = exports.toNotificationChannel = exports.toggleEventChannel = exports.setGroupFrequency = exports.setGroupChannelMaster = exports.saveNotificationPreferences = exports.clearNotificationPreferencesLocalOverrides = exports.clearAllNotificationPreferencesView = exports.DEFAULT_NOTIFICATION_DOMAIN = exports.NOTIFICATION_DOMAINS = exports.hasUnsavedNotificationPreferencesForDomain = exports.hasUnsavedNotificationPreferences = exports.getNotificationRegistryForDomain = exports.getNotificationRegistry = exports.getNotificationPreferencesSaveState = void 0;
|
|
77
|
+
exports.fetchSkills = exports.fetchSkillDetail = exports.fetchRoutines = exports.fetchRoutineRuns = exports.fetchChatSessionsForUser = exports.fetchChatHistory = exports.deleteSkill = exports.deleteRoutine = exports.deleteChatSession = exports.createSessionAndSubmit = exports.createSession = exports.closeSkillsBrowser = exports.closeRoutinesBrowser = exports.closeRoutineRuns = exports.clearSkillMutation = exports.clearSkillDetail = exports.clearLastContextMessage = exports.clearDeleteChatSessionStatus = exports.clearCurrentSessionId = exports.clearAiCfoSidePanelHostPageContext = exports.applyAiCfoSidePanelHostPageTransition = exports.acceptMasterTOS = exports.getAiAccountantCockpitView = exports.updateAiAccountantUIState = exports.triggerAiAccountantJob = exports.setSelectedTenantIdsForJobTrigger = exports.fetchAiAccountantJobs = exports.fetchAiAccountantCustomers = exports.cancelAiAccountantOnboarding = exports.getAiAccountantJobsByTenantId = exports.getAiAccountantCustomers = exports.updateAiAccountantJobs = exports.updateAiAccountantCustomer = exports.updateAiAccountantCustomers = exports.toAiAccountantJob = exports.toAiAccountantEnrollment = exports.toAiAccountantCustomer = exports.toAiAccountantOperationType = exports.toAiAccountantJobStatus = exports.toAiAccountantEnrollmentStatus = exports.getAllowedOperationsForStatus = exports.getTreasuryFundsMaximumYield = exports.getTreasurySetupViewDetails = exports.updateFundAllocationLocalData = exports.fetchPortfolioAllocation = exports.updatePortfolioAllocation = exports.fetchTreasuryFunds = exports.fetchTreasurySetupView = exports.acceptTreasuryTerms = exports.getExpressPayView = void 0;
|
|
78
|
+
exports.getQuestionAnswerByIdForChatSession = exports.getAllQuestionAnswersForChatSession = exports.removeSyntheticAiCfoAnswer = exports.updateSyntheticAiCfoAnswer = exports.appendSyntheticAiCfoAnswer = exports.toAiCfoVisualization = exports.toAiCfoExports = exports.clearSession = exports.addQuestionPayload = exports.upsertOrAddQuestionAnswerPayload = exports.upsertAnswerPayload = exports.updateAiCfoAnswerCardPolicyWizardPlan = exports.setSessions = exports.setNewSession = exports.getSuggestedQuestionsForPageContext = exports.getSkillVersions = exports.getSkillVersionBody = exports.getSkillsEnabled = exports.getSkills = exports.getSkillMutation = exports.getSkillDetail = exports.getRoutinesEnabled = exports.getRoutines = exports.getRoutineRuns = exports.getRoutineMutation = exports.getAiCfoView = exports.canCreateRoutine = exports.updateResponseState = exports.updateCurrentInput = exports.updateCotCollapsedState = exports.updateAiCfoViewScrollPosition = exports.submitQuestion = exports.submitFeedback = exports.stopSubmitQuestion = exports.stopSubmit = exports.setSkillVisibility = exports.setSession = exports.setRoutineEnabled = exports.saveSkill = exports.saveRoutine = exports.runRoutine = exports.openSkillsBrowser = exports.openRoutinesBrowser = exports.fetchSuggestedQuestionsSuccess = exports.fetchSuggestedQuestionsFailure = exports.fetchSuggestedQuestions = exports.fetchSkillVersions = exports.fetchSkillVersionBody = exports.fetchSkillsSuccess = exports.fetchSkillsFailure = void 0;
|
|
79
|
+
exports.getCardPolicyTemplatesByIds = exports.getCardPolicyTemplateById = exports.getCardPolicySuggestedBlockMerchants = exports.getCardPolicySuggestedBlockCategories = exports.getCardPolicySuggestedAllowMerchants = exports.getCardPolicySuggestedAllowCategories = exports.getCardPolicyStats = exports.getCardPolicyMccCategoriesFetchState = exports.getCardPolicyMccCategoriesError = exports.getCardPolicyMccCategories = exports.getAllCardPolicyTemplates = exports.updatePolicyRecommendationFromUploadSuccess = exports.updatePolicyRecommendationFromUploadFailure = exports.updatePolicyDocumentExtractionSuccess = exports.updatePolicyDocumentExtractionFailure = exports.updateCreatedCardPolicyTemplate = exports.updateCardPolicyVendorOptionsFailure = exports.updateCardPolicyVendorOptions = exports.updateCardPolicyTemplates = exports.updateCardPolicyStats = exports.updateCardPolicyMccCategoriesFailure = exports.updateCardPolicyMccCategories = exports.removeCardPolicyTemplate = exports.fetchCardPolicyVendorOptions = exports.fetchCardPolicyRecommendationFromUpload = exports.fetchCardPolicyMccCategories = exports.extractPolicyDocument = exports.clearPolicyDocumentExtraction = exports.toMessageType = exports.toMessageSender = exports.ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS = exports.toInteractiveFormTypeStrict = exports.toInteractiveFormType = exports.toAiCfoAnswerResponseTypeStrict = exports.toAiCfoAnswerResponseType = exports.toAiCfoAnswerStateTypeStrict = exports.toAiCfoAnswerStateType = exports.toAiCfoChartTypeStrict = exports.toAiCfoChartType = exports.toAiCfoVisualizationTypeStrict = exports.toAiCfoVisualizationType = exports.ALL_INTERACTIVE_FORM_TYPES = exports.ALL_AI_CFO_ANSWER_RESPONSE_TYPES = exports.ALL_AI_CFO_ANSWER_STATE_TYPES = exports.ALL_AI_CFO_VISUALIZATION_TYPES = exports.ALL_AI_CFO_CHARTS_TYPES = exports.getSyntheticAiCfoAnswerByQuestionAnswerId = exports.getSyntheticAiCfoAnswersForChatSession = exports.getAiCfoSelectorView = exports.getAllQuestionsForChatSession = void 0;
|
|
80
|
+
exports.buildMccCategoryChipId = exports.VENDOR_CHIP_ID_PREFIX = exports.MCC_CHIP_ID_PREFIX = exports.toMccCategoryLike = exports.CARD_POLICY_LIMIT_ROW_ID_TRANSACTION = exports.CARD_POLICY_LIMIT_ROW_ID_REQUIRE_RECEIPT = exports.getManualCardPolicyFormDraft = exports.getLastCreatedCardPolicyTemplateIds = exports.getLastCreatedCardPolicyTemplateId = exports.getLastCreateCardPolicyTemplateErrors = exports.getLastCreateCardPolicySourceChatSessionId = exports.getCreateCardPolicyTemplateRequestState = exports.getAiCardPolicyFormDraft = exports.updateManualCardPolicyFormDraft = exports.updateCreateCardPolicyTemplateRequestState = exports.updateAiCardPolicyFormDraftFromUploadPlan = exports.updateAiCardPolicyFormDraft = exports.seedManualCardPolicyFormDraft = exports.seedAiCardPolicyFormDraft = exports.createCardPolicyTemplates = exports.clearManualCardPolicyFormDraft = exports.clearCreateCardPolicy = exports.clearAiCardPolicyFormDraft = exports.applyExtractedPolicyToManualCardPolicyDraft = exports.applyExtractedPolicyToAiCardPolicyDraft = exports.toUpdateCardPolicyTemplateRequestBody = exports.toExtractedCardPolicyRules = exports.toCreateCardPolicyTemplatesRequestBody = exports.toCreateCardPolicyTemplateRequestBody = exports.toCardPolicyVendorSearchOption = exports.toCardPolicyTemplateList = exports.toCardPolicyTemplate = exports.toCardPolicyStats = exports.toCardPolicyEditFormDraft = exports.toBulkCreateCardPolicyTemplateError = exports.toCardPolicyTemplateStatus = exports.toCardPolicyTemplateMode = exports.ALL_CARD_POLICY_TEMPLATE_STATUSES = exports.ALL_CARD_POLICY_TEMPLATE_MODES = exports.getUploadedPolicyDocumentFileName = exports.getPolicyRecommendationFromUploadFetchState = exports.getPolicyRecommendationFromUploadError = exports.getPolicyRecommendationFromUploadChatSessionId = exports.getPolicyRecommendationFromUploadAnswerId = exports.getPolicyDocumentExtractionFetchState = exports.getPolicyDocumentExtractionError = exports.getExtractedCardPolicyRules = exports.getCardPolicyVendorSearchString = exports.getCardPolicyVendorSearchOptions = exports.getCardPolicyVendorSearchFetchState = void 0;
|
|
81
|
+
exports.clearRuleUpdateLocalData = exports.updateRuleLocalData = exports.fetchAutoTransferReviewDetail = exports.fetchAutoTransferRuleHistory = exports.deleteAutoTransferRule = exports.updateAutoTransferRule = exports.createAutoTransferRule = exports.fetchAutoTransferRules = exports.getTreasuryTaxLetters = exports.fetchTreasuryTaxLetterList = exports.getTreasuryStatements = exports.fetchTreasuryStatementList = exports.getTreasuryTransferMoney = exports.clearTreasuryTransferMoney = exports.updateTreasuryTransferMoneyLocalData = exports.executeTreasuryTransferMoney = exports.getTreasuryDetail = exports.updateTreasuryTransactionListUIState = exports.fetchTreasuryTransactionList = exports.fetchTreasuryOverviewDetail = exports.getUpdateCardPolicyFetchState = exports.getCardPolicyFormDraft = exports.getCardPolicyDetailView = exports.getCardPolicyDetailFetchState = exports.updateCardPolicyFormDraft = exports.updateCardPolicyFetchStatus = exports.updateCardPolicyDetailFetchStatus = exports.updateCardPolicy = exports.fetchCardPolicyDetail = exports.getCardPolicyTemplateIds = exports.getCardPolicyListView = exports.getCardPolicyListFetchState = exports.getArchiveCardPolicyFetchState = exports.updateCardPolicyListFetchStatus = exports.updateArchiveCardPolicyFetchStatus = exports.prependCardPolicyTemplateIds = exports.fetchCardPolicyList = exports.archiveCardPolicy = exports.toManualCardPolicyTemplateRequestFromDraft = exports.toBulkCardPolicyTemplateRequestsFromDraft = exports.toCardPolicyTemplateRequestFromDraft = exports.applyAiCardPolicyFormDraftUpdate = exports.deriveAiPolicyReviewRowsFromInputs = exports.buildManualCardPolicyFormDraftSeed = exports.buildUploadReviewRows = exports.buildEmptyLimitRows = exports.buildAiCardPolicyFormDraftSeed = exports.toVendorChipFieldValue = exports.toMccCategoryChipFieldValue = exports.buildVendorChipId = void 0;
|
|
82
|
+
exports.createInvoiceFormLocalDataToRequest = exports.blankInvoicingCreateInvoiceLineItem = exports.updateInvoicingCreateInvoiceFormDraft = exports.resetCreateInvoice = exports.fetchCreateInvoiceFormPage = exports.createInvoice = exports.getInvoiceDetail = exports.fetchInvoiceDetailPage = exports.fetchInvoiceDetail = exports.getInvoiceListView = exports.ALL_INVOICING_INVOICE_TAB_IDS = exports.updateInvoiceListFilters = exports.setInvoiceActiveTab = exports.fetchInvoiceListPage = exports.fetchInvoiceList = exports.fetchInvoiceKPIs = exports.fetchInvoiceCounts = exports.getInvoicesByIds = exports.getInvoiceById = exports.updateInvoices = exports.removeInvoice = exports.mapAuditLogEntry = exports.toAuditLogEntityRouteOption = exports.isInvoicingEntityLinkable = exports.buildInvoicingEntityPath = exports.toInvoicingDiscountLifecycleActionOption = exports.toInvoicingDiscountLifecycleAction = exports.toInvoicingCatalogProductLifecycleActionOption = exports.toInvoicingCatalogItemLifecycleActionOption = exports.toInvoicingCatalogProductLifecycleAction = exports.toInvoicingCatalogItemLifecycleAction = exports.toInvoicingSubscriptionLifecycleActionOption = exports.toInvoicingSubscriptionLifecycleAction = exports.toInvoicingDunningAction = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = exports.toKycProvidedDocumentTypeFromAllowed = exports.toKycProvidedDocumentType = exports.DEFAULT_SESSION_CONFIG = exports.SessionManager = exports.getTransactionActivityLogView = exports.fetchTransactionActivityLog = exports.BULK_UPLOAD_BAR_COMPLETE_HOLD_MS = exports.BULK_UPLOAD_AUTOMATCHING_TIMEOUT_MS = exports.getAutoTransferRuleHistory = exports.getAutoTransferRuleById = exports.getAutoTransferRules = void 0;
|
|
83
|
+
exports.fetchInvoicingSubscriptionFormPage = exports.getInvoicingCustomerFormView = exports.initialInvoicingCustomerFormLocalData = exports.entityToInvoicingCustomerFormLocalData = exports.INVOICING_CUSTOMER_BILLING_ADDRESS_TYPE = exports.updateInvoicingCustomerFormDraft = exports.submitInvoicingCustomerFormSuccess = exports.submitInvoicingCustomerFormFailure = exports.submitInvoicingCustomerForm = exports.resetEditInvoicingCustomerDetailView = exports.initializeInvoicingCustomerAddress = exports.getRecordPaymentView = exports.getRecordPaymentInvoiceOptions = exports.getRecordPaymentFormView = exports.getCreateInvoiceFormView = exports.getInvoicingAuditView = exports.fetchInvoicingAuditLog = exports.getInvoicingOverview = exports.buildPeriodOptions = exports.fetchInvoicingOverview = exports.clearInvoicingOverview = exports.initialRecordPaymentFormLocalData = exports.localDataToRecordPaymentPayload = exports.localDataToInvoiceRecordPaymentBody = exports.initializeRecordPaymentDraftFromInvoice = exports.getCreateCreditNoteView = exports.getCreateCreditNoteFormView = exports.initialCreateCreditNoteFormLocalData = exports.localDataToCreateCreditNotePayload = exports.updateCreateCreditNoteFormDraft = exports.submitCreateCreditNote = exports.resetCreateCreditNote = exports.createCreditNoteSuccess = exports.createCreditNoteFailure = exports.getIssueCreditNoteView = exports.initialIssueCreditNoteFormLocalData = exports.localDataToIssueCreditNotePayload = exports.initializeIssueCreditNoteDraftFromInvoice = exports.computeIssueCreditNoteTotal = exports.updateIssueCreditNoteFormDraft = exports.submitIssueCreditNote = exports.resetIssueCreditNote = exports.issueCreditNoteSuccess = exports.issueCreditNoteFailure = exports.initializeIssueCreditNoteDraft = exports.updateRecordPaymentFormDraft = exports.submitRecordPayment = exports.initializeRecordPaymentDraft = exports.resetRecordPayment = exports.initialInvoicingCreateInvoiceFormLocalData = void 0;
|
|
84
|
+
exports.fetchInvoicingDataImportStatus = exports.runInvoicingPaymentAction = exports.runInvoicingDunningAction = exports.runInvoicingSubscriptionAction = exports.runInvoicingDiscountAction = exports.runInvoicingCatalogProductAction = exports.runInvoicingCatalogPlanAction = exports.fetchInvoicingCatalogItemDetailPage = exports.shouldDefaultAdjustmentCreditNote = exports.isBackdatedInvoiceDate = exports.buildVoidInvoiceSubmitBody = exports.updateInvoicingInvoice = exports.runInvoicingInvoiceAction = exports.getInvoicingCouponFormView = exports.getEditInvoicingCouponDetailViewState = exports.initialInvoicingCouponFormLocalData = exports.entityToInvoicingCouponFormLocalData = exports.updateInvoicingCouponFormDraft = exports.submitInvoicingCouponForm = exports.saveInvoicingCoupon = exports.resetEditInvoicingCouponDetailView = exports.fetchInvoicingCouponDetailPage = exports.getSavedInvoicingCatalogItemKind = exports.getSavedInvoicingCatalogItemId = exports.getInvoicingCatalogItemFormView = exports.getInvoicingApplicableCatalogItemOptions = exports.isTieredCatalogPricingModel = exports.initialInvoicingCatalogItemFormLocalData = exports.invoicingProductToCatalogItemFormSubFamily = exports.entityToInvoicingCatalogItemFormLocalData = exports.blankInvoicingCatalogTier = exports.blankInvoicingCatalogSubFamily = exports.INVOICING_CATALOG_TIER_TYPE_VALUES = exports.INVOICING_CATALOG_PRORATION_VALUES = exports.INVOICING_CATALOG_PRICING_MODEL_VALUES = exports.INVOICING_CATALOG_APPLICABILITY_VALUES = exports.updateInvoicingCatalogItemFormDraft = exports.submitInvoicingCatalogItemForm = exports.resetEditInvoicingCatalogItemDetailView = exports.getInvoicingSubscriptionFormView = exports.getEditInvoicingSubscriptionDetailViewState = exports.toInvoicingSubscriptionQuantity = exports.invoicingSubscriptionTodayIso = exports.initialInvoicingSubscriptionFormLocalData = exports.entityToInvoicingSubscriptionFormLocalData = exports.INVOICING_SUBSCRIPTION_SHIPPING_ADDRESS_TYPE = exports.updateInvoicingSubscriptionFormDraft = exports.submitInvoicingSubscriptionForm = exports.resetEditInvoicingSubscriptionDetailView = exports.initializeInvoicingSubscriptionAddress = void 0;
|
|
85
|
+
exports.getInvoicingSubscriptionListView = exports.INVOICING_SUBSCRIPTION_COLUMNS = exports.ALL_INVOICING_SUBSCRIPTION_TAB_IDS = exports.ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = exports.updateInvoicingSubscriptionFilters = exports.setInvoicingSubscriptionActiveTab = exports.fetchInvoicingSubscriptionListPage = exports.fetchInvoicingSubscriptionList = exports.fetchInvoicingSubscriptionCounts = exports.updateInvoicingSubscriptions = exports.removeInvoicingSubscription = exports.resetPromotionalCreditAction = exports.submitAddPromotionalCredits = exports.getInvoicingSetupIntentFetchState = exports.getInvoicingSetupIntent = exports.getInvoicingSentPaymentLinkMagicUrl = exports.getInvoicingSentPaymentLinkEmail = exports.getInvoicingPlaidLinkToken = exports.getInvoicingPaymentMethodSaveState = exports.getInvoicingPaymentLinkSendState = exports.sendInvoicingPaymentLink = exports.saveInvoicingPaymentMethod = exports.resetInvoicingCustomerPaymentMethod = exports.fetchInvoicingPlaidLinkToken = exports.createInvoicingSetupIntent = exports.fetchInvoicingPaymentLinkEmailPreviewPage = exports.fetchInvoicingCustomerDetailPage = exports.fetchInvoicingCustomerDetail = exports.getInvoicingCustomerListView = exports.INVOICING_CUSTOMER_COLUMNS = exports.ALL_INVOICING_CUSTOMER_TAB_IDS = exports.ALL_INVOICING_CUSTOMER_SORT_KEYS = exports.updateInvoicingCustomerFilters = exports.setInvoicingCustomerActiveTab = exports.fetchInvoicingCustomerListPage = exports.fetchInvoicingCustomerList = exports.fetchInvoicingCustomerCounts = exports.updateInvoicingCustomers = exports.removeInvoicingCustomer = exports.INVOICING_LIST_PAGE_SIZE = exports.uploadInvoicingMigrationFiles = exports.startInvoicingMigration = exports.rollbackInvoicingMigration = exports.retryInvoicingMigration = exports.connectInvoicingChargebee = exports.getInvoicingDataImportView = exports.setInvoicingActiveMigrationSessionId = exports.fetchInvoicingMigrationSessions = exports.fetchInvoicingMigrationSession = exports.fetchInvoicingMigrationDiagnostics = void 0;
|
|
86
|
+
exports.removeInvoicingDunningCase = exports.fetchInvoicingCouponDetail = exports.getInvoicingCouponById = exports.getInvoicingCouponListView = exports.getInvoicingCouponListNextCursor = exports.getInvoicingCouponListItems = exports.getInvoicingCouponListHasMore = exports.getInvoicingCouponListFilters = exports.getInvoicingCouponListFetchState = exports.getInvoicingCouponCounts = exports.INVOICING_COUPON_COLUMNS = exports.ALL_INVOICING_COUPON_TAB_IDS = exports.ALL_INVOICING_COUPON_SORT_KEYS = exports.updateInvoicingCouponFilters = exports.setInvoicingCouponActiveTab = exports.fetchInvoicingCouponListPage = exports.fetchInvoicingCouponList = exports.fetchInvoicingCouponCounts = exports.updateInvoicingCoupons = exports.removeInvoicingCoupon = exports.getInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteById = exports.fetchInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteListView = exports.INVOICING_CREDIT_NOTE_COLUMNS = exports.ALL_INVOICING_CREDIT_NOTE_TAB_IDS = exports.ALL_INVOICING_CREDIT_NOTE_SORT_KEYS = exports.updateInvoicingCreditNoteFilters = exports.setInvoicingCreditNoteActiveTab = exports.fetchInvoicingCreditNoteListPage = exports.fetchInvoicingCreditNoteList = exports.fetchInvoicingCreditNoteCounts = exports.updateInvoicingCreditNotes = exports.removeInvoicingCreditNote = exports.getInvoicingTransactionDetail = exports.getInvoicingTransactionById = exports.fetchInvoicingTransactionDetail = exports.getInvoicingTransactionListView = exports.INVOICING_TRANSACTION_COLUMNS = exports.ALL_INVOICING_TRANSACTION_TAB_IDS = exports.ALL_INVOICING_TRANSACTION_SORT_KEYS = exports.updateInvoicingTransactionFilters = exports.setInvoicingTransactionActiveTab = exports.fetchInvoicingTransactionListPage = exports.fetchInvoicingTransactionList = exports.updateInvoicingTransactions = exports.removeInvoicingTransaction = exports.getInvoicingSubscriptionById = exports.fetchInvoicingSubscriptionDetailPage = exports.fetchInvoicingSubscriptionDetail = void 0;
|
|
87
|
+
exports.getInvoicingQboSettingsFormView = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingQboSettingsDraft = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingQboSettings = exports.submitInvoicingBrandingForm = exports.saveInvoicingSettings = exports.resetSaveInvoicingSettings = exports.resetInvoicingQboSettingsDraft = exports.resetInvoicingBrandingFormDraft = exports.fetchInvoicingSettings = exports.disconnectInvoicingStripe = exports.connectInvoicingStripe = exports.getInvoicingProductById = exports.getLowestInvoicingPlanPricePointAmount = exports.getInvoicingPlanById = exports.fetchInvoicingCatalogItemDetail = exports.getInvoicingCatalogListView = exports.INVOICING_PRODUCT_COLUMNS = exports.ALL_INVOICING_PRODUCT_SORT_KEYS = exports.updateInvoicingCatalogProductFilters = exports.updateInvoicingCatalogPlanFilters = exports.fetchInvoicingCatalogProductList = exports.fetchInvoicingCatalogPlanList = exports.fetchInvoicingCatalogListPage = exports.fetchInvoicingCatalogCounts = exports.updateInvoicingProducts = exports.removeInvoicingProduct = exports.updateInvoicingPlans = exports.removeInvoicingPlan = exports.mergeInvoicingPlanSubFamily = exports.getInvoicingDunningEmailPreview = exports.getInvoicingDunningCaseDetail = exports.getInvoicingDunningCaseById = exports.invalidateInvoicingDunningEmailPreview = exports.fetchInvoicingDunningEmailPreviewPage = exports.fetchInvoicingDunningCaseDetailPage = exports.fetchInvoicingDunningCaseDetail = exports.clearInvoicingDunningCaseDetailView = exports.getInvoicingDunningCaseListView = exports.INVOICING_DUNNING_CASE_COLUMNS = exports.ALL_INVOICING_DUNNING_CASE_TAB_IDS = exports.ALL_INVOICING_DUNNING_CASE_SORT_KEYS = exports.updateInvoicingDunningCaseFilters = exports.setInvoicingDunningCaseActiveTab = exports.fetchInvoicingDunningCaseListPage = exports.fetchInvoicingDunningCaseList = exports.fetchInvoicingDunningCaseCounts = exports.updateInvoicingDunningCases = void 0;
|
|
88
|
+
exports.isPendingReviewAccrual = exports.isManuallyReversedAccrual = exports.isAutoReversedAccrual = exports.getExpenseAutomationActualMatchingView = exports.getExpenseAutomationActualMatchingMatchView = exports.parseActualMatchingMatchId = exports.getCloseMatchAfterUndo = exports.getActualMatchingReversalDate = exports.getActualMatchingAmount = exports.isPendingReviewRow = exports.isRenderableOneTimeAccrual = exports.isOneTimeAccrualRow = exports.isExistingTabRow = exports.isAiAccountantSchedule = exports.isAccruedScheduleRow = exports.getJEScheduleRowType = exports.getExpenseAutomationJEOneTimeAccrualDetailView = exports.getInvoicingOnboardingGateView = exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.acceptInvoicingTerms = exports.toInvoicingQboCustomerMatchingMode = exports.toInvoicingNamedOptionsByKey = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.invoicingAccountsForQboAccountTypes = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingAccountingPickers = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.invoicingQboSettingsLocalDataToPayload = exports.initialInvoicingQboSettingsLocalData = exports.entityToInvoicingQboSettingsLocalData = exports.getInvoicingSettingsView = exports.getInvoicingSettingsHubView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = void 0;
|
|
89
89
|
const allowedValue_1 = require("./commonStateTypes/allowedValue");
|
|
90
90
|
Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
|
|
91
91
|
Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
|
|
@@ -313,8 +313,12 @@ const notificationTypes_1 = require("./entity/notification/types/notificationTyp
|
|
|
313
313
|
Object.defineProperty(exports, "toNotificationModeStrict", { enumerable: true, get: function () { return notificationTypes_1.toNotificationModeStrict; } });
|
|
314
314
|
const notificationRegistrySelector_1 = require("./entity/notificationRegistry/notificationRegistrySelector");
|
|
315
315
|
Object.defineProperty(exports, "getNotificationRegistry", { enumerable: true, get: function () { return notificationRegistrySelector_1.getNotificationRegistry; } });
|
|
316
|
+
Object.defineProperty(exports, "getNotificationRegistryForDomain", { enumerable: true, get: function () { return notificationRegistrySelector_1.getNotificationRegistryForDomain; } });
|
|
316
317
|
const notificationRegistryState_1 = require("./entity/notificationRegistry/notificationRegistryState");
|
|
318
|
+
Object.defineProperty(exports, "DEFAULT_NOTIFICATION_DOMAIN", { enumerable: true, get: function () { return notificationRegistryState_1.DEFAULT_NOTIFICATION_DOMAIN; } });
|
|
319
|
+
Object.defineProperty(exports, "NOTIFICATION_DOMAINS", { enumerable: true, get: function () { return notificationRegistryState_1.NOTIFICATION_DOMAINS; } });
|
|
317
320
|
Object.defineProperty(exports, "toNotificationChannel", { enumerable: true, get: function () { return notificationRegistryState_1.toNotificationChannel; } });
|
|
321
|
+
Object.defineProperty(exports, "toNotificationDomain", { enumerable: true, get: function () { return notificationRegistryState_1.toNotificationDomain; } });
|
|
318
322
|
Object.defineProperty(exports, "toNotificationFrequency", { enumerable: true, get: function () { return notificationRegistryState_1.toNotificationFrequency; } });
|
|
319
323
|
const paymentAccountSelector_1 = require("./entity/paymentAccount/paymentAccountSelector");
|
|
320
324
|
Object.defineProperty(exports, "getPlaidPaymentAccounts", { enumerable: true, get: function () { return paymentAccountSelector_1.getPlaidPaymentAccounts; } });
|
|
@@ -1209,9 +1213,12 @@ Object.defineProperty(exports, "setGroupFrequency", { enumerable: true, get: fun
|
|
|
1209
1213
|
Object.defineProperty(exports, "toggleEventChannel", { enumerable: true, get: function () { return notificationPreferencesViewReducer_1.toggleEventChannel; } });
|
|
1210
1214
|
const notificationPreferencesViewSelector_1 = require("./view/notificationPreferencesView/notificationPreferencesViewSelector");
|
|
1211
1215
|
Object.defineProperty(exports, "getEffectiveNotificationPreferences", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.getEffectiveNotificationPreferences; } });
|
|
1216
|
+
Object.defineProperty(exports, "getEffectiveNotificationPreferencesForDomain", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.getEffectiveNotificationPreferencesForDomain; } });
|
|
1212
1217
|
Object.defineProperty(exports, "getNotificationLocalOverrides", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.getNotificationLocalOverrides; } });
|
|
1218
|
+
Object.defineProperty(exports, "getNotificationLocalOverridesForDomain", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.getNotificationLocalOverridesForDomain; } });
|
|
1213
1219
|
Object.defineProperty(exports, "getNotificationPreferencesSaveState", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.getNotificationPreferencesSaveState; } });
|
|
1214
1220
|
Object.defineProperty(exports, "hasUnsavedNotificationPreferences", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.hasUnsavedNotificationPreferences; } });
|
|
1221
|
+
Object.defineProperty(exports, "hasUnsavedNotificationPreferencesForDomain", { enumerable: true, get: function () { return notificationPreferencesViewSelector_1.hasUnsavedNotificationPreferencesForDomain; } });
|
|
1215
1222
|
const notificationViewReducer_1 = require("./view/notificationView/notificationViewReducer");
|
|
1216
1223
|
Object.defineProperty(exports, "fetchNotificationUnreadCount", { enumerable: true, get: function () { return notificationViewReducer_1.fetchNotificationUnreadCount; } });
|
|
1217
1224
|
Object.defineProperty(exports, "fetchNotificationUnreadCountSuccess", { enumerable: true, get: function () { return notificationViewReducer_1.fetchNotificationUnreadCountSuccess; } });
|
|
@@ -840,7 +840,8 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
840
840
|
// The server has it. Nothing it sends from here on will contain this row,
|
|
841
841
|
// so the tombstone has done its job and holding it any longer is what
|
|
842
842
|
// makes a routine recreated under the same id invisible forever.
|
|
843
|
-
draft.routines.deletedScheduleIds =
|
|
843
|
+
draft.routines.deletedScheduleIds =
|
|
844
|
+
draft.routines.deletedScheduleIds.filter((id) => id !== action.payload.scheduleId);
|
|
844
845
|
draft.routineMutation = {
|
|
845
846
|
fetchState: 'Completed',
|
|
846
847
|
error: undefined,
|
|
@@ -852,7 +853,8 @@ const aiCfoView = (0, toolkit_1.createSlice)({
|
|
|
852
853
|
// is what lets the refetch put the row back — leaving it hidden would
|
|
853
854
|
// tell the user they had stopped something they had not, which is the
|
|
854
855
|
// worst outcome this list can produce.
|
|
855
|
-
draft.routines.deletedScheduleIds =
|
|
856
|
+
draft.routines.deletedScheduleIds =
|
|
857
|
+
draft.routines.deletedScheduleIds.filter((id) => id !== action.payload.scheduleId);
|
|
856
858
|
// Its own slice: the refetch that puts the row back would otherwise wipe
|
|
857
859
|
// this error, leaving the row silently reappearing with no explanation.
|
|
858
860
|
draft.routineMutation = {
|
|
@@ -4,7 +4,7 @@ import { FetchStateAndError } from '../../commonStateTypes/common';
|
|
|
4
4
|
import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
5
5
|
import { AiCfoSelectorView } from '../../entity/aiCfo/aiCfoSelector';
|
|
6
6
|
import { RootState } from '../../rootStateTypes';
|
|
7
|
-
import { AiCfoViewUIState,
|
|
7
|
+
import { AiCfoViewUIState, RoutineMutationState, RoutineRunsState, RoutinesState, SkillDetailState, SkillMutationState, SkillVersionBodyState, SkillVersionsState, SkillsState, SuggestedQuestionsForPageContext } from './aiCfoViewState';
|
|
8
8
|
export interface AiCfoViewSelector extends SelectorView, AiCfoSelectorView {
|
|
9
9
|
createSessionAndSubmitState: FetchStateAndError;
|
|
10
10
|
createSessionState: FetchStateAndError;
|