coveo-1.0.0-alpha1/modules/coveo_atomic/js/coveo_atomic.js

modules/coveo_atomic/js/coveo_atomic.js
/**
 * @file
 * Attach Coveo atomic interface.
 */

(function ($, Drupal) {
  /**
   * Wrapper object for the current state of the media library.
   */
  Drupal.CoveoAtomic = {
    /**
     * Refresh a Coveo search token.
     *
     * @param {string} search
     *   Coveo search implementation to generate a token for.
     * @return {function(): Promise<null|*>}
     *   Callback able to return a new search token.
     */
    refreshSearchToken(search) {
      // TODO what is the correct ID here?
      // https://docs.coveo.com/en/56/build-a-search-ui/use-search-token-authentication
      // I think this works...
      return async () => {
        const data = await $.getJSON('/coveo/refresh', { search });
        return data.token;
      };
    },
    analyticsClientMiddleware(searchInterface, eventName, payload) {
      return payload;
    },
  };

  async function attachCoveoAtomic(settings) {
    await customElements.whenDefined('atomic-search-interface');
    const searchInterface = settings.element;

    await searchInterface.initialize({
      accessToken: settings.accessToken,
      organizationId: settings.organizationId,
      renewAccessToken: Drupal.CoveoAtomic.refreshSearchToken(settings.search),
      analytics: {
        analyticsMode: settings.analyticsMode || 'legacy',
        analyticsClientMiddleware: (eventName, payload) => Drupal.CoveoAtomic.analyticsClientMiddleware(searchInterface, eventName, payload),
      },
    });
    searchInterface.executeFirstSearch();
  }

  Drupal.behaviors.coveoAtomic = {
    attach(context, settings) {
      function loadAtomic(base) {
        const atomicSettings = settings.coveo_atomic[base];
        if (typeof atomicSettings.selector === 'undefined') {
          atomicSettings.selector = `#${base}`;
        }
        once('coveo-atomic', atomicSettings.selector).forEach((el) => {
          atomicSettings.element = el;
          attachCoveoAtomic(atomicSettings);
        });
      }

      Object.keys(settings.coveo_atomic || {}).forEach(loadAtomic);
    },
  };
})(jQuery, Drupal);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc