braid-ui 1.0.41 → 1.0.43
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/css/braid-ui.css +17 -0
- package/dist/css/braid-ui.min.css +1 -1
- package/dist/index.cjs +1838 -266
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -7
- package/dist/index.d.ts +17 -7
- package/dist/index.js +1837 -269
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React15 from 'react';
|
|
2
|
-
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
2
|
+
import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Plus, MessageSquare, Upload, FileText, Download, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Zap, Box, Settings, BarChart3, Key, ChevronLeft, AlertTriangle, XCircle, CheckCircle,
|
|
7
|
+
import { ChevronDown, ChevronUp, Check, X, PanelLeft, Edit, Home, Globe, CreditCard, Building, MoreVertical, Minus, TrendingDown, TrendingUp, ChevronRight, Eye, Trash2, Plus, MessageSquare, Upload, FileText, Download, Copy, LayoutDashboard, Bell, Briefcase, FileCheck, Receipt, ArrowLeftRight, Users, Building2, Shield, AlertCircle, RefreshCw, Landmark, Search, Repeat, Zap, Box, Settings, BarChart3, Key, ChevronLeft, AlertTriangle, Clock, XCircle, CheckCircle, Ban, Circle, Wallet, Filter, User, Loader2, ArrowDownRight, ArrowUpRight, CheckCircle2, ArrowLeft, StickyNote, FileUp, RotateCcw, Send, PlayCircle, UserPlus, ChevronsUpDown, ArrowRightLeft, UserCheck, CalendarIcon, Package, File, FileJson, DollarSign } from 'lucide-react';
|
|
8
8
|
import { createPortal } from 'react-dom';
|
|
9
9
|
import { Slot } from '@radix-ui/react-slot';
|
|
10
10
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
@@ -18,7 +18,7 @@ import { z } from 'zod';
|
|
|
18
18
|
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@radix-ui/react-collapsible';
|
|
19
19
|
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
20
20
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
21
|
-
import {
|
|
21
|
+
import { format, parseISO } from 'date-fns';
|
|
22
22
|
import { DayPicker } from 'react-day-picker';
|
|
23
23
|
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
24
24
|
import { Toaster as Toaster$1, toast as toast$1 } from 'sonner';
|
|
@@ -524,8 +524,8 @@ var reducer = (state, action) => {
|
|
|
524
524
|
if (toastId) {
|
|
525
525
|
addToRemoveQueue(toastId);
|
|
526
526
|
} else {
|
|
527
|
-
state.toasts.forEach((
|
|
528
|
-
addToRemoveQueue(
|
|
527
|
+
state.toasts.forEach((toast6) => {
|
|
528
|
+
addToRemoveQueue(toast6.id);
|
|
529
529
|
});
|
|
530
530
|
}
|
|
531
531
|
return {
|
|
@@ -3983,6 +3983,21 @@ var statusConfig = {
|
|
|
3983
3983
|
variant: "secondary",
|
|
3984
3984
|
label: "Cancelled",
|
|
3985
3985
|
icon: XCircle
|
|
3986
|
+
},
|
|
3987
|
+
DELETED: {
|
|
3988
|
+
variant: "inactive",
|
|
3989
|
+
label: "Deleted",
|
|
3990
|
+
icon: XCircle
|
|
3991
|
+
},
|
|
3992
|
+
NEEDS_OFAC: {
|
|
3993
|
+
variant: "pending",
|
|
3994
|
+
label: "Needs OFAC",
|
|
3995
|
+
icon: AlertTriangle
|
|
3996
|
+
},
|
|
3997
|
+
PENDING_UNBLOCK: {
|
|
3998
|
+
variant: "pending",
|
|
3999
|
+
label: "Pending Unblock",
|
|
4000
|
+
icon: Clock
|
|
3986
4001
|
}
|
|
3987
4002
|
};
|
|
3988
4003
|
var StatusBadge = ({ status, className }) => {
|
|
@@ -4427,7 +4442,7 @@ function DatePicker({
|
|
|
4427
4442
|
) })
|
|
4428
4443
|
] });
|
|
4429
4444
|
if (label) {
|
|
4430
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-
|
|
4445
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", wrapperClassName), children: [
|
|
4431
4446
|
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: label }),
|
|
4432
4447
|
picker
|
|
4433
4448
|
] });
|
|
@@ -6189,9 +6204,10 @@ var CounterpartyDetailView = ({
|
|
|
6189
6204
|
value: currentStatus,
|
|
6190
6205
|
options: [
|
|
6191
6206
|
{ value: "ACTIVE", label: "Active" },
|
|
6192
|
-
{ value: "
|
|
6193
|
-
{ value: "
|
|
6194
|
-
{ value: "
|
|
6207
|
+
{ value: "BLOCKED", label: "Blocked" },
|
|
6208
|
+
{ value: "DELETED", label: "Deleted" },
|
|
6209
|
+
{ value: "NEEDS_OFAC", label: "Needs OFAC" },
|
|
6210
|
+
{ value: "PENDING_UNBLOCK", label: "Pending Unblock" }
|
|
6195
6211
|
],
|
|
6196
6212
|
onChange: onStatusChange,
|
|
6197
6213
|
renderValue: (value) => /* @__PURE__ */ jsx(StatusBadge, { status: value }),
|
|
@@ -6939,20 +6955,18 @@ var Label = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
|
6939
6955
|
}
|
|
6940
6956
|
));
|
|
6941
6957
|
Label.displayName = LabelPrimitive.Root.displayName;
|
|
6942
|
-
var CounterpartyBasicInfo = ({
|
|
6943
|
-
|
|
6944
|
-
|
|
6945
|
-
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
const updatedData = { ...formData, [field]: value };
|
|
6955
|
-
setFormData(updatedData);
|
|
6958
|
+
var CounterpartyBasicInfo = ({ value = {
|
|
6959
|
+
name: "",
|
|
6960
|
+
type: "business",
|
|
6961
|
+
email: "",
|
|
6962
|
+
phone: "",
|
|
6963
|
+
dateOfBirth: "",
|
|
6964
|
+
idNumber: "",
|
|
6965
|
+
idType: "product_id",
|
|
6966
|
+
idValue: ""
|
|
6967
|
+
}, onDataChange }) => {
|
|
6968
|
+
const handleInputChange = (field, newValue) => {
|
|
6969
|
+
const updatedData = { ...value, [field]: newValue };
|
|
6956
6970
|
onDataChange?.(updatedData);
|
|
6957
6971
|
};
|
|
6958
6972
|
const handleTypeChange = (type) => {
|
|
@@ -6964,7 +6978,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
6964
6978
|
EnhancedInput,
|
|
6965
6979
|
{
|
|
6966
6980
|
label: "Counterparty Name",
|
|
6967
|
-
value:
|
|
6981
|
+
value: value.name,
|
|
6968
6982
|
onChange: (e) => handleInputChange("name", e.target.value),
|
|
6969
6983
|
placeholder: "Enter counterparty name",
|
|
6970
6984
|
required: true
|
|
@@ -6980,7 +6994,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
6980
6994
|
type: "radio",
|
|
6981
6995
|
name: "counterpartyType",
|
|
6982
6996
|
value: "business",
|
|
6983
|
-
checked:
|
|
6997
|
+
checked: value.type === "business",
|
|
6984
6998
|
onChange: () => handleTypeChange("business"),
|
|
6985
6999
|
className: "w-4 h-4 text-primary border-border focus:ring-primary focus:ring-2"
|
|
6986
7000
|
}
|
|
@@ -6994,7 +7008,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
6994
7008
|
type: "radio",
|
|
6995
7009
|
name: "counterpartyType",
|
|
6996
7010
|
value: "individual",
|
|
6997
|
-
checked:
|
|
7011
|
+
checked: value.type === "individual",
|
|
6998
7012
|
onChange: () => handleTypeChange("individual"),
|
|
6999
7013
|
className: "w-4 h-4 text-primary border-border focus:ring-primary focus:ring-2"
|
|
7000
7014
|
}
|
|
@@ -7007,8 +7021,8 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7007
7021
|
EnhancedSelect,
|
|
7008
7022
|
{
|
|
7009
7023
|
label: "Associated with",
|
|
7010
|
-
value:
|
|
7011
|
-
onValueChange: (
|
|
7024
|
+
value: value.idType,
|
|
7025
|
+
onValueChange: (val) => handleInputChange("idType", val),
|
|
7012
7026
|
options: [
|
|
7013
7027
|
{ value: "product_id", label: "Product ID" },
|
|
7014
7028
|
{ value: "business_id", label: "Business ID" },
|
|
@@ -7020,10 +7034,10 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7020
7034
|
/* @__PURE__ */ jsx(
|
|
7021
7035
|
EnhancedInput,
|
|
7022
7036
|
{
|
|
7023
|
-
label:
|
|
7024
|
-
value:
|
|
7037
|
+
label: value.idType === "product_id" ? "Product ID" : value.idType === "business_id" ? "Business ID" : value.idType === "individual_id" ? "Individual ID" : "Account Number",
|
|
7038
|
+
value: value.idValue,
|
|
7025
7039
|
onChange: (e) => handleInputChange("idValue", e.target.value),
|
|
7026
|
-
placeholder: `Enter ${
|
|
7040
|
+
placeholder: `Enter ${value.idType === "product_id" ? "product ID" : value.idType === "business_id" ? "business ID" : value.idType === "individual_id" ? "individual ID" : "account number"}`,
|
|
7027
7041
|
required: true
|
|
7028
7042
|
}
|
|
7029
7043
|
)
|
|
@@ -7034,7 +7048,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7034
7048
|
{
|
|
7035
7049
|
label: "Email",
|
|
7036
7050
|
type: "email",
|
|
7037
|
-
value:
|
|
7051
|
+
value: value.email,
|
|
7038
7052
|
onChange: (e) => handleInputChange("email", e.target.value),
|
|
7039
7053
|
placeholder: "Enter email address"
|
|
7040
7054
|
}
|
|
@@ -7044,7 +7058,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7044
7058
|
{
|
|
7045
7059
|
label: "Phone Number",
|
|
7046
7060
|
type: "tel",
|
|
7047
|
-
value:
|
|
7061
|
+
value: value.phone,
|
|
7048
7062
|
onChange: (e) => handleInputChange("phone", e.target.value),
|
|
7049
7063
|
placeholder: "Enter phone number"
|
|
7050
7064
|
}
|
|
@@ -7054,7 +7068,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7054
7068
|
{
|
|
7055
7069
|
label: "Date of Birth",
|
|
7056
7070
|
type: "date",
|
|
7057
|
-
value:
|
|
7071
|
+
value: value.dateOfBirth,
|
|
7058
7072
|
onChange: (e) => handleInputChange("dateOfBirth", e.target.value),
|
|
7059
7073
|
placeholder: "Select date of birth"
|
|
7060
7074
|
}
|
|
@@ -7063,7 +7077,7 @@ var CounterpartyBasicInfo = ({ onDataChange }) => {
|
|
|
7063
7077
|
EnhancedInput,
|
|
7064
7078
|
{
|
|
7065
7079
|
label: "ID Number",
|
|
7066
|
-
value:
|
|
7080
|
+
value: value.idNumber,
|
|
7067
7081
|
onChange: (e) => handleInputChange("idNumber", e.target.value),
|
|
7068
7082
|
placeholder: "Enter ID number"
|
|
7069
7083
|
}
|
|
@@ -8371,7 +8385,8 @@ var DetailPageLayout = ({
|
|
|
8371
8385
|
description,
|
|
8372
8386
|
cards,
|
|
8373
8387
|
actions,
|
|
8374
|
-
initialEditingState = {}
|
|
8388
|
+
initialEditingState = {},
|
|
8389
|
+
headerContent
|
|
8375
8390
|
}) => {
|
|
8376
8391
|
const [editingCards, setEditingCards] = useState(
|
|
8377
8392
|
initialEditingState
|
|
@@ -8390,6 +8405,7 @@ var DetailPageLayout = ({
|
|
|
8390
8405
|
{
|
|
8391
8406
|
title,
|
|
8392
8407
|
description,
|
|
8408
|
+
headerContent,
|
|
8393
8409
|
actions: actions?.map((action) => ({
|
|
8394
8410
|
label: action.label,
|
|
8395
8411
|
variant: action.variant || "default",
|
|
@@ -11588,9 +11604,66 @@ var CounterpartyDetail = () => {
|
|
|
11588
11604
|
);
|
|
11589
11605
|
};
|
|
11590
11606
|
var CounterpartyDetail_default = CounterpartyDetail;
|
|
11607
|
+
var CreateCounterpartyView = ({
|
|
11608
|
+
counterpartyData,
|
|
11609
|
+
paymentMethods,
|
|
11610
|
+
onPaymentMethodsChange,
|
|
11611
|
+
onBasicInfoChange,
|
|
11612
|
+
onCancel,
|
|
11613
|
+
onSubmit
|
|
11614
|
+
}) => {
|
|
11615
|
+
return /* @__PURE__ */ jsx(
|
|
11616
|
+
PageLayout,
|
|
11617
|
+
{
|
|
11618
|
+
title: "Create Counterparty",
|
|
11619
|
+
description: "Create a new counterparty with all required information",
|
|
11620
|
+
actions: [
|
|
11621
|
+
{ label: "Cancel", variant: "outline", onClick: onCancel },
|
|
11622
|
+
{ label: "Create Counterparty", variant: "default", onClick: onSubmit }
|
|
11623
|
+
],
|
|
11624
|
+
children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
11625
|
+
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11626
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Basic Information" }) }),
|
|
11627
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(CounterpartyBasicInfo, { value: counterpartyData, onDataChange: onBasicInfoChange }) })
|
|
11628
|
+
] }),
|
|
11629
|
+
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11630
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { children: [
|
|
11631
|
+
"Address",
|
|
11632
|
+
paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
|
|
11633
|
+
] }) }),
|
|
11634
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
11635
|
+
paymentMethods.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Optional for ACH payments, required for wire transfers" }),
|
|
11636
|
+
paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Required because you have wire payment methods" }),
|
|
11637
|
+
/* @__PURE__ */ jsx(
|
|
11638
|
+
AddressForm,
|
|
11639
|
+
{
|
|
11640
|
+
title: "",
|
|
11641
|
+
description: "",
|
|
11642
|
+
showApartment: true
|
|
11643
|
+
}
|
|
11644
|
+
)
|
|
11645
|
+
] })
|
|
11646
|
+
] }),
|
|
11647
|
+
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11648
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Payment Configuration" }) }),
|
|
11649
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(PaymentInformationSection, { onPaymentMethodsChange }) })
|
|
11650
|
+
] })
|
|
11651
|
+
] })
|
|
11652
|
+
}
|
|
11653
|
+
);
|
|
11654
|
+
};
|
|
11591
11655
|
var CreateCounterparty = () => {
|
|
11592
11656
|
const navigate = useNavigate();
|
|
11593
|
-
const [counterpartyData, setCounterpartyData] = useState(
|
|
11657
|
+
const [counterpartyData, setCounterpartyData] = useState({
|
|
11658
|
+
name: "",
|
|
11659
|
+
type: "business",
|
|
11660
|
+
email: "",
|
|
11661
|
+
phone: "",
|
|
11662
|
+
dateOfBirth: "",
|
|
11663
|
+
idNumber: "",
|
|
11664
|
+
idType: "product_id",
|
|
11665
|
+
idValue: ""
|
|
11666
|
+
});
|
|
11594
11667
|
const [paymentMethods, setPaymentMethods] = useState([]);
|
|
11595
11668
|
const handlePaymentMethodsChange = (methods) => {
|
|
11596
11669
|
setPaymentMethods(methods);
|
|
@@ -11598,11 +11671,11 @@ var CreateCounterparty = () => {
|
|
|
11598
11671
|
const handleBasicInfoChange = (data) => {
|
|
11599
11672
|
setCounterpartyData(data);
|
|
11600
11673
|
};
|
|
11601
|
-
const counterpartyType = counterpartyData?.type || "";
|
|
11602
11674
|
const handleCancel = () => {
|
|
11603
11675
|
navigate("/counterparty");
|
|
11604
11676
|
};
|
|
11605
11677
|
const handleSubmit = () => {
|
|
11678
|
+
const counterpartyType = counterpartyData?.type || "";
|
|
11606
11679
|
if (!counterpartyType) {
|
|
11607
11680
|
toast({
|
|
11608
11681
|
title: "Error",
|
|
@@ -11635,42 +11708,14 @@ var CreateCounterparty = () => {
|
|
|
11635
11708
|
}, 1e3);
|
|
11636
11709
|
};
|
|
11637
11710
|
return /* @__PURE__ */ jsx(
|
|
11638
|
-
|
|
11711
|
+
CreateCounterpartyView,
|
|
11639
11712
|
{
|
|
11640
|
-
|
|
11641
|
-
|
|
11642
|
-
|
|
11643
|
-
|
|
11644
|
-
|
|
11645
|
-
|
|
11646
|
-
children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
11647
|
-
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11648
|
-
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Basic Information" }) }),
|
|
11649
|
-
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(CounterpartyBasicInfo, { onDataChange: handleBasicInfoChange }) })
|
|
11650
|
-
] }),
|
|
11651
|
-
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11652
|
-
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { children: [
|
|
11653
|
-
"Address",
|
|
11654
|
-
paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("span", { className: "text-destructive ml-1", children: "*" })
|
|
11655
|
-
] }) }),
|
|
11656
|
-
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
11657
|
-
paymentMethods.length === 0 && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Optional for ACH payments, required for wire transfers" }),
|
|
11658
|
-
paymentMethods.some((m) => m.type === "wire") && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: "Required because you have wire payment methods" }),
|
|
11659
|
-
/* @__PURE__ */ jsx(
|
|
11660
|
-
AddressForm,
|
|
11661
|
-
{
|
|
11662
|
-
title: "",
|
|
11663
|
-
description: "",
|
|
11664
|
-
showApartment: true
|
|
11665
|
-
}
|
|
11666
|
-
)
|
|
11667
|
-
] })
|
|
11668
|
-
] }),
|
|
11669
|
-
/* @__PURE__ */ jsxs(Card, { children: [
|
|
11670
|
-
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Payment Configuration" }) }),
|
|
11671
|
-
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(PaymentInformationSection, { onPaymentMethodsChange: handlePaymentMethodsChange }) })
|
|
11672
|
-
] })
|
|
11673
|
-
] })
|
|
11713
|
+
counterpartyData,
|
|
11714
|
+
paymentMethods,
|
|
11715
|
+
onPaymentMethodsChange: handlePaymentMethodsChange,
|
|
11716
|
+
onBasicInfoChange: handleBasicInfoChange,
|
|
11717
|
+
onCancel: handleCancel,
|
|
11718
|
+
onSubmit: handleSubmit
|
|
11674
11719
|
}
|
|
11675
11720
|
);
|
|
11676
11721
|
};
|
|
@@ -14221,7 +14266,7 @@ var TransactionDetail = () => {
|
|
|
14221
14266
|
/* @__PURE__ */ jsx(Button, { onClick: () => navigate("/transactions/history"), children: "Back to Transaction History" })
|
|
14222
14267
|
] }) });
|
|
14223
14268
|
}
|
|
14224
|
-
const
|
|
14269
|
+
const getStatusVariant3 = (status) => {
|
|
14225
14270
|
switch (status) {
|
|
14226
14271
|
case "POSTED":
|
|
14227
14272
|
return "success";
|
|
@@ -14277,7 +14322,7 @@ var TransactionDetail = () => {
|
|
|
14277
14322
|
isInbound: transaction.isInbound
|
|
14278
14323
|
}
|
|
14279
14324
|
),
|
|
14280
|
-
/* @__PURE__ */ jsx(Badge, { variant:
|
|
14325
|
+
/* @__PURE__ */ jsx(Badge, { variant: getStatusVariant3(transaction.status), children: transaction.status }),
|
|
14281
14326
|
/* @__PURE__ */ jsx(Badge, { variant: getProcessingStatusVariant(transaction.processingStatus), children: transaction.processingStatus })
|
|
14282
14327
|
] }),
|
|
14283
14328
|
maxWidth: "full",
|
|
@@ -14376,22 +14421,22 @@ function UIKit() {
|
|
|
14376
14421
|
] })
|
|
14377
14422
|
] }) }) });
|
|
14378
14423
|
}
|
|
14379
|
-
function
|
|
14424
|
+
function VelocityLimitFiltersSheet({
|
|
14380
14425
|
filters,
|
|
14381
14426
|
onFilterChange,
|
|
14382
14427
|
onResetFilters
|
|
14383
14428
|
}) {
|
|
14384
|
-
const hasActiveFilters = filters.status !== "" || filters.
|
|
14429
|
+
const hasActiveFilters = filters.accountNumber !== "" || filters.counterpartyId !== "" || filters.productId !== "" || filters.programId !== "" || filters.limitName !== "" || filters.limitType !== "" || filters.status !== "" || filters.aggregationLevel !== "" || filters.action !== "" || filters.transactionType !== "" || filters.transactionGroup !== "";
|
|
14385
14430
|
return /* @__PURE__ */ jsxs(Sheet, { children: [
|
|
14386
14431
|
/* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "outline", children: [
|
|
14387
14432
|
/* @__PURE__ */ jsx(Filter, { className: "mr-2 h-4 w-4" }),
|
|
14388
14433
|
"Filters",
|
|
14389
|
-
hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "ml-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground", children:
|
|
14434
|
+
hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "ml-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground", children: Object.values(filters).filter((v) => v !== "").length })
|
|
14390
14435
|
] }) }),
|
|
14391
14436
|
/* @__PURE__ */ jsxs(SheetContent, { className: "w-full sm:max-w-md overflow-y-auto", children: [
|
|
14392
14437
|
/* @__PURE__ */ jsxs(SheetHeader, { children: [
|
|
14393
14438
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
14394
|
-
/* @__PURE__ */ jsx(SheetTitle, { children: "Filter
|
|
14439
|
+
/* @__PURE__ */ jsx(SheetTitle, { children: "Filter Velocity Limits" }),
|
|
14395
14440
|
hasActiveFilters && /* @__PURE__ */ jsxs(
|
|
14396
14441
|
Button,
|
|
14397
14442
|
{
|
|
@@ -14406,20 +14451,78 @@ function OFACFiltersSheet({
|
|
|
14406
14451
|
}
|
|
14407
14452
|
)
|
|
14408
14453
|
] }),
|
|
14409
|
-
/* @__PURE__ */ jsx(SheetDescription, { children: "Filter
|
|
14454
|
+
/* @__PURE__ */ jsx(SheetDescription, { children: "Filter velocity limits by account, limit details, and transaction settings" })
|
|
14410
14455
|
] }),
|
|
14411
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
14456
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4 mt-6", children: [
|
|
14457
|
+
/* @__PURE__ */ jsx(
|
|
14458
|
+
EnhancedInput,
|
|
14459
|
+
{
|
|
14460
|
+
label: "Account Number",
|
|
14461
|
+
placeholder: "Enter account number",
|
|
14462
|
+
value: filters.accountNumber,
|
|
14463
|
+
onChange: (e) => onFilterChange("accountNumber", e.target.value)
|
|
14464
|
+
}
|
|
14465
|
+
),
|
|
14466
|
+
/* @__PURE__ */ jsx(
|
|
14467
|
+
EnhancedInput,
|
|
14468
|
+
{
|
|
14469
|
+
label: "Counterparty ID",
|
|
14470
|
+
placeholder: "Enter counterparty ID",
|
|
14471
|
+
value: filters.counterpartyId,
|
|
14472
|
+
onChange: (e) => onFilterChange("counterpartyId", e.target.value)
|
|
14473
|
+
}
|
|
14474
|
+
),
|
|
14475
|
+
/* @__PURE__ */ jsx(
|
|
14476
|
+
EnhancedInput,
|
|
14477
|
+
{
|
|
14478
|
+
label: "Product ID",
|
|
14479
|
+
placeholder: "Enter product ID",
|
|
14480
|
+
value: filters.productId,
|
|
14481
|
+
onChange: (e) => onFilterChange("productId", e.target.value)
|
|
14482
|
+
}
|
|
14483
|
+
),
|
|
14484
|
+
/* @__PURE__ */ jsx(
|
|
14485
|
+
EnhancedInput,
|
|
14486
|
+
{
|
|
14487
|
+
label: "Program ID",
|
|
14488
|
+
placeholder: "Enter program ID",
|
|
14489
|
+
value: filters.programId,
|
|
14490
|
+
onChange: (e) => onFilterChange("programId", e.target.value)
|
|
14491
|
+
}
|
|
14492
|
+
),
|
|
14493
|
+
/* @__PURE__ */ jsx(
|
|
14494
|
+
EnhancedInput,
|
|
14495
|
+
{
|
|
14496
|
+
label: "Limit Name",
|
|
14497
|
+
placeholder: "Enter limit name",
|
|
14498
|
+
value: filters.limitName,
|
|
14499
|
+
onChange: (e) => onFilterChange("limitName", e.target.value)
|
|
14500
|
+
}
|
|
14501
|
+
),
|
|
14502
|
+
/* @__PURE__ */ jsx(
|
|
14503
|
+
EnhancedSelect,
|
|
14504
|
+
{
|
|
14505
|
+
label: "Limit Type",
|
|
14506
|
+
placeholder: "Select limit type",
|
|
14507
|
+
options: [
|
|
14508
|
+
{ value: "all", label: "All types" },
|
|
14509
|
+
{ value: "AMOUNT", label: "Amount" },
|
|
14510
|
+
{ value: "COUNT", label: "Count" }
|
|
14511
|
+
],
|
|
14512
|
+
value: filters.limitType || "all",
|
|
14513
|
+
onValueChange: (value) => onFilterChange("limitType", value === "all" ? "" : value)
|
|
14514
|
+
}
|
|
14515
|
+
),
|
|
14412
14516
|
/* @__PURE__ */ jsx(
|
|
14413
14517
|
EnhancedSelect,
|
|
14414
14518
|
{
|
|
14415
14519
|
label: "Status",
|
|
14416
|
-
placeholder: "
|
|
14520
|
+
placeholder: "Select status",
|
|
14417
14521
|
options: [
|
|
14418
14522
|
{ value: "all", label: "All statuses" },
|
|
14419
|
-
{ value: "
|
|
14420
|
-
{ value: "
|
|
14421
|
-
{ value: "
|
|
14422
|
-
{ value: "CONFIRMED", label: "Confirmed" }
|
|
14523
|
+
{ value: "ACTIVE", label: "Active" },
|
|
14524
|
+
{ value: "INACTIVE", label: "Inactive" },
|
|
14525
|
+
{ value: "DELETED", label: "Deleted" }
|
|
14423
14526
|
],
|
|
14424
14527
|
value: filters.status || "all",
|
|
14425
14528
|
onValueChange: (value) => onFilterChange("status", value === "all" ? "" : value)
|
|
@@ -14428,180 +14531,246 @@ function OFACFiltersSheet({
|
|
|
14428
14531
|
/* @__PURE__ */ jsx(
|
|
14429
14532
|
EnhancedSelect,
|
|
14430
14533
|
{
|
|
14431
|
-
label: "
|
|
14432
|
-
placeholder: "
|
|
14534
|
+
label: "Aggregation Level",
|
|
14535
|
+
placeholder: "Select aggregation level",
|
|
14433
14536
|
options: [
|
|
14434
|
-
{ value: "all", label: "All
|
|
14435
|
-
{ value: "
|
|
14436
|
-
{ value: "
|
|
14437
|
-
{ value: "
|
|
14537
|
+
{ value: "all", label: "All levels" },
|
|
14538
|
+
{ value: "ACCOUNT", label: "Account" },
|
|
14539
|
+
{ value: "PROGRAM", label: "Program" },
|
|
14540
|
+
{ value: "PRODUCT", label: "Product" }
|
|
14438
14541
|
],
|
|
14439
|
-
value: filters.
|
|
14440
|
-
onValueChange: (value) => onFilterChange("
|
|
14542
|
+
value: filters.aggregationLevel || "all",
|
|
14543
|
+
onValueChange: (value) => onFilterChange("aggregationLevel", value === "all" ? "" : value)
|
|
14441
14544
|
}
|
|
14442
14545
|
),
|
|
14443
14546
|
/* @__PURE__ */ jsx(
|
|
14444
|
-
|
|
14547
|
+
EnhancedSelect,
|
|
14445
14548
|
{
|
|
14446
|
-
|
|
14447
|
-
|
|
14448
|
-
|
|
14449
|
-
|
|
14549
|
+
label: "Action",
|
|
14550
|
+
placeholder: "Select action",
|
|
14551
|
+
options: [
|
|
14552
|
+
{ value: "all", label: "All actions" },
|
|
14553
|
+
{ value: "DECLINE", label: "Decline" },
|
|
14554
|
+
{ value: "FLAG", label: "Flag" }
|
|
14555
|
+
],
|
|
14556
|
+
value: filters.action || "all",
|
|
14557
|
+
onValueChange: (value) => onFilterChange("action", value === "all" ? "" : value)
|
|
14450
14558
|
}
|
|
14451
14559
|
),
|
|
14452
14560
|
/* @__PURE__ */ jsx(
|
|
14453
|
-
|
|
14561
|
+
EnhancedSelect,
|
|
14454
14562
|
{
|
|
14455
|
-
|
|
14456
|
-
|
|
14457
|
-
|
|
14458
|
-
|
|
14459
|
-
|
|
14563
|
+
label: "Transaction Type",
|
|
14564
|
+
placeholder: "Select transaction type",
|
|
14565
|
+
options: [
|
|
14566
|
+
{ value: "all", label: "All types" },
|
|
14567
|
+
{ value: "WIRE", label: "Wire" },
|
|
14568
|
+
{ value: "ACH", label: "ACH" },
|
|
14569
|
+
{ value: "CARD", label: "Card" }
|
|
14570
|
+
],
|
|
14571
|
+
value: filters.transactionType || "all",
|
|
14572
|
+
onValueChange: (value) => onFilterChange("transactionType", value === "all" ? "" : value)
|
|
14460
14573
|
}
|
|
14461
|
-
)
|
|
14574
|
+
),
|
|
14575
|
+
/* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
|
|
14576
|
+
EnhancedSelect,
|
|
14577
|
+
{
|
|
14578
|
+
label: "Transaction Group",
|
|
14579
|
+
placeholder: "Select transaction group",
|
|
14580
|
+
options: [
|
|
14581
|
+
{ value: "all", label: "All groups" },
|
|
14582
|
+
{ value: "INBOUND", label: "Inbound" },
|
|
14583
|
+
{ value: "OUTBOUND", label: "Outbound" }
|
|
14584
|
+
],
|
|
14585
|
+
value: filters.transactionGroup || "all",
|
|
14586
|
+
onValueChange: (value) => onFilterChange("transactionGroup", value === "all" ? "" : value)
|
|
14587
|
+
}
|
|
14588
|
+
) })
|
|
14462
14589
|
] })
|
|
14463
14590
|
] })
|
|
14464
14591
|
] });
|
|
14465
14592
|
}
|
|
14466
14593
|
|
|
14467
|
-
// src/lib/mock-data/
|
|
14468
|
-
var
|
|
14469
|
-
{
|
|
14470
|
-
id: "
|
|
14471
|
-
created: "
|
|
14472
|
-
|
|
14473
|
-
|
|
14474
|
-
|
|
14475
|
-
|
|
14476
|
-
|
|
14477
|
-
|
|
14478
|
-
|
|
14479
|
-
|
|
14480
|
-
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
14485
|
-
|
|
14486
|
-
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
|
|
14493
|
-
|
|
14494
|
-
|
|
14495
|
-
|
|
14496
|
-
|
|
14497
|
-
|
|
14498
|
-
|
|
14499
|
-
|
|
14500
|
-
|
|
14501
|
-
|
|
14502
|
-
|
|
14503
|
-
|
|
14504
|
-
|
|
14505
|
-
|
|
14506
|
-
|
|
14507
|
-
|
|
14508
|
-
|
|
14509
|
-
|
|
14510
|
-
|
|
14511
|
-
|
|
14512
|
-
|
|
14513
|
-
|
|
14514
|
-
|
|
14515
|
-
|
|
14516
|
-
|
|
14517
|
-
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
|
|
14523
|
-
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14530
|
-
|
|
14531
|
-
|
|
14532
|
-
|
|
14533
|
-
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
entityType: "
|
|
14538
|
-
|
|
14539
|
-
|
|
14540
|
-
|
|
14541
|
-
|
|
14542
|
-
|
|
14543
|
-
|
|
14544
|
-
|
|
14545
|
-
|
|
14546
|
-
|
|
14547
|
-
|
|
14548
|
-
|
|
14549
|
-
|
|
14550
|
-
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
14554
|
-
|
|
14555
|
-
|
|
14556
|
-
|
|
14557
|
-
|
|
14594
|
+
// src/lib/mock-data/velocity-limit-data.ts
|
|
14595
|
+
var mockVelocityLimits = [
|
|
14596
|
+
{
|
|
14597
|
+
id: "1",
|
|
14598
|
+
created: "2025-11-13T10:00:00Z",
|
|
14599
|
+
limitName: "QA - Decline inbound wire",
|
|
14600
|
+
limitType: "transaction",
|
|
14601
|
+
action: "DECLINE",
|
|
14602
|
+
status: "ACTIVE",
|
|
14603
|
+
associatedEntity: "Account",
|
|
14604
|
+
associatedEntityId: "9539334834",
|
|
14605
|
+
transactionGroup: ["inbound"],
|
|
14606
|
+
transactionType: ["wire"],
|
|
14607
|
+
aggregationLevel: "account",
|
|
14608
|
+
timePeriod: "daily",
|
|
14609
|
+
maxAmount: "50000",
|
|
14610
|
+
maxCount: "10"
|
|
14611
|
+
},
|
|
14612
|
+
{
|
|
14613
|
+
id: "2",
|
|
14614
|
+
created: "2025-11-13T10:00:00Z",
|
|
14615
|
+
limitName: "QA - Decline inbound wire",
|
|
14616
|
+
limitType: "transaction",
|
|
14617
|
+
action: "DECLINE",
|
|
14618
|
+
status: "ACTIVE",
|
|
14619
|
+
associatedEntity: "Account",
|
|
14620
|
+
associatedEntityId: "8895578481",
|
|
14621
|
+
transactionType: ["wire"],
|
|
14622
|
+
aggregationLevel: "account",
|
|
14623
|
+
timePeriod: "daily",
|
|
14624
|
+
maxAmount: "100000",
|
|
14625
|
+
maxCount: "20"
|
|
14626
|
+
},
|
|
14627
|
+
{
|
|
14628
|
+
id: "3",
|
|
14629
|
+
created: "2025-11-13T10:00:00Z",
|
|
14630
|
+
limitName: "QA - Decline inbound wire",
|
|
14631
|
+
limitType: "transaction",
|
|
14632
|
+
action: "DECLINE",
|
|
14633
|
+
status: "ACTIVE",
|
|
14634
|
+
associatedEntity: "Account",
|
|
14635
|
+
associatedEntityId: "86046257",
|
|
14636
|
+
transactionType: ["wire"],
|
|
14637
|
+
aggregationLevel: "transaction",
|
|
14638
|
+
maxAmount: "25000"
|
|
14639
|
+
},
|
|
14640
|
+
{
|
|
14641
|
+
id: "4",
|
|
14642
|
+
created: "2025-11-13T10:00:00Z",
|
|
14643
|
+
limitName: "QA - Decline inbound wire",
|
|
14644
|
+
limitType: "transaction",
|
|
14645
|
+
action: "DECLINE",
|
|
14646
|
+
status: "ACTIVE",
|
|
14647
|
+
associatedEntity: "Account",
|
|
14648
|
+
associatedEntityId: "86046257",
|
|
14649
|
+
transactionType: ["ACH_RECEIVER_CREDIT", "ACH_ORIGINATOR_CREDIT", "WIRE_INBOUND", "WIRE_OUTBOUND", "CARD_TRANSACTION"],
|
|
14650
|
+
aggregationLevel: "account",
|
|
14651
|
+
timePeriod: "monthly",
|
|
14652
|
+
maxAmount: "500000",
|
|
14653
|
+
maxCount: "50"
|
|
14654
|
+
},
|
|
14655
|
+
{
|
|
14656
|
+
id: "5",
|
|
14657
|
+
created: "2025-10-23T10:00:00Z",
|
|
14658
|
+
limitName: "prohibited country list v2",
|
|
14659
|
+
limitType: "prohibited_entity",
|
|
14660
|
+
action: "DECLINE",
|
|
14661
|
+
status: "DELETED",
|
|
14662
|
+
associatedEntity: "Global",
|
|
14663
|
+
entityListName: "OFAC Sanctioned Countries",
|
|
14664
|
+
entityType: "country",
|
|
14665
|
+
prohibitedEntities: "Iran, North Korea, Syria, Cuba"
|
|
14666
|
+
},
|
|
14667
|
+
{
|
|
14668
|
+
id: "6",
|
|
14669
|
+
created: "2025-10-16T10:00:00Z",
|
|
14670
|
+
limitName: "global wire debit limit",
|
|
14671
|
+
limitType: "transaction",
|
|
14672
|
+
action: "DECLINE",
|
|
14673
|
+
status: "INACTIVE",
|
|
14674
|
+
associatedEntity: "Global",
|
|
14675
|
+
transactionType: ["wire"],
|
|
14676
|
+
aggregationLevel: "program",
|
|
14677
|
+
timePeriod: "daily",
|
|
14678
|
+
maxAmount: "1000000",
|
|
14679
|
+
maxCount: "100"
|
|
14680
|
+
},
|
|
14681
|
+
{
|
|
14682
|
+
id: "7",
|
|
14683
|
+
created: "2025-10-16T10:00:00Z",
|
|
14684
|
+
limitName: "global wire debit limit",
|
|
14685
|
+
limitType: "transaction",
|
|
14686
|
+
action: "DECLINE",
|
|
14687
|
+
status: "ACTIVE",
|
|
14688
|
+
associatedEntity: "Global",
|
|
14689
|
+
transactionType: ["wire"],
|
|
14690
|
+
aggregationLevel: "program",
|
|
14691
|
+
timePeriod: "daily",
|
|
14692
|
+
maxAmount: "1000000",
|
|
14693
|
+
maxCount: "100"
|
|
14694
|
+
},
|
|
14695
|
+
{
|
|
14696
|
+
id: "8",
|
|
14697
|
+
created: "2025-09-04T10:00:00Z",
|
|
14698
|
+
limitName: "wire_ach_rounded_amt",
|
|
14699
|
+
limitType: "round_number",
|
|
14700
|
+
action: "FLAG",
|
|
14701
|
+
status: "ACTIVE",
|
|
14702
|
+
associatedEntity: "Program",
|
|
14703
|
+
associatedEntityId: "167989",
|
|
14704
|
+
amountThreshold: "10000",
|
|
14705
|
+
roundPattern: "1000, 5000, 10000, 50000"
|
|
14706
|
+
},
|
|
14707
|
+
{
|
|
14708
|
+
id: "9",
|
|
14709
|
+
created: "2025-08-20T10:00:00Z",
|
|
14710
|
+
limitName: "receiver name validation",
|
|
14711
|
+
limitType: "receiver_name_mismatch",
|
|
14712
|
+
action: "FLAG",
|
|
14713
|
+
status: "ACTIVE",
|
|
14714
|
+
associatedEntity: "Global",
|
|
14715
|
+
mismatchThreshold: "80",
|
|
14716
|
+
comparisonMethod: "fuzzy"
|
|
14558
14717
|
}
|
|
14559
14718
|
];
|
|
14560
14719
|
var getStatusVariant = (status) => {
|
|
14561
14720
|
switch (status) {
|
|
14562
|
-
case "
|
|
14721
|
+
case "ACTIVE":
|
|
14563
14722
|
return "success";
|
|
14564
|
-
case "
|
|
14723
|
+
case "INACTIVE":
|
|
14565
14724
|
return "warning";
|
|
14566
|
-
case "
|
|
14567
|
-
return "active";
|
|
14568
|
-
case "CONFIRMED":
|
|
14725
|
+
case "DELETED":
|
|
14569
14726
|
return "destructive";
|
|
14570
14727
|
default:
|
|
14571
14728
|
return "secondary";
|
|
14572
14729
|
}
|
|
14573
14730
|
};
|
|
14574
|
-
var
|
|
14575
|
-
switch (
|
|
14576
|
-
case "
|
|
14577
|
-
return
|
|
14578
|
-
case "
|
|
14579
|
-
return
|
|
14580
|
-
case "Counterparty":
|
|
14581
|
-
return `/counterparty/${entityId}`;
|
|
14731
|
+
var getActionVariant = (action) => {
|
|
14732
|
+
switch (action) {
|
|
14733
|
+
case "DECLINE":
|
|
14734
|
+
return "destructive";
|
|
14735
|
+
case "FLAG":
|
|
14736
|
+
return "warning";
|
|
14582
14737
|
default:
|
|
14583
|
-
return "
|
|
14738
|
+
return "secondary";
|
|
14584
14739
|
}
|
|
14585
14740
|
};
|
|
14586
|
-
function
|
|
14741
|
+
function VelocityLimits() {
|
|
14587
14742
|
const navigate = useNavigate();
|
|
14588
14743
|
const [sortField, setSortField] = useState("created");
|
|
14589
14744
|
const [sortDirection, setSortDirection] = useState("desc");
|
|
14590
14745
|
const [filters, setFilters] = useState({
|
|
14746
|
+
accountNumber: "",
|
|
14747
|
+
counterpartyId: "",
|
|
14748
|
+
productId: "",
|
|
14749
|
+
programId: "",
|
|
14750
|
+
limitName: "",
|
|
14751
|
+
limitType: "",
|
|
14591
14752
|
status: "",
|
|
14592
|
-
|
|
14593
|
-
|
|
14594
|
-
|
|
14753
|
+
aggregationLevel: "",
|
|
14754
|
+
action: "",
|
|
14755
|
+
transactionType: "",
|
|
14756
|
+
transactionGroup: ""
|
|
14595
14757
|
});
|
|
14596
14758
|
const handleFilterChange = (field, value) => {
|
|
14597
14759
|
setFilters((prev) => ({ ...prev, [field]: value }));
|
|
14598
14760
|
};
|
|
14599
14761
|
const handleResetFilters = () => {
|
|
14600
14762
|
setFilters({
|
|
14763
|
+
accountNumber: "",
|
|
14764
|
+
counterpartyId: "",
|
|
14765
|
+
productId: "",
|
|
14766
|
+
programId: "",
|
|
14767
|
+
limitName: "",
|
|
14768
|
+
limitType: "",
|
|
14601
14769
|
status: "",
|
|
14602
|
-
|
|
14603
|
-
|
|
14604
|
-
|
|
14770
|
+
aggregationLevel: "",
|
|
14771
|
+
action: "",
|
|
14772
|
+
transactionType: "",
|
|
14773
|
+
transactionGroup: ""
|
|
14605
14774
|
});
|
|
14606
14775
|
};
|
|
14607
14776
|
const handleSort = (field) => {
|
|
@@ -14612,27 +14781,24 @@ function OFAC() {
|
|
|
14612
14781
|
setSortDirection("desc");
|
|
14613
14782
|
}
|
|
14614
14783
|
};
|
|
14615
|
-
const
|
|
14616
|
-
return
|
|
14617
|
-
if (filters.
|
|
14784
|
+
const filteredLimits = useMemo(() => {
|
|
14785
|
+
return mockVelocityLimits.filter((limit) => {
|
|
14786
|
+
if (filters.accountNumber && limit.associatedEntityId && !limit.associatedEntityId.includes(filters.accountNumber)) {
|
|
14618
14787
|
return false;
|
|
14619
14788
|
}
|
|
14620
|
-
if (filters.
|
|
14789
|
+
if (filters.limitName && !limit.limitName.toLowerCase().includes(filters.limitName.toLowerCase())) {
|
|
14621
14790
|
return false;
|
|
14622
14791
|
}
|
|
14623
|
-
if (filters.
|
|
14624
|
-
|
|
14625
|
-
|
|
14626
|
-
|
|
14627
|
-
|
|
14628
|
-
if (filters.endDate && isAfter(checkDate, endOfDay(filters.endDate))) {
|
|
14629
|
-
return false;
|
|
14630
|
-
}
|
|
14792
|
+
if (filters.action && limit.action !== filters.action) {
|
|
14793
|
+
return false;
|
|
14794
|
+
}
|
|
14795
|
+
if (filters.status && limit.status !== filters.status) {
|
|
14796
|
+
return false;
|
|
14631
14797
|
}
|
|
14632
14798
|
return true;
|
|
14633
14799
|
});
|
|
14634
14800
|
}, [filters]);
|
|
14635
|
-
const
|
|
14801
|
+
const sortedLimits = [...filteredLimits].sort((a, b) => {
|
|
14636
14802
|
const aValue = a[sortField];
|
|
14637
14803
|
const bValue = b[sortField];
|
|
14638
14804
|
if (aValue == null) return 1;
|
|
@@ -14648,70 +14814,1472 @@ function OFAC() {
|
|
|
14648
14814
|
key: "created",
|
|
14649
14815
|
title: "Created",
|
|
14650
14816
|
sortable: true,
|
|
14651
|
-
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm
|
|
14652
|
-
},
|
|
14653
|
-
{
|
|
14654
|
-
key: "entityName",
|
|
14655
|
-
title: "Entity",
|
|
14656
|
-
render: (value, row) => /* @__PURE__ */ jsx(
|
|
14657
|
-
"button",
|
|
14658
|
-
{
|
|
14659
|
-
onClick: () => navigate(getEntityUrl(row.entityType, row.entityId)),
|
|
14660
|
-
className: "text-sm text-primary hover:underline font-medium",
|
|
14661
|
-
children: value
|
|
14662
|
-
}
|
|
14663
|
-
)
|
|
14817
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: format(parseISO(value), "yyyy-MM-dd") })
|
|
14664
14818
|
},
|
|
14665
14819
|
{
|
|
14666
|
-
key: "
|
|
14667
|
-
title: "
|
|
14820
|
+
key: "limitName",
|
|
14821
|
+
title: "Limit Name",
|
|
14668
14822
|
sortable: true,
|
|
14669
|
-
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
|
|
14823
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: value })
|
|
14670
14824
|
},
|
|
14671
14825
|
{
|
|
14672
|
-
key: "
|
|
14673
|
-
title: "
|
|
14674
|
-
|
|
14675
|
-
|
|
14676
|
-
{
|
|
14677
|
-
onClick: () => navigate(`/alerts/${value}`),
|
|
14678
|
-
className: "text-sm text-primary hover:underline font-medium",
|
|
14679
|
-
children: value
|
|
14680
|
-
}
|
|
14681
|
-
) : /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "\u2014" })
|
|
14826
|
+
key: "action",
|
|
14827
|
+
title: "Action",
|
|
14828
|
+
sortable: true,
|
|
14829
|
+
render: (value) => /* @__PURE__ */ jsx(Badge, { variant: getActionVariant(value), children: value })
|
|
14682
14830
|
},
|
|
14683
14831
|
{
|
|
14684
14832
|
key: "status",
|
|
14685
14833
|
title: "Status",
|
|
14686
14834
|
sortable: true,
|
|
14687
14835
|
render: (value) => /* @__PURE__ */ jsx(Badge, { variant: getStatusVariant(value), children: value })
|
|
14836
|
+
},
|
|
14837
|
+
{
|
|
14838
|
+
key: "associatedEntity",
|
|
14839
|
+
title: "Associated Entity",
|
|
14840
|
+
sortable: true,
|
|
14841
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
|
|
14842
|
+
},
|
|
14843
|
+
{
|
|
14844
|
+
key: "associatedEntityId",
|
|
14845
|
+
title: "Associated Entity ID",
|
|
14846
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value || "\u2014" })
|
|
14688
14847
|
}
|
|
14689
14848
|
];
|
|
14690
14849
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
|
|
14691
14850
|
/* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
14692
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "
|
|
14693
|
-
/* @__PURE__ */
|
|
14694
|
-
|
|
14695
|
-
|
|
14696
|
-
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14851
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Velocity Limits" }) }),
|
|
14852
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
14853
|
+
/* @__PURE__ */ jsx(
|
|
14854
|
+
VelocityLimitFiltersSheet,
|
|
14855
|
+
{
|
|
14856
|
+
filters,
|
|
14857
|
+
onFilterChange: handleFilterChange,
|
|
14858
|
+
onResetFilters: handleResetFilters
|
|
14859
|
+
}
|
|
14860
|
+
),
|
|
14861
|
+
/* @__PURE__ */ jsxs(Button, { onClick: () => navigate("/compliance/velocity/create"), children: [
|
|
14862
|
+
/* @__PURE__ */ jsx(Plus, { className: "mr-2 h-4 w-4" }),
|
|
14863
|
+
"Create Limit"
|
|
14864
|
+
] })
|
|
14865
|
+
] })
|
|
14701
14866
|
] }) }) }),
|
|
14702
14867
|
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 h-full max-w-none flex flex-col", children: /* @__PURE__ */ jsx("div", { className: "flex-1 mt-4 overflow-auto", children: /* @__PURE__ */ jsx(
|
|
14703
14868
|
DataTable,
|
|
14704
14869
|
{
|
|
14705
14870
|
columns: columns3,
|
|
14706
|
-
data:
|
|
14871
|
+
data: sortedLimits,
|
|
14707
14872
|
sortBy: sortField,
|
|
14708
14873
|
sortDirection,
|
|
14709
|
-
onSort: handleSort
|
|
14874
|
+
onSort: handleSort,
|
|
14875
|
+
onRowClick: (limit) => navigate(`/compliance/velocity/${limit.id}`),
|
|
14876
|
+
pagination: {
|
|
14877
|
+
pageSize: 10,
|
|
14878
|
+
currentPage: 1,
|
|
14879
|
+
totalItems: sortedLimits.length,
|
|
14880
|
+
onPageChange: () => {
|
|
14881
|
+
}
|
|
14882
|
+
}
|
|
14710
14883
|
}
|
|
14711
14884
|
) }) }) })
|
|
14712
14885
|
] });
|
|
14713
14886
|
}
|
|
14887
|
+
function CreateVelocityLimit() {
|
|
14888
|
+
const navigate = useNavigate();
|
|
14889
|
+
const [limitType, setLimitType] = useState("");
|
|
14890
|
+
const [formData, setFormData] = useState({
|
|
14891
|
+
limitName: "",
|
|
14892
|
+
action: "",
|
|
14893
|
+
associatedEntityType: "",
|
|
14894
|
+
associatedEntityId: "",
|
|
14895
|
+
transactionFilterType: "",
|
|
14896
|
+
// "type" or "group"
|
|
14897
|
+
transactionType: "",
|
|
14898
|
+
transactionGroup: "",
|
|
14899
|
+
aggregationLevel: ""
|
|
14900
|
+
// Type-specific fields will be added based on limitType
|
|
14901
|
+
});
|
|
14902
|
+
const handleFieldChange = (field, value) => {
|
|
14903
|
+
setFormData((prev) => ({ ...prev, [field]: value }));
|
|
14904
|
+
};
|
|
14905
|
+
const handleSubmit = (e) => {
|
|
14906
|
+
e.preventDefault();
|
|
14907
|
+
console.log("Creating velocity limit:", { limitType, ...formData });
|
|
14908
|
+
navigate("/compliance/velocity");
|
|
14909
|
+
};
|
|
14910
|
+
const renderTypeSpecificFields = () => {
|
|
14911
|
+
switch (limitType) {
|
|
14912
|
+
case "receiver_name_mismatch":
|
|
14913
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
14914
|
+
/* @__PURE__ */ jsx(
|
|
14915
|
+
EnhancedInput,
|
|
14916
|
+
{
|
|
14917
|
+
label: "Mismatch Threshold (%)",
|
|
14918
|
+
placeholder: "Enter threshold percentage",
|
|
14919
|
+
onChange: (e) => handleFieldChange("mismatchThreshold", e.target.value)
|
|
14920
|
+
}
|
|
14921
|
+
),
|
|
14922
|
+
/* @__PURE__ */ jsx(
|
|
14923
|
+
EnhancedSelect,
|
|
14924
|
+
{
|
|
14925
|
+
label: "Comparison Method",
|
|
14926
|
+
placeholder: "Select method",
|
|
14927
|
+
options: [
|
|
14928
|
+
{ value: "exact", label: "Exact Match" },
|
|
14929
|
+
{ value: "fuzzy", label: "Fuzzy Match" },
|
|
14930
|
+
{ value: "partial", label: "Partial Match" }
|
|
14931
|
+
],
|
|
14932
|
+
onValueChange: (value) => handleFieldChange("comparisonMethod", value)
|
|
14933
|
+
}
|
|
14934
|
+
)
|
|
14935
|
+
] }) });
|
|
14936
|
+
case "round_number":
|
|
14937
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
14938
|
+
/* @__PURE__ */ jsx(
|
|
14939
|
+
EnhancedInput,
|
|
14940
|
+
{
|
|
14941
|
+
label: "Amount Threshold",
|
|
14942
|
+
placeholder: "Enter amount",
|
|
14943
|
+
onChange: (e) => handleFieldChange("amountThreshold", e.target.value)
|
|
14944
|
+
}
|
|
14945
|
+
),
|
|
14946
|
+
/* @__PURE__ */ jsx(
|
|
14947
|
+
EnhancedInput,
|
|
14948
|
+
{
|
|
14949
|
+
label: "Round Number Pattern",
|
|
14950
|
+
placeholder: "e.g., 1000, 5000, 10000",
|
|
14951
|
+
onChange: (e) => handleFieldChange("roundPattern", e.target.value)
|
|
14952
|
+
}
|
|
14953
|
+
)
|
|
14954
|
+
] }) });
|
|
14955
|
+
case "transaction":
|
|
14956
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
14957
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
|
|
14958
|
+
/* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-foreground mb-3 block", children: "Filter By" }),
|
|
14959
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
|
|
14960
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-6", children: [
|
|
14961
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
14962
|
+
/* @__PURE__ */ jsx(
|
|
14963
|
+
"input",
|
|
14964
|
+
{
|
|
14965
|
+
type: "radio",
|
|
14966
|
+
name: "transactionFilterType",
|
|
14967
|
+
value: "type",
|
|
14968
|
+
checked: formData.transactionFilterType === "type",
|
|
14969
|
+
onChange: (e) => {
|
|
14970
|
+
handleFieldChange("transactionFilterType", e.target.value);
|
|
14971
|
+
handleFieldChange("transactionGroup", "");
|
|
14972
|
+
},
|
|
14973
|
+
className: "w-4 h-4 text-primary border-border focus:ring-2 focus:ring-primary"
|
|
14974
|
+
}
|
|
14975
|
+
),
|
|
14976
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: "Transaction Type" })
|
|
14977
|
+
] }),
|
|
14978
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
14979
|
+
/* @__PURE__ */ jsx(
|
|
14980
|
+
"input",
|
|
14981
|
+
{
|
|
14982
|
+
type: "radio",
|
|
14983
|
+
name: "transactionFilterType",
|
|
14984
|
+
value: "group",
|
|
14985
|
+
checked: formData.transactionFilterType === "group",
|
|
14986
|
+
onChange: (e) => {
|
|
14987
|
+
handleFieldChange("transactionFilterType", e.target.value);
|
|
14988
|
+
handleFieldChange("transactionType", "");
|
|
14989
|
+
},
|
|
14990
|
+
className: "w-4 h-4 text-primary border-border focus:ring-2 focus:ring-primary"
|
|
14991
|
+
}
|
|
14992
|
+
),
|
|
14993
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: "Transaction Group" })
|
|
14994
|
+
] })
|
|
14995
|
+
] }),
|
|
14996
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
|
|
14997
|
+
formData.transactionFilterType === "type" && /* @__PURE__ */ jsx(
|
|
14998
|
+
EnhancedSelect,
|
|
14999
|
+
{
|
|
15000
|
+
label: "",
|
|
15001
|
+
placeholder: "Select type",
|
|
15002
|
+
options: [
|
|
15003
|
+
{ value: "wire", label: "Wire" },
|
|
15004
|
+
{ value: "ach", label: "ACH" },
|
|
15005
|
+
{ value: "card", label: "Card" }
|
|
15006
|
+
],
|
|
15007
|
+
value: formData.transactionType,
|
|
15008
|
+
onValueChange: (value) => handleFieldChange("transactionType", value)
|
|
15009
|
+
}
|
|
15010
|
+
),
|
|
15011
|
+
formData.transactionFilterType === "group" && /* @__PURE__ */ jsx(
|
|
15012
|
+
EnhancedSelect,
|
|
15013
|
+
{
|
|
15014
|
+
label: "",
|
|
15015
|
+
placeholder: "Select group",
|
|
15016
|
+
options: [
|
|
15017
|
+
{ value: "inbound", label: "Inbound" },
|
|
15018
|
+
{ value: "outbound", label: "Outbound" }
|
|
15019
|
+
],
|
|
15020
|
+
value: formData.transactionGroup,
|
|
15021
|
+
onValueChange: (value) => handleFieldChange("transactionGroup", value)
|
|
15022
|
+
}
|
|
15023
|
+
)
|
|
15024
|
+
] })
|
|
15025
|
+
] })
|
|
15026
|
+
] }),
|
|
15027
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15028
|
+
/* @__PURE__ */ jsx(
|
|
15029
|
+
EnhancedSelect,
|
|
15030
|
+
{
|
|
15031
|
+
label: "Aggregation Level",
|
|
15032
|
+
placeholder: "Select level",
|
|
15033
|
+
options: [
|
|
15034
|
+
{ value: "transaction", label: "Transaction" },
|
|
15035
|
+
{ value: "account", label: "Account" },
|
|
15036
|
+
{ value: "program", label: "Program" },
|
|
15037
|
+
{ value: "product", label: "Product" }
|
|
15038
|
+
],
|
|
15039
|
+
onValueChange: (value) => handleFieldChange("aggregationLevel", value)
|
|
15040
|
+
}
|
|
15041
|
+
),
|
|
15042
|
+
formData.aggregationLevel !== "transaction" && /* @__PURE__ */ jsx(
|
|
15043
|
+
EnhancedSelect,
|
|
15044
|
+
{
|
|
15045
|
+
label: "Time Period",
|
|
15046
|
+
placeholder: "Select period",
|
|
15047
|
+
options: [
|
|
15048
|
+
{ value: "daily", label: "Daily" },
|
|
15049
|
+
{ value: "weekly", label: "Weekly" },
|
|
15050
|
+
{ value: "monthly", label: "Monthly" }
|
|
15051
|
+
],
|
|
15052
|
+
onValueChange: (value) => handleFieldChange("timePeriod", value)
|
|
15053
|
+
}
|
|
15054
|
+
),
|
|
15055
|
+
/* @__PURE__ */ jsx(
|
|
15056
|
+
EnhancedInput,
|
|
15057
|
+
{
|
|
15058
|
+
label: "Max Transaction Amount",
|
|
15059
|
+
placeholder: "Enter amount",
|
|
15060
|
+
onChange: (e) => handleFieldChange("maxAmount", e.target.value)
|
|
15061
|
+
}
|
|
15062
|
+
),
|
|
15063
|
+
formData.aggregationLevel !== "transaction" && /* @__PURE__ */ jsx(
|
|
15064
|
+
EnhancedInput,
|
|
15065
|
+
{
|
|
15066
|
+
label: "Max Transaction Count",
|
|
15067
|
+
placeholder: "Enter count",
|
|
15068
|
+
onChange: (e) => handleFieldChange("maxCount", e.target.value)
|
|
15069
|
+
}
|
|
15070
|
+
)
|
|
15071
|
+
] })
|
|
15072
|
+
] });
|
|
15073
|
+
case "prohibited_entity":
|
|
15074
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15075
|
+
/* @__PURE__ */ jsx(
|
|
15076
|
+
EnhancedInput,
|
|
15077
|
+
{
|
|
15078
|
+
label: "Entity List Name",
|
|
15079
|
+
placeholder: "Enter list name",
|
|
15080
|
+
onChange: (e) => handleFieldChange("entityListName", e.target.value)
|
|
15081
|
+
}
|
|
15082
|
+
),
|
|
15083
|
+
/* @__PURE__ */ jsx(
|
|
15084
|
+
EnhancedSelect,
|
|
15085
|
+
{
|
|
15086
|
+
label: "Entity Type",
|
|
15087
|
+
placeholder: "Select type",
|
|
15088
|
+
options: [
|
|
15089
|
+
{ value: "country", label: "Country" },
|
|
15090
|
+
{ value: "individual", label: "Individual" },
|
|
15091
|
+
{ value: "business", label: "Business" }
|
|
15092
|
+
],
|
|
15093
|
+
onValueChange: (value) => handleFieldChange("entityType", value)
|
|
15094
|
+
}
|
|
15095
|
+
),
|
|
15096
|
+
/* @__PURE__ */ jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsx(
|
|
15097
|
+
EnhancedInput,
|
|
15098
|
+
{
|
|
15099
|
+
label: "Prohibited Entities (comma-separated)",
|
|
15100
|
+
placeholder: "Enter entities",
|
|
15101
|
+
onChange: (e) => handleFieldChange("prohibitedEntities", e.target.value)
|
|
15102
|
+
}
|
|
15103
|
+
) })
|
|
15104
|
+
] }) });
|
|
15105
|
+
default:
|
|
15106
|
+
return null;
|
|
15107
|
+
}
|
|
15108
|
+
};
|
|
15109
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
|
|
15110
|
+
/* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
15111
|
+
/* @__PURE__ */ jsxs(
|
|
15112
|
+
Button,
|
|
15113
|
+
{
|
|
15114
|
+
variant: "ghost",
|
|
15115
|
+
size: "sm",
|
|
15116
|
+
onClick: () => navigate("/compliance/velocity"),
|
|
15117
|
+
children: [
|
|
15118
|
+
/* @__PURE__ */ jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }),
|
|
15119
|
+
"Back"
|
|
15120
|
+
]
|
|
15121
|
+
}
|
|
15122
|
+
),
|
|
15123
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Create Velocity Limit" }) })
|
|
15124
|
+
] }) }) }),
|
|
15125
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-4xl", children: /* @__PURE__ */ jsx("form", { onSubmit: handleSubmit, children: /* @__PURE__ */ jsx(Card, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
15126
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
15127
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Select Limit Type" }),
|
|
15128
|
+
/* @__PURE__ */ jsx(
|
|
15129
|
+
EnhancedSelect,
|
|
15130
|
+
{
|
|
15131
|
+
label: "Limit Type",
|
|
15132
|
+
placeholder: "Select a limit type",
|
|
15133
|
+
options: [
|
|
15134
|
+
{ value: "receiver_name_mismatch", label: "Receiver Name Mismatch" },
|
|
15135
|
+
{ value: "round_number", label: "Round Number" },
|
|
15136
|
+
{ value: "transaction", label: "Transaction" },
|
|
15137
|
+
{ value: "prohibited_entity", label: "Prohibited Entity" }
|
|
15138
|
+
],
|
|
15139
|
+
value: limitType,
|
|
15140
|
+
onValueChange: (value) => setLimitType(value)
|
|
15141
|
+
}
|
|
15142
|
+
)
|
|
15143
|
+
] }),
|
|
15144
|
+
limitType && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15145
|
+
/* @__PURE__ */ jsxs("div", { className: "border-t pt-6", children: [
|
|
15146
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Basic Information" }),
|
|
15147
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15148
|
+
/* @__PURE__ */ jsx(
|
|
15149
|
+
EnhancedInput,
|
|
15150
|
+
{
|
|
15151
|
+
label: "Limit Name",
|
|
15152
|
+
placeholder: "Enter limit name",
|
|
15153
|
+
value: formData.limitName,
|
|
15154
|
+
onChange: (e) => handleFieldChange("limitName", e.target.value)
|
|
15155
|
+
}
|
|
15156
|
+
),
|
|
15157
|
+
/* @__PURE__ */ jsx(
|
|
15158
|
+
EnhancedSelect,
|
|
15159
|
+
{
|
|
15160
|
+
label: "Action",
|
|
15161
|
+
placeholder: "Select action",
|
|
15162
|
+
options: [
|
|
15163
|
+
{ value: "decline", label: "Decline" },
|
|
15164
|
+
{ value: "flag", label: "Flag" }
|
|
15165
|
+
],
|
|
15166
|
+
onValueChange: (value) => handleFieldChange("action", value)
|
|
15167
|
+
}
|
|
15168
|
+
),
|
|
15169
|
+
/* @__PURE__ */ jsx(
|
|
15170
|
+
EnhancedSelect,
|
|
15171
|
+
{
|
|
15172
|
+
label: "Associated Entity Type",
|
|
15173
|
+
placeholder: "Select entity type",
|
|
15174
|
+
options: [
|
|
15175
|
+
{ value: "global", label: "Global" },
|
|
15176
|
+
{ value: "program", label: "Program" },
|
|
15177
|
+
{ value: "product", label: "Product" },
|
|
15178
|
+
{ value: "account", label: "Account" }
|
|
15179
|
+
],
|
|
15180
|
+
value: formData.associatedEntityType,
|
|
15181
|
+
onValueChange: (value) => {
|
|
15182
|
+
handleFieldChange("associatedEntityType", value);
|
|
15183
|
+
handleFieldChange("associatedEntityId", "");
|
|
15184
|
+
}
|
|
15185
|
+
}
|
|
15186
|
+
),
|
|
15187
|
+
formData.associatedEntityType && formData.associatedEntityType !== "global" && /* @__PURE__ */ jsx(
|
|
15188
|
+
EnhancedInput,
|
|
15189
|
+
{
|
|
15190
|
+
label: `${formData.associatedEntityType.charAt(0).toUpperCase() + formData.associatedEntityType.slice(1)} ID`,
|
|
15191
|
+
placeholder: `Enter ${formData.associatedEntityType} ID`,
|
|
15192
|
+
value: formData.associatedEntityId,
|
|
15193
|
+
onChange: (e) => handleFieldChange("associatedEntityId", e.target.value)
|
|
15194
|
+
}
|
|
15195
|
+
)
|
|
15196
|
+
] })
|
|
15197
|
+
] }),
|
|
15198
|
+
/* @__PURE__ */ jsxs("div", { className: "border-t pt-6", children: [
|
|
15199
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold mb-4", children: "Limit Configuration" }),
|
|
15200
|
+
renderTypeSpecificFields()
|
|
15201
|
+
] }),
|
|
15202
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-3 border-t pt-6", children: [
|
|
15203
|
+
/* @__PURE__ */ jsx(
|
|
15204
|
+
Button,
|
|
15205
|
+
{
|
|
15206
|
+
type: "button",
|
|
15207
|
+
variant: "outline",
|
|
15208
|
+
onClick: () => navigate("/compliance/velocity"),
|
|
15209
|
+
children: "Cancel"
|
|
15210
|
+
}
|
|
15211
|
+
),
|
|
15212
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", children: "Create Limit" })
|
|
15213
|
+
] })
|
|
15214
|
+
] })
|
|
15215
|
+
] }) }) }) }) })
|
|
15216
|
+
] });
|
|
15217
|
+
}
|
|
15218
|
+
var getStatusVariant2 = (status) => {
|
|
15219
|
+
switch (status) {
|
|
15220
|
+
case "ACTIVE":
|
|
15221
|
+
return "success";
|
|
15222
|
+
case "INACTIVE":
|
|
15223
|
+
return "warning";
|
|
15224
|
+
case "DELETED":
|
|
15225
|
+
return "destructive";
|
|
15226
|
+
default:
|
|
15227
|
+
return "secondary";
|
|
15228
|
+
}
|
|
15229
|
+
};
|
|
15230
|
+
var getActionVariant2 = (action) => {
|
|
15231
|
+
switch (action) {
|
|
15232
|
+
case "DECLINE":
|
|
15233
|
+
return "destructive";
|
|
15234
|
+
case "FLAG":
|
|
15235
|
+
return "warning";
|
|
15236
|
+
default:
|
|
15237
|
+
return "secondary";
|
|
15238
|
+
}
|
|
15239
|
+
};
|
|
15240
|
+
var VelocityLimitDetailsCard = ({
|
|
15241
|
+
isEditing,
|
|
15242
|
+
onToggleEdit,
|
|
15243
|
+
limit
|
|
15244
|
+
}) => {
|
|
15245
|
+
const renderTransactionFields = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15246
|
+
limit.transactionType && limit.transactionType.length > 0 && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15247
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
15248
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Type" }),
|
|
15249
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionType.map((type, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: type }, index)) })
|
|
15250
|
+
] }),
|
|
15251
|
+
limit.transactionGroup && limit.transactionGroup.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
15252
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Group" }),
|
|
15253
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionGroup.map((group, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: group.toUpperCase() }, index)) })
|
|
15254
|
+
] })
|
|
15255
|
+
] }),
|
|
15256
|
+
!limit.transactionType && limit.transactionGroup && limit.transactionGroup.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
15257
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-muted-foreground mb-1", children: "Transaction Group" }),
|
|
15258
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: limit.transactionGroup.map((group, index) => /* @__PURE__ */ jsx("div", { className: "text-sm text-foreground", children: group.toUpperCase() }, index)) })
|
|
15259
|
+
] }) }),
|
|
15260
|
+
(limit.aggregationLevel || limit.timePeriod) && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15261
|
+
limit.aggregationLevel && /* @__PURE__ */ jsx(
|
|
15262
|
+
InfoField,
|
|
15263
|
+
{
|
|
15264
|
+
label: "Aggregation Level",
|
|
15265
|
+
value: limit.aggregationLevel.charAt(0).toUpperCase() + limit.aggregationLevel.slice(1),
|
|
15266
|
+
layout: "horizontal"
|
|
15267
|
+
}
|
|
15268
|
+
),
|
|
15269
|
+
limit.timePeriod && /* @__PURE__ */ jsx(
|
|
15270
|
+
InfoField,
|
|
15271
|
+
{
|
|
15272
|
+
label: "Time Period",
|
|
15273
|
+
value: limit.timePeriod.charAt(0).toUpperCase() + limit.timePeriod.slice(1),
|
|
15274
|
+
layout: "horizontal"
|
|
15275
|
+
}
|
|
15276
|
+
)
|
|
15277
|
+
] }),
|
|
15278
|
+
(limit.maxAmount || limit.maxCount) && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15279
|
+
limit.maxAmount && /* @__PURE__ */ jsx(
|
|
15280
|
+
InfoField,
|
|
15281
|
+
{
|
|
15282
|
+
label: "Max Amount",
|
|
15283
|
+
value: `$${parseFloat(limit.maxAmount).toLocaleString()}`,
|
|
15284
|
+
layout: "horizontal"
|
|
15285
|
+
}
|
|
15286
|
+
),
|
|
15287
|
+
limit.maxCount && /* @__PURE__ */ jsx(
|
|
15288
|
+
InfoField,
|
|
15289
|
+
{
|
|
15290
|
+
label: "Max Count",
|
|
15291
|
+
value: limit.maxCount,
|
|
15292
|
+
layout: "horizontal"
|
|
15293
|
+
}
|
|
15294
|
+
)
|
|
15295
|
+
] })
|
|
15296
|
+
] });
|
|
15297
|
+
const renderReceiverNameMismatchFields = () => /* @__PURE__ */ jsx(Fragment, { children: limit.mismatchThreshold && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15298
|
+
/* @__PURE__ */ jsx(
|
|
15299
|
+
InfoField,
|
|
15300
|
+
{
|
|
15301
|
+
label: "Mismatch Threshold",
|
|
15302
|
+
value: `${limit.mismatchThreshold}%`,
|
|
15303
|
+
layout: "horizontal"
|
|
15304
|
+
}
|
|
15305
|
+
),
|
|
15306
|
+
limit.comparisonMethod && /* @__PURE__ */ jsx(
|
|
15307
|
+
InfoField,
|
|
15308
|
+
{
|
|
15309
|
+
label: "Comparison Method",
|
|
15310
|
+
value: limit.comparisonMethod.charAt(0).toUpperCase() + limit.comparisonMethod.slice(1),
|
|
15311
|
+
layout: "horizontal"
|
|
15312
|
+
}
|
|
15313
|
+
)
|
|
15314
|
+
] }) });
|
|
15315
|
+
const renderRoundNumberFields = () => /* @__PURE__ */ jsx(Fragment, { children: limit.amountThreshold && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15316
|
+
/* @__PURE__ */ jsx(
|
|
15317
|
+
InfoField,
|
|
15318
|
+
{
|
|
15319
|
+
label: "Amount Threshold",
|
|
15320
|
+
value: `$${parseFloat(limit.amountThreshold).toLocaleString()}`,
|
|
15321
|
+
layout: "horizontal"
|
|
15322
|
+
}
|
|
15323
|
+
),
|
|
15324
|
+
limit.roundPattern && /* @__PURE__ */ jsx(
|
|
15325
|
+
InfoField,
|
|
15326
|
+
{
|
|
15327
|
+
label: "Round Patterns",
|
|
15328
|
+
value: limit.roundPattern,
|
|
15329
|
+
layout: "horizontal"
|
|
15330
|
+
}
|
|
15331
|
+
)
|
|
15332
|
+
] }) });
|
|
15333
|
+
const renderProhibitedEntityFields = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15334
|
+
limit.entityListName && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15335
|
+
/* @__PURE__ */ jsx(
|
|
15336
|
+
InfoField,
|
|
15337
|
+
{
|
|
15338
|
+
label: "Entity List Name",
|
|
15339
|
+
value: limit.entityListName,
|
|
15340
|
+
layout: "horizontal"
|
|
15341
|
+
}
|
|
15342
|
+
),
|
|
15343
|
+
limit.entityType && /* @__PURE__ */ jsx(
|
|
15344
|
+
InfoField,
|
|
15345
|
+
{
|
|
15346
|
+
label: "Entity Type",
|
|
15347
|
+
value: limit.entityType.charAt(0).toUpperCase() + limit.entityType.slice(1),
|
|
15348
|
+
layout: "horizontal"
|
|
15349
|
+
}
|
|
15350
|
+
)
|
|
15351
|
+
] }),
|
|
15352
|
+
limit.prohibitedEntities && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsx(
|
|
15353
|
+
InfoField,
|
|
15354
|
+
{
|
|
15355
|
+
label: "Prohibited Entities",
|
|
15356
|
+
value: limit.prohibitedEntities,
|
|
15357
|
+
layout: "horizontal"
|
|
15358
|
+
}
|
|
15359
|
+
) })
|
|
15360
|
+
] });
|
|
15361
|
+
const viewContent = /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
15362
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15363
|
+
/* @__PURE__ */ jsx(
|
|
15364
|
+
InfoField,
|
|
15365
|
+
{
|
|
15366
|
+
label: "Limit Name",
|
|
15367
|
+
value: limit.limitName,
|
|
15368
|
+
layout: "horizontal"
|
|
15369
|
+
}
|
|
15370
|
+
),
|
|
15371
|
+
/* @__PURE__ */ jsx(
|
|
15372
|
+
InfoField,
|
|
15373
|
+
{
|
|
15374
|
+
label: "Limit Type",
|
|
15375
|
+
value: limit.limitType.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
|
|
15376
|
+
layout: "horizontal"
|
|
15377
|
+
}
|
|
15378
|
+
)
|
|
15379
|
+
] }),
|
|
15380
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15381
|
+
/* @__PURE__ */ jsx(
|
|
15382
|
+
InfoField,
|
|
15383
|
+
{
|
|
15384
|
+
label: "Action",
|
|
15385
|
+
value: /* @__PURE__ */ jsx(Badge, { variant: getActionVariant2(limit.action), children: limit.action }),
|
|
15386
|
+
layout: "horizontal"
|
|
15387
|
+
}
|
|
15388
|
+
),
|
|
15389
|
+
/* @__PURE__ */ jsx(
|
|
15390
|
+
InfoField,
|
|
15391
|
+
{
|
|
15392
|
+
label: "Created",
|
|
15393
|
+
value: format(parseISO(limit.created), "MMM dd, yyyy 'at' h:mm a"),
|
|
15394
|
+
layout: "horizontal"
|
|
15395
|
+
}
|
|
15396
|
+
)
|
|
15397
|
+
] }),
|
|
15398
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
15399
|
+
/* @__PURE__ */ jsx(
|
|
15400
|
+
InfoField,
|
|
15401
|
+
{
|
|
15402
|
+
label: "Associated Entity",
|
|
15403
|
+
value: limit.associatedEntity,
|
|
15404
|
+
layout: "horizontal"
|
|
15405
|
+
}
|
|
15406
|
+
),
|
|
15407
|
+
limit.associatedEntityId && /* @__PURE__ */ jsx(
|
|
15408
|
+
InfoField,
|
|
15409
|
+
{
|
|
15410
|
+
label: "Associated Entity ID",
|
|
15411
|
+
value: limit.associatedEntityId,
|
|
15412
|
+
layout: "horizontal"
|
|
15413
|
+
}
|
|
15414
|
+
)
|
|
15415
|
+
] }),
|
|
15416
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
15417
|
+
limit.limitType === "transaction" && renderTransactionFields(),
|
|
15418
|
+
limit.limitType === "receiver_name_mismatch" && renderReceiverNameMismatchFields(),
|
|
15419
|
+
limit.limitType === "round_number" && renderRoundNumberFields(),
|
|
15420
|
+
limit.limitType === "prohibited_entity" && renderProhibitedEntityFields()
|
|
15421
|
+
] })
|
|
15422
|
+
] });
|
|
15423
|
+
const editContent = /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "Edit mode coming soon..." });
|
|
15424
|
+
return /* @__PURE__ */ jsx(
|
|
15425
|
+
EditableFormCard,
|
|
15426
|
+
{
|
|
15427
|
+
title: "Velocity Limit Details",
|
|
15428
|
+
viewContent,
|
|
15429
|
+
editContent,
|
|
15430
|
+
isEditing,
|
|
15431
|
+
onToggleEdit,
|
|
15432
|
+
variant: "subtle"
|
|
15433
|
+
}
|
|
15434
|
+
);
|
|
15435
|
+
};
|
|
15436
|
+
function VelocityLimitDetail() {
|
|
15437
|
+
const { id } = useParams();
|
|
15438
|
+
const navigate = useNavigate();
|
|
15439
|
+
const limit = mockVelocityLimits.find((l) => l.id === id);
|
|
15440
|
+
if (!limit) {
|
|
15441
|
+
return /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-8", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
15442
|
+
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold mb-2", children: "Velocity Limit Not Found" }),
|
|
15443
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-4", children: "The velocity limit could not be found." }),
|
|
15444
|
+
/* @__PURE__ */ jsxs(Button, { onClick: () => navigate("/compliance/velocity"), children: [
|
|
15445
|
+
/* @__PURE__ */ jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }),
|
|
15446
|
+
"Back to Velocity Limits"
|
|
15447
|
+
] })
|
|
15448
|
+
] }) });
|
|
15449
|
+
}
|
|
15450
|
+
return /* @__PURE__ */ jsx(
|
|
15451
|
+
DetailPageLayout,
|
|
15452
|
+
{
|
|
15453
|
+
title: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
15454
|
+
/* @__PURE__ */ jsx("span", { children: limit.limitName }),
|
|
15455
|
+
/* @__PURE__ */ jsx(Badge, { variant: getStatusVariant2(limit.status), children: limit.status })
|
|
15456
|
+
] }),
|
|
15457
|
+
cards: [
|
|
15458
|
+
{
|
|
15459
|
+
key: "details",
|
|
15460
|
+
component: (props) => /* @__PURE__ */ jsx(VelocityLimitDetailsCard, { ...props, limit })
|
|
15461
|
+
}
|
|
15462
|
+
],
|
|
15463
|
+
actions: [
|
|
15464
|
+
{
|
|
15465
|
+
label: "Deactivate",
|
|
15466
|
+
variant: "destructive",
|
|
15467
|
+
onClick: () => console.log("Deactivate limit")
|
|
15468
|
+
}
|
|
15469
|
+
]
|
|
15470
|
+
}
|
|
15471
|
+
);
|
|
15472
|
+
}
|
|
15473
|
+
function UploadReconDialog({ open, onOpenChange }) {
|
|
15474
|
+
const [fileType, setFileType] = useState(null);
|
|
15475
|
+
const [selectedFile, setSelectedFile] = useState(null);
|
|
15476
|
+
const [isUploading, setIsUploading] = useState(false);
|
|
15477
|
+
const fileInputRef = useRef(null);
|
|
15478
|
+
const handleFileChange = (event) => {
|
|
15479
|
+
const file = event.target.files?.[0];
|
|
15480
|
+
if (file) {
|
|
15481
|
+
setSelectedFile(file);
|
|
15482
|
+
}
|
|
15483
|
+
};
|
|
15484
|
+
const handleRemoveFile = () => {
|
|
15485
|
+
setSelectedFile(null);
|
|
15486
|
+
if (fileInputRef.current) {
|
|
15487
|
+
fileInputRef.current.value = "";
|
|
15488
|
+
}
|
|
15489
|
+
};
|
|
15490
|
+
const handleReset = () => {
|
|
15491
|
+
setFileType(null);
|
|
15492
|
+
setSelectedFile(null);
|
|
15493
|
+
if (fileInputRef.current) {
|
|
15494
|
+
fileInputRef.current.value = "";
|
|
15495
|
+
}
|
|
15496
|
+
};
|
|
15497
|
+
const handleUpload = async () => {
|
|
15498
|
+
if (!selectedFile || !fileType) return;
|
|
15499
|
+
setIsUploading(true);
|
|
15500
|
+
setTimeout(() => {
|
|
15501
|
+
setIsUploading(false);
|
|
15502
|
+
toast$1.success(`${fileType} file uploaded successfully`);
|
|
15503
|
+
handleReset();
|
|
15504
|
+
onOpenChange(false);
|
|
15505
|
+
}, 2e3);
|
|
15506
|
+
};
|
|
15507
|
+
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-[500px]", children: [
|
|
15508
|
+
/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Upload Recon File" }) }),
|
|
15509
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-4 py-4", children: [
|
|
15510
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
15511
|
+
/* @__PURE__ */ jsx(Label, { children: "File Type" }),
|
|
15512
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
15513
|
+
/* @__PURE__ */ jsxs(
|
|
15514
|
+
"button",
|
|
15515
|
+
{
|
|
15516
|
+
type: "button",
|
|
15517
|
+
onClick: () => setFileType("ACH"),
|
|
15518
|
+
className: cn(
|
|
15519
|
+
"flex flex-col items-center gap-3 p-4 border-2 rounded-lg transition-all",
|
|
15520
|
+
fileType === "ACH" ? "border-primary bg-primary/5" : "border-border hover:border-primary/50"
|
|
15521
|
+
),
|
|
15522
|
+
children: [
|
|
15523
|
+
/* @__PURE__ */ jsx(ArrowRightLeft, { className: "h-8 w-8 text-primary" }),
|
|
15524
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
15525
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "ACH" }),
|
|
15526
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: "ACH Originated/Received Entries Detail Report in .csv format" })
|
|
15527
|
+
] })
|
|
15528
|
+
]
|
|
15529
|
+
}
|
|
15530
|
+
),
|
|
15531
|
+
/* @__PURE__ */ jsxs(
|
|
15532
|
+
"button",
|
|
15533
|
+
{
|
|
15534
|
+
type: "button",
|
|
15535
|
+
onClick: () => setFileType("Wire"),
|
|
15536
|
+
className: cn(
|
|
15537
|
+
"flex flex-col items-center gap-3 p-4 border-2 rounded-lg transition-all",
|
|
15538
|
+
fileType === "Wire" ? "border-primary bg-primary/5" : "border-border hover:border-primary/50"
|
|
15539
|
+
),
|
|
15540
|
+
children: [
|
|
15541
|
+
/* @__PURE__ */ jsx(Zap, { className: "h-8 w-8 text-primary" }),
|
|
15542
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
15543
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "Wire" }),
|
|
15544
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground mt-1", children: "FedTransaction Analyzer report in .csv format" })
|
|
15545
|
+
] })
|
|
15546
|
+
]
|
|
15547
|
+
}
|
|
15548
|
+
)
|
|
15549
|
+
] })
|
|
15550
|
+
] }),
|
|
15551
|
+
fileType && /* @__PURE__ */ jsx("div", { className: "border-2 border-dashed border-border rounded-lg p-6", children: !selectedFile ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4", children: [
|
|
15552
|
+
/* @__PURE__ */ jsx(Upload, { className: "h-12 w-12 text-muted-foreground" }),
|
|
15553
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
15554
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Select a file to upload" }),
|
|
15555
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "CSV, TXT files supported" })
|
|
15556
|
+
] }),
|
|
15557
|
+
/* @__PURE__ */ jsx(
|
|
15558
|
+
"input",
|
|
15559
|
+
{
|
|
15560
|
+
ref: fileInputRef,
|
|
15561
|
+
type: "file",
|
|
15562
|
+
onChange: handleFileChange,
|
|
15563
|
+
className: "hidden",
|
|
15564
|
+
accept: ".csv,.txt",
|
|
15565
|
+
id: "recon-file-upload"
|
|
15566
|
+
}
|
|
15567
|
+
),
|
|
15568
|
+
/* @__PURE__ */ jsx(
|
|
15569
|
+
Button,
|
|
15570
|
+
{
|
|
15571
|
+
type: "button",
|
|
15572
|
+
variant: "outline",
|
|
15573
|
+
onClick: () => fileInputRef.current?.click(),
|
|
15574
|
+
children: "Select File"
|
|
15575
|
+
}
|
|
15576
|
+
)
|
|
15577
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
|
|
15578
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
|
|
15579
|
+
/* @__PURE__ */ jsx(File, { className: "h-8 w-8 text-primary flex-shrink-0" }),
|
|
15580
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
15581
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium truncate", children: selectedFile.name }),
|
|
15582
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
15583
|
+
(selectedFile.size / 1024).toFixed(2),
|
|
15584
|
+
" KB"
|
|
15585
|
+
] })
|
|
15586
|
+
] })
|
|
15587
|
+
] }),
|
|
15588
|
+
/* @__PURE__ */ jsx(
|
|
15589
|
+
Button,
|
|
15590
|
+
{
|
|
15591
|
+
type: "button",
|
|
15592
|
+
variant: "ghost",
|
|
15593
|
+
size: "icon",
|
|
15594
|
+
onClick: handleRemoveFile,
|
|
15595
|
+
className: "flex-shrink-0",
|
|
15596
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
|
|
15597
|
+
}
|
|
15598
|
+
)
|
|
15599
|
+
] }) })
|
|
15600
|
+
] }),
|
|
15601
|
+
/* @__PURE__ */ jsxs(DialogFooter, { children: [
|
|
15602
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => {
|
|
15603
|
+
handleReset();
|
|
15604
|
+
onOpenChange(false);
|
|
15605
|
+
}, children: "Cancel" }),
|
|
15606
|
+
/* @__PURE__ */ jsx(
|
|
15607
|
+
Button,
|
|
15608
|
+
{
|
|
15609
|
+
onClick: handleUpload,
|
|
15610
|
+
disabled: !selectedFile || !fileType || isUploading,
|
|
15611
|
+
children: isUploading ? "Uploading..." : "Upload"
|
|
15612
|
+
}
|
|
15613
|
+
)
|
|
15614
|
+
] })
|
|
15615
|
+
] }) });
|
|
15616
|
+
}
|
|
15617
|
+
|
|
15618
|
+
// src/lib/mock-data/recon-data.ts
|
|
15619
|
+
var mockReconUploads = [
|
|
15620
|
+
{
|
|
15621
|
+
id: "1",
|
|
15622
|
+
uploaded: "2025-11-14T10:30:00Z",
|
|
15623
|
+
fileName: "OE_ACH Originated Entries ...",
|
|
15624
|
+
type: "FED_ACH_CONF...",
|
|
15625
|
+
status: "Processed",
|
|
15626
|
+
requester: "bcontrucci@ssbp...",
|
|
15627
|
+
totalRecords: 2872,
|
|
15628
|
+
matchedRecords: 2872,
|
|
15629
|
+
exceptionRecords: 0,
|
|
15630
|
+
skippedRecords: 0,
|
|
15631
|
+
invalidRecords: 0
|
|
15632
|
+
},
|
|
15633
|
+
{
|
|
15634
|
+
id: "2",
|
|
15635
|
+
uploaded: "2025-11-14T09:15:00Z",
|
|
15636
|
+
fileName: "RER_ACH Received Entries ...",
|
|
15637
|
+
type: "FED_ACH_CONF...",
|
|
15638
|
+
status: "Processed",
|
|
15639
|
+
requester: "bcontrucci@ssbp...",
|
|
15640
|
+
totalRecords: 220,
|
|
15641
|
+
matchedRecords: 220,
|
|
15642
|
+
exceptionRecords: 0,
|
|
15643
|
+
skippedRecords: 0,
|
|
15644
|
+
invalidRecords: 0
|
|
15645
|
+
},
|
|
15646
|
+
{
|
|
15647
|
+
id: "3",
|
|
15648
|
+
uploaded: "2025-11-14T08:45:00Z",
|
|
15649
|
+
fileName: "243073959_335935.csv",
|
|
15650
|
+
type: "FED_WIRE_CON...",
|
|
15651
|
+
status: "Processed",
|
|
15652
|
+
requester: "bcontrucci@ssbp...",
|
|
15653
|
+
totalRecords: 304,
|
|
15654
|
+
matchedRecords: 220,
|
|
15655
|
+
exceptionRecords: 2,
|
|
15656
|
+
skippedRecords: 82,
|
|
15657
|
+
invalidRecords: 0
|
|
15658
|
+
},
|
|
15659
|
+
{
|
|
15660
|
+
id: "4",
|
|
15661
|
+
uploaded: "2025-11-13T16:20:00Z",
|
|
15662
|
+
fileName: "OE_ACH Originated Entries ...",
|
|
15663
|
+
type: "FED_ACH_CONF...",
|
|
15664
|
+
status: "Processed",
|
|
15665
|
+
requester: "bcontrucci@ssbp...",
|
|
15666
|
+
totalRecords: 4813,
|
|
15667
|
+
matchedRecords: 4811,
|
|
15668
|
+
exceptionRecords: 2,
|
|
15669
|
+
skippedRecords: 0,
|
|
15670
|
+
invalidRecords: 0
|
|
15671
|
+
},
|
|
15672
|
+
{
|
|
15673
|
+
id: "5",
|
|
15674
|
+
uploaded: "2025-11-13T15:10:00Z",
|
|
15675
|
+
fileName: "243073959_335846.csv",
|
|
15676
|
+
type: "FED_WIRE_CON...",
|
|
15677
|
+
status: "Processed",
|
|
15678
|
+
requester: "bcontrucci@ssbp...",
|
|
15679
|
+
totalRecords: 391,
|
|
15680
|
+
matchedRecords: 258,
|
|
15681
|
+
exceptionRecords: 2,
|
|
15682
|
+
skippedRecords: 131,
|
|
15683
|
+
invalidRecords: 0
|
|
15684
|
+
},
|
|
15685
|
+
{
|
|
15686
|
+
id: "6",
|
|
15687
|
+
uploaded: "2025-11-13T14:30:00Z",
|
|
15688
|
+
fileName: "RER_ACH Received Entries ...",
|
|
15689
|
+
type: "FED_ACH_CONF...",
|
|
15690
|
+
status: "Processed",
|
|
15691
|
+
requester: "bcontrucci@ssbp...",
|
|
15692
|
+
totalRecords: 227,
|
|
15693
|
+
matchedRecords: 221,
|
|
15694
|
+
exceptionRecords: 6,
|
|
15695
|
+
skippedRecords: 0,
|
|
15696
|
+
invalidRecords: 0
|
|
15697
|
+
},
|
|
15698
|
+
{
|
|
15699
|
+
id: "7",
|
|
15700
|
+
uploaded: "2025-11-13T13:45:00Z",
|
|
15701
|
+
fileName: "OE_ACH Originated Entries ...",
|
|
15702
|
+
type: "FED_ACH_CONF...",
|
|
15703
|
+
status: "Processed",
|
|
15704
|
+
requester: "bcontrucci@ssbp...",
|
|
15705
|
+
totalRecords: 6471,
|
|
15706
|
+
matchedRecords: 6471,
|
|
15707
|
+
exceptionRecords: 0,
|
|
15708
|
+
skippedRecords: 0,
|
|
15709
|
+
invalidRecords: 0
|
|
15710
|
+
},
|
|
15711
|
+
{
|
|
15712
|
+
id: "8",
|
|
15713
|
+
uploaded: "2025-11-12T11:20:00Z",
|
|
15714
|
+
fileName: "OE_ACH Originated Entries ...",
|
|
15715
|
+
type: "FED_ACH_CONF...",
|
|
15716
|
+
status: "Failed",
|
|
15717
|
+
requester: "bcontrucci@ssbp...",
|
|
15718
|
+
totalRecords: 0,
|
|
15719
|
+
matchedRecords: 0,
|
|
15720
|
+
exceptionRecords: 0,
|
|
15721
|
+
skippedRecords: 0,
|
|
15722
|
+
invalidRecords: 0
|
|
15723
|
+
},
|
|
15724
|
+
{
|
|
15725
|
+
id: "9",
|
|
15726
|
+
uploaded: "2025-11-12T10:15:00Z",
|
|
15727
|
+
fileName: "RER_ACH Received Entries ...",
|
|
15728
|
+
type: "FED_ACH_CONF...",
|
|
15729
|
+
status: "Processed",
|
|
15730
|
+
requester: "bcontrucci@ssbp...",
|
|
15731
|
+
totalRecords: 189,
|
|
15732
|
+
matchedRecords: 170,
|
|
15733
|
+
exceptionRecords: 19,
|
|
15734
|
+
skippedRecords: 0,
|
|
15735
|
+
invalidRecords: 0
|
|
15736
|
+
}
|
|
15737
|
+
];
|
|
15738
|
+
function ReconUpload() {
|
|
15739
|
+
const [sortField, setSortField] = useState("uploaded");
|
|
15740
|
+
const [sortDirection, setSortDirection] = useState("desc");
|
|
15741
|
+
const [uploadDialogOpen, setUploadDialogOpen] = useState(false);
|
|
15742
|
+
const handleSort = (field) => {
|
|
15743
|
+
if (sortField === field) {
|
|
15744
|
+
setSortDirection(sortDirection === "asc" ? "desc" : "asc");
|
|
15745
|
+
} else {
|
|
15746
|
+
setSortField(field);
|
|
15747
|
+
setSortDirection("desc");
|
|
15748
|
+
}
|
|
15749
|
+
};
|
|
15750
|
+
const sortedUploads = [...mockReconUploads].sort((a, b) => {
|
|
15751
|
+
const aValue = a[sortField];
|
|
15752
|
+
const bValue = b[sortField];
|
|
15753
|
+
if (aValue == null) return 1;
|
|
15754
|
+
if (bValue == null) return -1;
|
|
15755
|
+
if (sortDirection === "asc") {
|
|
15756
|
+
return aValue > bValue ? 1 : -1;
|
|
15757
|
+
} else {
|
|
15758
|
+
return aValue < bValue ? 1 : -1;
|
|
15759
|
+
}
|
|
15760
|
+
});
|
|
15761
|
+
const columns3 = [
|
|
15762
|
+
{
|
|
15763
|
+
key: "uploaded",
|
|
15764
|
+
title: "Uploaded",
|
|
15765
|
+
sortable: true,
|
|
15766
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: format(parseISO(value), "yyyy-MM-dd") })
|
|
15767
|
+
},
|
|
15768
|
+
{
|
|
15769
|
+
key: "fileName",
|
|
15770
|
+
title: "File Name",
|
|
15771
|
+
render: (value, row) => {
|
|
15772
|
+
const isACH = row.type.includes("ACH");
|
|
15773
|
+
const Icon2 = isACH ? ArrowRightLeft : Zap;
|
|
15774
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
15775
|
+
/* @__PURE__ */ jsx(Icon2, { className: "h-4 w-4 text-muted-foreground flex-shrink-0" }),
|
|
15776
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: value })
|
|
15777
|
+
] });
|
|
15778
|
+
}
|
|
15779
|
+
},
|
|
15780
|
+
{
|
|
15781
|
+
key: "status",
|
|
15782
|
+
title: "Status",
|
|
15783
|
+
render: (value) => {
|
|
15784
|
+
if (value === "Processed") {
|
|
15785
|
+
return /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5 text-green-600" });
|
|
15786
|
+
}
|
|
15787
|
+
if (value === "Failed") {
|
|
15788
|
+
return /* @__PURE__ */ jsx(XCircle, { className: "h-5 w-5 text-red-600" });
|
|
15789
|
+
}
|
|
15790
|
+
if (value === "Processing") {
|
|
15791
|
+
return /* @__PURE__ */ jsx(Circle, { className: "h-5 w-5 text-green-600" });
|
|
15792
|
+
}
|
|
15793
|
+
return /* @__PURE__ */ jsx("span", { className: "text-sm", children: value });
|
|
15794
|
+
}
|
|
15795
|
+
},
|
|
15796
|
+
{
|
|
15797
|
+
key: "requester",
|
|
15798
|
+
title: "Requester",
|
|
15799
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value })
|
|
15800
|
+
},
|
|
15801
|
+
{
|
|
15802
|
+
key: "totalRecords",
|
|
15803
|
+
title: "Total",
|
|
15804
|
+
sortable: true,
|
|
15805
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
|
|
15806
|
+
},
|
|
15807
|
+
{
|
|
15808
|
+
key: "matchedRecords",
|
|
15809
|
+
title: "Matched",
|
|
15810
|
+
sortable: true,
|
|
15811
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
|
|
15812
|
+
},
|
|
15813
|
+
{
|
|
15814
|
+
key: "exceptionRecords",
|
|
15815
|
+
title: "Exception",
|
|
15816
|
+
sortable: true,
|
|
15817
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
|
|
15818
|
+
},
|
|
15819
|
+
{
|
|
15820
|
+
key: "skippedRecords",
|
|
15821
|
+
title: "Skipped",
|
|
15822
|
+
sortable: true,
|
|
15823
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
|
|
15824
|
+
},
|
|
15825
|
+
{
|
|
15826
|
+
key: "invalidRecords",
|
|
15827
|
+
title: "Invalid",
|
|
15828
|
+
sortable: true,
|
|
15829
|
+
render: (value) => /* @__PURE__ */ jsx("span", { className: "text-sm", children: value.toLocaleString() })
|
|
15830
|
+
}
|
|
15831
|
+
];
|
|
15832
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-screen bg-gradient-subtle", children: [
|
|
15833
|
+
/* @__PURE__ */ jsx("div", { className: "flex-none border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 py-6 max-w-none", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
15834
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Recon File Uploads" }) }),
|
|
15835
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsxs(Button, { onClick: () => setUploadDialogOpen(true), children: [
|
|
15836
|
+
/* @__PURE__ */ jsx(Upload, { className: "mr-2 h-4 w-4" }),
|
|
15837
|
+
"Upload Recon file"
|
|
15838
|
+
] }) })
|
|
15839
|
+
] }) }) }),
|
|
15840
|
+
/* @__PURE__ */ jsx(UploadReconDialog, { open: uploadDialogOpen, onOpenChange: setUploadDialogOpen }),
|
|
15841
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "container mx-auto px-4 h-full max-w-none flex flex-col", children: /* @__PURE__ */ jsx("div", { className: "flex-1 mt-4 overflow-auto", children: /* @__PURE__ */ jsx(
|
|
15842
|
+
DataTable,
|
|
15843
|
+
{
|
|
15844
|
+
columns: columns3,
|
|
15845
|
+
data: sortedUploads,
|
|
15846
|
+
sortBy: sortField,
|
|
15847
|
+
sortDirection,
|
|
15848
|
+
onSort: handleSort
|
|
15849
|
+
}
|
|
15850
|
+
) }) }) })
|
|
15851
|
+
] });
|
|
15852
|
+
}
|
|
15853
|
+
|
|
15854
|
+
// src/lib/mock-data/recon-exception-data.ts
|
|
15855
|
+
var mockBraidTransactions = [
|
|
15856
|
+
{
|
|
15857
|
+
id: "BT-001",
|
|
15858
|
+
amount: 15e3,
|
|
15859
|
+
postDate: "2025-01-15",
|
|
15860
|
+
senderAccount: "1234567890",
|
|
15861
|
+
receiverAccount: "9876543210",
|
|
15862
|
+
type: "ACH"
|
|
15863
|
+
},
|
|
15864
|
+
{
|
|
15865
|
+
id: "BT-002",
|
|
15866
|
+
amount: 8500.5,
|
|
15867
|
+
postDate: "2025-01-15",
|
|
15868
|
+
senderAccount: "2345678901",
|
|
15869
|
+
receiverAccount: "8765432109",
|
|
15870
|
+
type: "ACH"
|
|
15871
|
+
},
|
|
15872
|
+
{
|
|
15873
|
+
id: "BT-003",
|
|
15874
|
+
amount: 25e3,
|
|
15875
|
+
postDate: "2025-01-16",
|
|
15876
|
+
senderAccount: "3456789012",
|
|
15877
|
+
receiverAccount: "7654321098",
|
|
15878
|
+
type: "ACH"
|
|
15879
|
+
},
|
|
15880
|
+
{
|
|
15881
|
+
id: "BT-004",
|
|
15882
|
+
amount: 5e4,
|
|
15883
|
+
postDate: "2025-01-15",
|
|
15884
|
+
senderAccount: "4567890123",
|
|
15885
|
+
receiverAccount: "6543210987",
|
|
15886
|
+
type: "Wire"
|
|
15887
|
+
},
|
|
15888
|
+
{
|
|
15889
|
+
id: "BT-005",
|
|
15890
|
+
amount: 12500.75,
|
|
15891
|
+
postDate: "2025-01-16",
|
|
15892
|
+
senderAccount: "5678901234",
|
|
15893
|
+
receiverAccount: "5432109876",
|
|
15894
|
+
type: "Wire"
|
|
15895
|
+
},
|
|
15896
|
+
{
|
|
15897
|
+
id: "BT-006",
|
|
15898
|
+
amount: 3200,
|
|
15899
|
+
postDate: "2025-01-17",
|
|
15900
|
+
senderAccount: "6789012345",
|
|
15901
|
+
receiverAccount: "4321098765",
|
|
15902
|
+
type: "ACH"
|
|
15903
|
+
}
|
|
15904
|
+
];
|
|
15905
|
+
var mockFedSettlements = [
|
|
15906
|
+
{
|
|
15907
|
+
id: "FS-001",
|
|
15908
|
+
amount: 15e3,
|
|
15909
|
+
settlementDate: "2025-01-15",
|
|
15910
|
+
receiverAccount: "9876543210",
|
|
15911
|
+
type: "ACH"
|
|
15912
|
+
},
|
|
15913
|
+
{
|
|
15914
|
+
id: "FS-002",
|
|
15915
|
+
amount: 8500.5,
|
|
15916
|
+
settlementDate: "2025-01-15",
|
|
15917
|
+
receiverAccount: "8765432109",
|
|
15918
|
+
type: "ACH"
|
|
15919
|
+
},
|
|
15920
|
+
{
|
|
15921
|
+
id: "FS-003",
|
|
15922
|
+
amount: 24999,
|
|
15923
|
+
settlementDate: "2025-01-16",
|
|
15924
|
+
receiverAccount: "7654321098",
|
|
15925
|
+
type: "ACH"
|
|
15926
|
+
},
|
|
15927
|
+
{
|
|
15928
|
+
id: "FS-004",
|
|
15929
|
+
amount: 5e4,
|
|
15930
|
+
settlementDate: "2025-01-15",
|
|
15931
|
+
receiverAccount: "6543210987",
|
|
15932
|
+
type: "Wire"
|
|
15933
|
+
},
|
|
15934
|
+
{
|
|
15935
|
+
id: "FS-005",
|
|
15936
|
+
amount: 12500.75,
|
|
15937
|
+
settlementDate: "2025-01-16",
|
|
15938
|
+
receiverAccount: "5432109876",
|
|
15939
|
+
type: "Wire"
|
|
15940
|
+
},
|
|
15941
|
+
{
|
|
15942
|
+
id: "FS-006",
|
|
15943
|
+
amount: 7800,
|
|
15944
|
+
settlementDate: "2025-01-17",
|
|
15945
|
+
receiverAccount: "3210987654",
|
|
15946
|
+
type: "ACH"
|
|
15947
|
+
}
|
|
15948
|
+
];
|
|
15949
|
+
function ReconExceptions() {
|
|
15950
|
+
const [fromDate, setFromDate] = useState();
|
|
15951
|
+
const [toDate, setToDate] = useState();
|
|
15952
|
+
const [transactionType, setTransactionType] = useState("ACH");
|
|
15953
|
+
const [braidData, setBraidData] = useState(mockBraidTransactions);
|
|
15954
|
+
const [fedData, setFedData] = useState(mockFedSettlements);
|
|
15955
|
+
const [selectedBraid, setSelectedBraid] = useState(null);
|
|
15956
|
+
const [selectedFed, setSelectedFed] = useState(null);
|
|
15957
|
+
const [dataLoaded, setDataLoaded] = useState(true);
|
|
15958
|
+
const [braidPage, setBraidPage] = useState(1);
|
|
15959
|
+
const [braidRowsPerPage, setBraidRowsPerPage] = useState(10);
|
|
15960
|
+
const [fedPage, setFedPage] = useState(1);
|
|
15961
|
+
const [fedRowsPerPage, setFedRowsPerPage] = useState(10);
|
|
15962
|
+
const handleSearch = () => {
|
|
15963
|
+
if (!fromDate || !toDate) {
|
|
15964
|
+
toast({
|
|
15965
|
+
title: "Missing Date Range",
|
|
15966
|
+
description: "Please select both from and to dates",
|
|
15967
|
+
variant: "destructive"
|
|
15968
|
+
});
|
|
15969
|
+
return;
|
|
15970
|
+
}
|
|
15971
|
+
const filteredBraid = mockBraidTransactions.filter((t) => {
|
|
15972
|
+
const tDate = new Date(t.postDate);
|
|
15973
|
+
return t.type === transactionType && tDate >= fromDate && tDate <= toDate;
|
|
15974
|
+
});
|
|
15975
|
+
const filteredFed = mockFedSettlements.filter((s) => {
|
|
15976
|
+
const sDate = new Date(s.settlementDate);
|
|
15977
|
+
return s.type === transactionType && sDate >= fromDate && sDate <= toDate;
|
|
15978
|
+
});
|
|
15979
|
+
setBraidData(filteredBraid);
|
|
15980
|
+
setFedData(filteredFed);
|
|
15981
|
+
setDataLoaded(true);
|
|
15982
|
+
setSelectedBraid(null);
|
|
15983
|
+
setSelectedFed(null);
|
|
15984
|
+
setBraidPage(1);
|
|
15985
|
+
setFedPage(1);
|
|
15986
|
+
toast({
|
|
15987
|
+
title: "Data Loaded",
|
|
15988
|
+
description: `Found ${filteredBraid.length} Braid transactions and ${filteredFed.length} Fed settlements`
|
|
15989
|
+
});
|
|
15990
|
+
};
|
|
15991
|
+
const handleMatch = () => {
|
|
15992
|
+
if (!selectedBraid || !selectedFed) {
|
|
15993
|
+
toast({
|
|
15994
|
+
title: "Selection Required",
|
|
15995
|
+
description: "Please select one transaction from each table",
|
|
15996
|
+
variant: "destructive"
|
|
15997
|
+
});
|
|
15998
|
+
return;
|
|
15999
|
+
}
|
|
16000
|
+
const braidTxn = braidData.find((t) => t.id === selectedBraid);
|
|
16001
|
+
const fedTxn = fedData.find((s) => s.id === selectedFed);
|
|
16002
|
+
setBraidData((prev) => prev.filter((t) => t.id !== selectedBraid));
|
|
16003
|
+
setFedData((prev) => prev.filter((s) => s.id !== selectedFed));
|
|
16004
|
+
setSelectedBraid(null);
|
|
16005
|
+
setSelectedFed(null);
|
|
16006
|
+
toast({
|
|
16007
|
+
title: "Transactions Matched",
|
|
16008
|
+
description: `Matched ${braidTxn?.id} with ${fedTxn?.id}`
|
|
16009
|
+
});
|
|
16010
|
+
};
|
|
16011
|
+
const canMatch = selectedBraid && selectedFed;
|
|
16012
|
+
const braidTotalPages = Math.ceil(braidData.length / braidRowsPerPage);
|
|
16013
|
+
const braidStartIndex = (braidPage - 1) * braidRowsPerPage;
|
|
16014
|
+
const braidPaginatedData = braidData.slice(braidStartIndex, braidStartIndex + braidRowsPerPage);
|
|
16015
|
+
const fedTotalPages = Math.ceil(fedData.length / fedRowsPerPage);
|
|
16016
|
+
const fedStartIndex = (fedPage - 1) * fedRowsPerPage;
|
|
16017
|
+
const fedPaginatedData = fedData.slice(fedStartIndex, fedStartIndex + fedRowsPerPage);
|
|
16018
|
+
return /* @__PURE__ */ jsx(Container, { size: "full", padding: "lg", children: /* @__PURE__ */ jsxs(Stack, { spacing: "lg", children: [
|
|
16019
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
16020
|
+
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight", children: "Exception Review" }),
|
|
16021
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-2", children: "Compare Braid posted transactions with Fed settlement records for reconciliation" })
|
|
16022
|
+
] }),
|
|
16023
|
+
/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "pt-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end gap-4", children: [
|
|
16024
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 min-w-[200px]", children: /* @__PURE__ */ jsx(
|
|
16025
|
+
DatePicker,
|
|
16026
|
+
{
|
|
16027
|
+
label: "From Date",
|
|
16028
|
+
date: fromDate,
|
|
16029
|
+
onDateChange: setFromDate,
|
|
16030
|
+
placeholder: "Select from date"
|
|
16031
|
+
}
|
|
16032
|
+
) }),
|
|
16033
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 min-w-[200px]", children: /* @__PURE__ */ jsx(
|
|
16034
|
+
DatePicker,
|
|
16035
|
+
{
|
|
16036
|
+
label: "To Date",
|
|
16037
|
+
date: toDate,
|
|
16038
|
+
onDateChange: setToDate,
|
|
16039
|
+
placeholder: "Select to date"
|
|
16040
|
+
}
|
|
16041
|
+
) }),
|
|
16042
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-[200px]", children: [
|
|
16043
|
+
/* @__PURE__ */ jsx(Label, { children: "Transaction Type" }),
|
|
16044
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-4 mt-2", children: [
|
|
16045
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
16046
|
+
/* @__PURE__ */ jsx(
|
|
16047
|
+
"input",
|
|
16048
|
+
{
|
|
16049
|
+
type: "radio",
|
|
16050
|
+
value: "ACH",
|
|
16051
|
+
checked: transactionType === "ACH",
|
|
16052
|
+
onChange: (e) => setTransactionType(e.target.value),
|
|
16053
|
+
className: "w-4 h-4 text-primary"
|
|
16054
|
+
}
|
|
16055
|
+
),
|
|
16056
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm", children: "ACH" })
|
|
16057
|
+
] }),
|
|
16058
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
16059
|
+
/* @__PURE__ */ jsx(
|
|
16060
|
+
"input",
|
|
16061
|
+
{
|
|
16062
|
+
type: "radio",
|
|
16063
|
+
value: "Wire",
|
|
16064
|
+
checked: transactionType === "Wire",
|
|
16065
|
+
onChange: (e) => setTransactionType(e.target.value),
|
|
16066
|
+
className: "w-4 h-4 text-primary"
|
|
16067
|
+
}
|
|
16068
|
+
),
|
|
16069
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm", children: "Wire" })
|
|
16070
|
+
] })
|
|
16071
|
+
] })
|
|
16072
|
+
] }),
|
|
16073
|
+
/* @__PURE__ */ jsxs(Button, { onClick: handleSearch, className: "gap-2", children: [
|
|
16074
|
+
/* @__PURE__ */ jsx(Search, { className: "h-4 w-4" }),
|
|
16075
|
+
"Search"
|
|
16076
|
+
] })
|
|
16077
|
+
] }) }) }),
|
|
16078
|
+
!dataLoaded ? /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "py-12 text-center text-muted-foreground", children: "Select date range and transaction type, then click Search to load data" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16079
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6", children: [
|
|
16080
|
+
/* @__PURE__ */ jsxs(Card, { className: "flex flex-col", children: [
|
|
16081
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "text-lg", children: [
|
|
16082
|
+
"Braid Posted Transactions (",
|
|
16083
|
+
braidData.length,
|
|
16084
|
+
")"
|
|
16085
|
+
] }) }),
|
|
16086
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col flex-1", children: [
|
|
16087
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-md border flex-1 overflow-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
16088
|
+
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
16089
|
+
/* @__PURE__ */ jsx(TableHead, { className: "w-12" }),
|
|
16090
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Amount" }),
|
|
16091
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Post Date" }),
|
|
16092
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Sender Account" }),
|
|
16093
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Receiver Account" })
|
|
16094
|
+
] }) }),
|
|
16095
|
+
/* @__PURE__ */ jsx(TableBody, { children: braidData.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 5, className: "text-center text-muted-foreground", children: "No transactions found" }) }) : braidPaginatedData.map((txn) => /* @__PURE__ */ jsxs(
|
|
16096
|
+
TableRow,
|
|
16097
|
+
{
|
|
16098
|
+
className: selectedBraid === txn.id ? "bg-muted" : "",
|
|
16099
|
+
children: [
|
|
16100
|
+
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
|
|
16101
|
+
"input",
|
|
16102
|
+
{
|
|
16103
|
+
type: "radio",
|
|
16104
|
+
name: "braid-select",
|
|
16105
|
+
checked: selectedBraid === txn.id,
|
|
16106
|
+
onChange: () => setSelectedBraid(txn.id),
|
|
16107
|
+
className: "w-4 h-4 text-primary cursor-pointer"
|
|
16108
|
+
}
|
|
16109
|
+
) }),
|
|
16110
|
+
/* @__PURE__ */ jsxs(TableCell, { className: "font-medium", children: [
|
|
16111
|
+
"$",
|
|
16112
|
+
txn.amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
|
16113
|
+
] }),
|
|
16114
|
+
/* @__PURE__ */ jsx(TableCell, { children: format(new Date(txn.postDate), "MMM dd, yyyy") }),
|
|
16115
|
+
/* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: txn.senderAccount }),
|
|
16116
|
+
/* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: txn.receiverAccount })
|
|
16117
|
+
]
|
|
16118
|
+
},
|
|
16119
|
+
txn.id
|
|
16120
|
+
)) })
|
|
16121
|
+
] }) }),
|
|
16122
|
+
braidData.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4", children: [
|
|
16123
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
16124
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Rows per page:" }),
|
|
16125
|
+
/* @__PURE__ */ jsxs(
|
|
16126
|
+
"select",
|
|
16127
|
+
{
|
|
16128
|
+
value: braidRowsPerPage,
|
|
16129
|
+
onChange: (e) => {
|
|
16130
|
+
setBraidRowsPerPage(Number(e.target.value));
|
|
16131
|
+
setBraidPage(1);
|
|
16132
|
+
},
|
|
16133
|
+
className: "h-8 w-16 rounded-md border border-input bg-background px-2 text-sm",
|
|
16134
|
+
children: [
|
|
16135
|
+
/* @__PURE__ */ jsx("option", { value: 10, children: "10" }),
|
|
16136
|
+
/* @__PURE__ */ jsx("option", { value: 25, children: "25" }),
|
|
16137
|
+
/* @__PURE__ */ jsx("option", { value: 50, children: "50" })
|
|
16138
|
+
]
|
|
16139
|
+
}
|
|
16140
|
+
)
|
|
16141
|
+
] }),
|
|
16142
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
16143
|
+
/* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
16144
|
+
"Page ",
|
|
16145
|
+
braidPage,
|
|
16146
|
+
" of ",
|
|
16147
|
+
braidTotalPages
|
|
16148
|
+
] }),
|
|
16149
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
|
|
16150
|
+
/* @__PURE__ */ jsx(
|
|
16151
|
+
Button,
|
|
16152
|
+
{
|
|
16153
|
+
variant: "outline",
|
|
16154
|
+
size: "sm",
|
|
16155
|
+
onClick: () => setBraidPage(Math.max(1, braidPage - 1)),
|
|
16156
|
+
disabled: braidPage === 1,
|
|
16157
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
|
|
16158
|
+
}
|
|
16159
|
+
),
|
|
16160
|
+
/* @__PURE__ */ jsx(
|
|
16161
|
+
Button,
|
|
16162
|
+
{
|
|
16163
|
+
variant: "outline",
|
|
16164
|
+
size: "sm",
|
|
16165
|
+
onClick: () => setBraidPage(Math.min(braidTotalPages, braidPage + 1)),
|
|
16166
|
+
disabled: braidPage === braidTotalPages,
|
|
16167
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
|
|
16168
|
+
}
|
|
16169
|
+
)
|
|
16170
|
+
] })
|
|
16171
|
+
] })
|
|
16172
|
+
] })
|
|
16173
|
+
] })
|
|
16174
|
+
] }),
|
|
16175
|
+
/* @__PURE__ */ jsxs(Card, { className: "flex flex-col", children: [
|
|
16176
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "text-lg", children: [
|
|
16177
|
+
"Fed Settlement Records (",
|
|
16178
|
+
fedData.length,
|
|
16179
|
+
")"
|
|
16180
|
+
] }) }),
|
|
16181
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col flex-1", children: [
|
|
16182
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-md border flex-1 overflow-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
16183
|
+
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
16184
|
+
/* @__PURE__ */ jsx(TableHead, { className: "w-12" }),
|
|
16185
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Amount" }),
|
|
16186
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Settlement Date" }),
|
|
16187
|
+
/* @__PURE__ */ jsx(TableHead, { children: "Receiver Account" })
|
|
16188
|
+
] }) }),
|
|
16189
|
+
/* @__PURE__ */ jsx(TableBody, { children: fedData.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: 4, className: "text-center text-muted-foreground", children: "No settlements found" }) }) : fedPaginatedData.map((settlement) => /* @__PURE__ */ jsxs(
|
|
16190
|
+
TableRow,
|
|
16191
|
+
{
|
|
16192
|
+
className: selectedFed === settlement.id ? "bg-muted" : "",
|
|
16193
|
+
children: [
|
|
16194
|
+
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
|
|
16195
|
+
"input",
|
|
16196
|
+
{
|
|
16197
|
+
type: "radio",
|
|
16198
|
+
name: "fed-select",
|
|
16199
|
+
checked: selectedFed === settlement.id,
|
|
16200
|
+
onChange: () => setSelectedFed(settlement.id),
|
|
16201
|
+
className: "w-4 h-4 text-primary cursor-pointer"
|
|
16202
|
+
}
|
|
16203
|
+
) }),
|
|
16204
|
+
/* @__PURE__ */ jsxs(TableCell, { className: "font-medium", children: [
|
|
16205
|
+
"$",
|
|
16206
|
+
settlement.amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
|
16207
|
+
] }),
|
|
16208
|
+
/* @__PURE__ */ jsx(TableCell, { children: format(new Date(settlement.settlementDate), "MMM dd, yyyy") }),
|
|
16209
|
+
/* @__PURE__ */ jsx(TableCell, { className: "font-mono text-sm", children: settlement.receiverAccount })
|
|
16210
|
+
]
|
|
16211
|
+
},
|
|
16212
|
+
settlement.id
|
|
16213
|
+
)) })
|
|
16214
|
+
] }) }),
|
|
16215
|
+
fedData.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4", children: [
|
|
16216
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
16217
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Rows per page:" }),
|
|
16218
|
+
/* @__PURE__ */ jsxs(
|
|
16219
|
+
"select",
|
|
16220
|
+
{
|
|
16221
|
+
value: fedRowsPerPage,
|
|
16222
|
+
onChange: (e) => {
|
|
16223
|
+
setFedRowsPerPage(Number(e.target.value));
|
|
16224
|
+
setFedPage(1);
|
|
16225
|
+
},
|
|
16226
|
+
className: "h-8 w-16 rounded-md border border-input bg-background px-2 text-sm",
|
|
16227
|
+
children: [
|
|
16228
|
+
/* @__PURE__ */ jsx("option", { value: 10, children: "10" }),
|
|
16229
|
+
/* @__PURE__ */ jsx("option", { value: 25, children: "25" }),
|
|
16230
|
+
/* @__PURE__ */ jsx("option", { value: 50, children: "50" })
|
|
16231
|
+
]
|
|
16232
|
+
}
|
|
16233
|
+
)
|
|
16234
|
+
] }),
|
|
16235
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
16236
|
+
/* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
16237
|
+
"Page ",
|
|
16238
|
+
fedPage,
|
|
16239
|
+
" of ",
|
|
16240
|
+
fedTotalPages
|
|
16241
|
+
] }),
|
|
16242
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
|
|
16243
|
+
/* @__PURE__ */ jsx(
|
|
16244
|
+
Button,
|
|
16245
|
+
{
|
|
16246
|
+
variant: "outline",
|
|
16247
|
+
size: "sm",
|
|
16248
|
+
onClick: () => setFedPage(Math.max(1, fedPage - 1)),
|
|
16249
|
+
disabled: fedPage === 1,
|
|
16250
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
|
|
16251
|
+
}
|
|
16252
|
+
),
|
|
16253
|
+
/* @__PURE__ */ jsx(
|
|
16254
|
+
Button,
|
|
16255
|
+
{
|
|
16256
|
+
variant: "outline",
|
|
16257
|
+
size: "sm",
|
|
16258
|
+
onClick: () => setFedPage(Math.min(fedTotalPages, fedPage + 1)),
|
|
16259
|
+
disabled: fedPage === fedTotalPages,
|
|
16260
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
|
|
16261
|
+
}
|
|
16262
|
+
)
|
|
16263
|
+
] })
|
|
16264
|
+
] })
|
|
16265
|
+
] })
|
|
16266
|
+
] })
|
|
16267
|
+
] })
|
|
16268
|
+
] }),
|
|
16269
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(
|
|
16270
|
+
Button,
|
|
16271
|
+
{
|
|
16272
|
+
size: "lg",
|
|
16273
|
+
onClick: handleMatch,
|
|
16274
|
+
disabled: !canMatch,
|
|
16275
|
+
className: "min-w-[200px]",
|
|
16276
|
+
children: "Match Selected"
|
|
16277
|
+
}
|
|
16278
|
+
) })
|
|
16279
|
+
] })
|
|
16280
|
+
] }) });
|
|
16281
|
+
}
|
|
14714
16282
|
|
|
14715
|
-
export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AccountDetail_default as AccountDetail, Accounts_default as Accounts, AddressForm, AlertDetail_default as AlertDetail, AlertDetailRouter, AlertDocuments, AlertHeaderControls, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessDetailView, BusinessFiltersSheet, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, CIPStatusBadge, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, Checkbox, ContactInfoCard, Container, ContextSection, Counterparties_default as Counterparties, CounterpartiesView, CounterpartyBasicInfo, CounterpartyDetail_default as CounterpartyDetail, CounterpartyDetailView, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, CreateBusinessView, Create_default2 as CreateCounterparty, Create_default3 as CreateIndividual, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, IndividualDetail_default as IndividualDetail, Individuals_default as Individuals, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound,
|
|
16283
|
+
export { ACHBankCard, ACHBasicInfoCard, ACHDetailsSection, ACHTransferSection, AccountCard, AccountDetail_default as AccountDetail, Accounts_default as Accounts, AddressForm, AlertDetail_default as AlertDetail, AlertDetailRouter, AlertDocuments, AlertHeaderControls, AlertNotes, AlertTimeline, Alerts_default as Alerts, AppSidebar, Badge, BankAddressCard, BankingDetailsCard, BasicInfoCard, BasicInfoSection, BeneficiaryAddress, BeneficiaryCard, BeneficiaryDomesticWire, Breadcrumb, BusinessDetail_default as BusinessDetail, BusinessDetailView, BusinessFiltersSheet, BusinessProfileCard, BusinessStatusCard, BusinessTypeBadge, Businesses_default as Businesses, Button, CIPStatusBadge, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Cases_default as Cases, Checkbox, ContactInfoCard, Container, ContextSection, Counterparties_default as Counterparties, CounterpartiesView, CounterpartyBasicInfo, CounterpartyDetail_default as CounterpartyDetail, CounterpartyDetailView, CounterpartyProfileCard, CounterpartyRecordsCard, CounterpartyTypeBadge, Create_default as CreateBusiness, CreateBusinessView, Create_default2 as CreateCounterparty, Create_default3 as CreateIndividual, CreateVelocityLimit, Dashboard_default as Dashboard, DashboardDemo, DataGrid, DataTable, DetailPageLayout, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EditableFormCard, EditableInfoField, EnhancedInput, EnhancedSelect, EnhancedTextarea, EntityCard, FormCard, FormField, FormInput, FormProvider, FormSection, FormSelect, IndividualDetail_default as IndividualDetail, Individuals_default as Individuals, InfoField, IntermediaryCard, IntermediaryFI, IntermediaryFIAddress, JsonViewer, Label, ListPage, MainLayout, MetricCard, NewTransaction, NotFound_default as NotFound, OFACAlertView, OriginatorCard, OriginatorFI, OriginatorFIAddress, PageLayout, PatternLibrary, PaymentInformationSection, Popover, PopoverContent, PopoverTrigger, ReceiverCard, ReconExceptions, ReconUpload, ResolveAlertDialog, ResponsiveGrid, ScrollArea, ScrollBar, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Stack, Statement, StatementHeader, StatementView, StatusBadge, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TransactionDetail_default as TransactionDetail, TransactionHistory_default as TransactionHistory, TransactionTypeBadge, UIKit, UIKitShowcase, VelocityLimitDetail, VelocityLimits, WireDetailsSection, WireTransferSection, badgeVariants, buttonVariants, cardVariants, downloadCSV, generateStatementCSV, inputVariants, reducer, textareaVariants, toast, useAlertDetail, useCounterpartyEntity, useEditState, useFormWithEditState, useIsMobile, useSidebar, useToast };
|
|
14716
16284
|
//# sourceMappingURL=index.js.map
|
|
14717
16285
|
//# sourceMappingURL=index.js.map
|