@blocklet/payment-react 1.20.16 → 1.20.18

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 (102) hide show
  1. package/.aigne/doc-smith/config.yaml +7 -1
  2. package/.aigne/doc-smith/upload-cache.yaml +441 -0
  3. package/docs/components-business-auto-topup.ja.md +187 -0
  4. package/docs/components-business-auto-topup.zh-TW.md +187 -0
  5. package/docs/components-business-auto-topup.zh.md +187 -0
  6. package/docs/components-business-overdue-invoice-payment.ja.md +196 -0
  7. package/docs/components-business-overdue-invoice-payment.zh-TW.md +197 -0
  8. package/docs/components-business-overdue-invoice-payment.zh.md +197 -0
  9. package/docs/components-business-resume-subscription.ja.md +190 -0
  10. package/docs/components-business-resume-subscription.zh-TW.md +190 -0
  11. package/docs/components-business-resume-subscription.zh.md +190 -0
  12. package/docs/components-business.ja.md +21 -0
  13. package/docs/components-business.zh-TW.md +21 -0
  14. package/docs/components-business.zh.md +21 -0
  15. package/docs/components-checkout-checkout-donate.ja.md +259 -0
  16. package/docs/components-checkout-checkout-donate.zh-TW.md +259 -0
  17. package/docs/components-checkout-checkout-donate.zh.md +259 -0
  18. package/docs/components-checkout-checkout-form.ja.md +163 -0
  19. package/docs/components-checkout-checkout-form.zh-TW.md +163 -0
  20. package/docs/components-checkout-checkout-form.zh.md +163 -0
  21. package/docs/components-checkout-checkout-table.ja.md +148 -0
  22. package/docs/components-checkout-checkout-table.zh-TW.md +148 -0
  23. package/docs/components-checkout-checkout-table.zh.md +149 -0
  24. package/docs/components-checkout.ja.md +65 -0
  25. package/docs/components-checkout.zh-TW.md +65 -0
  26. package/docs/components-checkout.zh.md +65 -0
  27. package/docs/components-history-credit-grants-list.ja.md +73 -0
  28. package/docs/components-history-credit-grants-list.zh-TW.md +73 -0
  29. package/docs/components-history-credit-grants-list.zh.md +73 -0
  30. package/docs/components-history-credit-transactions-list.ja.md +106 -0
  31. package/docs/components-history-credit-transactions-list.zh-TW.md +106 -0
  32. package/docs/components-history-credit-transactions-list.zh.md +106 -0
  33. package/docs/components-history-invoice-list.ja.md +110 -0
  34. package/docs/components-history-invoice-list.zh-TW.md +110 -0
  35. package/docs/components-history-invoice-list.zh.md +110 -0
  36. package/docs/components-history-payment-list.ja.md +44 -0
  37. package/docs/components-history-payment-list.zh-TW.md +44 -0
  38. package/docs/components-history-payment-list.zh.md +44 -0
  39. package/docs/components-history.ja.md +67 -0
  40. package/docs/components-history.zh-TW.md +67 -0
  41. package/docs/components-history.zh.md +67 -0
  42. package/docs/components-ui-form-elements-address-form.ja.md +121 -0
  43. package/docs/components-ui-form-elements-address-form.zh-TW.md +121 -0
  44. package/docs/components-ui-form-elements-address-form.zh.md +121 -0
  45. package/docs/components-ui-form-elements-country-select.ja.md +126 -0
  46. package/docs/components-ui-form-elements-country-select.zh-TW.md +126 -0
  47. package/docs/components-ui-form-elements-country-select.zh.md +126 -0
  48. package/docs/components-ui-form-elements-currency-selector.ja.md +108 -0
  49. package/docs/components-ui-form-elements-currency-selector.zh-TW.md +108 -0
  50. package/docs/components-ui-form-elements-currency-selector.zh.md +108 -0
  51. package/docs/components-ui-form-elements-phone-input.ja.md +138 -0
  52. package/docs/components-ui-form-elements-phone-input.zh-TW.md +138 -0
  53. package/docs/components-ui-form-elements-phone-input.zh.md +139 -0
  54. package/docs/components-ui-form-elements.ja.md +91 -0
  55. package/docs/components-ui-form-elements.zh-TW.md +91 -0
  56. package/docs/components-ui-form-elements.zh.md +91 -0
  57. package/docs/components-ui-payment-summary.ja.md +109 -0
  58. package/docs/components-ui-payment-summary.zh-TW.md +109 -0
  59. package/docs/components-ui-payment-summary.zh.md +109 -0
  60. package/docs/components-ui-pricing-table.ja.md +140 -0
  61. package/docs/components-ui-pricing-table.zh-TW.md +140 -0
  62. package/docs/components-ui-pricing-table.zh.md +140 -0
  63. package/docs/components-ui.ja.md +71 -0
  64. package/docs/components-ui.zh-TW.md +71 -0
  65. package/docs/components-ui.zh.md +71 -0
  66. package/docs/components.ja.md +122 -0
  67. package/docs/components.zh-TW.md +122 -0
  68. package/docs/components.zh.md +122 -0
  69. package/docs/getting-started.ja.md +84 -0
  70. package/docs/getting-started.zh-TW.md +84 -0
  71. package/docs/getting-started.zh.md +84 -0
  72. package/docs/guides-theming.ja.md +213 -0
  73. package/docs/guides-theming.zh-TW.md +213 -0
  74. package/docs/guides-theming.zh.md +213 -0
  75. package/docs/guides-utilities.ja.md +197 -0
  76. package/docs/guides-utilities.zh-TW.md +197 -0
  77. package/docs/guides-utilities.zh.md +197 -0
  78. package/docs/guides.ja.md +18 -0
  79. package/docs/guides.zh-TW.md +18 -0
  80. package/docs/guides.zh.md +18 -0
  81. package/docs/hooks-use-mobile.ja.md +84 -0
  82. package/docs/hooks-use-mobile.zh-TW.md +84 -0
  83. package/docs/hooks-use-mobile.zh.md +84 -0
  84. package/docs/hooks-use-subscription.ja.md +111 -0
  85. package/docs/hooks-use-subscription.zh-TW.md +111 -0
  86. package/docs/hooks-use-subscription.zh.md +110 -0
  87. package/docs/hooks.ja.md +14 -0
  88. package/docs/hooks.zh-TW.md +14 -0
  89. package/docs/hooks.zh.md +14 -0
  90. package/docs/overview.ja.md +80 -0
  91. package/docs/overview.zh-TW.md +80 -0
  92. package/docs/overview.zh.md +80 -0
  93. package/docs/providers-donate-provider.ja.md +153 -0
  94. package/docs/providers-donate-provider.zh-TW.md +153 -0
  95. package/docs/providers-donate-provider.zh.md +153 -0
  96. package/docs/providers-payment-provider.ja.md +191 -0
  97. package/docs/providers-payment-provider.zh-TW.md +191 -0
  98. package/docs/providers-payment-provider.zh.md +191 -0
  99. package/docs/providers.ja.md +42 -0
  100. package/docs/providers.zh-TW.md +42 -0
  101. package/docs/providers.zh.md +42 -0
  102. package/package.json +3 -3
