WikiEducationFoundation/WikiEduDashboard

View on GitHub
app/assets/javascripts/components/overview/salesforce_link.jsx

Summary

Maintainability
A
2 hrs
Test Coverage
A
90%
import React from 'react';
import PropTypes from 'prop-types';
import { extractSalesforceId } from '../../utils/salesforce_utils.js';
import { useDispatch } from 'react-redux';

const SalesforceLink = ({
  course,
  current_user,
  linkToSalesforce,
  updateSalesforceRecord
}) => {
  const dispatch = useDispatch();
  const linkToSalesforceHandler = () => {
    const rawSalesforceId = prompt('Enter the Salesforce record ID or url for this course.');
    if (!rawSalesforceId) { return; }
    const salesforceId = extractSalesforceId(rawSalesforceId);
    if (!salesforceId) {
      alert('That input did not include a valid Salesforce record ID or url.');
      return;
    }
    return dispatch(linkToSalesforce(course.id, salesforceId));
  };

  const updateSalesforceRecordHandler = () => {
    dispatch(updateSalesforceRecord(course.id))
      .then(() => alert('updating!'));
  };

  // Render nothing if user isn't an admin, or if Salesforce isn't configured
  if (!current_user.admin || !window.SalesforceServer) {
    return <div />;
  }

  // If Salesforce ID is present, show the admin a link to Salesforce
  // and a button to update the Salesforce record.
  if (course.flags.salesforce_id) {
    const openLink = window.SalesforceServer + course.flags.salesforce_id;
    return (
      <div>
        <div key="link_salesforce" className="available-action"><button onClick={linkToSalesforceHandler} className="button">Update Salesforce ID</button></div>
        <div key="open_salesforce" className="available-action"><a href={openLink} className="button" target="_blank">Open in Salesforce</a></div>
        <div key="update_salesforce" className="available-action"><button onClick={updateSalesforceRecordHandler} className="button" target="_blank">Update Salesforce record</button></div>
      </div>
    );
  }

  // If no Salesforce ID is present, show the "Link to Salesforce" button
  return (
    <p key="link_salesforce"><button onClick={linkToSalesforceHandler} className="button">Link to Salesforce</button></p>
  );
};

SalesforceLink.propTypes = {
  course: PropTypes.object,
  current_user: PropTypes.object,
  linkToSalesforce: PropTypes.func.isRequired,
  updateSalesforceRecord: PropTypes.func.isRequired
};

export default SalesforceLink;