function Notes() {
    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: notes_get,
            order: 'asc',
        }),
        notes: [],
        pagination: {
            page: 1,
            size: 0,
            prefix_url: '/notes'
        },
    }
    function breadcrumbs_render() {
        return m('ul', {class: 'breadcrumb mt-2'}, [
            m('li', {class: 'breadcrumb-item'}, m(m.route.Link, {href: '/'}, m('i', {class: 'fa fa-home'}))),
            m('li', {class: 'breadcrumb-item active'}, 'Список заметок')
        ]);
    };
    function notes_get() {
        m.request({
            url: '/api',
            method: "POST",
            body: [
                {
                    "jsonrpc": "2.0",
                    "method": 'notes',
                    "params": {
                        "page": data.pagination.page,
                        "order_by": data.order_by.value,
                        "fields": ["id", "title", "tags", "created", "updated"]
                    },
                    "id": get_id()
                },
                {
                    "jsonrpc": "2.0",
                    "method": 'notes.count',
                    "params": {},
                    "id": get_id()
                }
            ]

        }).then(
            function(response) {
                if ('result' in response[0]) {
                    data.notes = response[0]['result'];
                }
                if ('result' in response[1]) {
                    data.pagination.size = response[1]['result'];
                }
            }
        );
    }
    return {
        oninit: function(vnode) {
            console.log('Notes.oninit');
            document.title = `Список статей - ${SETTINGS.TITLE}`;
            if (vnode.attrs.page!==undefined) {
                data.pagination.page = Number(vnode.attrs.page);
            };
            notes_get();
        },
        onbeforeupdate: function(vnode) {
            console.log('Notes.onbeforeupdate');
            if (vnode.attrs.page!==undefined) {
                if (data.pagination.page.toString() != vnode.attrs.page) {
                    data.pagination.page = Number(vnode.attrs.page);
                    notes_get();
                }
            };
        },
        view: function(vnode) {
            console.log('Notes.view');
            result = [];
            result.push([
                breadcrumbs_render(),
                m('div', {class: 'row'},
                    m('div', {class: 'col py-2 h1'}, [
                        m(m.route.Link, {class: 'btn btn-outline-success btn-lg float-end', href: '/note/add'}, 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.notes.length>0) {
                result.push(m(ComponentNotes, {notes: data.notes}));
                result.push(m(Pagination, data.pagination));
            };
            result.push(breadcrumbs_render());
            return result;
        }
    }
};
