@zeniai/web-components 4.1.67-betaJK2 → 4.1.67-betaVR1
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-BfhMt5Qq.cjs → SessionTimeoutPopup-BrRR0XU5.cjs} +15065 -14520
- package/dist/{SessionTimeoutPopup-DTK0o0og.js → SessionTimeoutPopup-DCorFAuC.js} +70935 -68946
- package/dist/appLocale.d.ts +115 -10
- package/dist/assets/interface/dnd-handle.svg +8 -0
- package/dist/assets/interface/flag.svg +4 -3
- package/dist/cockpit.cjs.js +11 -5
- package/dist/cockpit.esm.js +3940 -3927
- package/dist/components/common/zeniDatePicker/ZeniDatePickerField.d.ts +1 -2
- package/dist/components/commonSetUp/approval/AmountConditionRow.d.ts +21 -0
- package/dist/components/commonSetUp/approval/ApprovalRuleSection.d.ts +70 -3
- package/dist/components/commonSetUp/approval/ApprovalRuleSectionV1.d.ts +14 -0
- package/dist/components/commonSetUp/approval/ApprovalStageRow.d.ts +121 -0
- package/dist/components/commonSetUp/approval/ApprovalStagesSection.d.ts +66 -0
- package/dist/components/commonSetUp/approval/ConditionRow.d.ts +78 -0
- package/dist/components/commonSetUp/approval/DepartmentConditionRow.d.ts +22 -0
- package/dist/components/commonSetUp/approval/FallbackEngineBanner.d.ts +28 -0
- package/dist/components/commonSetUp/approval/FormSection.d.ts +26 -0
- package/dist/components/commonSetUp/approval/IgnoreOverlapModal.d.ts +22 -0
- package/dist/components/commonSetUp/approval/OperatorIsOrIsNotPicker.d.ts +23 -0
- package/dist/components/commonSetUp/approval/RuleOverlapBanner.d.ts +61 -0
- package/dist/components/commonSetUp/approval/RuleOverlapCard.d.ts +31 -0
- package/dist/components/commonSetUp/approval/Switch.d.ts +23 -0
- package/dist/components/commonSetUp/approval/VendorConditionRow.d.ts +27 -0
- package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRuleDetailPage.d.ts +107 -12
- package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRuleDetailPageV1.d.ts +37 -0
- package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRulesPage.d.ts +18 -1
- package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRulesPageV1.d.ts +10 -0
- package/dist/components/spendManagement/reimbursement/reimbursementSetUp/ReimbursementApprovalRuleDetailPage.d.ts +100 -12
- package/dist/components/spendManagement/reimbursement/reimbursementSetUp/ReimbursementApprovalRuleDetailPageV1.d.ts +37 -0
- package/dist/components/spendManagement/reimbursement/reimbursementSetUp/ReimbursementApprovalRulesPage.d.ts +16 -1
- package/dist/components/spendManagement/reimbursement/reimbursementSetUp/ReimbursementApprovalRulesPageV1.d.ts +10 -0
- package/dist/components/taskManagement/TaskDetailPage.d.ts +2 -6
- package/dist/components/taskManagement/TaskListRow.d.ts +2 -7
- package/dist/components/taskManagement/TaskListRowSmall.d.ts +1 -3
- package/dist/components/taskManagement/TaskManagementPage.d.ts +28 -4
- package/dist/components/taskManagement/taskManagementFormConstants.d.ts +0 -1
- package/dist/components/taskManagement/taskManagementHeaderItemsData.d.ts +0 -1
- package/dist/components/vendors/vendorList/VendorListTableRow.d.ts +1 -2
- package/dist/context/featureProvider/DynamicConfigNameConstants.d.ts +2 -0
- package/dist/context/featureProvider/useApprovalRulesV3Config.d.ts +31 -0
- package/dist/designSystem/ClickableRow.d.ts +11 -0
- package/dist/designSystem/clickableRowStyles.d.ts +32 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.esm.js +328 -321
- package/dist/strings/strings.d.ts +115 -10
- package/package.json +2 -2
- package/dist/components/taskManagement/SubtaskCreationForm.d.ts +0 -14
- package/dist/components/taskManagement/TaskDetailSubtaskForm.d.ts +0 -14
- package/dist/components/taskManagement/taskManagementTypes.d.ts +0 -33
- package/dist/components/taskManagement/taskManagementUtils.d.ts +0 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form-state keys used by the vendor condition group.
|
|
3
|
+
*
|
|
4
|
+
* Vendor and department rows split their form state across two keys
|
|
5
|
+
* because the multi-select primitive's native value is the
|
|
6
|
+
* `{allOptions, selectedOptions}` shape, which doesn't match the wire
|
|
7
|
+
* `VendorCriteria.vendorIds` `string[]`. The screen connector reads
|
|
8
|
+
* `selection.selectedOptions` and translates to the canonical
|
|
9
|
+
* `VendorCriteria` at save time.
|
|
10
|
+
*/
|
|
11
|
+
export declare const VENDOR_CRITERIA_FIELD = "vendorCriteria";
|
|
12
|
+
export declare const VENDOR_OPERATOR_FIELD = "vendorCriteria.operator";
|
|
13
|
+
export declare const VENDOR_SELECTION_FIELD = "vendorCriteria.selection";
|
|
14
|
+
export interface VendorOption {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
export interface VendorConditionRowProps {
|
|
19
|
+
/**
|
|
20
|
+
* All vendor IDs the user can choose from. Display names are
|
|
21
|
+
* resolved via `vendorNamesById`.
|
|
22
|
+
*/
|
|
23
|
+
allVendorIds: string[];
|
|
24
|
+
vendorNamesById: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
export declare function VendorConditionRow({ allVendorIds, vendorNamesById, }: VendorConditionRowProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export default VendorConditionRow;
|
package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRuleDetailPage.d.ts
CHANGED
|
@@ -1,24 +1,119 @@
|
|
|
1
|
-
import { ApprovalUpdateActionType, BillPaySetupApproverUpdateDataView, ID } from '@zeniai/client-epic-state';
|
|
1
|
+
import { AmountComparator, AmountCriteria, ApprovalUpdateActionType, BillPayApprovalRuleWithUser, BillPaySetupApproverUpdateDataView, ID } from '@zeniai/client-epic-state';
|
|
2
2
|
import { ResponsiveSized } from '../../../../context/windowSizeProvider';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
declare const
|
|
3
|
+
import { ApprovalStageData } from '../../../commonSetUp/approval/ApprovalStageRow';
|
|
4
|
+
import { IsOrIsNotOperator } from '../../../commonSetUp/approval/OperatorIsOrIsNotPicker';
|
|
5
|
+
declare const name = "name";
|
|
6
|
+
declare const description = "description";
|
|
7
|
+
declare const amountCriteria = "amountCriteria";
|
|
8
|
+
declare const vendorCriteria = "vendorCriteria";
|
|
9
|
+
declare const departmentCriteria = "departmentCriteria";
|
|
6
10
|
declare const steps = "steps";
|
|
11
|
+
declare const separationOfDuties = "separationOfDuties";
|
|
12
|
+
declare const isFallback = "isFallback";
|
|
7
13
|
declare const applyToExistingBills = "applyToExistingBills";
|
|
14
|
+
/**
|
|
15
|
+
* Form-side shape for vendor / department conditions.
|
|
16
|
+
*
|
|
17
|
+
* The widget primitive (`LabeledMultiSelectField`) stores its value as
|
|
18
|
+
* `{allOptions, selectedOptions}`, which doesn't match the wire shape
|
|
19
|
+
* `{type, operator, vendorIds | departmentIds}`. The form stores the
|
|
20
|
+
* widget-native shape under each slot and the screen connector
|
|
21
|
+
* translates to the canonical `VendorCriteria` / `DepartmentCriteria`
|
|
22
|
+
* at save time.
|
|
23
|
+
*
|
|
24
|
+
* The `operator` slot is driven by `SingleSelectField`, which writes
|
|
25
|
+
* the wrapped `{allOptions, selectedOption}` shape to form state, so
|
|
26
|
+
* we declare it inline as `{allOptions, selectedOption}` here.
|
|
27
|
+
* `getDefaultValues` seeds the wrapped shape too, so the runtime
|
|
28
|
+
* always matches the type. Readers do `value.operator.selectedOption`.
|
|
29
|
+
*/
|
|
30
|
+
export interface MultiSelectFormValue {
|
|
31
|
+
allOptions: string[];
|
|
32
|
+
selectedOptions: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface VendorConditionFormValue {
|
|
35
|
+
operator: {
|
|
36
|
+
allOptions: IsOrIsNotOperator[];
|
|
37
|
+
selectedOption?: IsOrIsNotOperator;
|
|
38
|
+
};
|
|
39
|
+
selection: MultiSelectFormValue;
|
|
40
|
+
}
|
|
41
|
+
export interface DepartmentConditionFormValue {
|
|
42
|
+
operator: {
|
|
43
|
+
allOptions: IsOrIsNotOperator[];
|
|
44
|
+
selectedOption?: IsOrIsNotOperator;
|
|
45
|
+
};
|
|
46
|
+
selection: MultiSelectFormValue;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Form-side amount shape. Same reason as vendor/department: the
|
|
50
|
+
* comparator slot is `SingleSelectField`-driven, so its runtime shape
|
|
51
|
+
* is the wrapper. The min/max remain canonical `Amount` because they
|
|
52
|
+
* are driven by `TextField` which writes bare values.
|
|
53
|
+
*/
|
|
54
|
+
export interface AmountConditionFormValue {
|
|
55
|
+
comparator: {
|
|
56
|
+
allOptions: AmountComparator[];
|
|
57
|
+
selectedOption?: AmountComparator;
|
|
58
|
+
};
|
|
59
|
+
type: "amount";
|
|
60
|
+
max?: AmountCriteria["max"];
|
|
61
|
+
min?: AmountCriteria["min"];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Full Approval Rules 3.0 form data shape.
|
|
65
|
+
*
|
|
66
|
+
* Each top-level slot corresponds to one section of the form. Bindings
|
|
67
|
+
* land incrementally — the slots are declared up front so the contract is
|
|
68
|
+
* stable across tasks:
|
|
69
|
+
* - amountCriteria — task #8
|
|
70
|
+
* - vendorCriteria / departmentCriteria — tasks #9–#10 (this change)
|
|
71
|
+
* - separationOfDuties — task #14
|
|
72
|
+
* - isFallback — task #15
|
|
73
|
+
*/
|
|
8
74
|
export interface FormData {
|
|
9
75
|
[applyToExistingBills]: string[];
|
|
10
|
-
[steps]:
|
|
11
|
-
[
|
|
12
|
-
[
|
|
76
|
+
[steps]: ApprovalStageData[];
|
|
77
|
+
[amountCriteria]?: AmountConditionFormValue;
|
|
78
|
+
[departmentCriteria]?: DepartmentConditionFormValue;
|
|
79
|
+
[description]?: string;
|
|
80
|
+
[isFallback]?: boolean;
|
|
81
|
+
[name]?: string;
|
|
82
|
+
[separationOfDuties]?: boolean;
|
|
83
|
+
[vendorCriteria]?: VendorConditionFormValue;
|
|
13
84
|
}
|
|
14
85
|
export interface BillPayApprovalRuleDetailPageProps {
|
|
86
|
+
/**
|
|
87
|
+
* User-resolved approval rules used by the overlap warning surface
|
|
88
|
+
* (RuleOverlapBanner). Threaded separately from `localData` because
|
|
89
|
+
* the update-data view exposes only the raw `ApprovalRule[]` (no
|
|
90
|
+
* resolved user actors on the steps), and the banner's per-rule
|
|
91
|
+
* card renders resolved actor names in its 'Then:' section.
|
|
92
|
+
*/
|
|
93
|
+
allApprovalRulesWithUser: BillPayApprovalRuleWithUser[];
|
|
94
|
+
/**
|
|
95
|
+
* Vendor list available to the rule. Threaded from `state.contactState`
|
|
96
|
+
* by the screen connector. Empty when the contact slice hasn't loaded
|
|
97
|
+
* yet — the multi-select renders no options in that case.
|
|
98
|
+
*/
|
|
99
|
+
allVendorIds: string[];
|
|
15
100
|
approvalUpdateActionType: ApprovalUpdateActionType;
|
|
16
101
|
localData: BillPaySetupApproverUpdateDataView;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
102
|
+
vendorNamesById: Record<string, string>;
|
|
103
|
+
/**
|
|
104
|
+
* When editing an existing rule, the rule being edited. Used to
|
|
105
|
+
* exclude it from the overlap check (a rule should not flag itself
|
|
106
|
+
* as conflicting). Undefined for create flows.
|
|
107
|
+
*/
|
|
108
|
+
editingRuleId?: ID;
|
|
20
109
|
onApprovalRuleDataUpdated: (formData: FormData) => void;
|
|
21
110
|
onBackClick: () => void;
|
|
111
|
+
/**
|
|
112
|
+
* Approval Rules 3.0 — invoked from RuleOverlapBanner when the user
|
|
113
|
+
* clicks Edit on one of the conflicting rules. The screen connector
|
|
114
|
+
* wires this to a same-tab navigation to that rule's detail page.
|
|
115
|
+
*/
|
|
116
|
+
onEditExistingRule: (ruleId: string) => void;
|
|
22
117
|
onResetClick: () => void;
|
|
23
118
|
onSaveRuleClick: () => void;
|
|
24
119
|
onSaveRuleSuccess: () => void;
|
|
@@ -29,9 +124,9 @@ export interface BillPayApprovalRuleDetailPageProps {
|
|
|
29
124
|
export declare const D: {
|
|
30
125
|
footerPadding: ResponsiveSized;
|
|
31
126
|
};
|
|
32
|
-
declare function BillPayApprovalRuleDetailPage({ localData, approvalUpdateActionType,
|
|
127
|
+
declare function BillPayApprovalRuleDetailPage({ localData, approvalUpdateActionType, allApprovalRulesWithUser, allVendorIds, editingRuleId, vendorNamesById, onBackClick, onApprovalRuleDataUpdated, onEditExistingRule, onResetClick, onSaveRuleClick, onSaveRuleSuccess, }: BillPayApprovalRuleDetailPageProps): import("react/jsx-runtime").JSX.Element;
|
|
33
128
|
export default BillPayApprovalRuleDetailPage;
|
|
34
129
|
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
35
130
|
type FormDataKeys = keyof FormData;
|
|
36
|
-
export declare const uniqueName: (key: FormDataKeys) => "steps" | "
|
|
131
|
+
export declare const uniqueName: (key: FormDataKeys) => "description" | "name" | "steps" | "isFallback" | "separationOfDuties" | "amountCriteria" | "departmentCriteria" | "vendorCriteria" | "applyToExistingBills";
|
|
37
132
|
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
|
package/dist/components/spendManagement/billPay/billPaySetUp/BillPayApprovalRuleDetailPageV1.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ApprovalUpdateActionType, BillPaySetupApproverUpdateDataView, ID } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ResponsiveSized } from '../../../../context/windowSizeProvider';
|
|
3
|
+
import { StepData } from '../../common/followStepsSection/FollowStepsSectionMedium';
|
|
4
|
+
declare const lowerBound = "lowerBound";
|
|
5
|
+
declare const upperBound = "upperBound";
|
|
6
|
+
declare const steps = "steps";
|
|
7
|
+
declare const applyToExistingBills = "applyToExistingBills";
|
|
8
|
+
export interface FormData {
|
|
9
|
+
[applyToExistingBills]: string[];
|
|
10
|
+
[steps]: StepData[];
|
|
11
|
+
[upperBound]: number;
|
|
12
|
+
[lowerBound]?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface BillPayApprovalRuleDetailPageProps {
|
|
15
|
+
approvalUpdateActionType: ApprovalUpdateActionType;
|
|
16
|
+
localData: BillPaySetupApproverUpdateDataView;
|
|
17
|
+
hideUpperBoundField?: boolean;
|
|
18
|
+
isLowerBoundDisabled?: boolean;
|
|
19
|
+
isUpperBoundDisabled?: boolean;
|
|
20
|
+
onApprovalRuleDataUpdated: (formData: FormData) => void;
|
|
21
|
+
onBackClick: () => void;
|
|
22
|
+
onResetClick: () => void;
|
|
23
|
+
onSaveRuleClick: () => void;
|
|
24
|
+
onSaveRuleSuccess: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Dimensions
|
|
28
|
+
*/
|
|
29
|
+
export declare const D: {
|
|
30
|
+
footerPadding: ResponsiveSized;
|
|
31
|
+
};
|
|
32
|
+
declare function BillPayApprovalRuleDetailPage({ localData, approvalUpdateActionType, onBackClick, onApprovalRuleDataUpdated, onResetClick, isLowerBoundDisabled, isUpperBoundDisabled, hideUpperBoundField, onSaveRuleClick, onSaveRuleSuccess, }: BillPayApprovalRuleDetailPageProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export default BillPayApprovalRuleDetailPage;
|
|
34
|
+
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
35
|
+
type FormDataKeys = keyof FormData;
|
|
36
|
+
export declare const uniqueName: (key: FormDataKeys) => "steps" | "applyToExistingBills" | "lowerBound" | "upperBound";
|
|
37
|
+
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
|
|
@@ -2,9 +2,26 @@ import { ApproverViewUpdateData, BillPaySetupApproverView } from '@zeniai/client
|
|
|
2
2
|
export interface Props {
|
|
3
3
|
approvalView: BillPaySetupApproverView;
|
|
4
4
|
billPaySetupApproverViewUpdateData?: ApproverViewUpdateData;
|
|
5
|
+
/**
|
|
6
|
+
* Optional department-id → display-name map (where "department" maps
|
|
7
|
+
* to the Class entity in this codebase). Derived from `state.classState`.
|
|
8
|
+
*/
|
|
9
|
+
departmentNamesById?: Record<string, string>;
|
|
10
|
+
/**
|
|
11
|
+
* Optional vendor-id → display-name map for resolving vendor chips on
|
|
12
|
+
* rule cards. The connected screen derives this from `state.contactState`.
|
|
13
|
+
*/
|
|
14
|
+
vendorNamesById?: Record<string, string>;
|
|
5
15
|
onBackClick: () => void;
|
|
6
16
|
onDeleteRuleClick: (ruleId: string) => void;
|
|
7
17
|
onEditRuleClick: (ruleId?: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Called when the user drops a dragged rule card onto another. The
|
|
20
|
+
* page computes the new id ordering (preserving the fallback rule
|
|
21
|
+
* outside the list) and the screen connector dispatches the
|
|
22
|
+
* reorder action against CES.
|
|
23
|
+
*/
|
|
24
|
+
onReorderRules?: (newApprovalRuleIds: string[]) => void;
|
|
8
25
|
}
|
|
9
|
-
declare const BillPayApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare const BillPayApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, vendorNamesById, departmentNamesById, onReorderRules, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
10
27
|
export default BillPayApprovalRulesPage;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApproverViewUpdateData, BillPaySetupApproverView } from '@zeniai/client-epic-state';
|
|
2
|
+
export interface Props {
|
|
3
|
+
approvalView: BillPaySetupApproverView;
|
|
4
|
+
billPaySetupApproverViewUpdateData?: ApproverViewUpdateData;
|
|
5
|
+
onBackClick: () => void;
|
|
6
|
+
onDeleteRuleClick: (ruleId: string) => void;
|
|
7
|
+
onEditRuleClick: (ruleId?: string) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const BillPayApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default BillPayApprovalRulesPage;
|
|
@@ -1,24 +1,112 @@
|
|
|
1
|
-
import { ApprovalUpdateActionType, ID, RemiSetupApproverUpdateDataView } from '@zeniai/client-epic-state';
|
|
1
|
+
import { AmountComparator, AmountCriteria, ApprovalUpdateActionType, ID, RemiApprovalRuleWithUser, RemiSetupApproverUpdateDataView } from '@zeniai/client-epic-state';
|
|
2
2
|
import { ResponsiveSized } from '../../../../context/windowSizeProvider';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
declare const
|
|
3
|
+
import { ApprovalStageData } from '../../../commonSetUp/approval/ApprovalStageRow';
|
|
4
|
+
import { IsOrIsNotOperator } from '../../../commonSetUp/approval/OperatorIsOrIsNotPicker';
|
|
5
|
+
declare const name = "name";
|
|
6
|
+
declare const description = "description";
|
|
7
|
+
declare const amountCriteria = "amountCriteria";
|
|
8
|
+
declare const vendorCriteria = "vendorCriteria";
|
|
9
|
+
declare const departmentCriteria = "departmentCriteria";
|
|
6
10
|
declare const steps = "steps";
|
|
11
|
+
declare const separationOfDuties = "separationOfDuties";
|
|
12
|
+
declare const isFallback = "isFallback";
|
|
7
13
|
declare const applyToExistingReimbursements = "applyToExistingReimbursements";
|
|
14
|
+
/**
|
|
15
|
+
* Form-side shape for vendor / department conditions.
|
|
16
|
+
*
|
|
17
|
+
* The widget primitive (`LabeledMultiSelectField`) stores its value as
|
|
18
|
+
* `{allOptions, selectedOptions}`, which doesn't match the wire shape
|
|
19
|
+
* `{type, operator, vendorIds | departmentIds}`. The form stores the
|
|
20
|
+
* widget-native shape under each slot and the screen connector
|
|
21
|
+
* translates to the canonical `VendorCriteria` / `DepartmentCriteria`
|
|
22
|
+
* at save time.
|
|
23
|
+
*/
|
|
24
|
+
export interface MultiSelectFormValue {
|
|
25
|
+
allOptions: string[];
|
|
26
|
+
selectedOptions: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface VendorConditionFormValue {
|
|
29
|
+
operator: {
|
|
30
|
+
allOptions: IsOrIsNotOperator[];
|
|
31
|
+
selectedOption?: IsOrIsNotOperator;
|
|
32
|
+
};
|
|
33
|
+
selection: MultiSelectFormValue;
|
|
34
|
+
}
|
|
35
|
+
export interface DepartmentConditionFormValue {
|
|
36
|
+
operator: {
|
|
37
|
+
allOptions: IsOrIsNotOperator[];
|
|
38
|
+
selectedOption?: IsOrIsNotOperator;
|
|
39
|
+
};
|
|
40
|
+
selection: MultiSelectFormValue;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Form-side amount shape. See the BillPay equivalent for the fuller
|
|
44
|
+
* rationale — comparator is wrapped because the dropdown is
|
|
45
|
+
* SingleSelectField-driven, min / max remain canonical because they
|
|
46
|
+
* are driven by TextField.
|
|
47
|
+
*/
|
|
48
|
+
export interface AmountConditionFormValue {
|
|
49
|
+
comparator: {
|
|
50
|
+
allOptions: AmountComparator[];
|
|
51
|
+
selectedOption?: AmountComparator;
|
|
52
|
+
};
|
|
53
|
+
type: "amount";
|
|
54
|
+
max?: AmountCriteria["max"];
|
|
55
|
+
min?: AmountCriteria["min"];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Full Approval Rules 3.0 form data shape.
|
|
59
|
+
*
|
|
60
|
+
* Each top-level slot corresponds to one section of the form. Bindings
|
|
61
|
+
* land incrementally — the slots are declared up front so the contract is
|
|
62
|
+
* stable across tasks:
|
|
63
|
+
* - amountCriteria — task #8
|
|
64
|
+
* - vendorCriteria / departmentCriteria — tasks #9–#10 (this change)
|
|
65
|
+
* - separationOfDuties — task #14
|
|
66
|
+
* - isFallback — task #15
|
|
67
|
+
*/
|
|
8
68
|
export interface FormData {
|
|
9
69
|
[applyToExistingReimbursements]: string[];
|
|
10
|
-
[steps]:
|
|
11
|
-
[
|
|
12
|
-
[
|
|
70
|
+
[steps]: ApprovalStageData[];
|
|
71
|
+
[amountCriteria]?: AmountConditionFormValue;
|
|
72
|
+
[departmentCriteria]?: DepartmentConditionFormValue;
|
|
73
|
+
[description]?: string;
|
|
74
|
+
[isFallback]?: boolean;
|
|
75
|
+
[name]?: string;
|
|
76
|
+
[separationOfDuties]?: boolean;
|
|
77
|
+
[vendorCriteria]?: VendorConditionFormValue;
|
|
13
78
|
}
|
|
14
79
|
export interface ReimbursementApprovalRuleDetailPageProps {
|
|
80
|
+
/**
|
|
81
|
+
* User-resolved approval rules used by RuleOverlapBanner. See the
|
|
82
|
+
* BillPay equivalent for the rationale — the update-data view only
|
|
83
|
+
* exposes the raw `ApprovalRule[]`, but the banner needs resolved
|
|
84
|
+
* actor names to render the 'Then:' section.
|
|
85
|
+
*/
|
|
86
|
+
allApprovalRulesWithUser: RemiApprovalRuleWithUser[];
|
|
87
|
+
/**
|
|
88
|
+
* Vendor list available to the rule. Threaded from `state.contactState`
|
|
89
|
+
* by the screen connector. Empty when the contact slice hasn't loaded
|
|
90
|
+
* yet — the multi-select renders no options in that case.
|
|
91
|
+
*/
|
|
92
|
+
allVendorIds: string[];
|
|
15
93
|
approvalUpdateActionType: ApprovalUpdateActionType;
|
|
16
94
|
localData: RemiSetupApproverUpdateDataView;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
95
|
+
vendorNamesById: Record<string, string>;
|
|
96
|
+
/**
|
|
97
|
+
* When editing an existing rule, the rule being edited. Used to
|
|
98
|
+
* exclude it from the overlap check (a rule should not flag itself
|
|
99
|
+
* as conflicting). Undefined for create flows.
|
|
100
|
+
*/
|
|
101
|
+
editingRuleId?: ID;
|
|
20
102
|
onApprovalRuleDataUpdated: (formData: FormData) => void;
|
|
21
103
|
onBackClick: () => void;
|
|
104
|
+
/**
|
|
105
|
+
* Approval Rules 3.0 — invoked from RuleOverlapBanner when the user
|
|
106
|
+
* clicks Edit on one of the conflicting rules. The screen connector
|
|
107
|
+
* wires this to a same-tab navigation to that rule's detail page.
|
|
108
|
+
*/
|
|
109
|
+
onEditExistingRule: (ruleId: string) => void;
|
|
22
110
|
onResetClick: () => void;
|
|
23
111
|
onSaveRuleClick: () => void;
|
|
24
112
|
onSaveRuleSuccess: () => void;
|
|
@@ -29,9 +117,9 @@ export interface ReimbursementApprovalRuleDetailPageProps {
|
|
|
29
117
|
export declare const D: {
|
|
30
118
|
footerPadding: ResponsiveSized;
|
|
31
119
|
};
|
|
32
|
-
declare function ReimbursementApprovalRuleDetailPage({ localData, approvalUpdateActionType,
|
|
120
|
+
declare function ReimbursementApprovalRuleDetailPage({ localData, approvalUpdateActionType, allApprovalRulesWithUser, allVendorIds, editingRuleId, vendorNamesById, onBackClick, onApprovalRuleDataUpdated, onEditExistingRule, onResetClick, onSaveRuleClick, onSaveRuleSuccess, }: ReimbursementApprovalRuleDetailPageProps): import("react/jsx-runtime").JSX.Element;
|
|
33
121
|
export default ReimbursementApprovalRuleDetailPage;
|
|
34
122
|
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
35
123
|
type FormDataKeys = keyof FormData;
|
|
36
|
-
export declare const uniqueName: (key: FormDataKeys) => "steps" | "
|
|
124
|
+
export declare const uniqueName: (key: FormDataKeys) => "description" | "name" | "steps" | "isFallback" | "separationOfDuties" | "amountCriteria" | "departmentCriteria" | "vendorCriteria" | "applyToExistingReimbursements";
|
|
37
125
|
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ApprovalUpdateActionType, ID, RemiSetupApproverUpdateDataView } from '@zeniai/client-epic-state';
|
|
2
|
+
import { ResponsiveSized } from '../../../../context/windowSizeProvider';
|
|
3
|
+
import { StepData } from '../../common/followStepsSection/FollowStepsSectionMedium';
|
|
4
|
+
declare const lowerBound = "lowerBound";
|
|
5
|
+
declare const upperBound = "upperBound";
|
|
6
|
+
declare const steps = "steps";
|
|
7
|
+
declare const applyToExistingReimbursements = "applyToExistingReimbursements";
|
|
8
|
+
export interface FormData {
|
|
9
|
+
[applyToExistingReimbursements]: string[];
|
|
10
|
+
[steps]: StepData[];
|
|
11
|
+
[upperBound]: number;
|
|
12
|
+
[lowerBound]?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ReimbursementApprovalRuleDetailPageProps {
|
|
15
|
+
approvalUpdateActionType: ApprovalUpdateActionType;
|
|
16
|
+
localData: RemiSetupApproverUpdateDataView;
|
|
17
|
+
hideUpperBoundField?: boolean;
|
|
18
|
+
isLowerBoundDisabled?: boolean;
|
|
19
|
+
isUpperBoundDisabled?: boolean;
|
|
20
|
+
onApprovalRuleDataUpdated: (formData: FormData) => void;
|
|
21
|
+
onBackClick: () => void;
|
|
22
|
+
onResetClick: () => void;
|
|
23
|
+
onSaveRuleClick: () => void;
|
|
24
|
+
onSaveRuleSuccess: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Dimensions
|
|
28
|
+
*/
|
|
29
|
+
export declare const D: {
|
|
30
|
+
footerPadding: ResponsiveSized;
|
|
31
|
+
};
|
|
32
|
+
declare function ReimbursementApprovalRuleDetailPage({ localData, approvalUpdateActionType, isLowerBoundDisabled, isUpperBoundDisabled, hideUpperBoundField, onBackClick, onApprovalRuleDataUpdated, onResetClick, onSaveRuleClick, onSaveRuleSuccess, }: ReimbursementApprovalRuleDetailPageProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export default ReimbursementApprovalRuleDetailPage;
|
|
34
|
+
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
35
|
+
type FormDataKeys = keyof FormData;
|
|
36
|
+
export declare const uniqueName: (key: FormDataKeys) => "steps" | "lowerBound" | "upperBound" | "applyToExistingReimbursements";
|
|
37
|
+
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import { ApproverViewUpdateData, RemiSetupApproverView } from '@zeniai/client-epic-state';
|
|
2
2
|
export interface Props {
|
|
3
3
|
approvalView: RemiSetupApproverView;
|
|
4
|
+
/**
|
|
5
|
+
* Optional department-id → display-name map (where "department" maps
|
|
6
|
+
* to the Class entity in this codebase). Derived from `state.classState`.
|
|
7
|
+
*/
|
|
8
|
+
departmentNamesById?: Record<string, string>;
|
|
4
9
|
remiSetupApproverViewUpdateData?: ApproverViewUpdateData;
|
|
10
|
+
/**
|
|
11
|
+
* Optional vendor-id → display-name map for resolving vendor chips on
|
|
12
|
+
* rule cards. The connected screen derives this from `state.contactState`.
|
|
13
|
+
*/
|
|
14
|
+
vendorNamesById?: Record<string, string>;
|
|
5
15
|
onBackClick: () => void;
|
|
6
16
|
onDeleteRuleClick: (ruleId: string) => void;
|
|
7
17
|
onEditRuleClick: (ruleId?: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Called with the new full id ordering when the user drops a card.
|
|
20
|
+
* Mirrors the BillPay equivalent.
|
|
21
|
+
*/
|
|
22
|
+
onReorderRules?: (newApprovalRuleIds: string[]) => void;
|
|
8
23
|
}
|
|
9
|
-
declare const ReimbursementApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare const ReimbursementApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, vendorNamesById, departmentNamesById, onReorderRules, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
10
25
|
export default ReimbursementApprovalRulesPage;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApproverViewUpdateData, RemiSetupApproverView } from '@zeniai/client-epic-state';
|
|
2
|
+
export interface Props {
|
|
3
|
+
approvalView: RemiSetupApproverView;
|
|
4
|
+
remiSetupApproverViewUpdateData?: ApproverViewUpdateData;
|
|
5
|
+
onBackClick: () => void;
|
|
6
|
+
onDeleteRuleClick: (ruleId: string) => void;
|
|
7
|
+
onEditRuleClick: (ruleId?: string) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const ReimbursementApprovalRulesPage: ({ approvalView, onBackClick, onEditRuleClick, onDeleteRuleClick, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default ReimbursementApprovalRulesPage;
|
|
@@ -8,7 +8,6 @@ import { RecurringViewType } from '../formElements/recurringView/RecurringView';
|
|
|
8
8
|
import { SingleSelectPickerFieldValue } from '../formElements/singleSelectPickerField/SingleSelectPickerField';
|
|
9
9
|
import { SingleSelectFieldValue } from '../singleSelect/SingleSelectField';
|
|
10
10
|
import { AttachmentFormData } from './AllTaskAttachments';
|
|
11
|
-
import { TaskDetailSubtaskFormProps } from './TaskDetailSubtaskForm';
|
|
12
11
|
import { timeSpentKey } from './taskManagementFormConstants';
|
|
13
12
|
type TaskAttributeCodeType = TaskStatusCodeType | PriorityCodeType | ID;
|
|
14
13
|
declare const name = "name";
|
|
@@ -41,7 +40,7 @@ type FormDataKeys = keyof TaskDetailFormData;
|
|
|
41
40
|
export interface FormData {
|
|
42
41
|
[taskSectionId]: TaskDetailFormData;
|
|
43
42
|
}
|
|
44
|
-
declare const uniqueName: (sectionId: string, key: FormDataKeys) => `${string}.fileIds` | `${string}.name` | `${string}.status` | `${string}.
|
|
43
|
+
declare const uniqueName: (sectionId: string, key: FormDataKeys) => `${string}.fileIds` | `${string}.name` | `${string}.status` | `${string}.description` | `${string}.priority` | `${string}.dueDate` | `${string}.assignee` | `${string}.tag` | `${string}.timeSpent` | `${string}.taskType` | `${string}.recurringView` | `${string}.visibility`;
|
|
45
44
|
export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
|
|
46
45
|
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
47
46
|
export interface TaskDetailPageProps {
|
|
@@ -66,7 +65,6 @@ export interface TaskDetailPageProps {
|
|
|
66
65
|
isTaskVisibilityEnabled?: boolean;
|
|
67
66
|
isZeniUser?: boolean;
|
|
68
67
|
recurringSourceTaskUrl?: string;
|
|
69
|
-
subTaskCreateStatus?: FetchState;
|
|
70
68
|
taskDetailFetchState?: FetchState;
|
|
71
69
|
taskGroupList?: Array<{
|
|
72
70
|
id: ID;
|
|
@@ -89,10 +87,8 @@ export interface TaskDetailPageProps {
|
|
|
89
87
|
onSnoozeTask: (taskId: ID, snoozedUntil: string) => void;
|
|
90
88
|
onUnsnoozeTask: (taskId: ID) => void;
|
|
91
89
|
updateFilesEntity: (files: FilePayload[]) => void;
|
|
92
|
-
onCreateSubtask?: (parentTaskId: ID, data: Parameters<TaskDetailSubtaskFormProps["onSubmit"]>[0]) => void;
|
|
93
90
|
onFetchCannedResponses?: () => void;
|
|
94
91
|
onManageTemplatesClick?: () => void;
|
|
95
|
-
onSubtaskClick?: (subtaskId: ID) => void;
|
|
96
92
|
}
|
|
97
93
|
export declare const getLabelColor: (value: TaskAttributeCodeType, theme?: Theme) => string;
|
|
98
94
|
export declare const getRichLabel: (value: TaskAttributeCodeType, theme: Theme) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -101,5 +97,5 @@ export declare const getTagList: (tagList: Tag[]) => {
|
|
|
101
97
|
value: string;
|
|
102
98
|
isDeleted: boolean | undefined;
|
|
103
99
|
}[];
|
|
104
|
-
declare const TaskDetailPage: ({ taskDetailSelectorView, companyName, companyId, loggedInUser, analytics, isNewClicked, filesEndPoint, authParams, currentUrl, taskId, taskGroupList, taskGroupName, taskDetailFetchState, onSaveChangesToLocalStore, onSaveDetailClick, onArchiveTaskClick, onSnoozeTask, onUnsnoozeTask, onDismissClick, handleZeniLogoClick: _handleZeniLogoClick, updateFilesEntity, onDeleteFile, onEditFileName, onDeleteTaskClick, onReloadTaskDetailPage, tagListView, userGroupList, onCreateTagClick, onDeleteTagClick, cannedResponses, initialOpenThreadRequest, isCannedResponsesLoading, isTaskCannedResponsesEnabled, isTaskGroupAssigneesEnabled, isTaskRecurringParentEnabled, isTaskSnoozeEnabled, isTaskVisibilityEnabled, isZeniUser,
|
|
100
|
+
declare const TaskDetailPage: ({ taskDetailSelectorView, companyName, companyId, loggedInUser, analytics, isNewClicked, filesEndPoint, authParams, currentUrl, taskId, taskGroupList, taskGroupName, taskDetailFetchState, onSaveChangesToLocalStore, onSaveDetailClick, onArchiveTaskClick, onSnoozeTask, onUnsnoozeTask, onDismissClick, handleZeniLogoClick: _handleZeniLogoClick, updateFilesEntity, onDeleteFile, onEditFileName, onDeleteTaskClick, onReloadTaskDetailPage, tagListView, userGroupList, onCreateTagClick, onDeleteTagClick, cannedResponses, initialOpenThreadRequest, isCannedResponsesLoading, isTaskCannedResponsesEnabled, isTaskGroupAssigneesEnabled, isTaskRecurringParentEnabled, isTaskSnoozeEnabled, isTaskVisibilityEnabled, isZeniUser, onFetchCannedResponses, onManageTemplatesClick, recurringSourceTaskUrl, }: TaskDetailPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
105
101
|
export default TaskDetailPage;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ID, SnackbarMessageConfig, SortOrder, Tag, Task, TaskGroupWithTasksList, TaskListUIState, TaskListViewSortKey, UserGroup, UserListSelectorView } from '@zeniai/client-epic-state';
|
|
2
2
|
import { FormSectionProps } from '../formElements/common/formSection';
|
|
3
3
|
export declare const getTaskFieldName: (sectionId: string, taskId: string, fieldKey: string) => string;
|
|
4
4
|
export declare const isDuplicateGroupName: (newName: string, groupId: ID, existingTaskGroupNamesByGroupId: Record<ID, string>) => boolean;
|
|
@@ -10,7 +10,6 @@ export interface TaskListRowProps extends FormSectionProps {
|
|
|
10
10
|
selectedRowIds: ID[];
|
|
11
11
|
showGroupName: boolean;
|
|
12
12
|
showRenameTextField: boolean;
|
|
13
|
-
subtasksByParentId: Map<ID, TaskWithUserDetails[]>;
|
|
14
13
|
tagList: Tag[];
|
|
15
14
|
taskGroup: TaskGroupWithTasksList;
|
|
16
15
|
uiState: TaskListUIState;
|
|
@@ -18,7 +17,6 @@ export interface TaskListRowProps extends FormSectionProps {
|
|
|
18
17
|
userList: UserListSelectorView;
|
|
19
18
|
isTaskRecurringParentEnabled?: boolean;
|
|
20
19
|
isZeniUser?: boolean;
|
|
21
|
-
subTaskCreateStatus?: FetchState;
|
|
22
20
|
onAddNewTaskToTaskGroup: (taskGroupId: ID) => void;
|
|
23
21
|
onCollapseAll: () => void;
|
|
24
22
|
onCollapseToggle: (taskGroupId: ID) => void;
|
|
@@ -29,14 +27,11 @@ export interface TaskListRowProps extends FormSectionProps {
|
|
|
29
27
|
onExpandAll: () => void;
|
|
30
28
|
onParentTaskClick: (id: ID) => void;
|
|
31
29
|
onRenameClick: () => void;
|
|
32
|
-
onRowHeightChange: () => void;
|
|
33
30
|
onShowToast: (messageInfo: SnackbarMessageConfig) => void;
|
|
34
31
|
onTaskGroupNameClick: (id: ID) => void;
|
|
35
32
|
onTaskManagementRowClick: (id: ID) => void;
|
|
36
33
|
onTimeSpentUpdate: (task: Task, updates: Partial<Task>) => void;
|
|
37
|
-
onCreateSubtask?: (parentTaskId: ID, data: CreateSubTaskPayload) => void;
|
|
38
|
-
onSubtaskFormToggle?: () => void;
|
|
39
34
|
}
|
|
40
35
|
export declare const getTagLabel: (tagIds: ID[], tagList: Tag[]) => JSX.Element;
|
|
41
|
-
declare const TaskListRow: ({ taskGroup, userGroupList, tagList, sectionId, uiState, userList, showGroupName, showRenameTextField, isCollapsed, isSelectionAllowed, selectedRowIds, existingTaskGroupNamesByGroupId,
|
|
36
|
+
declare const TaskListRow: ({ taskGroup, userGroupList, tagList, sectionId, uiState, userList, showGroupName, showRenameTextField, isCollapsed, isSelectionAllowed, selectedRowIds, existingTaskGroupNamesByGroupId, onRenameClick, onDeleteTaskGroup, onExpandAll, onCollapseAll, onAddNewTaskToTaskGroup, onCollapseToggle, onTaskManagementRowClick, onColumnSortConfigChanged, onDragStart, onTimeSpentUpdate, onShowToast, onCreateTagClick, onTaskGroupNameClick, onParentTaskClick, isTaskRecurringParentEnabled, }: TaskListRowProps) => import("react/jsx-runtime").JSX.Element;
|
|
42
37
|
export default TaskListRow;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ID, SnackbarMessageConfig, Tag, Task, TaskGroupWithTasksList
|
|
1
|
+
import { ID, SnackbarMessageConfig, Tag, Task, TaskGroupWithTasksList } from '@zeniai/client-epic-state';
|
|
2
2
|
import { FormSectionProps } from '../formElements/common/formSection';
|
|
3
3
|
export interface TaskListRowSmallProps extends FormSectionProps {
|
|
4
4
|
existingTaskGroupNamesByGroupId: Record<ID, string>;
|
|
@@ -9,7 +9,6 @@ export interface TaskListRowSmallProps extends FormSectionProps {
|
|
|
9
9
|
showRenameTextField: boolean;
|
|
10
10
|
tagList: Tag[];
|
|
11
11
|
taskGroup: TaskGroupWithTasksList;
|
|
12
|
-
subtasksByParentId?: Map<ID, TaskWithUserDetails[]>;
|
|
13
12
|
onAddNewTaskToTaskGroup: (taskGroupId: ID) => void;
|
|
14
13
|
onCollapseAll: () => void;
|
|
15
14
|
onCollapseToggle: (taskGroupId: ID) => void;
|
|
@@ -19,6 +18,5 @@ export interface TaskListRowSmallProps extends FormSectionProps {
|
|
|
19
18
|
onShowToast: (messageInfo: SnackbarMessageConfig) => void;
|
|
20
19
|
onTaskManagementRowClick: (id: ID) => void;
|
|
21
20
|
onTimeSpentUpdate: (task: Task, updates: Partial<Task>) => void;
|
|
22
|
-
onRowHeightChange?: () => void;
|
|
23
21
|
}
|
|
24
22
|
export declare const TaskListRowSmall: ({ taskGroup, tagList, sectionId, showGroupName, showRenameTextField, isSelectionAllowed, isCollapsed, existingTaskGroupNamesByGroupId, onDeleteTaskGroup, onExpandAll, onCollapseAll, onAddNewTaskToTaskGroup, onCollapseToggle, onTaskManagementRowClick, onDragStart, onTimeSpentUpdate, onShowToast, }: TaskListRowSmallProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
import { ClientAnalytics } from '@zeniai/client-analytics';
|
|
2
|
-
import {
|
|
2
|
+
import { FetchState, ID, SnackbarMessageConfig, SortOrder, SpendManagementFiltersType, TagViewSelectorView, Task, TaskGroupKey, TaskListLocalData, TaskListSelectorView, TaskListTab, TaskListViewSortKey } from '@zeniai/client-epic-state';
|
|
3
|
+
import { UserMultiSelectFieldValue } from '../cockpit/common/userMultiSelect/UserMultiSelectField';
|
|
4
|
+
import { ZeniDatePickerValue } from '../common/zeniDatePicker/ZeniDatePickerField';
|
|
5
|
+
import { MultiSelectFieldValue } from '../formElements/creatableMultiSelectField/CreatableMultiSelectField';
|
|
6
|
+
import { SingleSelectPickerFieldValue } from '../formElements/singleSelectPickerField/SingleSelectPickerField';
|
|
7
|
+
import { assigneeKey, dueDateKey, groupDataKey, groupNameKey, priorityKey, selectedIdsKey, statusKey, tagKey, taskDataKey, taskManagementTableSectionId, timeSpentKey } from './taskManagementFormConstants';
|
|
8
|
+
interface GroupData {
|
|
9
|
+
[groupNameKey]: string;
|
|
10
|
+
[selectedIdsKey]: ID[];
|
|
11
|
+
}
|
|
12
|
+
interface TaskData {
|
|
13
|
+
[assigneeKey]: UserMultiSelectFieldValue;
|
|
14
|
+
[dueDateKey]: ZeniDatePickerValue;
|
|
15
|
+
[priorityKey]: SingleSelectPickerFieldValue;
|
|
16
|
+
[statusKey]: SingleSelectPickerFieldValue;
|
|
17
|
+
[tagKey]: MultiSelectFieldValue;
|
|
18
|
+
[timeSpentKey]: string;
|
|
19
|
+
}
|
|
20
|
+
type TasksFormData = Record<ID, TaskData>;
|
|
21
|
+
type GroupFormData = Record<ID, GroupData>;
|
|
22
|
+
interface TaskManagementTableSectionFormData {
|
|
23
|
+
[groupDataKey]: GroupFormData;
|
|
24
|
+
[taskDataKey]: TasksFormData;
|
|
25
|
+
}
|
|
26
|
+
export interface FormData {
|
|
27
|
+
[taskManagementTableSectionId]: TaskManagementTableSectionFormData;
|
|
28
|
+
}
|
|
3
29
|
export declare const uniqueFormName: (sectionId: ID) => `${string}_form`;
|
|
4
30
|
export interface TaskManagementPageProps {
|
|
5
31
|
isTaskTemplatesEnabled: boolean;
|
|
@@ -13,7 +39,6 @@ export interface TaskManagementPageProps {
|
|
|
13
39
|
isTaskGroupAssigneesEnabled?: boolean;
|
|
14
40
|
isTaskRecurringParentEnabled?: boolean;
|
|
15
41
|
isZeniUser?: boolean;
|
|
16
|
-
subTaskCreateStatus?: FetchState;
|
|
17
42
|
taskListFetchState?: FetchState;
|
|
18
43
|
assignGroupToTasks: (taskGroupId: ID) => void;
|
|
19
44
|
bulkUpdateTasks: (taskIds: ID[], updates: Partial<Task>) => void;
|
|
@@ -44,7 +69,6 @@ export interface TaskManagementPageProps {
|
|
|
44
69
|
updateTask: (task: Task, updates: Partial<Task>) => void;
|
|
45
70
|
onAskAiCfoClick?: () => void;
|
|
46
71
|
onQuickResponsesClick?: () => void;
|
|
47
|
-
onSubtaskCreation?: (parentTaskId: ID, data: CreateSubTaskPayload) => void;
|
|
48
72
|
}
|
|
49
|
-
declare const TaskManagementPage: ({ taskListView, tagListView, isTaskTemplatesEnabled, taskListFetchState, onCreateTagClick, updateTask, onDragNDrop, onDeleteTaskGroup, updateLocalData, onTaskManagementRowClick, onParentTaskClick, onReloadTasks, onColumnSortConfigChanged, onSearchTextChanged, onTabChange, onBackClick, bulkUpdateTasks, onNewTaskClick, onFiltersChange, resetLocalData, handleCreateGroup, assignGroupToTasks, onAddNewTaskToTaskGroup, onGroupByFilterChange, onTaskGroupRename, analytics, onTimeSpentUpdate, onShowToast, handleGroupTemplateClick, handleGroupTemplateTaskClick, handleNewTaskInitialization, onTaskGroupNameClick, isAiCfoAccessEnabled, isZeniUser, isTaskBulkResolutionEnabled, isTaskCannedResponsesEnabled, isTaskCategorizationEnabled, isTaskGroupAssigneesEnabled, isTaskRecurringParentEnabled, onAskAiCfoClick, onQuickResponsesClick,
|
|
73
|
+
declare const TaskManagementPage: ({ taskListView, tagListView, isTaskTemplatesEnabled, taskListFetchState, onCreateTagClick, updateTask, onDragNDrop, onDeleteTaskGroup, updateLocalData, onTaskManagementRowClick, onParentTaskClick, onReloadTasks, onColumnSortConfigChanged, onSearchTextChanged, onTabChange, onBackClick, bulkUpdateTasks, onNewTaskClick, onFiltersChange, resetLocalData, handleCreateGroup, assignGroupToTasks, onAddNewTaskToTaskGroup, onGroupByFilterChange, onTaskGroupRename, analytics, onTimeSpentUpdate, onShowToast, handleGroupTemplateClick, handleGroupTemplateTaskClick, handleNewTaskInitialization, onTaskGroupNameClick, isAiCfoAccessEnabled, isZeniUser, isTaskBulkResolutionEnabled, isTaskCannedResponsesEnabled, isTaskCategorizationEnabled, isTaskGroupAssigneesEnabled, isTaskRecurringParentEnabled, onAskAiCfoClick, onQuickResponsesClick, }: TaskManagementPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
74
|
export default TaskManagementPage;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export declare const taskManagementPage = "taskManagementPage";
|
|
2
2
|
export declare const taskManagementTableSectionId = "taskManagementTable";
|
|
3
|
-
export declare const newSubtaskSectionId = "newSubtaskSection";
|
|
4
3
|
export declare const newGroupField = "newGroup";
|
|
5
4
|
export declare const groupDataKey = "groupData";
|
|
6
5
|
export declare const taskDataKey = "taskData";
|
|
@@ -2,7 +2,6 @@ import { SortOrder, TaskListViewSortKey } from '@zeniai/client-epic-state';
|
|
|
2
2
|
import { ResponsiveSized } from '../../context/windowSizeProvider';
|
|
3
3
|
export interface TaskListHeaderItemData {
|
|
4
4
|
key: TaskListViewSortKey;
|
|
5
|
-
minWidth: string;
|
|
6
5
|
sortOrder: SortOrder;
|
|
7
6
|
value: string;
|
|
8
7
|
width: ResponsiveSized;
|