mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 12:08:01 +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'],
|
|
};
|