Skip to content

Conversation

@haradakunihiko
Copy link
Owner

Summary

確認ダイアログを外部から中止(abort)できる機能を追加しました。

  • AbortController/AbortSignalによる標準的なキャンセル機能をサポート
  • abort(promise)で個別のPromiseをキャンセル
  • abortAll()で全ての未解決Promiseをキャンセル
  • 後方互換性を完全に維持

Key Changes

新規ファイル

  • src/controls.ts: abort機能の実装
    • カスタムAbortErrorクラス
    • レジストリパターンでPromiseを管理
    • abort(), abortAll(), attachAbortSignal()関数
  • __tests__/abort.test.ts: 7つのテストケース

変更ファイル

  • src/types.ts: ConfirmationOptions型を追加
  • src/createConfirmation.ts: Promiseレジストリへの登録とAbortSignal対応
  • src/index.ts: abort/abortAllをexport
  • README.md: 使用例とエラーハンドリングの説明を追加

Usage

AbortController経由(推奨)

```typescript
import { confirm } from './confirm';

const handleOperation = async (): Promise => {
const abortController = new AbortController();

const resultPromise = confirm(
{ message: 'Continue?' },
{ signal: abortController.signal }
);

// 後でキャンセル可能
abortController.abort();

try {
const result = await resultPromise;
} catch (error) {
if (error instanceof Error && error.name === 'AbortError') {
console.log('Dialog was aborted');
}
}
};
```

ユーティリティ関数

```typescript
import { confirm, abort, abortAll } from 'react-confirm';

const p1 = confirm({ message: 'Delete item 1?' });
const p2 = confirm({ message: 'Delete item 2?' });

abort(p1); // 個別にキャンセル
abortAll(); // 全てキャンセル
```

Testing

  • 新規テスト: 7個(全て成功)
  • 既存テスト: 69個(全て成功)
  • 合計: 76個のテスト全て成功

テストを実行:
```bash
npm test
npm run typecheck
npm run build
```

Compatibility

  • 既存のAPIは変更なし
  • createConfirmationの第2引数はオプショナル
  • abort時のPromiseはAbortErrorname === 'AbortError')でreject

PR #127からの改善点

  1. パラメータ名をcontrolからoptionsに変更(より一般的な命名)
  2. カスタムAbortErrorクラスを定義(型安全性の向上)
  3. より充実したテストカバレッジ(7つのテストケース)
  4. エラーハンドリングの例をREADMEに追加
  5. 日本語コメントで実装の背景を説明

🤖 Generated with Claude Code

確認ダイアログを外部から中止できる機能を追加しました。

## 主な変更

### 新機能
- AbortController/AbortSignalによるキャンセルをサポート
- abort()関数で個別のPromiseをキャンセル
- abortAll()関数で全ての未解決Promiseをキャンセル
- カスタムAbortErrorクラスを追加

### API変更
- createConfirmation()が第2引数でoptionsを受け取るように拡張
- options.signalでAbortSignalを指定可能
- 後方互換性を完全に維持

### 実装詳細
- src/controls.ts: abort機能の実装
- src/types.ts: ConfirmationOptions型を追加
- src/createConfirmation.ts: Promiseレジストリへの登録とAbortSignal対応
- src/index.ts: abort/abortAllをexport

### テスト
- __tests__/abort.test.ts: 7つのテストケースを追加
- 全76個のテストが成功

### ドキュメント
- READMEに使用例とエラーハンドリングの説明を追加

## PR #127からの改善点
1. パラメータ名をcontrolからoptionsに変更(より一般的な命名)
2. カスタムAbortErrorクラスを定義(型安全性の向上)
3. より充実したテストカバレッジ
4. エラーハンドリングの例をREADMEに追加

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@haradakunihiko
Copy link
Owner Author

Closing to recreate with English comments and description

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants