/* * Copyright (c) 2022 LatePoint LLC. All rights reserved. */ function latepoint_process_updated() { location.reload(); } function latepoint_process_action_removed($elem) { $elem.closest('.os-form-block').remove(); } function latepoint_replace_process_condition_element($trigger, params, $target, callback = null) { $trigger.closest('.sub-section-content').addClass('os-loading'); let route_name = $trigger.data('route'); let data = {action: latepoint_helper.route_action, route_name: route_name, params: params, return_format: 'json'} jQuery.ajax({ type: 'post', dataType: "json", url: latepoint_timestamped_ajaxurl(), data: data, success: (response) => { if (response.status === latepoint_helper.response_status.success) { $target.html(response.message); latepoint_init_process_conditions_form(); $trigger.closest('.sub-section-content').removeClass('os-loading'); if (typeof callback === 'function') { callback(); } } else { alert("Error!"); } } }); } function latepoint_init_process_forms() { latepoint_init_process_conditions_form(); jQuery('.os-processes-w').on('latepoint:initProcessActionForm latepoint:initProcessActionTypeSettings', '.process-action-form', async function () { if (jQuery(this).find('.latepoint-whatsapp-templates-loader').length) { let $loader = jQuery(this).find('.latepoint-whatsapp-templates-loader'); let $settings = jQuery(this).find('.process-action-settings'); let $holder = jQuery(this).find('.latepoint-whatsapp-templates-holder'); $settings.addClass('os-loading'); let data = { action: latepoint_helper.route_action, route_name: $loader.data('route'), params: { template_id: $loader.data('selected-template-id'), action_id: $loader.data('process-action-id'), process_id: $loader.data('process-id') }, layout: 'none', return_format: 'json' } try { let response = await jQuery.ajax({ type: "post", dataType: "json", url: latepoint_timestamped_ajaxurl(), data: data }); $settings.removeClass('os-loading'); if (response.status === 'success') { $loader.remove(); $holder.html(response.message); } else { throw new Error(response.message); } } catch (e) { $settings.removeClass('os-loading'); console.log(e); alert(e); } } }); jQuery('.os-processes-w').on('click', '.os-run-process', function () { let $btn = jQuery(this); $btn.addClass('os-loading'); let $process_form = $btn.closest('.os-process-form'); // remove previously assigned class on other forms jQuery('.os-process-form.prepared-to-run').removeClass('prepared-to-run'); // add class so we know which form is about to be processed $process_form.addClass('prepared-to-run'); let form_data = new FormData($process_form[0]); form_data.set('process_event_type', $process_form.closest('.os-process-form').find('.process-event-type-selector').val()); let data = new FormData(); data.append('params', latepoint_formdata_to_url_encoded_string(form_data)); data.append('action', latepoint_helper.route_action); data.append('route_name', $btn.data('route')); data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: data, success: function (data) { latepoint_show_data_in_side_panel(data.message, 'width-600'); latepoint_init_process_test_form(); $btn.removeClass('os-loading'); } }); return false; }); jQuery('.os-processes-w').find('.process-action-form').each(function (index) { latepoint_init_process_action_form(jQuery(this)); }); jQuery('.os-processes-w').on('click', '.pe-remove-condition', (event) => { if (jQuery(event.currentTarget).closest('.pe-conditions').find('.pe-condition').length > 1) { jQuery(event.currentTarget).closest('.pe-condition').remove(); } else { alert('You need to have at least one condition if your custom field is set to be conditional.') } return false; }); jQuery('.os-processes-w').on('change', 'select.process-condition-operator-selector', (event) => { let $select = jQuery(event.currentTarget); if ($select.val() == 'changed' || $select.val() == 'not_changed') { $select.closest('.pe-condition').find('.process-condition-values-w').hide(); } else { $select.closest('.pe-condition').find('.process-condition-values-w').show(); } }); jQuery('.os-processes-w').on('change', 'select.process-event-type-selector', (event) => { let $select = jQuery(event.currentTarget); latepoint_replace_process_condition_element($select, {event_type: $select.val()}, $select.closest('.os-form-block').find('.process-event-condition-wrapper')); }); jQuery('.os-processes-w').on('change', 'select.process-condition-object-selector', (event) => { let $select = jQuery(event.currentTarget); let $property_selector = $select.closest('.pe-condition').find('.process-condition-properties-w select'); latepoint_replace_process_condition_element($select, {object_code: $select.val()}, $property_selector, () => { $property_selector.trigger('change'); }); }); jQuery('.os-processes-w').on('change', 'select.process-condition-property-selector', (event) => { let $select = jQuery(event.currentTarget); let $operator_selector = $select.closest('.pe-condition').find('.process-condition-operators-w select'); latepoint_replace_process_condition_element($select, {property: $select.val()}, $operator_selector, () => { $operator_selector.trigger('change'); }); }); jQuery('.os-processes-w').on('change', 'select.process-condition-operator-selector', (event) => { let $select = jQuery(event.currentTarget); latepoint_replace_process_condition_element($select, { property: $select.closest('.pe-condition').find('select.process-condition-property-selector').val(), trigger_condition_id: $select.closest('.pe-condition').data('condition-id'), operator: $select.val() }, $select.closest('.pe-condition').find('.process-condition-values-w')); }); } function latepoint_init_process_conditions_form() { jQuery('.os-late-select').lateSelect(); } function latepoint_add_process_condition($btn, response) { $btn.closest('.pe-condition').after(response.message); latepoint_init_process_conditions_form(); } function latepoint_init_added_process_action_form($trigger) { let $action_form = $trigger.prev('.process-action-form'); $action_form.addClass('is-editing').trigger('latepoint:initProcessActionForm'); latepoint_init_process_action_form($action_form); } function latepoint_init_process_test_form() { jQuery('.latepoint-run-process-btn').on('click', function () { let $btn = jQuery(this); if ($btn.hasClass('os-loading')) return false; $btn.addClass('os-loading'); let $test_action_form = jQuery('.latepoint-side-panel-w .action-settings-wrapper'); let form_data = new FormData(jQuery('.os-process-form.prepared-to-run')[0]); // set data sources jQuery('.process-test-data-source-selector').each(function () { form_data.set(jQuery(this).prop('name'), jQuery(this).val()); }); // set selected actions jQuery('.process-test-data-source-selector').each(function () { form_data.set(jQuery(this).prop('name'), jQuery(this).val()); }); let action_ids_to_run = []; jQuery('.action-to-run input[type="hidden"]').each(function () { if (jQuery(this).val() == 'on') action_ids_to_run.push(jQuery(this).closest('.action-to-run').data('id')); }); form_data.set('action_ids', action_ids_to_run.join(',')); let data = new FormData(); data.append('params', latepoint_formdata_to_url_encoded_string(form_data)); data.append('action', latepoint_helper.route_action); data.append('route_name', $btn.data('route')); data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: data, success: function (data) { $btn.removeClass('os-loading'); if (data.status == 'success') { latepoint_add_notification(data.message); } else { latepoint_add_notification(data.message, 'error'); } } }); }); jQuery('.process-action-test-data-source-selector').on('change', function () { // TODO add call to server to check if selected data sources matches conditions of this process }); } function latepoint_init_process_action_test_form() { latepoint_init_json_view(jQuery('.action-preview-wrapper.type-trigger_webhook pre')); jQuery('.latepoint-run-action-btn').on('click', function () { let $btn = jQuery(this); if ($btn.hasClass('os-loading')) return false; $btn.addClass('os-loading'); let $test_action_form = jQuery('.latepoint-side-panel-w .action-settings-wrapper'); let action_data = new FormData(); action_data.append('params', $test_action_form.find('select, textarea, input').serialize()); action_data.append('action', latepoint_helper.route_action); action_data.append('route_name', $btn.data('route')); action_data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: action_data, success: function (data) { $btn.removeClass('os-loading'); if (data.status == 'success') { latepoint_add_notification(data.message); } else { latepoint_add_notification(data.message, 'error'); } } }); }); jQuery('.process-action-test-data-source-selector').on('change', function () { let $select = jQuery(this); jQuery('.action-preview-wrapper').addClass('os-loading'); let $test_action_form = $select.closest('.action-settings-wrapper'); let action_data = new FormData(); action_data.append('params', $test_action_form.find('select, textarea, input').serialize()); action_data.append('action', latepoint_helper.route_action); action_data.append('route_name', $select.data('route')); action_data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: action_data, success: function (data) { jQuery('.action-preview-wrapper').html(data.message).removeClass('os-loading'); latepoint_init_json_view(jQuery('.action-preview-wrapper.type-trigger_webhook pre')); } }); }); } function latepoint_init_process_action_form($action_form) { $action_form.on('click', '.os-run-process-action', function () { let $btn = jQuery(this); $btn.addClass('os-loading'); let $action_form = $btn.closest('.process-action-form'); if (window.tinyMCE !== undefined) window.tinyMCE.triggerSave(); let action_data = new FormData(); let params = latepoint_create_form_data_from_non_form_element($action_form); params.set('process_event_type', $action_form.closest('.os-process-form').find('.process-event-type-selector').val()); action_data.append('params', latepoint_formdata_to_url_encoded_string(params)); action_data.append('action', latepoint_helper.route_action); action_data.append('route_name', $btn.data('route')); action_data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: action_data, success: function (data) { latepoint_show_data_in_side_panel(data.message, 'width-800'); latepoint_init_process_action_test_form(); $btn.removeClass('os-loading'); } }); return false; }); $action_form.on('click', '.process-action-heading', function () { let $action_form = jQuery(this).closest('.process-action-form'); if (!$action_form.hasClass('is-editing')) $action_form.trigger('latepoint:initProcessActionForm') $action_form.toggleClass('is-editing'); return false; }); $action_form.find('textarea.os-wp-editor-textarea').each(function (index) { latepoint_init_tiny_mce(jQuery(this).attr('id')); }); $action_form.on('click', '.os-remove-process-action', function () { if (confirm(jQuery(this).data('os-prompt'))) { jQuery(this).closest('.process-action-form').remove(); } return false; }); $action_form.on('change', '.process-action-type-whatsapp-template-selector', async function () { let $select = jQuery(this); let $preview_holder = $select.closest('.process-action-settings').find('.latepoint-whatsapp-template-preview-holder'); $preview_holder.addClass('os-loading'); let data = { action: latepoint_helper.route_action, route_name: $select.data('route'), params: { template_id: $select.val(), action_id: $select.data('action-id') }, layout: 'none', return_format: 'json' } try { let response = await jQuery.ajax({ type: "post", dataType: "json", url: latepoint_timestamped_ajaxurl(), data: data }); $preview_holder.removeClass('os-loading'); if (response.status === 'success') { $preview_holder.html(response.message); } else { throw new Error(response.message); } } catch (e) { $preview_holder.removeClass('os-loading'); console.log(e); alert(e); } return false; }); $action_form.on('change', '.process-action-type', function () { let $select = jQuery(this); jQuery(this).closest('.process-action-form').find('.process-action-name').text($select.find('option:selected').text()); let action_type = $select.val(); let action_id = $select.data('action-id'); let route_name = $select.data('route'); let $action_settings = $select.closest('.process-action-content').find('.process-action-settings'); $action_settings.addClass('os-loading'); let data = { action: latepoint_helper.route_action, route_name: route_name, params: { action_type: action_type, action_id: action_id }, layout: 'none', return_format: 'json' } jQuery.ajax({ type: "post", dataType: "json", url: latepoint_timestamped_ajaxurl(), data: data, success: function (data) { $action_settings.html(data.message).removeClass('os-loading'); let $action_form = $select.closest('.process-action-form'); latepoint_init_input_masks($action_form); $action_form.trigger('latepoint:initProcessActionTypeSettings'); } }); return false; }); }