Skip to content

fix(koshien): 「AIを試す」で不要な保存処理が走る — モーダルを開くだけにする #840

Description

@smalruby3-editor-bot

概要(Epic #738 / DoD で発覚)

メニューバーの 「AIを試す」 を押すと、モーダルを開く前に従来の保存処理(ダウンロード)が
走ってしまう
。「AIを試す」は AI を base64 エンコードして URL パラメータ(?player1=data:...)で
ゲームサーバーに渡すだけなので、保存は不要。保存処理を解除し、モーダルを開くだけにする。

根本原因

packages/scratch-gui/src/components/menu-bar/menu-bar.jsx

「AIを試す」MenuItem が <RubyDownloader onSaveFinished={this.handleTestAISaveFinished}>
ラップされ、onClick が保存を起動している:

getTestAIHandler (downloadProjectCallback) {
    return () => {
        // Save first, then open modal via onSaveFinished callback
        this.props.onSetAiSaveStatus('saving');
        downloadProjectCallback();          // ← 不要な保存/ダウンロード
    };
}
handleTestAISaveFinished () {
    this.handleAISaveFinished();
    this.props.onOpenKoshienTestModal();    // 保存完了後にモーダルを開く
}
<RubyDownloader onSaveFinished={this.handleTestAISaveFinished}>
    {(className, downloadProjectCallback) => (
        <MenuItem className={className} onClick={this.getTestAIHandler(downloadProjectCallback)}>
            <FormattedMessage ... id="gui.menuBar.testAI" />   {/* AIを試す */}
        </MenuItem>
    )}
</RubyDownloader>

やること

  • 「AIを試す」MenuItem から保存(RubyDownloader / downloadProjectCallback / onSetAiSaveStatus('saving'))を
    外し、onClick で直接 this.props.onOpenKoshienTestModal() を呼ぶだけにする。
  • 不要になる getTestAIHandler / handleTestAISaveFinished(および RubyDownloader ラップ)を整理。
  • 「AIを保存」「AIに名前をつけて保存…」は従来どおり保存を維持(こちらは保存が目的なので変更しない)。
  • モーダル側(koshien-test-modal.jsx)は generatePreviewCode で現スプライト+ステージを生成して
    base64 URL を組み立てる実装なので、保存に依存していない(変更不要)。

受け入れ条件

  • 「AIを試す」を押しても保存(ダウンロード/保存ステータス変化)が発生しない
  • 「AIを試す」でモーダルが開き、?player1=data:<base64> で現在の AI が読み込まれて動作する
  • 「AIを保存」「AIに名前をつけて保存…」は従来どおり保存できる(回帰なし)
  • 関連のユニット/統合テストがあれば更新(保存が呼ばれないこと)

ベースブランチ

関連

Epic #738 / #827(AIを試す 出力)/ #839(v1 リスト記法)。DoD(実エディタで「AIを試す」)で発覚。

Metadata

Metadata

Assignees

No one assigned

    Labels

    🤖 autopilotautopilot が処理対象にした Issue/PR(daemon が付与)

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Close

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions