@zeniai/web-components 4.3.76-beta11MM → 4.3.76-beta13MM
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/dist/{SessionTimeoutPopup-9Jl38Q15.js → SessionTimeoutPopup-Bb_GLNw2.js} +996 -806
- package/dist/SessionTimeoutPopup-Bb_GLNw2.js.map +4 -0
- package/dist/{SessionTimeoutPopup-OTbrxLiA.cjs → SessionTimeoutPopup-ZOLbgX1q.cjs} +439 -290
- package/dist/SessionTimeoutPopup-ZOLbgX1q.cjs.map +4 -0
- package/dist/appLocale.d.ts +46 -21
- package/dist/cockpit.cjs.js +152 -152
- package/dist/cockpit.cjs.js.map +1 -1
- package/dist/cockpit.esm.js +2096 -2096
- package/dist/cockpit.esm.js.map +1 -1
- package/dist/components/aiCfo/components/AiCfoRoutinesBrowser.d.ts +1 -1
- package/dist/components/aiCfo/components/helpers/aiCfoRoutines.d.ts +2 -0
- package/dist/components/commentsAndNotes/utils/CollaborationHelpers.d.ts +15 -0
- package/dist/components/common/popUps/RecommendationFeedbackPopup.d.ts +3 -1
- package/dist/components/dashboard/Dashboard.d.ts +7 -1
- package/dist/components/expenseAutomation/ExpenseAutomationPage.d.ts +6 -0
- package/dist/components/expenseAutomation/components/navbarHeaderData.d.ts +4 -3
- package/dist/components/expenseAutomation/sections/actualMatching/ActualMatchingMatchNewButton.d.ts +5 -0
- package/dist/components/expenseAutomation/sections/jeSchedules/common/JEGroupSectionHeader.d.ts +1 -1
- package/dist/components/expenseAutomation/sections/jeSchedules/common/JEScheduleNewEntryButton.d.ts +2 -2
- package/dist/components/expenseAutomation/sections/jeSchedules/list/jeScheduleConfig.d.ts +1 -1
- package/dist/components/expenseAutomation/sections/jeSchedules/list/jeScheduleListItems.d.ts +9 -3
- package/dist/components/expenseAutomation/sections/jeSchedules/list/jeScheduleListRow.helpers.d.ts +30 -1
- package/dist/components/expenseAutomation/stories/actualMatchingPageStoryActions.d.ts +2 -0
- package/dist/components/invoicing/catalogDetail/InvoicingCatalogItemDetailPage.d.ts +11 -4
- package/dist/components/invoicing/catalogForm/InvoicingCatalogItemFormPage.d.ts +18 -10
- package/dist/components/invoicing/catalogForm/catalogItemForm.shared.d.ts +11 -7
- package/dist/components/invoicing/common/InvoicingFormControls.d.ts +8 -1
- package/dist/components/invoicing/common/InvoicingFormRows.d.ts +7 -0
- package/dist/components/invoicing/common/InvoicingSkeletons.d.ts +20 -4
- package/dist/components/invoicing/common/invoicingAccountPickerOptions.d.ts +15 -0
- package/dist/components/invoicing/couponForm/InvoicingCouponFormPage.d.ts +27 -2
- package/dist/components/invoicing/couponForm/couponForm.shared.d.ts +17 -1
- package/dist/components/invoicing/customerDetail/InvoicingCustomerDetailPage.d.ts +12 -1
- package/dist/components/invoicing/customerForm/InvoicingCustomerFormPage.d.ts +9 -1
- package/dist/components/invoicing/discountDetail/InvoicingDiscountDetailPage.d.ts +7 -0
- package/dist/components/invoicing/subscriptionDetail/InvoicingSubscriptionDetailPage.d.ts +13 -0
- package/dist/components/invoicing/subscriptionForm/InvoicingSubscriptionFormPage.d.ts +9 -1
- package/dist/components/invoicing/subscriptionForm/SubscriptionItemQuantityRows.d.ts +10 -7
- package/dist/components/invoicing/subscriptionForm/subscriptionForm.shared.d.ts +69 -28
- package/dist/components/notifications/components/CommentsNotificationTileMedium.d.ts +15 -4
- package/dist/components/reportTree/treeNode/accountReconReport/row/v2/statusHelper.d.ts +1 -1
- package/dist/components/reports/PdfColumnLimitPopup.d.ts +12 -0
- package/dist/context/featureProvider/DynamicConfigNameConstants.d.ts +3 -1
- package/dist/context/featureProvider/isActualMatchingEnabledInAgentJeConfig.d.ts +18 -0
- package/dist/context/featureProvider/isActualMatchingEnabledInAgentJeConfig.test.d.ts +1 -0
- package/dist/context/featureProvider/useActualMatchingEnabled.d.ts +6 -0
- package/dist/{index-lcIQvrso.js → index-3FvLYm2f.js} +2 -2
- package/dist/{index-lcIQvrso.js.map → index-3FvLYm2f.js.map} +1 -1
- package/dist/{index-B7sSxEy6.cjs → index-B7A5wq5o.cjs} +2 -2
- package/dist/{index-B7sSxEy6.cjs.map → index-B7A5wq5o.cjs.map} +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.esm.js +1 -1
- package/dist/strings/strings.d.ts +46 -21
- package/package.json +13 -13
- package/dist/SessionTimeoutPopup-9Jl38Q15.js.map +0 -4
- package/dist/SessionTimeoutPopup-OTbrxLiA.cjs.map +0 -4
|
@@ -12,6 +12,14 @@ export interface InvoicingSubscriptionFormPageProps {
|
|
|
12
12
|
customers?: InvoicingSubscriptionFormOption[];
|
|
13
13
|
errorMessage?: string;
|
|
14
14
|
fieldHelp?: FieldHelpByCode;
|
|
15
|
+
/**
|
|
16
|
+
* True while the subscription being edited is still loading. The form holds
|
|
17
|
+
* its skeleton until the record lands: `useForm` seeds its default values
|
|
18
|
+
* once, at first render, so mounting the fields against the blank draft
|
|
19
|
+
* leaves them empty, and the first change writes that blankness back over the
|
|
20
|
+
* subscription. Always false when creating — there is nothing to load.
|
|
21
|
+
*/
|
|
22
|
+
isLoading?: boolean;
|
|
15
23
|
plans?: InvoicingSubscriptionFormOption[];
|
|
16
24
|
shippingAddressLabel?: string;
|
|
17
25
|
onCancel: () => void;
|
|
@@ -26,5 +34,5 @@ export interface InvoicingSubscriptionFormPageProps {
|
|
|
26
34
|
* primitives. The draft flows from CES (`localData`) and is synced back on every
|
|
27
35
|
* change; the shipping address is captured via the shared Address screen.
|
|
28
36
|
*/
|
|
29
|
-
export declare function InvoicingSubscriptionFormPage({ fieldHelp, addons, charges, coupons, customers, errorMessage, isSubmitting, localData, mode, onBack, onCancel, onChange, onOpenAddress, onSubmit, plans, shippingAddressLabel, }: Readonly<InvoicingSubscriptionFormPageProps>): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
export declare function InvoicingSubscriptionFormPage({ fieldHelp, addons, charges, coupons, customers, errorMessage, isLoading, isSubmitting, localData, mode, onBack, onCancel, onChange, onOpenAddress, onSubmit, plans, shippingAddressLabel, }: Readonly<InvoicingSubscriptionFormPageProps>): import("react/jsx-runtime").JSX.Element;
|
|
30
38
|
export default InvoicingSubscriptionFormPage;
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
export interface SubscriptionItemQuantityRowsProps {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/** Field-array path holding this section's `{priceCode, quantity}` entries. */
|
|
3
|
+
name: string;
|
|
4
4
|
selectedPriceCodes: string[];
|
|
5
|
+
labelWidth?: number;
|
|
6
|
+
rowStyle?: React.CSSProperties;
|
|
5
7
|
getOptionLabel: (priceCode: string) => string;
|
|
6
|
-
onChange: (quantities: Record<string, number>) => void;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* One quantity row per selected add-on / one-time charge. Every pricing model
|
|
10
11
|
* except `flat_fee` bills on quantity, so each selected item carries its own
|
|
11
12
|
* (minimum 1) rather than the single hardcoded 1 the payload used to send.
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Rendered as a react-hook-form field array so each row is a real registered
|
|
15
|
+
* field and can use the shared `Labeled*` row the rest of the form is built
|
|
16
|
+
* from. Keying the rows by array index (not by price code) is what makes that
|
|
17
|
+
* safe: a price code containing a `.` or a `[` would otherwise be read as a
|
|
18
|
+
* nested field path.
|
|
16
19
|
*/
|
|
17
|
-
export declare function SubscriptionItemQuantityRows({ getOptionLabel,
|
|
20
|
+
export declare function SubscriptionItemQuantityRows({ getOptionLabel, labelWidth, name, rowStyle, selectedPriceCodes, }: Readonly<SubscriptionItemQuantityRowsProps>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,29 +1,11 @@
|
|
|
1
|
-
import { InvoicingSubscriptionFormLocalData } from '@zeniai/client-epic-state';
|
|
1
|
+
import { InvoicingSubscriptionFormLocalData, InvoicingSubscriptionOption } from '@zeniai/client-epic-state';
|
|
2
2
|
import { MultiSelectFieldValue } from '../../formElements/multiSelectField/MultiSelectField';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* plan renews forever.
|
|
10
|
-
*/
|
|
11
|
-
billingCycles?: number;
|
|
12
|
-
/**
|
|
13
|
-
* Plan options only: the price point's own billing cadence. Shown read-only,
|
|
14
|
-
* because cadence is a property of the price point and the backend rejects a
|
|
15
|
-
* subscription that claims a different one.
|
|
16
|
-
*/
|
|
17
|
-
billingPeriod?: number;
|
|
18
|
-
billingPeriodUnit?: string;
|
|
19
|
-
subtitle?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Plan options only: the plan's own trial length, used to prefill the form's
|
|
22
|
-
* Trial End field from the start date. Absent means the plan has no trial.
|
|
23
|
-
*/
|
|
24
|
-
trialPeriod?: number;
|
|
25
|
-
trialPeriodUnit?: string;
|
|
26
|
-
}
|
|
3
|
+
/**
|
|
4
|
+
* Aliased rather than redeclared: CES builds every picker list this form
|
|
5
|
+
* renders, so a second definition here would be a copy free to drift from the
|
|
6
|
+
* one the options are actually built against.
|
|
7
|
+
*/
|
|
8
|
+
export type InvoicingSubscriptionFormOption = InvoicingSubscriptionOption;
|
|
27
9
|
export interface PickerValue {
|
|
28
10
|
allOptions: {
|
|
29
11
|
label: string;
|
|
@@ -48,9 +30,11 @@ export interface InvoicingSubscriptionFormOptions {
|
|
|
48
30
|
* in the UI, so it lives off react-hook-form and is reconstructed in the reverse
|
|
49
31
|
* mapper for the request body.
|
|
50
32
|
*/
|
|
51
|
-
export type SubscriptionFormValues = Omit<InvoicingSubscriptionFormLocalData, "addonPriceCodes" | "chargePriceCodes" | "couponId" | "customerId" | "planPriceCode" | "preferredCurrencyCode" | "setupFee" | "startedAt" | "trialEnd"> & {
|
|
33
|
+
export type SubscriptionFormValues = Omit<InvoicingSubscriptionFormLocalData, "addonPriceCodes" | "addonQuantities" | "chargePriceCodes" | "chargeQuantities" | "couponId" | "customerId" | "planPriceCode" | "preferredCurrencyCode" | "setupFee" | "startedAt" | "trialEnd"> & {
|
|
52
34
|
addonPriceCodes: MultiSelectFieldValue;
|
|
35
|
+
addonQuantities: SubscriptionItemQuantityEntry[];
|
|
53
36
|
chargePriceCodes: MultiSelectFieldValue;
|
|
37
|
+
chargeQuantities: SubscriptionItemQuantityEntry[];
|
|
54
38
|
couponId: PickerValue;
|
|
55
39
|
customerId: PickerValue;
|
|
56
40
|
planPriceCode: PickerValue;
|
|
@@ -68,6 +52,59 @@ export declare const buildSubscriptionOptionLabelGetter: (options: InvoicingSubs
|
|
|
68
52
|
* subscription that claims a different one.
|
|
69
53
|
*/
|
|
70
54
|
export declare const subscriptionBillingCadenceLabel: (plan: InvoicingSubscriptionFormOption | undefined) => string;
|
|
55
|
+
/**
|
|
56
|
+
* One selected add-on / one-time charge's quantity, as the form holds it.
|
|
57
|
+
*
|
|
58
|
+
* An ordered list rather than a `Record` keyed by price code because the rows
|
|
59
|
+
* register with react-hook-form as a field array: a list gives each row the
|
|
60
|
+
* index-based path (`addonQuantities.0.quantity`) that `register` needs, where
|
|
61
|
+
* a price-code key would be read as a nested path the moment a code contained
|
|
62
|
+
* a `.` or a `[`.
|
|
63
|
+
*
|
|
64
|
+
* `quantity` stays the raw field text — clamped to a valid quantity only at the
|
|
65
|
+
* CES boundary — so a half-finished edit (an emptied field, a lone minus) is
|
|
66
|
+
* not snapped out from under the user mid-keystroke.
|
|
67
|
+
*/
|
|
68
|
+
export interface SubscriptionItemQuantityEntry {
|
|
69
|
+
priceCode: string;
|
|
70
|
+
quantity: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Both readers take their list straight from react-hook-form, which owns the
|
|
74
|
+
* array and can leave a hole in it across a reset or an unregister. The element
|
|
75
|
+
* type says otherwise, so the gap is stated here rather than trusted away.
|
|
76
|
+
*/
|
|
77
|
+
type MaybeSubscriptionItemQuantityEntries = readonly (SubscriptionItemQuantityEntry | undefined)[] | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Quantity entries covering exactly the currently selected price codes: every
|
|
80
|
+
* selection gets a value the row can render (1 when the draft has none), and a
|
|
81
|
+
* code left behind by a deselect is dropped rather than carried in the draft.
|
|
82
|
+
*/
|
|
83
|
+
export declare const subscriptionQuantityEntries: (selectedPriceCodes: string[], quantities: Record<string, number> | undefined) => SubscriptionItemQuantityEntry[];
|
|
84
|
+
/**
|
|
85
|
+
* The same reconcile against an existing entry list, keeping each surviving
|
|
86
|
+
* row's in-progress text rather than re-clamping it.
|
|
87
|
+
*/
|
|
88
|
+
export declare const reconcileSubscriptionQuantityEntries: (selectedPriceCodes: string[], entries: MaybeSubscriptionItemQuantityEntries) => SubscriptionItemQuantityEntry[];
|
|
89
|
+
/**
|
|
90
|
+
* An add-on / one-time-charge picker's value narrowed to the options currently
|
|
91
|
+
* on offer: `allOptions` becomes the incoming list, and any selection that list
|
|
92
|
+
* no longer holds is dropped.
|
|
93
|
+
*
|
|
94
|
+
* Both halves are needed. A restricted plan narrows the option lists upstream,
|
|
95
|
+
* but the picker renders from the `allOptions` carried inside its own form
|
|
96
|
+
* value, so a narrowed list only reaches the screen by being written back —
|
|
97
|
+
* and a selection the new plan disallows has to go with it.
|
|
98
|
+
*
|
|
99
|
+
* Selections are pruned, never cleared: switching between two plans that both
|
|
100
|
+
* allow an add-on keeps it, and the quantity typed against it.
|
|
101
|
+
*
|
|
102
|
+
* Returns `current` unchanged when nothing moved, so the caller can skip the
|
|
103
|
+
* write — and the dirty flag it would raise — on the common no-op.
|
|
104
|
+
*/
|
|
105
|
+
export declare const reconcileSubscriptionMultiSelect: (current: MultiSelectFieldValue, options: InvoicingSubscriptionFormOption[]) => MultiSelectFieldValue;
|
|
106
|
+
/** Entries back to the quantity map CES stores, clamped to what the API accepts. */
|
|
107
|
+
export declare const subscriptionQuantitiesFromEntries: (selectedPriceCodes: string[], entries: MaybeSubscriptionItemQuantityEntries) => Record<string, number>;
|
|
71
108
|
/**
|
|
72
109
|
* Trial end implied by the selected plan: the start date walked forward by the
|
|
73
110
|
* plan's own trial length. `undefined` when the start date is unset or the plan
|
|
@@ -82,13 +119,17 @@ export declare const subscriptionFormValuesToLocalData: (values: SubscriptionFor
|
|
|
82
119
|
/** Values used by the inline edit on the subscription detail page. */
|
|
83
120
|
export interface SubscriptionEditValues {
|
|
84
121
|
addon_price_codes: MultiSelectFieldValue;
|
|
122
|
+
addon_quantities: SubscriptionItemQuantityEntry[];
|
|
85
123
|
auto_collection: boolean;
|
|
124
|
+
charge_price_codes: MultiSelectFieldValue;
|
|
125
|
+
charge_quantities: SubscriptionItemQuantityEntry[];
|
|
86
126
|
coupon_id: PickerValue;
|
|
87
127
|
plan_price_code: PickerValue;
|
|
88
128
|
plan_quantity: string;
|
|
89
129
|
po_number: string;
|
|
90
130
|
}
|
|
91
|
-
export declare const localDataToSubscriptionEditValues: (localData: InvoicingSubscriptionFormLocalData, options: Pick<InvoicingSubscriptionFormOptions, "addons" | "coupons" | "plans">) => SubscriptionEditValues;
|
|
131
|
+
export declare const localDataToSubscriptionEditValues: (localData: InvoicingSubscriptionFormLocalData, options: Pick<InvoicingSubscriptionFormOptions, "addons" | "charges" | "coupons" | "plans">) => SubscriptionEditValues;
|
|
92
132
|
export declare const subscriptionEditValuesToLocalData: (values: SubscriptionEditValues, base: InvoicingSubscriptionFormLocalData) => InvoicingSubscriptionFormLocalData;
|
|
93
133
|
/** Seed the detail-page inline edit form from the current CES draft. */
|
|
94
|
-
export declare const buildSubscriptionEditDefaults: (localData: InvoicingSubscriptionFormLocalData, options: Pick<InvoicingSubscriptionFormOptions, "addons" | "coupons" | "plans">) => SubscriptionEditValues;
|
|
134
|
+
export declare const buildSubscriptionEditDefaults: (localData: InvoicingSubscriptionFormLocalData, options: Pick<InvoicingSubscriptionFormOptions, "addons" | "charges" | "coupons" | "plans">) => SubscriptionEditValues;
|
|
135
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommentBodyLink, CommentBodyMention, CommentBodyText } from '@liveblocks/client';
|
|
2
2
|
import { ExternalNotificationData, ID, NotificationStatus, User, ZeniUrl } from '@zeniai/client-epic-state';
|
|
3
3
|
/**
|
|
4
4
|
* Props
|
|
@@ -34,6 +34,17 @@ export declare const NotificationActionComponents: ({ notificationData, users, }
|
|
|
34
34
|
users: User[];
|
|
35
35
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
36
36
|
export declare const NotificationTimeComponent: (props: NotificationTimeProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
type CommentInline = {
|
|
38
|
+
type?: string;
|
|
39
|
+
id?: string;
|
|
40
|
+
url?: string;
|
|
41
|
+
text?: string;
|
|
42
|
+
bold?: boolean;
|
|
43
|
+
italic?: boolean;
|
|
44
|
+
strikethrough?: boolean;
|
|
45
|
+
code?: boolean;
|
|
46
|
+
};
|
|
47
|
+
export declare function isCommentBodyText(element: CommentInline): element is CommentBodyText;
|
|
48
|
+
export declare function isCommentBodyMention(element: CommentInline): element is CommentBodyMention;
|
|
49
|
+
export declare function isCommentBodyLink(element: CommentInline): element is CommentBodyLink;
|
|
50
|
+
export {};
|
|
@@ -6,7 +6,7 @@ type StatusProps = {
|
|
|
6
6
|
/** V2 list row — Review lives in AccountReconDetailsDrawerPageV2, not the AI Progress column. */
|
|
7
7
|
export declare function ShowStatusForBankConnectionV2({ accountRecon, isLoading, }: Readonly<StatusProps>): import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
export declare function ShowStatusForStatementConnectionV2({ accountRecon, isLoading, }: Readonly<StatusProps>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
/** When true, AI Progress shows the V1 status (Reconciled
|
|
9
|
+
/** When true, AI Progress shows the V1 status (Reconciled tag / etc.) instead of the bar. */
|
|
10
10
|
export declare function shouldShowReconciledTagInMatchProgress(reconciliationStatusCode?: ReconciliationStatusCodeType): boolean;
|
|
11
11
|
export declare function shouldShowMatchProgressBar(matchTotal: number, reconciliationStatusCode?: ReconciliationStatusCodeType): boolean;
|
|
12
12
|
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AllowedTimeframe } from '../common/downloadReport/types/downloadReportOptions';
|
|
2
|
+
export interface PdfColumnLimitPopupProps {
|
|
3
|
+
additionalColumnsCount: number;
|
|
4
|
+
maxColumns: number;
|
|
5
|
+
numberOfPeriods: number;
|
|
6
|
+
/** Absent when the report is on a timeframe that has no period wording. */
|
|
7
|
+
timeframe?: AllowedTimeframe;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
onDownloadExcel: () => void;
|
|
10
|
+
}
|
|
11
|
+
declare const PdfColumnLimitPopup: ({ additionalColumnsCount, maxColumns, numberOfPeriods, timeframe, onCancel, onDownloadExcel, }: Readonly<PdfColumnLimitPopupProps>) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default PdfColumnLimitPopup;
|
|
@@ -27,7 +27,8 @@ export declare enum DynamicConfigNamesWebApp {
|
|
|
27
27
|
approvalRuleV3Config = "approval_rule_v3_config",
|
|
28
28
|
transactionCategorizationConfig = "transaction_categorization_config",
|
|
29
29
|
zeniCardsVisibilityConfig = "zeni_cards_visibility_config",
|
|
30
|
-
updateTransactionTypeConfig = "update_transaction_type_config"
|
|
30
|
+
updateTransactionTypeConfig = "update_transaction_type_config",
|
|
31
|
+
agentJeConfig = "agent_je_config"
|
|
31
32
|
}
|
|
32
33
|
/** Shared configs used by both web-app-ui and cockpit-ui */
|
|
33
34
|
export declare enum DynamicConfigNamesShared {
|
|
@@ -54,6 +55,7 @@ export declare const DynamicConfigNames: {
|
|
|
54
55
|
transactionCategorizationConfig: DynamicConfigNamesWebApp.transactionCategorizationConfig;
|
|
55
56
|
zeniCardsVisibilityConfig: DynamicConfigNamesWebApp.zeniCardsVisibilityConfig;
|
|
56
57
|
updateTransactionTypeConfig: DynamicConfigNamesWebApp.updateTransactionTypeConfig;
|
|
58
|
+
agentJeConfig: DynamicConfigNamesWebApp.agentJeConfig;
|
|
57
59
|
cardsTabCockpitUser: DynamicConfigNamesCockpit.cardsTabCockpitUser;
|
|
58
60
|
monthEndInsightsEnablement: DynamicConfigNamesCockpit.monthEndInsightsEnablement;
|
|
59
61
|
expenseAutomationEnablement: DynamicConfigNamesCockpit.expenseAutomationEnablement;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI gate for Actual Matching. Reads Statsig dynamic config `agent_je_config`
|
|
3
|
+
* (same object agent-je uses). Fail-closed: missing slice / missing key /
|
|
4
|
+
* any value other than explicit `true` hides the tab.
|
|
5
|
+
*
|
|
6
|
+
* Expected shape:
|
|
7
|
+
* ```
|
|
8
|
+
* {
|
|
9
|
+
* "global": {
|
|
10
|
+
* "accrual_config": {
|
|
11
|
+
* "ACTUAL_MATCHING_ENABLED": true
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const ACTUAL_MATCHING_ENABLED_KEY = "ACTUAL_MATCHING_ENABLED";
|
|
18
|
+
export declare function isActualMatchingEnabledInAgentJeConfig(configValue: Record<string, unknown> | null | undefined): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actual Matching JE subtab / match-detail UI gate from Statsig
|
|
3
|
+
* `agent_je_config`. Fail-closed while Statsig is loading or the key is
|
|
4
|
+
* missing — master can ship the code with the tab hidden.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useActualMatchingEnabled(): boolean;
|