<view class="wux-class {{ classes.wrap }}">
    <wux-backdrop id="wux-backdrop" data-index="{{ index }}" bind:click="onClose" />
    <view class="{{ classes.bd }}">
        <block wx:for="{{ options }}" wx:key="">
            <view class="{{ classes.item }} {{ common.getItemCls(prefixCls, item) }}" bindtap="onClick" data-index="{{ index }}">
                <view class="{{ classes.text }}">
                    {{ item.type !== 'filter' ? displayValues[index] : item.label }}
                    <view class="{{ classes.icon }} {{ common.getIconCls(prefixCls, item) }}" wx:if="{{ item.type !== 'text' }}"></view>
                </view>
            </view>
        </block>
    </view>
    <block wx:for="{{ options }}" wx:key="">
        <wux-animation-group wux-class="{{ classes.pop }}" in="{{ item.visible }}" class-names="wux-animate--slideInRight" bind:enter="onEnter" bind:exit="onExit" wx:if="{{ item.type === 'filter' }}">
            <scroll-view class="{{ classes.scrollView }}" scroll-y bindscroll="onScroll">
                <block wx:for="{{ item.children }}" wx:for-item="p" wx:for-index="pIndex" wx:key="">
                    <view class="{{ classes.panel }}">
                        <view class="{{ classes.panelHd }}">
                            <div class="{{ classes.panelTitle }}">{{ p.label }}</div>
                            <div class="{{ classes.panelSelected }}">{{ displayValues[index] && displayValues[index][pIndex] }}</div>
                        </view>
                        <view class="{{ classes.panelBd }}">
                            <radio-group bindchange="onPopupSelectChange" data-parent-index="{{ index }}" data-index="{{ pIndex }}" wx:if="{{ p.type === 'radio' }}">
                                <view class="{{ classes.groups }}">
                                    <block wx:for="{{ p.children }}" wx:for-item="g" wx:for-index="cIndex" wx:key="">
                                        <view class="{{ classes.group }}">
                                            <radio
                                                class="{{ classes.radio }}"
                                                value="{{ g.value }}"
                                                checked="{{ common.getChecked(values[index] && values[index][pIndex], g.value) }}"
                                            />
                                            <view class="{{ classes.btn }} {{ common.getChecked(values[index] && values[index][pIndex], g.value) ? prefixCls + '__btn--checked' : '' }}">{{ g.label }}</view>
                                        </view>
                                    </block>
                                </view>
                            </radio-group>
                            <checkbox-group bindchange="onPopupSelectChange" data-parent-index="{{ index }}" data-index="{{ pIndex }}" wx:else="{{ p.type === 'checkbox' }}">
                                <view class="{{ classes.groups }}">
                                    <block wx:for="{{ p.children }}" wx:for-item="g" wx:for-index="cIndex" wx:key="">
                                        <view class="{{ classes.group }}">
                                            <checkbox
                                                class="{{ classes.check }}"
                                                value="{{ g.value }}"
                                                checked="{{ common.getChecked(values[index] && values[index][pIndex], g.value) }}"
                                            />
                                            <view class="{{ classes.btn }} {{ common.getChecked(values[index] && values[index][pIndex], g.value) ? prefixCls + '__btn--checked' : '' }}">{{ g.label }}</view>
                                        </view>
                                    </block>
                                </view>
                            </checkbox-group>
                        </view>
                    </view>
                </block>
            </scroll-view>
            <div class="{{ classes.btns }}">
                <view class="{{ classes.btn }}" data-index="{{ index }}" bindtap="onSelectReset">{{ cancelText }}</view>
                <view class="{{ classes.btn }} {{ prefixCls + '__btn--danger' }}" data-index="{{ index }}" bindtap="onSelectConfirm">{{ confirmText }}</view>
            </div>
        </wux-animation-group>
        <wux-animation-group wux-class="{{ classes.select }}" in="{{ item.visible }}" class-names="wux-animate--fadeIn" bind:enter="onEnter" bind:exit="onExit" wx:if="{{ item.type === 'radio' }}">
            <scroll-view class="{{ classes.scrollView }}" scroll-y>
                <wux-radio-group
                    value="{{ values[index] }}"
                    options="{{ common.getOptions(item.children) }}"
                    bind:change="onSelectChange"
                    data-index="{{ index }}"
                    data-type="{{ item.type }}"
                />
            </scroll-view>
        </wux-animation-group>
        <wux-animation-group wux-class="{{ classes.select }}" in="{{ item.visible }}" class-names="wux-animate--fadeIn" bind:enter="onEnter" bind:exit="onExit" wx:if="{{ item.type === 'checkbox' }}">
            <scroll-view class="{{ classes.scrollView }}" scroll-y>
                <wux-checkbox-group
                    value="{{ values[index] }}"
                    options="{{ common.getOptions(item.children) }}"
                    bind:change="onSelectChange"
                    data-index="{{ index }}"
                    data-type="{{ item.type }}"
                />
                <div class="{{ classes.btns }}">
                    <view class="{{ classes.btn }}" data-index="{{ index }}" bindtap="onSelectReset">{{ cancelText }}</view>
                    <view class="{{ classes.btn }} {{ prefixCls + '__btn--danger' }}" data-index="{{ index }}" bindtap="onSelectConfirm">{{ confirmText }}</view>
                </div>
            </scroll-view>
        </wux-animation-group>
    </block>
</view>

<wxs module="common">
    module.exports = {
        getOptions: function(options) {
            return options.map(function(option) {
                if (option.constructor === 'String') {
                    return {
                        title: option,
                        value: option
                    }
                }
                return {
                    title: option.label,
                    value: option.value
                }
            })
        },
        getChecked: function(values, value) {
            if (!values || !values.length) return false
            if (values.constructor === 'Array') {
                return values.indexOf(value) !== -1
            }
            return values === value
        },
        getItemCls: function(prefixCls, item) {
            var itemCls = []
            if (item.type !== 'text') {
                itemCls.push(prefixCls + '__item--has-icon')
            }
            if (item.checked) {
                itemCls.push(prefixCls + '__item--checked')
            }
            return itemCls.join(' ')
        },
        getIconCls: function(prefixCls, icon) {
            var iconCls = [prefixCls + '__icon--' + icon.type]
            if (icon.type === 'sort') {
                if (icon.sort === 1) {
                    iconCls.push(prefixCls + '__icon--sort-asc')
                } else if (icon.sort === -1) {
                    iconCls.push(prefixCls + '__icon--sort-desc')
                }
            }
            return iconCls.join(' ')
        },
    }
</wxs>
