function Pages() {
    let data = {
        filter: {
            value: '',
            isregex: false,
            visible: false
        },
        order_by: PanelOrderBy({
            field: 'title',
            fields: [
                {value: 'id', text: 'ID'},
                {value: 'title', text: 'заголовку'},
                {value: 'created', text: 'дате создания'},
                {value: 'updated', text: 'дате обновления'}
            ],
            clickHandler: pages_get,
            order: 'asc',
        }),
        raw_pages: [],
        get pages() {
            let result = data.raw_pages.filter(page_filter);
            return result;
        },
        pagination: {
            page: 1,
            size: 0,
            // clickHandler: pages_get,
            prefix_url: '/pages'
        },
    };
    function breadcrumbs_render() {
        let result = m('ul', {class: 'breadcrumb mt-3'}, [
            m('li', {class: 'breadcrumb-item'}, m(m.route.Link, {href: '/'}, m('i', {class: 'fa fa-home'}))),
            m('li', {class: 'breadcrumb-item active'}, 'Список статей'),
        ]);
        return result;
    };
    function page_filter(page) {
        let filter = data.filter;
        let value = filter.value;
        if (value.length < 1) {
            return true;
        }

        let isTitle = null;
        if (data.filter.isregex) {
            let regex = new RegExp(value, 'ig');
            isTitle = regex.test(page.title.toLowerCase());
        } else {
            isTitle = page.title.toLowerCase().includes(value.toLowerCase());
        }

        if (isTitle > 0) {
            return true;
        }
        return false;
    };
    function pages_get() {
        m.request({
            url: '/api',
            method: "POST",
            body: [
                {
                    "jsonrpc": "2.0",
                    "method": 'pages',
                    "params": {
                        "page": data.pagination.page,
                        "order_by": {
                            "field": data.order_by.data.field,
                            'order': data.order_by.data.order
                        },
                        "fields": ["id", "title", "tags"]
                    },
                    "id": get_id()
                },
                {
                    "jsonrpc": "2.0",
                    "method": 'pages.count',
                    "id": get_id()
                }
            ]

        }).then(
            function(response) {
                if ('result' in response[0]) {
                    data.raw_pages = response[0]['result'];
                }
                if ('result' in response[1]) {
                    data.pagination.size = response[1]['result'];
                }
            }
        );
    };
    return {
        oninit: function(vnode) {
            console.log('Pages.oninit');
            let pagination = data.pagination.data;
            if (vnode.attrs.page!==undefined) {
                pagination.page = Number(vnode.attrs.page);
            };
            document.title = `Список статей - ${SETTINGS.TITLE}`;
            pages_get();
        },
        onbeforeupdate: function (vnode) {
            console.log('Pages.onbeforeupdate');
        },
        view: function(vnode) {
            console.log('Pages.view');
            let result = [];
            result.push(
                breadcrumbs_render(),
                m('div', {class: 'row'},
                    m('div', {class: 'col h1 py-1'}, [
                        m(m.route.Link, {class: "btn btn-outline-success btn-lg float-end", href: "/page/add", title: "Добавить статью"}, m('i', {class: 'fa fa-plus'})),
                        m('div', {class: "btn-group btn-group-lg me-2"}, [
                            m('button', {type: "button", class: "btn btn-outline-secondary", onclick: function() { panel_show(data.filter) }},
                                m('i', {class: "fa fa-filter"})
                            ),
                            m('button', {type: "button", class: "btn btn-outline-secondary", onclick: function() { panel_show(data.order_by.data) }},
                                m('i', {class: "fa fa-sort-alpha-asc"})
                            )
                        ]),
                        'Статьи',
                    ])
                ),
                m('hr'),
                m(PanelFilter, data.filter),
                m(data.order_by),
                m(Pagination, data.pagination),
            );
            if (data.pages.length>0) {
                result.push(
                    m(ComponentPages, {pages: data.pages}),
                    m(Pagination, data.pagination)
                );
            };
            result.push(breadcrumbs_render());
            return result
        }
    }
};
