JavaScript - Fluid Topics

Fluid Topics Integration Guide

Category
Reference Guides
Audience
public
Version
Latest

Create a script.js file and copy the following code block:

const FLUID_TOPICS_PORTAL = "baseUrl"
const MOST_VIEWED_DOCS_API_URL = FLUID_TOPICS_PORTAL + '/analytics/api/v2/documents/views-top';

const API_KEY = "API_KEY"

const API_HEADERS = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer ' + API_KEY,
  'Ft-Calling-App': '{CALLING_APP}'
};

// Fetch Data
async function fetchMostViewedDocuments() {
  const payload = {
    "startDate": "2024-12-01",
    "endDate": "2025-03-01",
    "paging": {
      "page": 1,
      "perPage": 50
    },
    "sortOrder": "TopFirst",
    "filters": {
      "titleContains": "guide",
      "metadata": []
    }
  };

  try {
    const response = await fetch(MOST_VIEWED_DOCS_API_URL, {
      method: 'POST',
      headers: API_HEADERS,
      body: JSON.stringify(payload)
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Error fetching data:', error);
    throw error; // Re-throw to be caught by the render function
  }
}

// Rendering
async function renderMostViewedDocumentsTable() {
  const tile = document.getElementById('most-viewed-docs');
  const tableBody = document.querySelector('#most-viewed-table tbody');
  const loadingIndicator = tile.querySelector('.loading-indicator');

  try {
    const data = await fetchMostViewedDocuments();
    loadingIndicator.style.display = 'none';

    if (data && data.results && Array.isArray(data.results)) {
      data.results.forEach(item => {
        const row = tableBody.insertRow();
        const titleCell = row.insertCell();
        const viewsCell = row.insertCell();
        const linkCell = row.insertCell();

        titleCell.textContent = item.title;
        viewsCell.textContent = item.displayCount;

        const link = document.createElement('a');
        link.href = item.link;
        link.textContent = 'View Document';
        link.target = "_blank"; // Open in a new tab
        linkCell.appendChild(link);
      });
    } else {
      tableBody.innerHTML = '<tr><td colspan="3">No data available.</td></tr>';
    }
  } catch (error) {
    console.error('Error rendering table:', error);
    loadingIndicator.textContent = 'Error loading data.';
  }
}

// Call the rendering functions
renderMostViewedDocumentsTable();