strapi-plugin-payone-provider 4.6.9 → 5.6.10

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.
Files changed (104) hide show
  1. package/README.md +156 -11
  2. package/admin/src/components/Initializer/index.jsx +3 -3
  3. package/admin/src/components/PluginIcon/index.jsx +3 -3
  4. package/admin/src/index.js +33 -11
  5. package/admin/src/pages/App/components/AppHeader.jsx +17 -32
  6. package/admin/src/pages/App/components/AppTabs.jsx +36 -162
  7. package/admin/src/pages/App/components/ApplePayBtn.jsx +9 -11
  8. package/admin/src/pages/App/components/ApplePayConfig.jsx +221 -161
  9. package/admin/src/pages/App/components/ApplePayConfigPanel.jsx +33 -45
  10. package/admin/src/pages/App/components/DocsPanel.jsx +66 -1726
  11. package/admin/src/pages/App/components/GooglePayConfig.jsx +136 -169
  12. package/admin/src/pages/App/components/GooglePayConfigPanel.jsx +37 -55
  13. package/admin/src/pages/App/components/GooglePaybutton.jsx +101 -43
  14. package/admin/src/pages/App/components/RenderInput.jsx +94 -0
  15. package/admin/src/pages/App/components/StatusBadge.jsx +24 -71
  16. package/admin/src/pages/App/components/configuration/ConfigurationFields.jsx +255 -0
  17. package/admin/src/pages/App/components/configuration/ConfigurationPanel.jsx +54 -0
  18. package/admin/src/pages/App/components/configuration/TestConnection.jsx +130 -0
  19. package/admin/src/pages/App/components/docs/ApplePaySection.jsx +260 -0
  20. package/admin/src/pages/App/components/docs/BaseUrlSection.jsx +53 -0
  21. package/admin/src/pages/App/components/docs/CaptureRefundSection.jsx +113 -0
  22. package/admin/src/pages/App/components/docs/CodeBlock.jsx +59 -0
  23. package/admin/src/pages/App/components/docs/CreditCardSection.jsx +93 -0
  24. package/admin/src/pages/App/components/docs/GooglePaySection.jsx +248 -0
  25. package/admin/src/pages/App/components/docs/PayPalSection.jsx +116 -0
  26. package/admin/src/pages/App/components/docs/PaymentMethodsSection.jsx +55 -0
  27. package/admin/src/pages/App/components/docs/TableOfContents.jsx +47 -0
  28. package/admin/src/pages/App/components/docs/TestCredentialsSection.jsx +304 -0
  29. package/admin/src/pages/App/components/docs/ThreeDSecureSection.jsx +188 -0
  30. package/admin/src/pages/App/components/icons/BankIcon.jsx +1 -1
  31. package/admin/src/pages/App/components/icons/ChevronDownIcon.jsx +1 -1
  32. package/admin/src/pages/App/components/icons/ChevronUpIcon.jsx +1 -1
  33. package/admin/src/pages/App/components/icons/CreditCardIcon.jsx +1 -1
  34. package/admin/src/pages/App/components/icons/ErrorIcon.jsx +1 -1
  35. package/admin/src/pages/App/components/icons/InfoIcon.jsx +1 -1
  36. package/admin/src/pages/App/components/icons/MarkCircle.jsx +19 -0
  37. package/admin/src/pages/App/components/icons/PaymentIcon.jsx +1 -1
  38. package/admin/src/pages/App/components/icons/PendingIcon.jsx +1 -1
  39. package/admin/src/pages/App/components/icons/PersonIcon.jsx +1 -1
  40. package/admin/src/pages/App/components/icons/SuccessIcon.jsx +1 -1
  41. package/admin/src/pages/App/components/icons/WalletIcon.jsx +1 -1
  42. package/admin/src/pages/App/components/payment-actions/ApplePayPanel.jsx +51 -0
  43. package/admin/src/pages/App/components/payment-actions/AuthorizationForm.jsx +341 -0
  44. package/admin/src/pages/App/components/payment-actions/CaptureForm.jsx +128 -0
  45. package/admin/src/pages/App/components/{paymentActions → payment-actions}/CardDetailsInput.jsx +77 -72
  46. package/admin/src/pages/App/components/payment-actions/PaymentActionsPanel.jsx +194 -0
  47. package/admin/src/pages/App/components/payment-actions/PaymentMethodSelector.jsx +313 -0
  48. package/admin/src/pages/App/components/payment-actions/PaymentResult.jsx +133 -0
  49. package/admin/src/pages/App/components/payment-actions/PreauthorizationForm.jsx +280 -0
  50. package/admin/src/pages/App/components/payment-actions/RefundForm.jsx +121 -0
  51. package/admin/src/pages/App/components/transaction-history/FiltersPanel.jsx +145 -0
  52. package/admin/src/pages/App/components/transaction-history/HistoryPanel.jsx +50 -0
  53. package/admin/src/pages/App/components/transaction-history/TransactionTable.jsx +163 -0
  54. package/admin/src/pages/App/components/transaction-history/details/TransactionDetails.jsx +156 -0
  55. package/admin/src/pages/App/components/{TransactionHistoryItem.jsx → transaction-history/details/TransactionHistoryItem.jsx} +16 -28
  56. package/admin/src/pages/App/index.jsx +27 -70
  57. package/admin/src/pages/App/styles.css +46 -169
  58. package/admin/src/pages/constants/paymentConstants.js +52 -16
  59. package/admin/src/pages/hooks/use-system-theme.js +27 -0
  60. package/admin/src/pages/hooks/usePaymentActions.js +273 -210
  61. package/admin/src/pages/hooks/useSettings.js +87 -48
  62. package/admin/src/pages/hooks/useTransactionHistory.js +105 -108
  63. package/admin/src/pages/utils/api.js +57 -72
  64. package/admin/src/pages/utils/applePayConstants.js +2 -28
  65. package/admin/src/pages/utils/countryLanguageUtils.js +280 -0
  66. package/admin/src/pages/utils/getInputComponent.jsx +225 -0
  67. package/admin/src/pages/utils/googlePayConstants.js +2 -9
  68. package/admin/src/pages/utils/paymentUtils.js +13 -26
  69. package/admin/src/pages/utils/tooltipHelpers.js +18 -0
  70. package/admin/src/pages/utils/transactionTableUtils.js +60 -0
  71. package/package.json +8 -14
  72. package/server/config/index.js +18 -2
  73. package/server/controllers/payone.js +98 -31
  74. package/server/policies/index.js +2 -1
  75. package/server/policies/is-auth.js +9 -3
  76. package/server/policies/is-payone-notification.js +31 -0
  77. package/server/policies/isSuperAdmin.js +7 -5
  78. package/server/routes/index.js +11 -0
  79. package/server/services/paymentService.js +6 -22
  80. package/server/services/payone.js +10 -3
  81. package/server/services/settingsService.js +13 -3
  82. package/server/services/testConnectionService.js +11 -73
  83. package/server/services/transactionService.js +62 -99
  84. package/server/services/transactionStatusService.js +87 -0
  85. package/server/utils/normalize.js +0 -12
  86. package/server/utils/paymentMethodParams.js +0 -1
  87. package/server/utils/requestBuilder.js +34 -5
  88. package/server/utils/responseParser.js +9 -14
  89. package/strapi-admin.js +3 -1
  90. package/admin/src/pages/App/components/ConfigurationPanel.jsx +0 -517
  91. package/admin/src/pages/App/components/CustomerInfoPopover.jsx +0 -147
  92. package/admin/src/pages/App/components/HistoryPanel.jsx +0 -94
  93. package/admin/src/pages/App/components/PaymentActionsPanel.jsx +0 -280
  94. package/admin/src/pages/App/components/RawDataPopover.jsx +0 -113
  95. package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTableFilters.jsx +0 -113
  96. package/admin/src/pages/App/components/TransactionHistoryTable/TransactionHistoryTablePagination.jsx +0 -180
  97. package/admin/src/pages/App/components/TransactionHistoryTable/index.jsx +0 -225
  98. package/admin/src/pages/App/components/paymentActions/ApplePayPanel.jsx +0 -95
  99. package/admin/src/pages/App/components/paymentActions/AuthorizationForm.jsx +0 -197
  100. package/admin/src/pages/App/components/paymentActions/CaptureForm.jsx +0 -65
  101. package/admin/src/pages/App/components/paymentActions/PaymentMethodSelector.jsx +0 -306
  102. package/admin/src/pages/App/components/paymentActions/PaymentResult.jsx +0 -192
  103. package/admin/src/pages/App/components/paymentActions/PreauthorizationForm.jsx +0 -142
  104. package/admin/src/pages/App/components/paymentActions/RefundForm.jsx +0 -90
