@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,197 @@
1
+ # ユーティリティ
2
+
3
+ `@blocklet/payment-react` ライブラリは、APIリクエストの作成、キャッシュの管理、日付の処理、価格のフォーマット、国際化の設定といった一般的なタスクを簡素化するために設計された一連のユーティリティ関数とクラスをエクスポートします。これらのツールは、ライブラリのコンポーネントやプロバイダーとシームレスに連携するように構築されています。
4
+
5
+ ## APIクライアント
6
+
7
+ ライブラリは、支払いバックエンドへのAPIリクエストを行うための事前設定済みAxiosインスタンスを提供します。ベースURLやその他の必要な設定を自動的に処理します。
8
+
9
+ ```tsx API Client Usage icon=logos:javascript
10
+ import { api } from '@blocklet/payment-react';
11
+
12
+ // 基本的なGETリクエスト
13
+ const getPayments = async () => {
14
+ const response = await api.get('/api/payments');
15
+ return response.data;
16
+ };
17
+
18
+ // ペイロード付きのPOSTリクエスト
19
+ const createCheckout = async (amount) => {
20
+ const data = await api.post('/api/checkout', { amount });
21
+ return data;
22
+ };
23
+
24
+ // クエリパラメータ付きのGETリクエスト
25
+ const getPaidInvoices = async () => {
26
+ const results = await api.get('/api/invoices', {
27
+ params: { status: 'paid' }
28
+ });
29
+ return results.data;
30
+ };
31
+
32
+ // 追加設定付きのPUTリクエスト
33
+ const updateSubscription = async (data) => {
34
+ const config = {
35
+ headers: { 'Custom-Header': 'value' }
36
+ };
37
+ const response = await api.put('/api/subscription', data, config);
38
+ return response.data;
39
+ };
40
+ ```
41
+
42
+ ## CachedRequest
43
+
44
+ パフォーマンスを最適化し、冗長なネットワークリクエストを削減するために、`CachedRequest` クラスを使用できます。これは、設定可能な戦略と生存期間(TTL)でデータをキャッシュする簡単な方法を提供します。
45
+
46
+ ### 設定オプション
47
+
48
+ `CachedRequest` インスタンスを作成する際に、以下のオプションを指定できます:
49
+
50
+ | オプション | タイプ | 説明 | デフォルト |
51
+ | :--- | :--- | :--- | :--- |
52
+ | `strategy` | `'session' \| 'local' \| 'memory'` | キャッシュのストレージメカニズム。 | `'session'` |
53
+ | `ttl` | `number` | キャッシュの生存期間(ミリ秒)。`0` の値は有効期限がないことを意味します。 | `0` |
54
+
55
+ ### 使用例
56
+
57
+ ここでは、製品価格を取得するためのキャッシュ付きリクエストの作成方法と使用方法を示します。
58
+
59
+ ```tsx CachedRequest Example icon=logos:javascript
60
+ import { CachedRequest, api } from '@blocklet/payment-react';
61
+
62
+ // 1. キャッシュ付きリクエストインスタンスを作成
63
+ const priceRequest = new CachedRequest(
64
+ 'product-prices',
65
+ () => api.get('/api/prices'),
66
+ {
67
+ strategy: 'session', // sessionStorageにデータをキャッシュ
68
+ ttl: 5 * 60 * 1000 // 5分間キャッシュ
69
+ }
70
+ );
71
+
72
+ // 2. コンポーネントでキャッシュ付きリクエストを使用
73
+ async function fetchPrices() {
74
+ // キャッシュが利用可能で期限切れでない場合、キャッシュが使用されます
75
+ const prices = await priceRequest.fetch();
76
+
77
+ // キャッシュをバイパスして強制的に新しいデータを取得する
78
+ const freshPrices = await priceRequest.fetch(true);
79
+
80
+ return prices;
81
+ }
82
+
83
+ // 3. データが変更されたときにキャッシュをクリア
84
+ async function updatePrices() {
85
+ await api.post('/api/prices', newPriceData);
86
+ priceRequest.clearCache(); // または await priceRequest.fetch(true);
87
+ }
88
+ ```
89
+
90
+ ## 日付処理
91
+
92
+ ライブラリは、`relativeTime`、`utc`、`timezone` のような便利なプラグインが既に含まれた事前設定済みの `dayjs` インスタンスを再エクスポートします。これを任意の日時操作のニーズに使用できます。
93
+
94
+ ```tsx Date Handling with dayjs icon=logos:javascript
95
+ import { dayjs } from '@blocklet/payment-react';
96
+
97
+ // 現在の日付をフォーマット
98
+ const formattedDate = dayjs().format('YYYY-MM-DD HH:mm');
99
+
100
+ // タイムスタンプをパース
101
+ const dateFromTimestamp = dayjs(1672531200000);
102
+ const unixTimestamp = dateFromTimestamp.unix();
103
+
104
+ // 相対時間を計算
105
+ const fiveMinutesAgo = dayjs().subtract(5, 'minute');
106
+ const relativeTime = dayjs().from(fiveMinutesAgo); // "5 minutes ago"
107
+ ```
108
+
109
+ ## 国際化 (i18n)
110
+
111
+ `@blocklet/payment-react` には、i18nの組み込みサポートが含まれています。独自の翻訳機を作成するか、ライブラリのデフォルト翻訳とマージすることができます。
112
+
113
+ ### 翻訳機の作成
114
+
115
+ `createTranslator` 関数を使用して、独自の翻訳インスタンスを設定します。
116
+
117
+ ```tsx Custom Translator Setup icon=logos:javascript
118
+ import { createTranslator } from '@blocklet/payment-react';
119
+
120
+ const myTranslations = {
121
+ en: {
122
+ checkout: { title: 'Complete Payment' }
123
+ },
124
+ zh: {
125
+ checkout: { title: '完成支付' }
126
+ }
127
+ };
128
+
129
+ const translator = createTranslator({ fallbackLocale: 'en' }, myTranslations);
130
+
131
+ translator('checkout.title', 'zh'); // '完成支付'
132
+ ```
133
+
134
+ ### ライブラリ翻訳とのマージ
135
+
136
+ コンポーネント用にライブラリの組み込み翻訳を活用しつつ、独自の翻訳を追加するには、それらをマージします。
137
+
138
+ ```tsx Merging Translations icon=logos:javascript
139
+ import { translations as paymentTranslations } from '@blocklet/payment-react';
140
+ import merge from 'lodash/merge';
141
+
142
+ // アプリケーションの翻訳
143
+ import en from './locales/en';
144
+ import zh from './locales/zh';
145
+
146
+ export const translations = merge(
147
+ {
148
+ en,
149
+ zh,
150
+ },
151
+ paymentTranslations
152
+ );
153
+ ```
154
+
155
+ ## フォーマットユーティリティ
156
+
157
+ 表示用のデータをフォーマットするためのヘルパー関数がいくつか利用可能です。
158
+
159
+ | 関数 | 説明 |
160
+ | :--- | :--- |
161
+ | `formatPrice` | 価格オブジェクトを、定期的な間隔を考慮して人間が読める文字列にフォーマットします。 |
162
+ | `formatRecurring` | 定期的なオブジェクトを "monthly" や "every 3 months" のような文字列にフォーマットします。 |
163
+ | `formatBNStr` | 基本単位からのBigNumber文字列を、指定された精度のトークン値にフォーマットします。 |
164
+ | `formatNumber` | 数値または文字列を、千単位の区切り文字と精度でフォーマットします。 |
165
+ | `formatError` | 様々なエラーフォーマット(GraphQL, Joi, Axios)を読みやすい文字列にパースします。 |
166
+
167
+ ```tsx Formatting Example icon=logos:javascript
168
+ import { formatNumber, formatRecurring } from '@blocklet/payment-react';
169
+
170
+ // 数値をフォーマット
171
+ const formatted = formatNumber('1234567.89123', 2); // "1,234,567.89"
172
+
173
+ // 定期的な間隔をフォーマット
174
+ const monthly = formatRecurring({ interval: 'month', interval_count: 1 }); // "per month"
175
+ const quarterly = formatRecurring({ interval: 'month', interval_count: 3 }); // "Quarterly"
176
+ ```
177
+
178
+ ## バリデーションユーティリティ
179
+
180
+ ライブラリには、フォームバリデーション用のヘルパーも含まれています。
181
+
182
+ ### `validatePostalCode`
183
+
184
+ 指定された郵便番号が特定の国で有効かどうかをチェックします。
185
+
186
+ ```tsx Postal Code Validation icon=logos:javascript
187
+ import { validatePostalCode } from '@blocklet/payment-react';
188
+
189
+ // trueを返します
190
+ const isValidUS = validatePostalCode('90210', 'US');
191
+
192
+ // falseを返します
193
+ const isInvalidUS = validatePostalCode('ABC-123', 'US');
194
+
195
+ // 英国の郵便番号に対してtrueを返します
196
+ const isValidGB = validatePostalCode('SW1A 0AA', 'GB');
197
+ ```
@@ -0,0 +1,197 @@
1
+ # 工具程式
2
+
3
+ `@blocklet/payment-react` 函式庫匯出一系列工具函式與類別,旨在簡化常見任務,如發送 API 請求、管理快取、處理日期、格式化價格以及設定國際化。這些工具的設計能與函式庫的元件和提供者無縫協作。
4
+
5
+ ## API 客戶端
6
+
7
+ 該函式庫提供了一個預先設定的 Axios 實例,可用於向您的支付後端發送 API 請求。它會自動處理基礎 URL 和其他必要的設定。
8
+
9
+ ```tsx API Client Usage icon=logos:javascript
10
+ import { api } from '@blocklet/payment-react';
11
+
12
+ // 基本的 GET 請求
13
+ const getPayments = async () => {
14
+ const response = await api.get('/api/payments');
15
+ return response.data;
16
+ };
17
+
18
+ // 帶有 payload 的 POST 請求
19
+ const createCheckout = async (amount) => {
20
+ const data = await api.post('/api/checkout', { amount });
21
+ return data;
22
+ };
23
+
24
+ // 帶有查詢參數的 GET 請求
25
+ const getPaidInvoices = async () => {
26
+ const results = await api.get('/api/invoices', {
27
+ params: { status: 'paid' }
28
+ });
29
+ return results.data;
30
+ };
31
+
32
+ // 帶有額外設定的 PUT 請求
33
+ const updateSubscription = async (data) => {
34
+ const config = {
35
+ headers: { 'Custom-Header': 'value' }
36
+ };
37
+ const response = await api.put('/api/subscription', data, config);
38
+ return response.data;
39
+ };
40
+ ```
41
+
42
+ ## CachedRequest
43
+
44
+ 為優化效能並減少不必要的網路請求,您可以使用 `CachedRequest` 類別。它提供了一種簡單的方式來快取資料,並具備可設定的策略和存留時間 (TTL)。
45
+
46
+ ### 設定選項
47
+
48
+ 建立 `CachedRequest` 實例時,您可以提供以下選項:
49
+
50
+ | Option | Type | Description | Default |
51
+ | :--- | :--- | :--- | :--- |
52
+ | `strategy` | `'session' \| 'local' \| 'memory'` | 快取的儲存機制。 | `'session'` |
53
+ | `ttl` | `number` | 快取的存留時間(毫秒)。值為 `0` 表示永不過期。 | `0` |
54
+
55
+ ### 使用範例
56
+
57
+ 以下是如何建立和使用快取請求來擷取產品價格。
58
+
59
+ ```tsx CachedRequest Example icon=logos:javascript
60
+ import { CachedRequest, api } from '@blocklet/payment-react';
61
+
62
+ // 1. 建立快取請求實例
63
+ const priceRequest = new CachedRequest(
64
+ 'product-prices',
65
+ () => api.get('/api/prices'),
66
+ {
67
+ strategy: 'session', // 將資料快取在 sessionStorage 中
68
+ ttl: 5 * 60 * 1000 // 快取 5 分鐘
69
+ }
70
+ );
71
+
72
+ // 2. 在您的元件中使用快取請求
73
+ async function fetchPrices() {
74
+ // 如果快取可用且未過期,將會使用快取
75
+ const prices = await priceRequest.fetch();
76
+
77
+ // 繞過快取並強制重新擷取資料
78
+ const freshPrices = await priceRequest.fetch(true);
79
+
80
+ return prices;
81
+ }
82
+
83
+ // 3. 當資料變更時清除快取
84
+ async function updatePrices() {
85
+ await api.post('/api/prices', newPriceData);
86
+ priceRequest.clearCache(); // 或 await priceRequest.fetch(true);
87
+ }
88
+ ```
89
+
90
+ ## 日期處理
91
+
92
+ 該函式庫重新匯出了一個預先設定的 `dayjs` 實例,其中已包含 `relativeTime`、`utc` 和 `timezone` 等實用外掛程式。您可以用它來滿足任何日期和時間的操作需求。
93
+
94
+ ```tsx Date Handling with dayjs icon=logos:javascript
95
+ import { dayjs } from '@blocklet/payment-react';
96
+
97
+ // 格式化目前日期
98
+ const formattedDate = dayjs().format('YYYY-MM-DD HH:mm');
99
+
100
+ // 解析時間戳
101
+ const dateFromTimestamp = dayjs(1672531200000);
102
+ const unixTimestamp = dateFromTimestamp.unix();
103
+
104
+ // 計算相對時間
105
+ const fiveMinutesAgo = dayjs().subtract(5, 'minute');
106
+ const relativeTime = dayjs().from(fiveMinutesAgo); // "5 分鐘前"
107
+ ```
108
+
109
+ ## 國際化 (i18n)
110
+
111
+ `@blocklet/payment-react` 內建支援 i18n。您可以建立自己的翻譯器,或將您的翻譯與函式庫的預設翻譯合併。
112
+
113
+ ### 建立翻譯器
114
+
115
+ 使用 `createTranslator` 函式來設定您自己的翻譯實例。
116
+
117
+ ```tsx Custom Translator Setup icon=logos:javascript
118
+ import { createTranslator } from '@blocklet/payment-react';
119
+
120
+ const myTranslations = {
121
+ en: {
122
+ checkout: { title: 'Complete Payment' }
123
+ },
124
+ zh: {
125
+ checkout: { title: '完成支付' }
126
+ }
127
+ };
128
+
129
+ const translator = createTranslator({ fallbackLocale: 'en' }, myTranslations);
130
+
131
+ translator('checkout.title', 'zh'); // '完成支付'
132
+ ```
133
+
134
+ ### 與函式庫翻譯合併
135
+
136
+ 為利用函式庫為元件提供的內建翻譯,同時加入您自己的翻譯,您可以將它們合併在一起。
137
+
138
+ ```tsx Merging Translations icon=logos:javascript
139
+ import { translations as paymentTranslations } from '@blocklet/payment-react';
140
+ import merge from 'lodash/merge';
141
+
142
+ // 您應用程式的翻譯
143
+ import en from './locales/en';
144
+ import zh from './locales/zh';
145
+
146
+ export const translations = merge(
147
+ {
148
+ en,
149
+ zh,
150
+ },
151
+ paymentTranslations
152
+ );
153
+ ```
154
+
155
+ ## 格式化工具程式
156
+
157
+ 提供數個輔助函式可用於格式化顯示資料。
158
+
159
+ | Function | Description |
160
+ | :--- | :--- |
161
+ | `formatPrice` | 將價格物件格式化為人類可讀的字串,同時考慮定期區間。 |
162
+ | `formatRecurring` | 將定期物件格式化為「每月」或「每 3 個月」等字串。 |
163
+ | `formatBNStr` | 將 BigNumber 字串從基本單位格式化為具有指定精度的代幣值。 |
164
+ | `formatNumber` | 將數字或字串格式化,加上千分位分隔符和精度。 |
165
+ | `formatError` | 將各種錯誤格式(GraphQL、Joi、Axios)解析為可讀的字串。 |
166
+
167
+ ```tsx Formatting Example icon=logos:javascript
168
+ import { formatNumber, formatRecurring } from '@blocklet/payment-react';
169
+
170
+ // 格式化數字
171
+ const formatted = formatNumber('1234567.89123', 2); // "1,234,567.89"
172
+
173
+ // 格式化定期區間
174
+ const monthly = formatRecurring({ interval: 'month', interval_count: 1 }); // "每月"
175
+ const quarterly = formatRecurring({ interval: 'month', interval_count: 3 }); // "每季"
176
+ ```
177
+
178
+ ## 驗證工具程式
179
+
180
+ 該函式庫也包含用於表單驗證的輔助工具。
181
+
182
+ ### `validatePostalCode`
183
+
184
+ 檢查給定的郵遞區號對於特定國家是否有效。
185
+
186
+ ```tsx Postal Code Validation icon=logos:javascript
187
+ import { validatePostalCode } from '@blocklet/payment-react';
188
+
189
+ // 回傳 true
190
+ const isValidUS = validatePostalCode('90210', 'US');
191
+
192
+ // 回傳 false
193
+ const isInvalidUS = validatePostalCode('ABC-123', 'US');
194
+
195
+ // 對於英國郵遞區號,回傳 true
196
+ const isValidGB = validatePostalCode('SW1A 0AA', 'GB');
197
+ ```
@@ -0,0 +1,197 @@
1
+ # 工具函数
2
+
3
+ `@blocklet/payment-react` 库导出了一套工具函数和类,旨在简化常见任务,例如发出 API 请求、管理缓存、处理日期、格式化价格和设置国际化。这些工具旨在与库的组件和提供程序无缝协作。
4
+
5
+ ## API 客户端
6
+
7
+ 该库提供了一个预配置的 Axios 实例,用于向你的支付后端发出 API 请求。它会自动处理基本 URL 和其他必要的配置。
8
+
9
+ ```tsx API Client Usage icon=logos:javascript
10
+ import { api } from '@blocklet/payment-react';
11
+
12
+ // 基本的 GET 请求
13
+ const getPayments = async () => {
14
+ const response = await api.get('/api/payments');
15
+ return response.data;
16
+ };
17
+
18
+ // 带负载的 POST 请求
19
+ const createCheckout = async (amount) => {
20
+ const data = await api.post('/api/checkout', { amount });
21
+ return data;
22
+ };
23
+
24
+ // 带查询参数的 GET 请求
25
+ const getPaidInvoices = async () => {
26
+ const results = await api.get('/api/invoices', {
27
+ params: { status: 'paid' }
28
+ });
29
+ return results.data;
30
+ };
31
+
32
+ // 带附加配置的 PUT 请求
33
+ const updateSubscription = async (data) => {
34
+ const config = {
35
+ headers: { 'Custom-Header': 'value' }
36
+ };
37
+ const response = await api.put('/api/subscription', data, config);
38
+ return response.data;
39
+ };
40
+ ```
41
+
42
+ ## CachedRequest
43
+
44
+ 为了优化性能并减少冗余的网络请求,你可以使用 `CachedRequest` 类。它提供了一种简单的方法来缓存数据,具有可配置的策略和生存时间(TTL)。
45
+
46
+ ### 配置选项
47
+
48
+ 在创建 `CachedRequest` 实例时,你可以提供以下选项:
49
+
50
+ | 选项 | 类型 | 描述 | 默认值 |
51
+ | :--- | :--- | :--- | :--- |
52
+ | `strategy` | `'session' \| 'local' \| 'memory'` | 缓存的存储机制。 | `'session'` |
53
+ | `ttl` | `number` | 缓存的生存时间(毫秒)。值为 `0` 表示永不过期。 | `0` |
54
+
55
+ ### 使用示例
56
+
57
+ 以下是如何创建和使用缓存请求来获取产品价格的示例。
58
+
59
+ ```tsx CachedRequest Example icon=logos:javascript
60
+ import { CachedRequest, api } from '@blocklet/payment-react';
61
+
62
+ // 1. 创建一个缓存请求实例
63
+ const priceRequest = new CachedRequest(
64
+ 'product-prices',
65
+ () => api.get('/api/prices'),
66
+ {
67
+ strategy: 'session', // 在 sessionStorage 中缓存数据
68
+ ttl: 5 * 60 * 1000 // 缓存 5 分钟
69
+ }
70
+ );
71
+
72
+ // 2. 在你的组件中使用缓存请求
73
+ async function fetchPrices() {
74
+ // 如果缓存可用且未过期,将使用缓存
75
+ const prices = await priceRequest.fetch();
76
+
77
+ // 绕过缓存并强制获取新数据
78
+ const freshPrices = await priceRequest.fetch(true);
79
+
80
+ return prices;
81
+ }
82
+
83
+ // 3. 当数据发生变化时清除缓存
84
+ async function updatePrices() {
85
+ await api.post('/api/prices', newPriceData);
86
+ priceRequest.clearCache(); // 或者 await priceRequest.fetch(true);
87
+ }
88
+ ```
89
+
90
+ ## 日期处理
91
+
92
+ 该库重新导出了一个预配置的 `dayjs` 实例,其中已包含 `relativeTime`、`utc` 和 `timezone` 等有用的插件。你可以用它来满足任何日期和时间操作的需求。
93
+
94
+ ```tsx Date Handling with dayjs icon=logos:javascript
95
+ import { dayjs } from '@blocklet/payment-react';
96
+
97
+ // 格式化当前日期
98
+ const formattedDate = dayjs().format('YYYY-MM-DD HH:mm');
99
+
100
+ // 解析时间戳
101
+ const dateFromTimestamp = dayjs(1672531200000);
102
+ const unixTimestamp = dateFromTimestamp.unix();
103
+
104
+ // 计算相对时间
105
+ const fiveMinutesAgo = dayjs().subtract(5, 'minute');
106
+ const relativeTime = dayjs().from(fiveMinutesAgo); // "5 分钟前"
107
+ ```
108
+
109
+ ## 国际化 (i18n)
110
+
111
+ `@blocklet/payment-react` 内置了对 i18n 的支持。你可以创建自己的翻译器,也可以将你的翻译与库的默认翻译合并。
112
+
113
+ ### 创建翻译器
114
+
115
+ 使用 `createTranslator` 函数来设置你自己的翻译实例。
116
+
117
+ ```tsx Custom Translator Setup icon=logos:javascript
118
+ import { createTranslator } from '@blocklet/payment-react';
119
+
120
+ const myTranslations = {
121
+ en: {
122
+ checkout: { title: 'Complete Payment' }
123
+ },
124
+ zh: {
125
+ checkout: { title: '完成支付' }
126
+ }
127
+ };
128
+
129
+ const translator = createTranslator({ fallbackLocale: 'en' }, myTranslations);
130
+
131
+ translator('checkout.title', 'zh'); // '完成支付'
132
+ ```
133
+
134
+ ### 与库翻译合并
135
+
136
+ 为了在添加自己的翻译的同时利用库为组件提供的内置翻译,你可以将它们合并在一起。
137
+
138
+ ```tsx Merging Translations icon=logos:javascript
139
+ import { translations as paymentTranslations } from '@blocklet/payment-react';
140
+ import merge from 'lodash/merge';
141
+
142
+ // 你的应用程序的翻译
143
+ import en from './locales/en';
144
+ import zh from './locales/zh';
145
+
146
+ export const translations = merge(
147
+ {
148
+ en,
149
+ zh,
150
+ },
151
+ paymentTranslations
152
+ );
153
+ ```
154
+
155
+ ## 格式化工具
156
+
157
+ 有几个辅助函数可用于格式化数据显示。
158
+
159
+ | 函数 | 描述 |
160
+ | :--- | :--- |
161
+ | `formatPrice` | 将价格对象格式化为人类可读的字符串,并考虑重复周期。 |
162
+ | `formatRecurring` | 将重复周期对象格式化为“每月”或“每 3 个月”之类的字符串。 |
163
+ | `formatBNStr` | 将 BigNumber 字符串从基本单位格式化为具有指定精度的代币值。 |
164
+ | `formatNumber` | 使用千位分隔符和指定精度格式化数字或字符串。 |
165
+ | `formatError` | 将各种错误格式(GraphQL、Joi、Axios)解析为可读的字符串。 |
166
+
167
+ ```tsx Formatting Example icon=logos:javascript
168
+ import { formatNumber, formatRecurring } from '@blocklet/payment-react';
169
+
170
+ // 格式化数字
171
+ const formatted = formatNumber('1234567.89123', 2); // "1,234,567.89"
172
+
173
+ // 格式化重复周期
174
+ const monthly = formatRecurring({ interval: 'month', interval_count: 1 }); // "每月"
175
+ const quarterly = formatRecurring({ interval: 'month', interval_count: 3 }); // "每季度"
176
+ ```
177
+
178
+ ## 验证工具
179
+
180
+ 该库还包含用于表单验证的辅助函数。
181
+
182
+ ### `validatePostalCode`
183
+
184
+ 检查给定的邮政编码对于特定国家是否有效。
185
+
186
+ ```tsx Postal Code Validation icon=logos:javascript
187
+ import { validatePostalCode } from '@blocklet/payment-react';
188
+
189
+ // 返回 true
190
+ const isValidUS = validatePostalCode('90210', 'US');
191
+
192
+ // 返回 false
193
+ const isInvalidUS = validatePostalCode('ABC-123', 'US');
194
+
195
+ // 对于英国邮政编码,返回 true
196
+ const isValidGB = validatePostalCode('SW1A 0AA', 'GB');
197
+ ```
@@ -0,0 +1,18 @@
1
+ # ガイド
2
+
3
+ ガイドセクションへようこそ。ここでは、個々のコンポーネントの使用法を超えた高度なトピックに関する詳細な記事をご紹介します。これらのガイドは、ライブラリの外観をカスタマイズし、強力なユーティリティ関数を活用して、より高度な決済ソリューションを構築するために設計されています。
4
+
5
+ 以下のガイドを参考にして、テーマ設定とユーティリティをマスターしましょう。
6
+
7
+ <x-cards data-columns="2">
8
+ <x-card data-title="テーマ設定" data-icon="lucide:palette" data-href="/guides/theming">
9
+ アプリケーションのデザインシステムに合わせて決済コンポーネントの外観をカスタマイズする方法を学びます。このガイドでは、組み込みのテーマプロバイダーの使用、Material-UIのテーマオプションによるスタイルの上書き、カスタムCSSの適用について説明します。
10
+ </x-card>
11
+ <x-card data-title="ユーティリティ" data-icon="lucide:wrench" data-href="/guides/utilities">
12
+ APIリクエストの処理、データのキャッシュ、日付と金額のフォーマット、国際化の管理を行うための強力なユーティリティ関数のコレクションをご覧ください。このガイドは、よりクリーンで効率的なコードを書くのに役立ちます。
13
+ </x-card>
14
+ </x-cards>
15
+
16
+ これらのガイドを読んだ後は、ライブラリが提供するカスタムReactフックについて学ぶのも良いでしょう。
17
+
18
+ ➡️ **次へ: [フック](./hooks.md)**
@@ -0,0 +1,18 @@
1
+ # 指南
2
+
3
+ 歡迎來到指南部分。在這裡,您將找到關於進階主題的深入文章,這些主題超越了單一組件的用法。這些指南旨在幫助您自訂程式庫的外觀,並利用其強大的實用程式函數來建構更複雜的支付解決方案。
4
+
5
+ 探索下面的指南以精通主題化和實用程式。
6
+
7
+ <x-cards data-columns="2">
8
+ <x-card data-title="主題化" data-icon="lucide:palette" data-href="/guides/theming">
9
+ 學習如何自訂支付組件的外觀和風格,以符合您應用程式的設計系統。本指南涵蓋了使用內建的主題提供者、使用 Material-UI 主題選項覆寫樣式,以及應用自訂 CSS。
10
+ </x-card>
11
+ <x-card data-title="實用程式" data-icon="lucide:wrench" data-href="/guides/utilities">
12
+ 探索一系列強大的實用程式函數,用於處理 API 請求、快取資料、格式化日期和金額,以及管理國際化。本指南將幫助您編寫更簡潔、更高效的程式碼。
13
+ </x-card>
14
+ </x-cards>
15
+
16
+ 探索完這些指南後,您可能會有興趣了解程式庫提供的自訂 React hooks。
17
+
18
+ ➡️ **下一步:[Hooks](./hooks.md)**
@@ -0,0 +1,18 @@
1
+ # 指南
2
+
3
+ 欢迎来到指南部分。在这里,您将找到关于超出单个组件使用范围的高级主题的深入文章。这些指南旨在帮助您自定义库的外观,并利用其强大的实用功能来构建更复杂的支付解决方案。
4
+
5
+ 浏览下面的指南以掌握主题和实用程序。
6
+
7
+ <x-cards data-columns="2">
8
+ <x-card data-title="主题化" data-icon="lucide:palette" data-href="/guides/theming">
9
+ 学习如何自定义支付组件的外观和感觉,以匹配您应用程序的设计系统。本指南涵盖了使用内置主题提供程序、使用 Material-UI 主题选项覆盖样式以及应用自定义 CSS。
10
+ </x-card>
11
+ <x-card data-title="实用程序" data-icon="lucide:wrench" data-href="/guides/utilities">
12
+ 探索一系列强大的实用函数,用于处理 API 请求、缓存数据、格式化日期和金额以及管理国际化。本指南将帮助您编写更清晰、更高效的代码。
13
+ </x-card>
14
+ </x-cards>
15
+
16
+ 在探索了这些指南之后,您可能会有兴趣了解该库提供的自定义 React 钩子。
17
+
18
+ ➡️ **下一步:[钩子](./hooks.md)**