@@ -0,0 +1,187 @@
1
+ # 自動儲值元件
2
+
3
+ 自動儲值功能透過在使用者點數餘額低於指定閾值時自動儲值,確保服務不中斷。此功能由兩個主要元件管理:`AutoTopup`,用於顯示目前的設定;以及 `AutoTopupModal`,提供設定介面。
4
+
5
+ ## 自動儲值工作流程
6
+
7
+ 下圖說明了使用者設定自動儲值功能的典型流程。使用者與 `AutoTopup` 顯示元件互動,該元件會啟動 `AutoTopupModal` 以進行變更。然後,彈出視窗會與後端 API 通訊以儲存設定。
8
+
9
+ ```d2
10
+ direction: down
11
+
12
+ User: {
13
+ shape: c4-person
14
+ }
15
+
16
+ Application-UI: {
17
+ label: "應用程式 UI"
18
+ shape: rectangle
19
+
20
+ AutoTopup-Card: {
21
+ label: "AutoTopup 元件"
22
+ shape: rectangle
23
+ }
24
+
25
+ AutoTopup-Modal: {
26
+ label: "AutoTopupModal"
27
+ shape: rectangle
28
+ }
29
+ }
30
+
31
+ Payment-API: {
32
+ label: "支付 API"
33
+ shape: cylinder
34
+ }
35
+
36
+ User -> Application-UI.AutoTopup-Card: "1. 查看自動儲值狀態"
37
+ Application-UI.AutoTopup-Card -> Application-UI.AutoTopup-Modal: "2. 點擊「設定」開啟彈出視窗"
38
+ User -> Application-UI.AutoTopup-Modal: "3. 調整設定並儲存"
39
+ Application-UI.AutoTopup-Modal -> Payment-API: "4. 提交設定"
40
+ Payment-API -> Payment-API: "5. 儲存設定"
41
+ Payment-API -> Application-UI.AutoTopup-Modal: "6. 回傳成功"
42
+ Application-UI.AutoTopup-Modal -> Application-UI.AutoTopup-Card: "7. 呼叫 onSuccess,UI 更新"
43
+
44
+ ```
45
+
46
+ ## AutoTopup
47
+
48
+ `AutoTopup` 元件是一個顯示卡片,用於展示特定貨幣的自動儲值狀態,並提供設定入口。它支援多種渲染模式以提供靈活性。
49
+
50
+ ### Props
51
+
52
+ | Prop | Type | Description |
53
+ | --- | --- | --- |
54
+ | `currencyId` | `string` | **必需。** 要管理的點數貨幣 ID。 |
55
+ | `onConfigChange` | `(config: AutoRechargeConfig) => void` | 可選。設定成功更新時觸發的回呼函式。 |
56
+ | `mode` | `'default' \| 'simple' \| 'custom'` | 可選。渲染模式。預設為 `'default'`。<br/>- `default`:一個完整展開的卡片,顯示所有詳細資訊。<br/>- `simple`:一個緊湊、收合的視圖,帶有一個按鈕以展開詳細資訊。<br/>- `custom`:使用 `children` render prop 渲染自訂 UI。 |
57
+ | `sx` | `SxProps` | 可選。應用於元件的自訂 MUI 樣式。 |
58
+ | `children` | `(openModal, config, paymentData, loading) => React.ReactNode` | 可選。僅在 `mode` 為 `'custom'` 時使用的 render prop 函式。它會接收建構自訂介面所需的工具。 |
59
+
60
+ ### 使用方式
61
+
62
+ #### 簡易模式
63
+
64
+ 這是最常見的使用情境,提供一個緊湊的顯示方式,使用者可以展開以查看更多詳細資訊。
65
+
66
+ ```tsx CreditManagement.tsx icon=logos:react
67
+ import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
68
+
69
+ function CreditManagement({ session, currencyId }) {
70
+ const handleConfigChange = (config) => {
71
+ console.log('自動儲值設定已更新:', config);
72
+ // 您可能想在這裡刷新使用者的餘額
73
+ };
74
+
75
+ return (
76
+ <PaymentProvider session={session}>
77
+ <AutoTopup
78
+ currencyId={currencyId}
79
+ mode="simple"
80
+ onConfigChange={handleConfigChange}
81
+ sx={{ mt: 2 }}
82
+ />
83
+ </PaymentProvider>
84
+ );
85
+ }
86
+ ```
87
+
88
+ #### 自訂模式
89
+
90
+ 若要完全控制 UI,請使用帶有 render prop 的 `custom` 模式。這讓您可以將自動儲值狀態和設定觸發器無縫整合到您現有的版面中。
91
+
92
+ ```tsx CustomAutoTopupDisplay.tsx icon=logos:react
93
+ import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
94
+ import { Button, Card, CardContent, Typography } from '@mui/material';
95
+
96
+ function CustomAutoTopupDisplay({ session, currencyId }) {
97
+ return (
98
+ <PaymentProvider session={session}>
99
+ <AutoTopup currencyId={currencyId} mode="custom">
100
+ {(openModal, config, paymentData, loading) => {
101
+ if (loading) return <div>正在載入設定...</div>;
102
+
103
+ return (
104
+ <Card variant="outlined">
105
+ <CardContent>
106
+ <Typography variant="h6">智慧自動儲值</Typography>
107
+ {config?.enabled ? (
108
+ <Typography color="success.main">
109
+ 狀態:啟用中
110
+ </Typography>
111
+ ) : (
112
+ <Typography color="text.secondary">
113
+ 狀態:未啟用
114
+ </Typography>
115
+ )}
116
+ <Button onClick={openModal} variant="contained" sx={{ mt: 2 }}>
117
+ {config?.enabled ? '修改設定' : '立即設定'}
118
+ </Button>
119
+ </CardContent>
120
+ </Card>
121
+ );
122
+ }}
123
+ </AutoTopup>
124
+ </PaymentProvider>
125
+ );
126
+ }
127
+ ```
128
+
129
+ ## AutoTopupModal
130
+
131
+ `AutoTopupModal` 是一個對話框元件,允許使用者啟用、停用和設定自動儲值功能的所有方面,包括觸發閾值、購買金額和支付方式。
132
+
133
+ ### Props
134
+
135
+ | Prop | Type | Description |
136
+ | --- | --- | --- |
137
+ | `open` | `boolean` | **必需。** 控制彈出視窗是否可見。 |
138
+ | `onClose` | `() => void` | **必需。** 關閉彈出視窗的回呼函式。 |
139
+ | `currencyId` | `string` | **必需。** 正在設定的點數貨幣 ID。 |
140
+ | `customerId` | `string` | 可選。客戶的 DID。預設為 `PaymentProvider` session 中的使用者。 |
141
+ | `onSuccess` | `(config: AutoRechargeConfig) => void` | 可選。設定成功儲存後觸發的回呼。 |
142
+ | `onError` | `(error: any) => void` | 可選。提交過程中發生錯誤時觸發的回呼。 |
143
+ | `defaultEnabled` | `boolean` | 可選。若為 `true`,當為新設定開啟彈出視窗時,「啟用自動儲值」的開關將預設為開啟。 |
144
+
145
+ ### 使用方式
146
+
147
+ 這是一個完整的範例,說明如何管理 `AutoTopupModal` 的狀態並處理其回呼。
148
+
149
+ ```tsx AutoRechargeSettings.tsx icon=logos:react
150
+ import { PaymentProvider, AutoTopupModal } from '@blocklet/payment-react';
151
+ import { useState } from 'react';
152
+ import { Button } from '@mui/material';
153
+
154
+ function AutoRechargeSettings({ session, currencyId }) {
155
+ const [isModalOpen, setModalOpen] = useState(false);
156
+
157
+ const handleSuccess = (config) => {
158
+ console.log('設定已成功儲存:', config);
159
+ setModalOpen(false);
160
+ // 可選,顯示成功提示或重新整理資料
161
+ };
162
+
163
+ const handleError = (error) => {
164
+ console.error('儲存設定失敗:', error);
165
+ // 可選,向使用者顯示錯誤訊息
166
+ };
167
+
168
+ return (
169
+ <PaymentProvider session={session}>
170
+ <Button variant="contained" onClick={() => setModalOpen(true)}>
171
+ 設定自動儲值
172
+ </Button>
173
+
174
+ <AutoTopupModal
175
+ open={isModalOpen}
176
+ onClose={() => setModalOpen(false)}
177
+ currencyId={currencyId}
178
+ onSuccess={handleSuccess}
179
+ onError={handleError}
180
+ defaultEnabled={true}
181
+ />
182
+ </PaymentProvider>
183
+ );
184
+ }
185
+ ```
186
+
187
+ 此設定提供了一種強大的方式來管理自動儲值功能,讓使用者可以控制,同時確保維持其服務點數的流暢體驗。
@@ -0,0 +1,187 @@
1
+ # 自动充值组件
2
+
3
+ 自动充值功能通过在用户信用余额低于指定阈值时自动为其充值,确保服务不中断。该功能由两个主要组件管理:`AutoTopup`,用于显示当前配置;以及 `AutoTopupModal`,用于提供设置界面。
4
+
5
+ ## 自动充值工作流
6
+
7
+ 下图展示了配置自动充值功能的典型用户流程。用户与 `AutoTopup` 显示组件交互,该组件会启动 `AutoTopupModal` 以进行更改。然后,该模态框与后端 API 通信以保存配置。
8
+
9
+ ```d2
10
+ direction: down
11
+
12
+ User: {
13
+ shape: c4-person
14
+ }
15
+
16
+ Application-UI: {
17
+ label: "应用程序 UI"
18
+ shape: rectangle
19
+
20
+ AutoTopup-Card: {
21
+ label: "AutoTopup 组件"
22
+ shape: rectangle
23
+ }
24
+
25
+ AutoTopup-Modal: {
26
+ label: "AutoTopupModal"
27
+ shape: rectangle
28
+ }
29
+ }
30
+
31
+ Payment-API: {
32
+ label: "支付 API"
33
+ shape: cylinder
34
+ }
35
+
36
+ User -> Application-UI.AutoTopup-Card: "1. 查看自动充值状态"
37
+ Application-UI.AutoTopup-Card -> Application-UI.AutoTopup-Modal: "2. 点击“配置”打开模态框"
38
+ User -> Application-UI.AutoTopup-Modal: "3. 调整设置并保存"
39
+ Application-UI.AutoTopup-Modal -> Payment-API: "4. 提交配置"
40
+ Payment-API -> Payment-API: "5. 保存配置"
41
+ Payment-API -> Application-UI.AutoTopup-Modal: "6. 返回成功"
42
+ Application-UI.AutoTopup-Modal -> Application-UI.AutoTopup-Card: "7. 调用 onSuccess,UI 更新"
43
+
44
+ ```
45
+
46
+ ## AutoTopup
47
+
48
+ `AutoTopup` 组件是一个显示卡片,用于展示特定货币的当前自动充值状态,并提供配置入口。它支持多种渲染模式以实现灵活性。
49
+
50
+ ### 属性
51
+
52
+ | Prop | Type | Description |
53
+ | --- | --- | --- |
54
+ | `currencyId` | `string` | **必需。** 要管理的信用货币的 ID。 |
55
+ | `onConfigChange` | `(config: AutoRechargeConfig) => void` | 可选。配置成功更新时触发的回调函数。 |
56
+ | `mode` | `'default' \| 'simple' \| 'custom'` | 可选。渲染模式。默认为 `'default'`。<br/>- `default`:完全展开的卡片,显示所有详细信息。<br/>- `simple`:紧凑的折叠视图,带有一个展开详情的按钮。<br/>- `custom`:使用 `children` render prop 渲染自定义 UI。 |
57
+ | `sx` | `SxProps` | 可选。应用于组件的自定义 MUI 样式。 |
58
+ | `children` | `(openModal, config, paymentData, loading) => React.ReactNode` | 可选。仅在 `mode` 为 `'custom'` 时使用的 render prop 函数。它接收构建自定义界面所需的工具。 |
59
+
60
+ ### 用法
61
+
62
+ #### 简单模式
63
+
64
+ 这是最常见的用例,提供一个紧凑的显示,用户可以展开以查看更多详细信息。
65
+
66
+ ```tsx CreditManagement.tsx icon=logos:react
67
+ import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
68
+
69
+ function CreditManagement({ session, currencyId }) {
70
+ const handleConfigChange = (config) => {
71
+ console.log('自动充值配置已更新:', config);
72
+ // 你可能需要在此处刷新用户余额
73
+ };
74
+
75
+ return (
76
+ <PaymentProvider session={session}>
77
+ <AutoTopup
78
+ currencyId={currencyId}
79
+ mode="simple"
80
+ onConfigChange={handleConfigChange}
81
+ sx={{ mt: 2 }}
82
+ />
83
+ </PaymentProvider>
84
+ );
85
+ }
86
+ ```
87
+
88
+ #### 自定义模式
89
+
90
+ 要完全控制 UI,请使用带有 render prop 的 `custom` 模式。这允许您将自动充值状态和配置触发器无缝集成到现有布局中。
91
+
92
+ ```tsx CustomAutoTopupDisplay.tsx icon=logos:react
93
+ import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
94
+ import { Button, Card, CardContent, Typography } from '@mui/material';
95
+
96
+ function CustomAutoTopupDisplay({ session, currencyId }) {
97
+ return (
98
+ <PaymentProvider session={session}>
99
+ <AutoTopup currencyId={currencyId} mode="custom">
100
+ {(openModal, config, paymentData, loading) => {
101
+ if (loading) return <div>加载配置中...</div>;
102
+
103
+ return (
104
+ <Card variant="outlined">
105
+ <CardContent>
106
+ <Typography variant="h6">智能自动充值</Typography>
107
+ {config?.enabled ? (
108
+ <Typography color="success.main">
109
+ 状态:已激活
110
+ </Typography>
111
+ ) : (
112
+ <Typography color="text.secondary">
113
+ 状态:未激活
114
+ </Typography>
115
+ )}
116
+ <Button onClick={openModal} variant="contained" sx={{ mt: 2 }}>
117
+ {config?.enabled ? '修改设置' : '立即设置'}
118
+ </Button>
119
+ </CardContent>
120
+ </Card>
121
+ );
122
+ }}
123
+ </AutoTopup>
124
+ </PaymentProvider>
125
+ );
126
+ }
127
+ ```
128
+
129
+ ## AutoTopupModal
130
+
131
+ `AutoTopupModal` 是一个对话框组件,允许用户启用、禁用和配置自动充值功能的所有方面,包括触发阈值、购买金额和支付方式。
132
+
133
+ ### 属性
134
+
135
+ | Prop | Type | Description |
136
+ | --- | --- | --- |
137
+ | `open` | `boolean` | **必需。** 控制模态框是否可见。 |
138
+ | `onClose` | `() => void` | **必需。** 关闭模态框的回调函数。 |
139
+ | `currencyId` | `string` | **必需。** 正在配置的信用货币的 ID。 |
140
+ | `customerId` | `string` | 可选。客户的 DID。默认为 `PaymentProvider` 会话中的用户。 |
141
+ | `onSuccess` | `(config: AutoRechargeConfig) => void` | 可选。配置成功保存后触发的回调。 |
142
+ | `onError` | `(error: any) => void` | 可选。提交过程中发生错误时触发的回调。 |
143
+ | `defaultEnabled` | `boolean` | 可选。如果为 `true`,当为新配置打开模态框时,“启用自动充值”开关将默认开启。 |
144
+
145
+ ### 用法
146
+
147
+ 以下是一个关于如何管理 `AutoTopupModal` 状态并处理其回调的完整示例。
148
+
149
+ ```tsx AutoRechargeSettings.tsx icon=logos:react
150
+ import { PaymentProvider, AutoTopupModal } from '@blocklet/payment-react';
151
+ import { useState } from 'react';
152
+ import { Button } from '@mui/material';
153
+
154
+ function AutoRechargeSettings({ session, currencyId }) {
155
+ const [isModalOpen, setModalOpen] = useState(false);
156
+
157
+ const handleSuccess = (config) => {
158
+ console.log('配置已成功保存:', config);
159
+ setModalOpen(false);
160
+ // 可选地,显示成功提示或刷新数据
161
+ };
162
+
163
+ const handleError = (error) => {
164
+ console.error('保存配置失败:', error);
165
+ // 可选地,向用户显示错误消息
166
+ };
167
+
168
+ return (
169
+ <PaymentProvider session={session}>
170
+ <Button variant="contained" onClick={() => setModalOpen(true)}>
171
+ 配置自动充值
172
+ </Button>
173
+
174
+ <AutoTopupModal
175
+ open={isModalOpen}
176
+ onClose={() => setModalOpen(false)}
177
+ currencyId={currencyId}
178
+ onSuccess={handleSuccess}
179
+ onError={handleError}
180
+ defaultEnabled={true}
181
+ />
182
+ </PaymentProvider>
183
+ );
184
+ }
185
+ ```
186
+
187
+ 此设置提供了一种强大的方式来管理自动充值功能,在给予用户控制权的同时,确保了维持其服务信用的流畅体验。
@@ -0,0 +1,196 @@
1
+ # OverdueInvoicePayment
2
+
3
+ `OverdueInvoicePayment`コンポーネントは、特定の顧客またはサブスクリプションの支払い期限を過ぎた請求書の支払いを処理するために設計された専門ツールです。期限切れの請求書を自動的に取得し、ユーザーに未払いの支払いを清算するための明確なインターフェースを提供することで、プロセスを簡素化します。
4
+
5
+ このコンポーネントは2つのモードで動作します。迅速な統合のためにあらかじめ構築されたダイアログを表示するデフォルトモードと、レンダープロップを使用して独自のユーザーインターフェースを構築する柔軟性を提供するカスタムモードです。
6
+
7
+ ## 仕組み
8
+
9
+ このコンポーネントは、データの取得から最終的なトランザクションの確認まで、支払い期限切れのプロセス全体を調整します。
10
+
11
+ ```d2 Overdue Payment Flow
12
+ direction: down
13
+
14
+ User: {
15
+ shape: c4-person
16
+ }
17
+
18
+ Client-App: {
19
+ label: "クライアントアプリケーション"
20
+ shape: rectangle
21
+
22
+ OverdueInvoicePayment-Component: {
23
+ label: "OverdueInvoicePayment コンポーネント"
24
+ shape: rectangle
25
+ }
26
+ }
27
+
28
+ Payment-Backend: {
29
+ label: "決済バックエンド"
30
+ shape: cylinder
31
+ }
32
+
33
+ DID-Wallet: {
34
+ label: "DID ウォレット"
35
+ icon: "https://www.arcblock.io/image-bin/uploads/37198ddc4a0b9e91e5c1c821ab895a34.svg"
36
+ }
37
+
38
+ User -> Client-App.OverdueInvoicePayment-Component: "1. コンポーネントをレンダリング"
39
+ Client-App.OverdueInvoicePayment-Component -> Payment-Backend: "2. 期限切れの請求書を取得"
40
+ Payment-Backend -> Client-App.OverdueInvoicePayment-Component: "3. 請求書の概要を返す"
41
+ Client-App.OverdueInvoicePayment-Component -> User: "4. 支払いダイアログを表示"
42
+ User -> Client-App.OverdueInvoicePayment-Component: "5. 「今すぐ支払う」をクリック"
43
+ Client-App.OverdueInvoicePayment-Component -> DID-Wallet: "6. 接続セッションを開く (collect-batch)"
44
+ User -> DID-Wallet: "7. 支払いを承認"
45
+ DID-Wallet -> Client-App.OverdueInvoicePayment-Component: "8. 成功コールバックを送信"
46
+ Payment-Backend -> Client-App.OverdueInvoicePayment-Component: "9. WebSocket イベント (invoice.paid)"
47
+ Client-App.OverdueInvoicePayment-Component -> User: "10. UI を更新 (例: ダイアログを閉じる)"
48
+
49
+ ```
50
+
51
+ ## Props
52
+
53
+ `OverdueInvoicePayment`コンポーネントは、その動作をカスタマイズするために以下の props を受け入れます。
54
+
55
+ | Prop | Type | Description |
56
+ |---|---|---|
57
+ | `subscriptionId` | `string` | サブスクリプションのIDで、期限切れの請求書を確認するために使用します。`subscriptionId`または`customerId`のいずれかを提供する必要があります。 |
58
+ | `customerId` | `string` | 顧客のIDまたはDID。これを使用して、顧客のすべての期限切れ請求書を処理します。 |
59
+ | `mode` | `'default'` \| `'custom'` | レンダリングモード。`'default'`は事前に構築されたダイアログを表示します。`'custom'`はカスタムUIのために`children`レンダープロップを使用します。デフォルトは`'default'`です。 |
60
+ | `onPaid` | `(id, currencyId, type) => void` | 支払いが正常に完了した後にトリガーされるオプションのコールバック関数。`id`は`subscriptionId`または`customerId`になり、`type`は`'subscription'`または`'customer'`になります。 |
61
+ | `dialogProps` | `object` | `default`モードで、基盤となるMaterial-UIの`Dialog`コンポーネントに渡すオプションのprops。例:`{ open: true, title: 'カスタムタイトル', onClose: handleClose }`。 |
62
+ | `detailLinkOptions` | `object` | 「詳細を表示」リンクのオプション設定。リンクを無効にしたり、テキストを変更したり、カスタムの`onClick`ハンドラを提供したりするために使用できます。形式:`{ enabled?: boolean, onClick?: function, title?: string }`。 |
63
+ | `successToast` | `boolean` | `true`の場合、支払いが成功すると成功のトースト通知が表示されます。デフォルトは`true`です。 |
64
+ | `alertMessage` | `string` | 顧客モードのときに、デフォルトのタイトルテキストに追加するオプションのメッセージ。 |
65
+ | `children` | `(handlePay, data) => React.ReactNode` | `mode`が`'custom'`の場合にのみ使用されるレンダープロップ関数。`handlePay`関数と`data`オブジェクトを受け取ります。 |
66
+ | `authToken` | `string` | APIリクエスト用のオプションの認証トークンで、サーバー間またはクロスオリジンのシナリオで役立ちます。 |
67
+
68
+ ### `children` レンダープロップ
69
+
70
+ `mode="custom"`を使用する場合、`children`関数は2つの引数を受け取ります。
71
+
72
+ 1. **`handlePay(item: SummaryItem)`**: 特定の通貨グループの支払いプロセスを開始する関数。`item`オブジェクトは`data.summary`オブジェクトから取得します。
73
+ 2. **`data`**: 取得した支払い情報を含むオブジェクト:
74
+ * `subscription?: Subscription`: `subscriptionId`が提供された場合のサブスクリプションの詳細。
75
+ * `summary: { [key: string]: SummaryItem }`: 各キーが通貨IDであり、値が合計金額、通貨の詳細、支払い方法を含むオブジェクト。
76
+ * `invoices: Invoice[]`: すべての期限切れ請求書オブジェクトの配列。
77
+ * `subscriptionCount?: number`: 期限切れの請求書があるサブスクリプションの数(顧客モードの場合)。
78
+ * `detailUrl: string`: 詳細な請求書情報を表示するためのURL。
79
+
80
+ ## 使用例
81
+
82
+ すべての例は、アプリケーションに`PaymentProvider`が設定されていることを前提としています。
83
+
84
+ ### 1. サブスクリプションのデフォルトモード
85
+
86
+ これは、特定のサブスクリプションの期限切れの支払いを処理する最も簡単な方法です。期限切れの請求書が見つかった場合、コンポーネントは自動的にダイアログをレンダリングします。
87
+
88
+ ```tsx SubscriptionOverdue.tsx icon=logos:react
89
+ import { OverdueInvoicePayment, PaymentProvider } from '@blocklet/payment-react';
90
+ import { useSessionContext } from './hooks/session'; // カスタムセッションフック
91
+
92
+ function SubscriptionPage({ subscriptionId }) {
93
+ const { session, connect } = useSessionContext();
94
+
95
+ const handlePaymentSuccess = (id, currencyId, type) => {
96
+ console.log(`通貨 ${currencyId} を使用した ${type} ${id} の支払いが成功しました`);
97
+ // ここでサブスクリプションデータを再取得してステータスを更新できます
98
+ };
99
+
100
+ return (
101
+ <PaymentProvider session={session} connect={connect}>
102
+ {/* 期限切れの請求書がない場合、このコンポーネントはnullになります */}
103
+ <OverdueInvoicePayment
104
+ subscriptionId={subscriptionId}
105
+ onPaid={handlePaymentSuccess}
106
+ />
107
+ {/* 他のサブスクリプションの詳細はここにレンダリングできます */}
108
+ </PaymentProvider>
109
+ );
110
+ }
111
+ ```
112
+
113
+ ### 2. 顧客のデフォルトモード
114
+
115
+ これを使用して、顧客が複数のサブスクリプションにわたるすべての期限切れ請求書を支払うための中央集約された場所を作成します。
116
+
117
+ ```tsx CustomerDashboard.tsx icon=logos:react
118
+ import { OverdueInvoicePayment, PaymentProvider } from '@blocklet/payment-react';
119
+ import { useSessionContext } from './hooks/session'; // カスタムセッションフック
120
+
121
+ function CustomerDashboard() {
122
+ const { session, connect } = useSessionContext();
123
+
124
+ return (
125
+ <PaymentProvider session={session} connect={connect}>
126
+ <h2>支払いセンター</h2>
127
+ <p>サービスの継続を確保するために、未払いの支払いをすべて清算してください。</p>
128
+ <OverdueInvoicePayment
129
+ customerId={session.user.did}
130
+ onPaid={() => {
131
+ console.log('ある通貨に対する顧客のすべての期限切れ請求書が支払われました!');
132
+ // 顧客アカウントのステータスを更新
133
+ }}
134
+ />
135
+ {/* 顧客ダッシュボードの残りの部分 */}
136
+ </PaymentProvider>
137
+ );
138
+ }
139
+ ```
140
+
141
+ ### 3. カスタムUIモード
142
+
143
+ ユーザーエクスペリエンスを完全に制御するには、`mode="custom"`を使用します。これにより、ダイアログを使用する代わりに、支払い機能を既存のUIに直接統合できます。
144
+
145
+ ```tsx CustomOverdueUI.tsx icon=logos:react
146
+ import { OverdueInvoicePayment, PaymentProvider, Amount } from '@blocklet/payment-react';
147
+ import { useSessionContext } from './hooks/session'; // カスタムセッションフック
148
+ import { Card, CardContent, Typography, Button, Stack } from '@mui/material';
149
+
150
+ function CustomOverdueUI({ subscriptionId }) {
151
+ const { session, connect } = useSessionContext();
152
+
153
+ return (
154
+ <PaymentProvider session={session} connect={connect}>
155
+ <OverdueInvoicePayment
156
+ subscriptionId={subscriptionId}
157
+ mode="custom"
158
+ onPaid={() => console.log('カスタムUIでの支払いが成功しました!')}
159
+ >
160
+ {(handlePay, { summary, invoices }) => {
161
+ const summaryList = Object.values(summary);
162
+ if (invoices.length === 0) {
163
+ return <Typography>期限切れの支払いはありません。すべてクリアです!</Typography>;
164
+ }
165
+
166
+ return (
167
+ <Card variant="outlined">
168
+ <CardContent>
169
+ <Typography variant="h6" color="error" gutterBottom>
170
+ {invoices.length} 件の期限切れの請求書があります。
171
+ </Typography>
172
+ <Stack spacing={2} mt={2}>
173
+ {summaryList.map((item) => (
174
+ <Stack key={item.currency.id} direction="row" justifyContent="space-between" alignItems="center">
175
+ <Typography>
176
+ 支払総額: <Amount amount={item.amount} decimal={item.currency.decimal} symbol={item.currency.symbol} />
177
+ </Typography>
178
+ <Button
179
+ variant="contained"
180
+ color="primary"
181
+ onClick={() => handlePay(item)}
182
+ >
183
+ {item.currency.symbol} で支払う
184
+ </Button>
185
+ </Stack>
186
+ ))}
187
+ </Stack>
188
+ </CardContent>
189
+ </Card>
190
+ );
191
+ }}
192
+ </OverdueInvoicePayment>
193
+ </PaymentProvider>
194
+ );
195
+ }
196
+ ```