40 lines
918 B
TypeScript
40 lines
918 B
TypeScript
// Copyright 2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import React from 'react';
|
|
import classNames from 'classnames';
|
|
import { times } from 'lodash';
|
|
|
|
import { strictAssert } from '../util/assert';
|
|
|
|
export function BadgeCarouselIndex({
|
|
currentIndex,
|
|
totalCount,
|
|
}: Readonly<{
|
|
currentIndex: number;
|
|
totalCount: number;
|
|
}>): JSX.Element | null {
|
|
strictAssert(totalCount >= 1, 'Expected 1 or more items');
|
|
strictAssert(
|
|
currentIndex < totalCount,
|
|
'Expected current index to be in range'
|
|
);
|
|
|
|
if (totalCount < 2) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<div aria-hidden className="BadgeCarouselIndex">
|
|
{times(totalCount, index => (
|
|
<div
|
|
key={index}
|
|
className={classNames(
|
|
'BadgeCarouselIndex__dot',
|
|
currentIndex === index && 'BadgeCarouselIndex__dot--selected'
|
|
)}
|
|
/>
|
|
))}
|
|
</div>
|
|
);
|
|
}
|