/
ComponentsList.tsx
49 lines (43 loc) · 1.13 KB
/
ComponentsList.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import React from 'react';
import PropTypes from 'prop-types';
import ComponentsListRenderer from 'rsg-components/ComponentsList/ComponentsListRenderer';
import getUrl from '../../utils/getUrl';
import * as Rsg from '../../../typings';
interface ComponentsListProps {
items: Rsg.TOCItem[];
hashPath?: string[];
useRouterLinks?: boolean;
useHashId?: boolean;
}
const ComponentsList: React.FunctionComponent<ComponentsListProps> = ({
items,
useRouterLinks = false,
useHashId,
hashPath,
}) => {
const mappedItems = items
.map(item => {
const href = item.href
? item.href
: getUrl({
name: item.name,
slug: item.slug,
anchor: !useRouterLinks,
hashPath: useRouterLinks ? hashPath : false,
id: useRouterLinks ? useHashId : false,
});
return {
...item,
href,
};
})
.filter(item => item.visibleName);
return mappedItems.length > 0 ? <ComponentsListRenderer items={mappedItems} /> : null;
};
ComponentsList.propTypes = {
items: PropTypes.array.isRequired,
hashPath: PropTypes.array,
useRouterLinks: PropTypes.bool,
useHashId: PropTypes.bool,
};
export default ComponentsList;