diff --git a/src/components/timeline-elements/timeline-card-content/content-footer.tsx b/src/components/timeline-elements/timeline-card-content/content-footer.tsx index bed8b644a..a8fac64b8 100644 --- a/src/components/timeline-elements/timeline-card-content/content-footer.tsx +++ b/src/components/timeline-elements/timeline-card-content/content-footer.tsx @@ -55,7 +55,7 @@ const ContentFooter: FunctionComponent = ({ isNested, isResuming, }: ContentFooterProps) => { - const { mode, theme } = useContext(GlobalContext); + const { mode, theme, showMoreText } = useContext(GlobalContext); const canShowTriangleIcon = useMemo(() => { return ( @@ -95,7 +95,17 @@ const ContentFooter: FunctionComponent = ({ theme={theme} tabIndex={0} > - {{showMore ? 'read less' : 'read more'}} + { + + {showMore + ? showMoreText + ? showMoreText.expand + : 'read less' + : showMoreText + ? showMoreText.collapse + : 'read more'} + + } diff --git a/src/components/timeline-horizontal/timeline-horizontal.tsx b/src/components/timeline-horizontal/timeline-horizontal.tsx index 509f3232b..06f25f55e 100644 --- a/src/components/timeline-horizontal/timeline-horizontal.tsx +++ b/src/components/timeline-horizontal/timeline-horizontal.tsx @@ -86,7 +86,7 @@ const TimelineHorizontal: React.FunctionComponent = ({ onElapsed={onElapsed} customContent={children ? (children as ReactNode[])[index] : null} hasFocus={hasFocus} - iconChild={iconChildColln[index]} + iconChild={item.icon || iconChildColln[index]} active={item.active} cardWidth={cardWidth} isNested={isNested} diff --git a/src/components/timeline-vertical/timeline-vertical.tsx b/src/components/timeline-vertical/timeline-vertical.tsx index 575205678..341526ec7 100644 --- a/src/components/timeline-vertical/timeline-vertical.tsx +++ b/src/components/timeline-vertical/timeline-vertical.tsx @@ -73,11 +73,13 @@ const TimelineVertical: React.FunctionComponent = ({ (contentDetailsChildren as React.ReactNode[])[index]) || null; - const customIcon = Array.isArray(iconChildren) - ? iconChildren[index] - : index === 0 - ? iconChildren - : null; + const customIcon = item.icon + ? item.icon + : Array.isArray(iconChildren) + ? iconChildren[index] + : index === 0 + ? iconChildren + : null; return ( { timelineContent, date, items, + icon, }) => ({ title, url, @@ -80,6 +81,7 @@ const NewDemo: React.FunctionComponent = () => { timelineContent, date, items, + icon, }), ); setItems(newItems); diff --git a/src/demo/data.tsx b/src/demo/data.tsx index b32146fb8..722983636 100644 --- a/src/demo/data.tsx +++ b/src/demo/data.tsx @@ -35,6 +35,12 @@ const items: TimelineItemModel[] = [ `, ], + icon: ( + github + ), }, { title: '25 July 1941', diff --git a/src/demo/vertical-samples.tsx b/src/demo/vertical-samples.tsx index 1cb8b991d..e5f7be66d 100644 --- a/src/demo/vertical-samples.tsx +++ b/src/demo/vertical-samples.tsx @@ -427,6 +427,7 @@ export const VerticalCustomContent2: FunctionComponent<{ flipLayout timelinePointDimension={30} items={items} + showMoreText={{ expand: 'Expand', collapse: 'Collapse' }} >
diff --git a/src/models/TimelineItemModel.ts b/src/models/TimelineItemModel.ts index f93b3316b..e9630edfc 100644 --- a/src/models/TimelineItemModel.ts +++ b/src/models/TimelineItemModel.ts @@ -55,6 +55,9 @@ export interface TimelineItemModel { // Indicates if the timeline item is visible. visible?: boolean; + + // Optional prop for timeline icon. + icon?: ReactNode; } /** @@ -74,6 +77,7 @@ export type TimelineCardModel = Pick< | 'timelineContent' | 'isNested' | 'items' + | 'icon' > & { // Function for auto-scrolling. autoScroll?: ({ diff --git a/src/models/TimelineModel.ts b/src/models/TimelineModel.ts index 40cb4682b..5f643fcfb 100644 --- a/src/models/TimelineModel.ts +++ b/src/models/TimelineModel.ts @@ -23,6 +23,7 @@ export type TimelineModel = Pick< | 'nestedCardHeight' | 'noUniqueId' | 'uniqueId' + | 'showMoreText' > & { activeTimelineItem?: number; contentDetailsChildren?: React.ReactNode | React.ReactNode[]; @@ -243,6 +244,11 @@ export type TimelineProps = { // enables the read more button useReadMore?: boolean; + + showMoreText?: { + expand?: string; + collapse?: string; + } }; export type SlideShowType = 'reveal' | 'slide_in' | 'slide_from_sides';