UNPKG

@refinedev/core

Version:

Refine is a React meta-framework for building enterprise-level, data-intensive applications rapidly with support for modern UI libraries and headless integrations.

59 lines (49 loc) 1.69 kB
import type { useTranslate } from "../../../hooks/i18n"; import type { IResourceItem } from "../../../contexts/resource/types"; import { safeTranslate } from "../safe-translate"; import { useUserFriendlyName } from "../useUserFriendlyName"; /** * Generates document title for the given resource and action. */ export function generateDefaultDocumentTitle( translate: ReturnType<typeof useTranslate>, resource?: IResourceItem, action?: string, id?: string, resourceName?: string, getUserFriendlyName?: (name: string, type: "singular" | "plural") => string, ) { const getFriendlyName = getUserFriendlyName || useUserFriendlyName(); const actionPrefixMatcher = { create: "Create new ", clone: `#${id ?? ""} Clone `, edit: `#${id ?? ""} Edit `, show: `#${id ?? ""} Show `, list: "", }; const identifier = resource?.identifier ?? resource?.name; const resourceNameFallback = resource?.meta?.label ?? (identifier ? getFriendlyName(identifier, action === "list" ? "plural" : "singular") : identifier); const resourceNameWithFallback = resourceName ?? resourceNameFallback; const defaultTitle = safeTranslate( translate, "documentTitle.default", "Refine", ); const suffix = safeTranslate(translate, "documentTitle.suffix", " | Refine"); let autoGeneratedTitle = defaultTitle; if (action && identifier) { autoGeneratedTitle = safeTranslate( translate, `documentTitle.${identifier}.${action}`, `${ actionPrefixMatcher[action as keyof typeof actionPrefixMatcher] ?? "" }${resourceNameWithFallback}${suffix}`, { id }, ); } return autoGeneratedTitle; }