<commit_before>import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Button, OverlayTrigger, Popover } from 'react-bootstrap';
import * as Actions from '../../actions';
import QuestionInFlow from './QuestionInFlow';
import NodeInFlow from './NodeInFlow';

/** Flowの中に描画するページ */
class PageInFlow extends Component {
  constructor() {
    super();
    this.state = {
      popoverIndex: -1,
    };
  }

  /** 設問を削除したときに処理 */
  handleRemoveQuestion(questionId) {
    const { survey, removeQuestion, node } = this.props;
    const page = survey.findPageFromNode(node.getId());
    removeQuestion(page.getId(), questionId);
  }

  /** popoverを表示する前に実行するメソッド */
  handleBeforePopoerveShown(popoverIndex) {
    // どのindexでpopoverが表示されるかをstateに格納
    this.setState({ popoverIndex });
  }

  // ページへのアイテム追加ボタンを押したときに表示されるポップアップ
  createQuestionPopover() {
    const { survey, node, addQuestion } = this.props;
    const { popoverIndex } = this.state;
    const pageId = survey.findPageFromNode(node.getId()).getId();

    return (
      <Popover id="popover-positioned-right" title="ページへのアイテム追加">
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Checkbox', pageId, popoverIndex)} block>複数選択肢</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Radio', pageId, popoverIndex)} block>単一選択肢</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('MultiNumber', pageId, popoverIndex)} block>数値記入</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('SingleText', pageId, popoverIndex)} block>1行テキスト</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Text', pageId, popoverIndex)} block>複数行テキスト</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Matrix', pageId, popoverIndex)} block>表形式</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Description', pageId, popoverIndex)} block>説明文</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('ScreeningAgreement', pageId, popoverIndex)} block>調査許諾</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('Schedule', pageId, popoverIndex)} block>日程</Button>
        <Button bsSize="small" bsStyle="default" onClick={() => addQuestion('PersonalInfo', pageId, popoverIndex)} block>個人情報</Button>
      </Popover>
    );
  }

  /** 設問を追加するためのエレメントを作成 */
  createInsertElement(key, index) {
    return (<commit_msg>PageInFlowのリファクタリング<commit_after>import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Button, OverlayTrigger, Popover } from 'react-bootstrap';
import * as Actions from '../../actions';
import QuestionInFlow from './QuestionInFlow';
import NodeInFlow from './NodeInFlow';

/** Flowの中に描画するページ */
class PageInFlow extends Component {
  constructor() {
    super();
    this.state = {
      popoverIndex: -1,
    };
  }

  /** 設問を削除したときに処理 */
  handleRemoveQuestion(questionId) {
    const { survey, removeQuestion, node } = this.props;
    const page = survey.findPageFromNode(node.getId());
    removeQuestion(page.getId(), questionId);
  }

  /** popoverを表示する前に実行するメソッド */
  handleBeforePopoerveShown(popoverIndex) {
    // どのindexでpopoverが表示されるかをstateに格納
    this.setState({ popoverIndex });
  }

  // ページへのアイテム追加ボタンを押したときに表示されるポップアップ
  createQuestionPopover() {
    const { survey, node, addQuestion } = this.props;
    const { popoverIndex } = this.state;
    const pageId = survey.findPageFromNode(node.getId()).getId();

    const questions = [
      { dataType: 'Checkbox', label: '複数選択肢' },
      { dataType: 'Radio', label: '単一選択肢' },
      { dataType: 'MultiNumber', label: '数値記入' },
      { dataType: 'SingleText', label: '1行テキスト' },
      { dataType: 'Text', label: '複数行テキスト' },
      { dataType: 'Matrix', label: '表形式' },
      { dataType: 'Description', label: '説明文' },
      { dataType: 'ScreeningAgreement', label: '調査許諾' },
      { dataType: 'Schedule', label: '日程' },
      { dataType: 'PersonalInfo', label: '個人情報' },
    ];

    return (
      <Popover id="popover-positioned-right" title="ページへのアイテム追加">
        {questions.map(question => (
          <Button
            key={`${this.constructor.name}_${question.dataType}`}
            bsSize="small"
            bsStyle="default"
            onClick={() => addQuestion(question.dataType, pageId, popoverIndex)}
            block
          >
            {question.label}
          </Button>
        ))}
      </Popover>
    );
  }

  /** 設問を追加するためのエレメントを作成 */
  createInsertElement(key, index) {
    return (
{'fraction_non_alphanumeric': 0.1552755232806493, 'fraction_numerical': 0.0008543357539513029, 'mean_word_length': 3.735085945399393, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 41, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7577013', 'n_tokens_mistral': 1666, 'n_tokens_neox': 1661, 'n_words': 288}