catarse/catarse.js

View on GitHub
legacy/src/c/project-contribution-report-content.js

Summary

Maintainability
D
1 day
Test Coverage
import m from 'mithril';
import prop from 'mithril/stream';
import _ from 'underscore';
import h from '../h';
import popNotification from './pop-notification';
import projectContributionReportContentCard from './project-contribution-report-content-card';
import projectsContributionReportVM from '../vms/projects-contribution-report-vm';
import modalBox from '../c/modal-box';
import deliverContributionModalContent from '../c/deliver-contribution-modal-content';
import errorContributionModalContent from '../c/error-contribution-modal-content';

const projectContributionReportContent = {
    oninit: function(vnode) {
        const showSelectedMenu = h.toggleProp(false, true),
            selectedAny = prop(false),
            showSuccess = prop(false),
            loading = prop(false),
            displayDeliverModal = h.toggleProp(false, true),
            displayErrorModal = h.toggleProp(false, true),
            selectedContributions = prop([]),
            deliveryMessage = prop(''),
            selectAll = () => {
                projectsContributionReportVM.getAllContributions(vnode.attrs.filterVM).then((data) => {
                    const exceptReceived = _.filter(data, contrib => contrib.delivery_status !== 'received');
                    selectedContributions().push(..._.pluck(exceptReceived, 'id'));
                    selectedAny(!_.isEmpty(exceptReceived));
                });
            },
            unselectAll = () => {
                selectedContributions([]);
                selectedAny(false);
            },
            updateStatus = (status) => {
                const data = {
                    contributions: selectedContributions(),
                    message: deliveryMessage(),
                    delivery_status: status
                };
                if (status === 'delivered') {
                    displayDeliverModal.toggle();
                } else if (status === 'error') {
                    displayErrorModal.toggle();
                }
                loading(true);
                showSelectedMenu.toggle();
                m.redraw();
                projectsContributionReportVM.updateStatus(data).then(() => {
                    loading(false);
                    showSuccess(true);
                    // update status so we don't have to reload the page
                    _.map(_.filter(vnode.attrs.list.collection(), contrib => _.contains(selectedContributions(), contrib.id)),
                          item => item.delivery_status = status);
                }).catch(() => {
                    m.redraw();
                });
                return false;
            };

        vnode.state = {
            showSuccess,
            selectAll,
            unselectAll,
            deliveryMessage,
            displayDeliverModal,
            displayErrorModal,
            updateStatus,
            loading,
            showSelectedMenu,
            selectedAny,
            selectedContributions
        };
    },
    view: function({state, attrs}) {
        const list = attrs.list;
        const isFailed = attrs.project().state === 'failed';

        return m('.w-section.bg-gray.before-footer.section', state.loading() ? h.loader() : [
              (state.displayErrorModal() ? m(modalBox, {
                  displayModal: state.displayErrorModal,
                  hideCloseButton: false,
                  content: [errorContributionModalContent, { project: attrs.project, displayModal: state.displayErrorModal, amount: state.selectedContributions().length, updateStatus: state.updateStatus, message: state.deliveryMessage }]
              }) : ''),
              (state.displayDeliverModal() ? m(modalBox, {
                  displayModal: state.displayDeliverModal,
                  hideCloseButton: false,
                  content: [deliverContributionModalContent, { project: attrs.project, displayModal: state.displayDeliverModal, amount: state.selectedContributions().length, updateStatus: state.updateStatus, message: state.deliveryMessage }]
              }) : ''),

            (state.showSuccess() ? m(popNotification, {
                message: 'As informações foram atualizadas'
            }) : ''),
            m('.w-container', [
                m('.u-marginbottom-40',
                    m('.w-row', [
                        m('.u-text-center-small-only.w-col.w-col-2',
                            m('.fontsize-base.u-marginbottom-10', [
                                m('span.fontweight-semibold',
                                    (list.isLoading() ? '' : list.total())
                                ),
                                ' apoios'
                            ])
                        ),
                        m('.w-col.w-col-6', isFailed ? '' : [
                            (!state.selectedAny() ?
                                m('button.btn.btn-inline.btn-small.btn-terciary.u-marginright-20.w-button', {
                                    onclick: state.selectAll
                                },
                                    'Selecionar todos'
                                ) :
                                m('button.btn.btn-inline.btn-small.btn-terciary.u-marginright-20.w-button', {
                                    onclick: state.unselectAll
                                },
                                    'Desmarcar todos'
                                )
                            ),
                            (state.selectedAny() ?
                                m('.w-inline-block', [
                                    m('button.btn.btn-inline.btn-small.btn-terciary.w-button', {
                                        onclick: state.showSelectedMenu.toggle
                                    }, [
                                        'Marcar ',
                                        m('span.w-hidden-tiny',
                                            'entrega'
                                        ),
                                        ' como'
                                    ]),
                                    (state.showSelectedMenu() ?
                                        m('.card.dropdown-list.dropdown-list-medium.u-radius.zindex-10[id=\'transfer\']', [
                                            m('a.dropdown-link.fontsize-smaller[href=\'#\']', {
                                                onclick: () => state.displayDeliverModal.toggle()
                                            },
                                                'Entregue'
                                            ),
                                            m('a.dropdown-link.fontsize-smaller[href=\'#\']', {
                                                onclick: () => state.displayErrorModal.toggle()
                                            },
                                                'Erro na entrega'
                                            )
                                        ]) : '')
                                ]) : '')
                        ]),
                        m('.w-clearfix.w-col.w-col-4',
                            m('a.alt-link.fontsize-small.lineheight-looser.u-right', { onclick: () => attrs.showDownloads(true) }, [
                                m('span.fa.fa-download',
                                    ''
                                ),
                                ' Baixar relatórios'
                            ])
                        )
                    ])
                ),

                _.map(list.collection(), (item) => {
                    const contribution = prop(item);
                    return m(projectContributionReportContentCard, {
                        project: attrs.project,
                        contribution,
                        selectedContributions: state.selectedContributions,
                        selectedAny: state.selectedAny
                    });
                })
            ]),
            m('.w-section.section.bg-gray', [
                m('.w-container', [
                    m('.w-row.u-marginbottom-60', [
                        m('.w-col.w-col-2.w-col-push-5', [
                            (!list.isLoading() ?
                                (list.isLastPage() ? '' : m('button#load-more.btn.btn-medium.btn-terciary', {
                                    onclick: list.nextPage
                                }, 'Carregar mais')) : h.loader())
                        ])
                    ])

                ])
            ])

        ]);
    }
};

export default projectContributionReportContent;