Newer
Older
dmpopidor / lib / assets / javascripts / views / orgs / admin_edit.js
// TODO: we need to be able to swap in the appropriate locale here
import 'number-to-text/converters/en-us';
import { convertToText } from 'number-to-text/index';
import ariatiseForm from '../../utils/ariatiseForm';
import { Tinymce } from '../../utils/tinymce';
import { MAX_NUMBER_ORG_URLS } from '../../constants';

$(() => {
  ariatiseForm({ selector: '#edit_org_details_form' });

  // We only allow up to 3 URLs
  const toggleAddUrlLink = () => {
    if ($('#org-link-section').find('div.org-link').length >= MAX_NUMBER_ORG_URLS) {
      $('a#add-org-link').hide();
    } else {
      $('a#add-org-link').show();
    }
  };

  // Remove a URL
  const removeUrl = (e) => {
    $(e.target).closest('.row').remove();
    toggleAddUrlLink();
  };

  const toggleFeedback = () => {
    if ($('#org_feedback_enabled_true').is(':checked')) {
      $('#feeback-email input, #feeback-email textarea').removeAttr('disabled');
    } else {
      $('#feeback-email input, #feeback-email textarea').attr('disabled', true);
    }
  };

  // Add a URL
  $('a#add-org-link').click(() => {
    const link = $('#org-link-section').find('div.org-link').last();
    const clone = $(link).clone();
    clone.find('input').val('');
    $(clone).find('.remove-org-link').click((e) => {
      removeUrl(e);
    });
    link.after(clone);
    toggleAddUrlLink();
  });

  $('.remove-org-link').click((e) => {
    removeUrl(e);
  });

  $('#edit_org_feedback_form input[type="radio"]').click(() => {
    toggleFeedback();
  });

  // Serialize URLs to JSON for form submission
  $('#edit_org_profile_form').submit(() => {
    const json = Array.from($('#org-link-section div.org-link')).map((el) => {
      const link = $(el).find('#org_links_url');
      const text = $(el).find('#org_links_text');
      return {
        link: (link.length > 0 ? $(link).val() : ''),
        text: (text.length > 0 ? $(text).val() : ''),
      };
    });
    $('#org_links').val(JSON.stringify(json));
  });

  // Initialises tinymce for any target element with class tinymce_answer
  Tinymce.init({ selector: '#org_feedback_email_msg' });

  $('#reset-to-default-feedback-email').click((e) => {
    e.preventDefault();
    $('#org_feedback_email_subject').val($('#feedback-email-default-subject').html());
    const editor = Tinymce.findEditorById('org_feedback_email_msg');
    editor.setContent($('#feedback-email-default-message').text());
  });

  // Convert the max number of URLs constant to text and display for user
  $('#max-nbr-urls').text(convertToText(MAX_NUMBER_ORG_URLS).toLowerCase());

  toggleAddUrlLink();
  toggleFeedback();
});