Source: products/argos-saleslogix/src/Environment.js

import lang from 'dojo/_base/lang';
import 'dojo/_base/sniff';

/**
 * @class crm.Environment
 *
 */
const __class = lang.setObject('crm.Environment', {
  // todo: open a new browser window for these when on a mobile device?
  // on a mobile device, launching an external handler can impact a view transition, and cause issues, which the timeout takes care of.
  // not the best way, perhaps a post-transition callback should be used for launching these? check transitioning, then queue if needed?
  initiateCall: function initiateCall(number) {
    setTimeout(() => {
      window.location.href = `tel:${number}`;
    }, 500);
  },
  initiateEmail: function initiateEmail(email, subject, body) {
    setTimeout(() => {
      const mailtoUri = (subject) ? `mailto:${email}?subject=${subject}&body=${body || ''}` : `mailto:${email}`;
      window.location.href = mailtoUri;
    }, 1000); // 1 sec delay for iPad iOS5 to actually save nav state to local storage
  },
  showMapForAddress: function showMapForAddress(address) {
    const href = `${window.location.protocol}//maps.google.com/maps?output=embed&q=${address}`;
    const view = App.getView('link_view');
    if (view) {
      view.show({
        link: href,
        title: address,
      });
    }
  },
  attachmentViewsToRefresh: [
    'myattachment_list',
    'attachment_list',
    'attachment_related',
    'account_attachment_related',
    'contact_attachment_related',
    'lead_attachment_related',
    'opportunity_attachment_related',
    'ticket_attachment_related',
    'activity_attachment_related',
    'history_attachment_related',
  ],
  activityViewsToRefresh: [
    'myactivity_list',
    'activity_list',
    'activity_detail',
    'activity_related',
    'ticketactivity_related',
    'history_related',
    'history_list',
  ],
  detailViewsToRefreshOnUpdate: [
    'account_detail',
    'contact_detail',
    'opportunity_detail',
    'lead_detail',
    'ticket_detail',
  ],
  refreshStaleDetailViews: function refreshStaleDetailViews() {
    // List of detail views that will need refreshed when a note is added or an activity is completed (possibly others??).
    // Otherwise the etag will change and the server will give a 412: Preconditioned failed when we attempt to edit/save.
    const views = crm.Environment.detailViewsToRefreshOnUpdate || [];
    crm.Environment.refreshViews(views);
  },
  refreshActivityLists: function refreshActivityLists() {
    const views = crm.Environment.activityViewsToRefresh || [];
    crm.Environment.refreshViews(views);
  },
  refreshAttachmentViews: function refreshAttachmentViews() {
    const views = crm.Environment.attachmentViewsToRefresh || [];
    crm.Environment.refreshViews(views);
  },
  refreshViews: function refreshViews(views) {
    if (views && views.length > 0) {
      views.forEach((viewId) => {
        const view = App.getView(viewId);
        if (view) {
          view.refreshRequired = true;
        }
      });
    }
  },
});

lang.setObject('Mobile.SalesLogix.Environment', __class);
export default __class;