Skip to content

Instantly share code, notes, and snippets.

@zhdanovme
Last active February 4, 2016 20:01
Show Gist options
  • Select an option

  • Save zhdanovme/b64c9daa974832fbc16b to your computer and use it in GitHub Desktop.

Select an option

Save zhdanovme/b64c9daa974832fbc16b to your computer and use it in GitHub Desktop.
define([
    'bloko/blocks/popup/popup'
], function(Popup) {
    'use strict';

    return function(params) {
        params.buttons.forEach(function(value) {
            $(params.content).on('click', '.HH-ConfirmDialog-' + value + 'Button', function() {
                var handler = params['on' + value];
                if (handler && handler() === false) {
                    return;
                }

                popup.hide();
            });
        });

        var popup = Popup.create(params.content, {size: 'min', closebutton: false}); 
        popup.show();

        return {
            close: popup.hide.bind(popup);
        }
    };
});
define([
    'Modules/ConfirmDialog/ConfirmDialogConstructor',
    'Modules/ConfirmDialog/confirmDialog.mustache'
], function(ConfirmDialogConstructor, confirmDialogTemplate) {
    'use strict';

    return function(params) {
        ConfirmDialogConstructor({
            buttons: ['Accept', 'Decline'],
            content: $(confirmDialogTemplate.render(params.trl)).get(0),
            onAccept: params.onAccept,
            onDecline: params.onDecline
        }));
    };
});
define([
    'Modules/ConfirmDialog/ConfirmDialogConstructor',
    'Modules/ConfirmDialog/confirmDialogAsync.mustache'
], function(ConfirmDialogConstructor, confirmDialogAsync) {
    'use strict';

    return function(params) {
        var $content = $(confirmDialogAsync.render(params.trl));
        var $error = $('.HH-ConfirmDialog-Error', $content);
        var $acceptButton = $('.HH-ConfirmDialog-AcceptButton', $content);

        var loadingSetterInstance = new LoadingSetter($acceptButton[0]);
        var request;

        var confirmDialog = ConfirmDialogConstructor({
            buttons: ['Accept', 'Decline'],
            content: $content.get(0),
            onAccept: function(event) {
                $acceptButton.prop('disabled', true);
                loadingSetterInstance.start();
                request = $.ajax({
                    method: params.request.url,
                    data: params.request.data,
                    url: params.request.url,
                    success: function() {
                        params.onSuccess();
                        confirmDialog.close();
                    },
                    error: function() {
                        $acceptButton.prop('disabled', false);
                        loadingSetterInstance.stop();
                        $error.removeClass('g-hidden');
                    }
                });
                
                if (params.onAccept)
                    return params.onAccept();
                )
            },
            onDecline: function() {
                if (request) {
                    request.abort();
                }

                if (params.onDecline)
                    return params.onDecline();
                )
            }
        }, params));
    };
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment