LoginSignup
8
3

More than 5 years have passed since last update.

kintone UI Component を試してみた

Posted at

「kintone UI Component」が公開されたので試してみた。
「kintoneライクな UI が簡単に」が売りのライブラリだが、使いこなしには少しノウハウがいる。

参考にした記事

「kintone UI Component」を使って簡単にkintoneライクなUIを設置する

「kintone UI Component」の使い方はこのとおりにしましょう。
細かい仕様は、マニュアルにあります。

テスト用アプリ

新規アプリを作って、カスタム一覧に「kintone UI Component」の部品を配置してみます。

2018-05-25_23h39_58.png

カスタム一覧の設定

div を一つ配置します。

<div id="xxx-space"></div>

2018-05-25_23h31_52.png

カスタマイズ内容

とりあえず表示される部品を見たかっただけなので、簡単なオプションのみ指定しています。
部品をおもいどおりに配置するには、div 階層と CSS 指定が必要です。
DOM の階層を作るのが面倒だったので、jQuery を使っています。

テキストボックスのサイズ変更は、直接 width, height を変更しました。
オプション指定に、width, height などは無いのでこれでいいのかな?

もう少し row の構成、ラベルと部品の配置など簡単に指定できるようにしたい。

jQuery.noConflict();
(function($) {
    "use strict";
    kintone.events.on("app.record.index.show", function(event) {
        console.log(event);
        if (event.viewId !== 5521048) return event;

        var $sp1 = $('<div id="xxx-button" class="xxx-button"></div>');
        var $sp2 = $('<div id="xxx-content" class="xxx-content"></div>');
        $('#xxx-space').append($sp1);
        $('#xxx-space').append($sp2);

        var button1 = new kintoneUIComponent.Button({ text: 'キャンセル' });
        $sp1.append(button1.render());
        button1.on('click', function() {
            alert('This is my customization1');
        });

        var button2 = new kintoneUIComponent.Button({ text: '保存', type: 'submit' });
        $sp1.append(button2.render());
        button2.on('click', function() {
            alert('This is my customization2');
        });

        var $row1 = $('<div class="xp-row"></div>');
        $sp2.append($row1);
        var $fd1 = $('<div id="xp-fd1" class="xp-fd"></div>');
        $row1.append($fd1);
        var labele1 = new kintoneUIComponent.Label ({ text: 'テキスト' });
        $fd1.append(labele1.render());
        var text1 = new kintoneUIComponent.Text ({ text: 'テキスト' });
        $fd1.append(text1.render());

        var $fd2 = $('<div id="xp-fd2" class="xp-fd"></div>');
        $row1.append($fd2);
        var labele2 = new kintoneUIComponent.Label ({ text: 'チェックボックス1' });
        $fd2.append(labele2.render());
        var options = {
            items: [
                {
                    label: 'Orange',
                    value: 'Orange',
                    isDisabled: false
                },
                {
                    label: 'Banana',
                    value: 'Banana',
                    isDisabled: false
                },
                {
                    label: 'Lemon',
                    value: 'Lemon',
                    isDisabled: true
                },
            ],
            value: ['Orange']
        };
        var checkbox = new kintoneUIComponent.CheckBox (options);
        $fd2.append(checkbox.render());

        var $fd3 = $('<div id="xp-fd3" class="xp-fd"></div>');
        $row1.append($fd3);
        var labele3 = new kintoneUIComponent.Label ({ text: 'チェックボックス2' });
        $fd3.append(labele3.render());
        var checkbox2 = new kintoneUIComponent.CheckBox (options);
        $fd3.append(checkbox2.render());

        var $fd4 = $('<div id="xp-fd4" class="xp-fd"></div>');
        $row1.append($fd4);
        var labele4 = new kintoneUIComponent.Label ({ text: 'ドロップダウン1' });
        $fd4.append(labele4.render());
        var op2 = {
            items: [
                {
                    label: 'Orange',
                    value: 'Orange',
                    isDisabled: false
                },
                {
                    label: 'Banana',
                    value: 'Banana',
                    isDisabled: false
                },
                {
                    label: 'Lemon',
                    value: 'Lemon',
                    isDisabled: true
                },
                {
                    label: 'Grape',
                    value: 'Grape',
                    isDisabled: false
                },
            ],
            value: 'Orange'
        };
        var dropdown = new kintoneUIComponent.Dropdown (op2);
        $fd4.append(dropdown.render());


        var $row2 = $('<div class="xp-row"></div>');
        $sp2.append($row2);
        var $fd21 = $('<div id="xp-fd21" class="xp-fd"></div>');
        $row2.append($fd21);
        var labele21 = new kintoneUIComponent.Label ({ text: 'テキスト' });
        $fd21.append(labele21.render());
        var text21 = new kintoneUIComponent.Text ({ text: 'テキスト' });
        $fd21.append($(text21.render()).find('input').width(300).height(38));

        var $fd22 = $('<div id="xp-fd22" class="xp-fd"></div>');
        $row2.append($fd22);

        var iconAdd = new kintoneUIComponent.IconButton ({ type: 'insert' });
        $fd22.append(iconAdd.render());
        var iconRemove = new kintoneUIComponent.IconButton ({ type: 'remove' });
        $fd22.append(iconRemove.render());
        var iconClose = new kintoneUIComponent.IconButton ({ type: 'close' });
        $fd22.append(iconClose.render());

        return event;
    });
})(jQuery);

CSS は、横並びの指定などを行っています。
inline-block がいいのか、table-cell がいいのかいろいろ試す必要がありそうです。

.xxx-button > div {
    display: inline-block;
    margin: 6px;
}
.xp-row {
    margin: 6px;
    padding: 0 6px;
    border: ridge 4px aliceblue;
    display: table;
}
.xp-row > div {
    display: table-cell;
}
.xp-fd {
    padding: 6px;
}

あとがき

kintone ライクな UI を作るのは結構面倒な作業でしたが、これを使うと少し楽になりそうです。
使いこなすことができれば、プラグイン開発などに応用したいと思います。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3