@@ -1,15 +1,7 @@
1
- import React, { useEffect, useRef } from "react";
2
- import {
3
- Box,
4
- Flex,
5
- Typography,
6
- TextInput,
7
- Select,
8
- Option,
9
- Link
10
- } from "@strapi/design-system";
11
-
12
- // 3DS Test Cards that require redirect (challenge workflow)
1
+ import * as React from "react";
2
+ import { Box, Flex, Typography, Link } from "@strapi/design-system";
3
+ import RenderInput from "../RenderInput";
4
+
13
5
  const TEST_3DS_CARDS = [
14
6
  {
15
7
  name: "VISA - 3DS 2.0 (Challenge)",
@@ -17,7 +9,7 @@ const TEST_3DS_CARDS = [
17
9
  cardpan: "4716971940353559",
18
10
  cardexpiredate: "2512",
19
11
  cardcvc2: "123",
20
- description: "3DS 2.0 with challenge - Password: 12345"
12
+ description: "3DS 2.0 with challenge - Password: 12345",
21
13
  },
22
14
  {
23
15
  name: "Mastercard - 3DS 2.0 (Challenge)",
@@ -25,16 +17,8 @@ const TEST_3DS_CARDS = [
25
17
  cardpan: "5404127720739582",
26
18
  cardexpiredate: "2512",
27
19
  cardcvc2: "123",
28
- description: "3DS 2.0 with challenge - Password: 12345"
20
+ description: "3DS 2.0 with challenge - Password: 12345",
29
21
  },
30
- // {
31
- // name: "AMEX - 3DS 2.0 (Challenge)",
32
- // cardtype: "A",
33
- // cardpan: "375144726036141",
34
- // cardexpiredate: "2512",
35
- // cardcvc2: "1234",
36
- // description: "3DS 2.0 with challenge - Password: 12345"
37
- // }
38
22
  ];
39
23
 
40
24
  const CardDetailsInput = ({
@@ -45,19 +29,19 @@ const CardDetailsInput = ({
45
29
  cardexpiredate,
46
30
  setCardexpiredate,
47
31
  cardcvc2,
48
- setCardcvc2
32
+ setCardcvc2,
49
33
  }) => {
50
34
  const [selectedTestCard, setSelectedTestCard] = React.useState("");
51
- const isUpdatingFromTestCard = useRef(false);
35
+ const isUpdatingFromTestCard = React.useRef(false);
52
36
 
53
- useEffect(() => {
37
+ React.useEffect(() => {
54
38
  if (isUpdatingFromTestCard.current) {
55
39
  isUpdatingFromTestCard.current = false;
56
40
  return;
57
41
  }
58
42
 
59
43
  const matchingCard = TEST_3DS_CARDS.find(
60
- card => card.cardtype === cardtype && card.cardpan === cardpan
44
+ (card) => card.cardtype === cardtype && card.cardpan === cardpan
61
45
  );
62
46
 
63
47
  if (matchingCard) {
@@ -76,8 +60,8 @@ const CardDetailsInput = ({
76
60
  return;
77
61
  }
78
62
 
79
- const selectedCard = TEST_3DS_CARDS.find(card =>
80
- `${card.cardtype}-${card.cardpan}` === value
63
+ const selectedCard = TEST_3DS_CARDS.find(
64
+ (card) => `${card.cardtype}-${card.cardpan}` === value
81
65
  );
82
66
 
83
67
  if (selectedCard) {
@@ -95,88 +79,110 @@ const CardDetailsInput = ({
95
79
  <Box>
96
80
  <Flex direction="column" alignItems="stretch" gap={4}>
97
81
  <Flex direction="row" gap={2} alignItems="flex-start">
98
- <Select
99
- label="3D Secure Test Cards"
82
+ <RenderInput
100
83
  name="testCard"
101
- value={selectedTestCard}
84
+ label="3D Secure Test Cards"
85
+ value={selectedTestCard || ""}
86
+ onChange={(e) => {
87
+ const value = e.target?.value || e;
88
+ handleTestCardSelect(value);
89
+ }}
90
+ inputType="select"
102
91
  placeholder="Select a 3DS test card to auto-fill"
103
- hint="These cards will trigger 3DS authentication redirect. Password: 12345"
104
- onChange={handleTestCardSelect}
105
- className="payment-input"
106
- >
107
- <Option value="">-- Select a test card --</Option>
108
- {TEST_3DS_CARDS.map((card, index) => (
109
- <Option key={index} value={`${card.cardtype}-${card.cardpan}`}>
110
- {card.name} - {card.description}
111
- </Option>
112
- ))}
113
- </Select>
92
+ tooltipContent="These cards will trigger 3DS authentication redirect. Password: 12345"
93
+ options={[
94
+ { value: "", label: "-- Select a test card --" },
95
+ ...TEST_3DS_CARDS.map((card, index) => ({
96
+ value: `${card.cardtype}-${card.cardpan}`,
97
+ label: `${card.name} - ${card.description}`,
98
+ })),
99
+ ]}
100
+ />
114
101
  </Flex>
115
102
 
116
103
  <Flex gap={4} wrap="wrap" alignItems="flex-start">
117
- <Select
118
- label="Card Type *"
104
+ <RenderInput
119
105
  name="cardtype"
106
+ label="Card Type *"
120
107
  value={cardtype || ""}
121
- onChange={(value) => setCardtype(value)}
108
+ onChange={(e) => {
109
+ const value = e.target?.value || e;
110
+ setCardtype(value);
111
+ }}
112
+ inputType="select"
122
113
  required
123
- hint="Select credit card type"
124
- className="payment-input"
114
+ tooltipContent="Select credit card type"
115
+ options={[
116
+ { value: "V", label: "VISA" },
117
+ { value: "M", label: "Mastercard" },
118
+ { value: "A", label: "American Express" },
119
+ { value: "J", label: "JCB" },
120
+ { value: "O", label: "Maestro International" },
121
+ { value: "D", label: "Diners Club" },
122
+ ]}
125
123
  style={{ flex: 1, minWidth: "200px" }}
126
- >
127
- <Option value="V">VISA</Option>
128
- <Option value="M">Mastercard</Option>
129
- <Option value="A">American Express</Option>
130
- <Option value="J">JCB</Option>
131
- <Option value="O">Maestro International</Option>
132
- <Option value="D">Diners Club</Option>
133
- </Select>
134
-
135
- <TextInput
136
- label="Card Number (PAN) *"
124
+ />
125
+
126
+ <RenderInput
137
127
  name="cardpan"
128
+ label="Card Number (PAN) *"
138
129
  value={cardpan || ""}
139
130
  onChange={(e) => setCardpan(e.target.value)}
131
+ inputType="textInput"
140
132
  placeholder="Enter card number"
141
- hint="Credit card number (PAN)"
142
133
  required
143
- className="payment-input"
134
+ tooltipContent="Credit card number (PAN)"
144
135
  style={{ flex: 2, minWidth: "300px" }}
145
136
  />
146
137
  </Flex>
147
138
 
148
139
  <Flex gap={4} wrap="wrap" alignItems="flex-start">
149
- <TextInput
150
- label="Expiry Date *"
140
+ <RenderInput
151
141
  name="cardexpiredate"
142
+ label="Expiry Date *"
152
143
  value={cardexpiredate || ""}
153
144
  onChange={(e) => setCardexpiredate(e.target.value)}
145
+ inputType="textInput"
154
146
  placeholder="YYMM (e.g., 2512)"
155
- hint="Format: YYMM (e.g., 2512 = December 2025)"
156
147
  required
148
+ tooltipContent="Format: YYMM (e.g., 2512 = December 2025)"
149
+ type="text"
157
150
  maxLength={4}
158
- className="payment-input"
159
151
  style={{ flex: 1, minWidth: "150px" }}
160
152
  />
161
153
 
162
- <TextInput
163
- label="CVC/CVV *"
154
+ <RenderInput
164
155
  name="cardcvc2"
156
+ label="CVC/CVV *"
165
157
  value={cardcvc2 || ""}
166
158
  onChange={(e) => setCardcvc2(e.target.value)}
159
+ inputType="textInput"
167
160
  placeholder="123 or 1234"
168
- hint={cardtype === "A" ? "4 digits for AMEX" : "3 digits for other cards"}
169
161
  required
162
+ tooltipContent={
163
+ cardtype === "A"
164
+ ? "4 digits for AMEX"
165
+ : "3 digits for other cards"
166
+ }
167
+ type="text"
170
168
  maxLength={4}
171
- className="payment-input"
172
169
  style={{ flex: 1, minWidth: "150px" }}
173
170
  />
174
171
  </Flex>
175
172
 
176
173
  <Box paddingTop={2}>
177
- <Typography variant="pi" textColor="neutral600" style={{ textAlign: "left" }}>
178
- For all test card numbers (positive, negative, frictionless 3DS), 3D Secure test data, and detailed documentation, please refer to the{" "}
179
- <Link href="https://docs.payone.com/security-risk-management/3d-secure#/" target="_blank" rel="noopener noreferrer">
174
+ <Typography
175
+ variant="pi"
176
+ textColor="neutral600"
177
+ style={{ textAlign: "left" }}
178
+ >
179
+ For all test card numbers (positive, negative, frictionless 3DS), 3D
180
+ Secure test data, and detailed documentation, please refer to the{" "}
181
+ <Link
182
+ href="https://docs.payone.com/security-risk-management/3d-secure#/"
183
+ target="_blank"
184
+ rel="noopener noreferrer"
185
+ >
180
186
  Payone 3D Secure Documentation
181
187
  </Link>
182
188
  .
@@ -188,4 +194,3 @@ const CardDetailsInput = ({
188
194
  };
189
195
 
190
196
  export default CardDetailsInput;
191
-
@@ -0,0 +1,194 @@
1
+ import * as React from "react";
2
+ import { Box, Flex, Typography, Accordion } from "@strapi/design-system";
3
+ import PaymentMethodSelector from "./PaymentMethodSelector";
4
+ import PreauthorizationForm from "./PreauthorizationForm";
5
+ import AuthorizationForm from "./AuthorizationForm";
6
+ import CaptureForm from "./CaptureForm";
7
+ import RefundForm from "./RefundForm";
8
+ import PaymentResult from "./PaymentResult";
9
+ import ApplePayPanel from "./ApplePayPanel";
10
+
11
+ const PaymentActionsPanel = ({
12
+ onNavigateToConfig,
13
+ settings,
14
+ paymentActions,
15
+ }) => {
16
+ const mode = (settings?.settings?.mode || "test").toLowerCase();
17
+ const isLiveMode = mode === "live";
18
+
19
+ React.useEffect(() => {
20
+ if (isLiveMode && paymentActions.paymentState.paymentMethod !== "apl") {
21
+ paymentActions.handleFieldChange("paymentMethod", "apl");
22
+ }
23
+ }, [
24
+ isLiveMode,
25
+ paymentActions.paymentState.paymentMethod,
26
+ paymentActions.handleFieldChange,
27
+ ]);
28
+
29
+ if (isLiveMode && paymentActions.paymentState.paymentMethod !== "apl") {
30
+ return (
31
+ <Box
32
+ style={{
33
+ display: "flex",
34
+ flexDirection: "column",
35
+ alignItems: "center",
36
+ justifyContent: "center",
37
+ gap: "8px",
38
+ marginTop: "44px",
39
+ }}
40
+ >
41
+ <Typography variant="pi" textColor="neutral600">
42
+ Test Payments are only works in test mode.
43
+ </Typography>
44
+ <Typography variant="pi" textColor="neutral600">
45
+ Please switch to test mode in plugin settings to use test payments.
46
+ </Typography>
47
+ </Box>
48
+ );
49
+ }
50
+
51
+ if (paymentActions.paymentState.paymentMethod === "apl") {
52
+ return (
53
+ <ApplePayPanel
54
+ onNavigateToConfig={onNavigateToConfig}
55
+ isLiveMode={isLiveMode}
56
+ paymentActions={paymentActions}
57
+ settings={settings}
58
+ />
59
+ );
60
+ }
61
+
62
+ return (
63
+ <Box
64
+ className="payment-container"
65
+ paddingTop={8}
66
+ paddingBottom={8}
67
+ paddingLeft={8}
68
+ paddingRight={8}
69
+ >
70
+ <Flex direction="column" alignItems="stretch" gap={6}>
71
+ <Box
72
+ style={{
73
+ display: "flex",
74
+ flexDirection: "column",
75
+ alignItems: "flex-start",
76
+ gap: "8px",
77
+ }}
78
+ >
79
+ <Typography
80
+ variant="beta"
81
+ as="h2"
82
+ className="payment-title"
83
+ style={{ fontSize: "20px", marginBottom: "4px" }}
84
+ >
85
+ Payment Actions
86
+ </Typography>
87
+ <Typography
88
+ variant="pi"
89
+ textColor="neutral600"
90
+ className="payment-subtitle"
91
+ style={{ fontSize: "14px" }}
92
+ >
93
+ Process payments, captures, and refunds with multiple payment
94
+ methods
95
+ </Typography>
96
+ </Box>
97
+
98
+ <PaymentMethodSelector
99
+ paymentActions={paymentActions}
100
+ onNavigateToConfig={onNavigateToConfig}
101
+ isLiveMode={isLiveMode}
102
+ />
103
+
104
+ <Accordion.Root>
105
+ {/* Preauthorization */}
106
+ <Accordion.Item value="preauthorization">
107
+ <Accordion.Header>
108
+ <Accordion.Trigger>Preauthorization</Accordion.Trigger>
109
+ </Accordion.Header>
110
+ <Accordion.Content>
111
+ <Box
112
+ className="payment-form-section"
113
+ style={{
114
+ opacity: isLiveMode ? 0.5 : 1,
115
+ pointerEvents: isLiveMode ? "none" : "auto",
116
+ }}
117
+ >
118
+ <PreauthorizationForm
119
+ paymentActions={paymentActions}
120
+ settings={settings}
121
+ />
122
+ </Box>
123
+ </Accordion.Content>
124
+ </Accordion.Item>
125
+ {/* Authorization */}
126
+ <Accordion.Item value="authorization">
127
+ <Accordion.Header>
128
+ <Accordion.Trigger>Authorization</Accordion.Trigger>
129
+ </Accordion.Header>
130
+ <Accordion.Content>
131
+ <Box className="payment-form-section">
132
+ <AuthorizationForm
133
+ paymentActions={paymentActions}
134
+ settings={settings}
135
+ />
136
+ </Box>
137
+ </Accordion.Content>
138
+ </Accordion.Item>
139
+ {/* Capture */}
140
+ <Accordion.Item value="capture">
141
+ <Accordion.Header>
142
+ <Accordion.Trigger>Capture</Accordion.Trigger>
143
+ </Accordion.Header>
144
+ <Accordion.Content>
145
+ <Box
146
+ className="payment-form-section"
147
+ style={{
148
+ opacity: isLiveMode ? 0.5 : 1,
149
+ pointerEvents: isLiveMode ? "none" : "auto",
150
+ }}
151
+ >
152
+ <CaptureForm paymentActions={paymentActions} />
153
+ </Box>
154
+ </Accordion.Content>
155
+ </Accordion.Item>
156
+ {/* Refund */}
157
+ <Accordion.Item value="refund">
158
+ <Accordion.Header>
159
+ <Accordion.Trigger>Refund</Accordion.Trigger>
160
+ </Accordion.Header>
161
+ <Accordion.Content>
162
+ <Box
163
+ className="payment-form-section"
164
+ style={{
165
+ opacity: isLiveMode ? 0.5 : 1,
166
+ pointerEvents: isLiveMode ? "none" : "auto",
167
+ }}
168
+ >
169
+ <RefundForm paymentActions={paymentActions} />
170
+ </Box>
171
+ </Accordion.Content>
172
+ </Accordion.Item>
173
+ </Accordion.Root>
174
+
175
+ <hr className="payment-divider" />
176
+
177
+ <PaymentResult
178
+ paymentError={paymentActions.paymentError}
179
+ paymentResult={paymentActions.paymentResult}
180
+ />
181
+
182
+ <Box paddingTop={4}>
183
+ <Typography variant="sigma" textColor="neutral600">
184
+ Note: These payment actions allow you to test the complete payment
185
+ flow: Preauthorization → Capture → Refund. Make sure to use valid
186
+ Transaction IDs for capture and refund operations.
187
+ </Typography>
188
+ </Box>
189
+ </Flex>
190
+ </Box>
191
+ );
192
+ };
193
+
194
+ export default PaymentActionsPanel;