メインコンテンツへスキップ

ユーティリティ

@blocklet/payment-react ライブラリは、APIリクエストの作成、キャッシュの管理、日付の処理、価格のフォーマット、国際化の設定といった一般的なタスクを簡素化するために設計された一連のユーティリティ関数とクラスをエクスポートします。これらのツールは、ライブラリのコンポーネントやプロバイダーとシームレスに連携するように構築されています。

APIクライアント

ライブラリは、支払いバックエンドへのAPIリクエストを行うための事前設定済みAxiosインスタンスを提供します。ベースURLやその他の必要な設定を自動的に処理します。

API Client Usage

tsx
import { api } from '@blocklet/payment-react';

// 基本的なGETリクエスト
const getPayments = async () => {
  const response = await api.get('/api/payments');
  return response.data;
};

// ペイロード付きのPOSTリクエスト
const createCheckout = async (amount) => {
  const data = await api.post('/api/checkout', { amount });
  return data;
};

// クエリパラメータ付きのGETリクエスト
const getPaidInvoices = async () => {
  const results = await api.get('/api/invoices', {
    params: { status: 'paid' }
  });
  return results.data;
};

// 追加設定付きのPUTリクエスト
const updateSubscription = async (data) => {
  const config = {
    headers: { 'Custom-Header': 'value' }
  };
  const response = await api.put('/api/subscription', data, config);
  return response.data;
};

CachedRequest

パフォーマンスを最適化し、冗長なネットワークリクエストを削減するために、CachedRequest クラスを使用できます。これは、設定可能な戦略と生存期間(TTL)でデータをキャッシュする簡単な方法を提供します。

設定オプション

CachedRequest インスタンスを作成する際に、以下のオプションを指定できます:

オプションタイプ説明デフォルト
strategy'session' | 'local' | 'memory'キャッシュのストレージメカニズム。'session'
ttlnumberキャッシュの生存期間(ミリ秒)。0 の値は有効期限がないことを意味します。0

使用例

ここでは、製品価格を取得するためのキャッシュ付きリクエストの作成方法と使用方法を示します。

CachedRequest Example

tsx
import { CachedRequest, api } from '@blocklet/payment-react';

// 1. キャッシュ付きリクエストインスタンスを作成
const priceRequest = new CachedRequest(
  'product-prices',
  () => api.get('/api/prices'),
  {
    strategy: 'session',  // sessionStorageにデータをキャッシュ
    ttl: 5 * 60 * 1000   // 5分間キャッシュ
  }
);

// 2. コンポーネントでキャッシュ付きリクエストを使用
async function fetchPrices() {
  // キャッシュが利用可能で期限切れでない場合、キャッシュが使用されます
  const prices = await priceRequest.fetch();

  // キャッシュをバイパスして強制的に新しいデータを取得する
  const freshPrices = await priceRequest.fetch(true);

  return prices;
}

// 3. データが変更されたときにキャッシュをクリア
async function updatePrices() {
  await api.post('/api/prices', newPriceData);
  priceRequest.clearCache(); // または await priceRequest.fetch(true);
}

日付処理

ライブラリは、relativeTimeutctimezone のような便利なプラグインが既に含まれた事前設定済みの dayjs インスタンスを再エクスポートします。これを任意の日時操作のニーズに使用できます。

Date Handling with dayjs

tsx
import { dayjs } from '@blocklet/payment-react';

// 現在の日付をフォーマット
const formattedDate = dayjs().format('YYYY-MM-DD HH:mm');

// タイムスタンプをパース
const dateFromTimestamp = dayjs(1672531200000);
const unixTimestamp = dateFromTimestamp.unix();

// 相対時間を計算
const fiveMinutesAgo = dayjs().subtract(5, 'minute');
const relativeTime = dayjs().from(fiveMinutesAgo); // "5 minutes ago"

国際化 (i18n)

@blocklet/payment-react には、i18nの組み込みサポートが含まれています。独自の翻訳機を作成するか、ライブラリのデフォルト翻訳とマージすることができます。

翻訳機の作成

createTranslator 関数を使用して、独自の翻訳インスタンスを設定します。

Custom Translator Setup

tsx
import { createTranslator } from '@blocklet/payment-react';

const myTranslations = {
  en: {
    checkout: { title: 'Complete Payment' }
  },
  zh: {
    checkout: { title: '完成支付' }
  }
};

const translator = createTranslator({ fallbackLocale: 'en' }, myTranslations);

translator('checkout.title', 'zh'); // '完成支付'

ライブラリ翻訳とのマージ

コンポーネント用にライブラリの組み込み翻訳を活用しつつ、独自の翻訳を追加するには、それらをマージします。

Merging Translations

tsx
import { translations as paymentTranslations } from '@blocklet/payment-react';
import merge from 'lodash/merge';

// アプリケーションの翻訳
import en from './locales/en';
import zh from './locales/zh';

export const translations = merge(
  {
    en,
    zh,
  },
  paymentTranslations
);

フォーマットユーティリティ

表示用のデータをフォーマットするためのヘルパー関数がいくつか利用可能です。

関数説明
formatPrice価格オブジェクトを、定期的な間隔を考慮して人間が読める文字列にフォーマットします。
formatRecurring定期的なオブジェクトを "monthly" や "every 3 months" のような文字列にフォーマットします。
formatBNStr基本単位からのBigNumber文字列を、指定された精度のトークン値にフォーマットします。
formatNumber数値または文字列を、千単位の区切り文字と精度でフォーマットします。
formatError様々なエラーフォーマット(GraphQL, Joi, Axios)を読みやすい文字列にパースします。

Formatting Example

tsx
import { formatNumber, formatRecurring } from '@blocklet/payment-react';

// 数値をフォーマット
const formatted = formatNumber('1234567.89123', 2); // "1,234,567.89"

// 定期的な間隔をフォーマット
const monthly = formatRecurring({ interval: 'month', interval_count: 1 }); // "per month"
const quarterly = formatRecurring({ interval: 'month', interval_count: 3 }); // "Quarterly"

バリデーションユーティリティ

ライブラリには、フォームバリデーション用のヘルパーも含まれています。

validatePostalCode

指定された郵便番号が特定の国で有効かどうかをチェックします。

Postal Code Validation

tsx
import { validatePostalCode } from '@blocklet/payment-react';

// trueを返します
const isValidUS = validatePostalCode('90210', 'US');

// falseを返します
const isInvalidUS = validatePostalCode('ABC-123', 'US');

// 英国の郵便番号に対してtrueを返します
const isValidGB = validatePostalCode('SW1A 0AA', 'GB');