mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			156 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Formats a custom domain with https protocol if needed
 | 
						|
 * @param {string} customDomain - The custom domain to format
 | 
						|
 * @returns {string} Formatted domain with https protocol
 | 
						|
 */
 | 
						|
const formatCustomDomain = customDomain =>
 | 
						|
  customDomain.startsWith('https') ? customDomain : `https://${customDomain}`;
 | 
						|
 | 
						|
/**
 | 
						|
 * Gets the default base URL from configuration
 | 
						|
 * @returns {string} The default base URL
 | 
						|
 * @throws {Error} If no valid base URL is found
 | 
						|
 */
 | 
						|
const getDefaultBaseURL = () => {
 | 
						|
  const { hostURL, helpCenterURL } = window.chatwootConfig || {};
 | 
						|
  const baseURL = helpCenterURL || hostURL || '';
 | 
						|
 | 
						|
  if (!baseURL) {
 | 
						|
    throw new Error('No valid base URL found in configuration');
 | 
						|
  }
 | 
						|
 | 
						|
  return baseURL;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Gets the base URL from configuration or custom domain
 | 
						|
 * @param {string} [customDomain] - Optional custom domain for the portal
 | 
						|
 * @returns {string} The base URL for the portal
 | 
						|
 */
 | 
						|
const getPortalBaseURL = customDomain =>
 | 
						|
  customDomain ? formatCustomDomain(customDomain) : getDefaultBaseURL();
 | 
						|
 | 
						|
/**
 | 
						|
 * Builds a portal URL using the provided portal slug and optional custom domain
 | 
						|
 * @param {string} portalSlug - The slug identifier for the portal
 | 
						|
 * @param {string} [customDomain] - Optional custom domain for the portal
 | 
						|
 * @returns {string} The complete portal URL
 | 
						|
 * @throws {Error} If portalSlug is not provided or invalid
 | 
						|
 */
 | 
						|
export const buildPortalURL = (portalSlug, customDomain) => {
 | 
						|
  const baseURL = getPortalBaseURL(customDomain);
 | 
						|
  return `${baseURL}/hc/${portalSlug}`;
 | 
						|
};
 | 
						|
 | 
						|
export const buildPortalArticleURL = (
 | 
						|
  portalSlug,
 | 
						|
  categorySlug,
 | 
						|
  locale,
 | 
						|
  articleSlug,
 | 
						|
  customDomain
 | 
						|
) => {
 | 
						|
  const portalURL = buildPortalURL(portalSlug, customDomain);
 | 
						|
  return `${portalURL}/articles/${articleSlug}`;
 | 
						|
};
 | 
						|
 | 
						|
export const getArticleStatus = status => {
 | 
						|
  switch (status) {
 | 
						|
    case 'draft':
 | 
						|
      return 0;
 | 
						|
    case 'published':
 | 
						|
      return 1;
 | 
						|
    case 'archived':
 | 
						|
      return 2;
 | 
						|
    default:
 | 
						|
      return undefined;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
export const ARTICLE_STATUSES = {
 | 
						|
  DRAFT: 'draft',
 | 
						|
  PUBLISHED: 'published',
 | 
						|
  ARCHIVED: 'archived',
 | 
						|
};
 | 
						|
 | 
						|
export const ARTICLE_MENU_ITEMS = {
 | 
						|
  publish: {
 | 
						|
    label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.PUBLISH',
 | 
						|
    value: ARTICLE_STATUSES.PUBLISHED,
 | 
						|
    action: 'publish',
 | 
						|
    icon: 'i-lucide-check',
 | 
						|
  },
 | 
						|
  draft: {
 | 
						|
    label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.DRAFT',
 | 
						|
    value: ARTICLE_STATUSES.DRAFT,
 | 
						|
    action: 'draft',
 | 
						|
    icon: 'i-lucide-pencil-line',
 | 
						|
  },
 | 
						|
  archive: {
 | 
						|
    label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.ARCHIVE',
 | 
						|
    value: ARTICLE_STATUSES.ARCHIVED,
 | 
						|
    action: 'archive',
 | 
						|
    icon: 'i-lucide-archive-restore',
 | 
						|
  },
 | 
						|
  delete: {
 | 
						|
    label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.DELETE',
 | 
						|
    value: 'delete',
 | 
						|
    action: 'delete',
 | 
						|
    icon: 'i-lucide-trash',
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
export const ARTICLE_MENU_OPTIONS = {
 | 
						|
  [ARTICLE_STATUSES.ARCHIVED]: ['publish', 'draft'],
 | 
						|
  [ARTICLE_STATUSES.DRAFT]: ['publish', 'archive'],
 | 
						|
  [ARTICLE_STATUSES.PUBLISHED]: ['draft', 'archive'],
 | 
						|
};
 | 
						|
 | 
						|
export const ARTICLE_TABS = {
 | 
						|
  ALL: 'all',
 | 
						|
  MINE: 'mine',
 | 
						|
  DRAFT: 'draft',
 | 
						|
  ARCHIVED: 'archived',
 | 
						|
};
 | 
						|
 | 
						|
export const CATEGORY_ALL = 'all';
 | 
						|
 | 
						|
export const ARTICLE_TABS_OPTIONS = [
 | 
						|
  {
 | 
						|
    key: 'ALL',
 | 
						|
    value: 'all',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    key: 'MINE',
 | 
						|
    value: 'mine',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    key: 'DRAFT',
 | 
						|
    value: 'draft',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    key: 'ARCHIVED',
 | 
						|
    value: 'archived',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export const LOCALE_MENU_ITEMS = [
 | 
						|
  {
 | 
						|
    label: 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.MAKE_DEFAULT',
 | 
						|
    action: 'change-default',
 | 
						|
    value: 'default',
 | 
						|
    icon: 'i-lucide-star',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    label: 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.DELETE',
 | 
						|
    action: 'delete',
 | 
						|
    value: 'delete',
 | 
						|
    icon: 'i-lucide-trash',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export const ARTICLE_EDITOR_STATUS_OPTIONS = {
 | 
						|
  published: ['archive', 'draft'],
 | 
						|
  archived: ['draft'],
 | 
						|
  draft: ['archive'],
 | 
						|
};
 |