import React from 'react'
import Button from '../../Button/Button'
import Icon from '../../Icons/Icon'
import Tooltip from '../../Tooltip/Tooltip'
import { trimText } from '../../../services/HelperServiceTyped'
import { type BreadcrumbsProps, type BreadcrumbType } from './BreadcrumbTypes'
import styles from './_breadcrumb-common-components.module.scss'
const BreadcrumbArrow = () =>
type BreadcrumbPopoverContentProps = {
/** Array of breadcrumbs */
breadcrumbs: BreadcrumbType[]
/** Function to close the popover */
close: () => void
/** Breadcrumb callout */
callout: BreadcrumbsProps['callout']
/** Optionally remove the 1st and last index of the breadcrumbs so they are not shown in the popover. Only the Desktop experience needs this. */
isDesktop?: boolean
}
const BreadcrumbPopoverContent = ({
breadcrumbs,
close,
callout,
isDesktop,
}: BreadcrumbPopoverContentProps) => {
let spaces = 0
const options = breadcrumbs
.filter((b, index) => {
// We want to remove the 1st and last index of the breadcrumbs array when in the desktop version.
if (isDesktop) {
return index !== 0 && index !== breadcrumbs.length - 1 ? b : false
}
return b
})
.map((o: BreadcrumbType, i: number) => {
o.showIcon = i > 0
return o
})
const updateBreadcrumb = (breadcrumb: BreadcrumbType) => {
callout(breadcrumb)
close()
}
return (
{options?.map((opt, i) => {
if (i > 1) {
spaces = spaces + 8
}
return (
)
})}
)
}
type TextUnderlineProps = {
/** The text that will be rendered for this component */
text: string
/** Optionally use the small version for this component (12px). */
small?: boolean
/** Length of the truncated text */
characterLimit?: BreadcrumbsProps['textUnderlineCharacterLimit']
/** Determines if this component is being used in the desktop version. */
isDesktop?: boolean
}
const TextUnderline = ({
text,
small,
characterLimit,
isDesktop,
}: TextUnderlineProps): React.JSX.Element => {
// Trim the text if characterLimit is provided
const updatedText = characterLimit ? trimText(text, characterLimit) : text
const textArr = updatedText?.split(' ').filter(Boolean)
const textArrLength = textArr.length
const firstWordLength = textArr[0]?.length || 0
// Determine characterLength based on the conditions below
let characterLength = null
if (textArrLength === 1) {
if (firstWordLength < 5) {
characterLength = null // Single short word
} else if (characterLimit && firstWordLength > characterLimit) {
characterLength = characterLimit - 2 // Single word with character limit
} else if (firstWordLength > 15) {
characterLength = 5 // Single long word. Chose 15 because it fits mobile screen sizes. Chose 5 as the standard for the underline length for long words.
} else {
characterLength = firstWordLength - 2 // Normal case for single word
}
} else if (firstWordLength < 5) {
characterLength = updatedText.length - 2 // Multiple words, first is short
} else if (characterLimit && firstWordLength > characterLimit) {
characterLength = characterLimit - 2 // Multiple words with character limit
} else {
characterLength = firstWordLength - 2 // Default case for multiple words
}
const MainComponent = () => (
{characterLength ? updatedText.slice(0, characterLength) : updatedText}
{characterLength ? (
{updatedText.slice(characterLength)}
) : null}
)
return isDesktop ? (
characterLimit && text.length > characterLimit ? (
{MainComponent()}
) : (
MainComponent()
)
) : (
MainComponent()
)
}
export { BreadcrumbArrow, BreadcrumbPopoverContent, TextUnderline }