kintone + Backlog API 連携やってみた（その２）

kintone2 Advent Calendar 2019 9日目の記事です。

kintone Advent Calendar 2019 ２日目の記事 [kintone + Backlog API 連携やってみた](https://qiita.com/sy250f/items/18364ced702b1dfcc198)の続きです。
前回は途中になってしまったのですが、今回もkintoneに入力するまで行きませんでした。クリスマスまでには何とかしたい:santa:

# コード

とりあえず出来たとこまでのコードを載せておきます

```App.js
import * as React from 'react';
import { Text, Button } from '@kintone/kintone-ui-component';
import '../css/index.css';
import 'bulma/css/bulma.css'

export class App extends React.Component {
  constructor (props) {
    super(props)
    // 親コンポーネントstate
    this.state = {
      account: '',
      apikey: '',
    }
  }
  accountChange(value) {
    console.log(value)
    this.setState({account: value})
  }
  apikeyChange(value) {
    this.setState({apikey: value})
  }  
  clickSubmit(event) {
    console.log(`Account: ${this.state.account} APIKey: ${this.state.apikey}`)
    getBacklogMyActivities(this.state.account, this.state.apikey)
  }  

  render () {
    return (
        <div class="container">
          <div class="notification">
            <div class="field">
                <h1 class="title">
                    Backlog設定
                </h1>
                <div class="control">
                    <label class="label">Backlog URL</label>
                    <UITextBacklogAccount
                    onAccountChange={(value) => this.accountChange(value)}
                    />
                </div>
            </div>
            <div class="field">
                <div class="control">
                    <label class="label">Backlog API Key</label>
                    <UITextBacklogAPIKey
                    onApikeyChange={(value) => this.apikeyChange(value)}
                    />
                </div>
            </div>
            <div class="field">
                <div class="control">
                    <UIButton
                    onClickSubmit={(event) => this.clickSubmit(event)}
                    />
                </div>
            </div>
          </div>  
        </div>
      )
  }
}

// Backlog URL用コンポーネント
export class UITextBacklogAccount extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: '',
        }
    }
    render() {
        return (
            <Text
              value={this.state.value} class="input is-success"
              onChange={this.onChange.bind(this)}
            />
        );
    };
    onChange = (value) => {
        this.setState({value});
        this.props.onAccountChange(value);
        // console.log('onchange value: ' + value);
    }
};

// Backlog APIKey用コンポーネント
export class UITextBacklogAPIKey extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: '',
        }
    }
    render() {
        return (
            <Text
              value={this.state.value}
              onChange={this.onChange.bind(this)}
            />
        );
    };
    onChange = (value) => {
        this.setState({value});
        this.props.onApikeyChange(value);
        // console.log('onchange value: ' + value);
    }
};

// Submitボタンコンポーネント
export class UIButton extends React.Component {
    constructor(props) {
        super(props);
    }
    render() {
        return (
            <Button text='Submit' type='submit' isDisabled={false} isVisible={true} onClick={this.handleButtonClick} />
        );
    }
    handleButtonClick = (event) => {
        this.props.onClickSubmit(event)
    }
}

// Backlog API を叩く
const getBacklogMyActivities = (url, apikey) => {
      const BACKLOG_URL = url; // https://<My Backlog Account>.backlog.jp or backlog.com
      const APIKEY = apikey;
      kintone.proxy('https://' + BACKLOG_URL + '/api/v2/users/myself?apiKey=' + APIKEY, 'GET', {}, {})
      .then(function(resp)
      {
        const body = JSON.parse(resp[0]);
        kintone.proxy('https://' + BACKLOG_URL + '/api/v2/users/' + body.id + '/activities?apiKey=' + APIKEY, 'GET', {}, {})
        .then(function(resp)
        {
          console.log(resp[1], JSON.parse(resp[0]), resp[2]);
          const body = JSON.parse(resp[0]);
          console.log(body[0].project.id);
          body.map( value => {
            console.log(value.id);
          });
        });
    }).catch(function(error) {
      console.log(error);
    });
}
```

```index.jsx
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as App from './js/App';
import * as Common from './js/common';

(() => {
  kintone.events.on('app.record.index.show', event => {
    if (Common.getViewId(event) !== Common.VIEW_ID) {
      return;
    }
    ReactDOM.render(
      <App.App />,
      document.getElementById('backlog')
    );
    return event;
  });
})();
```

# 設定画面

<img width="1234" alt="スクリーンショット 2019-12-09 23.58.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/449f5c25-5484-c144-f435-84bf5c1937b0.png">

# 次にやること

設定画面からパラメーターを入力して、kintoneにレコードを登録するまでがんばりたいです:snowman2:


# 参考

* [Bulma](https://github.com/jgthms/bulma)