|
1 | 1 | import { useRouter } from 'next/router' |
2 | | -import cx from 'classnames' |
3 | | -import { Dropdown, Details, Box, Text, useDetails } from '@primer/components' |
4 | | -import { ArrowRightIcon, ChevronDownIcon } from '@primer/octicons-react' |
| 2 | +import { ArrowRightIcon } from '@primer/octicons-react' |
5 | 3 |
|
6 | 4 | import { Link } from 'components/Link' |
7 | 5 | import { useMainContext } from 'components/context/MainContext' |
8 | 6 | import { useVersion } from 'components/hooks/useVersion' |
9 | 7 | import { useTranslation } from 'components/hooks/useTranslation' |
| 8 | +import { Picker } from 'components/ui/Picker' |
10 | 9 |
|
11 | 10 | type Props = { |
12 | | - variant?: 'inline' | 'compact' |
| 11 | + variant?: 'inline' |
13 | 12 | } |
| 13 | + |
14 | 14 | export const VersionPicker = ({ variant }: Props) => { |
15 | 15 | const router = useRouter() |
16 | 16 | const { currentVersion } = useVersion() |
17 | 17 | const { allVersions, page, enterpriseServerVersions } = useMainContext() |
18 | | - const { getDetailsProps, setOpen } = useDetails({ closeOnOutsideClick: true }) |
19 | 18 | const { t } = useTranslation('pages') |
20 | 19 |
|
21 | 20 | if (page.permalinks && page.permalinks.length <= 1) { |
22 | 21 | return null |
23 | 22 | } |
24 | 23 |
|
25 | 24 | return ( |
26 | | - <> |
27 | | - <div> |
28 | | - <Details |
29 | | - {...getDetailsProps()} |
30 | | - className={cx( |
31 | | - 'position-relative details-reset', |
32 | | - variant === 'inline' ? 'd-block' : 'd-inline-block' |
33 | | - )} |
34 | | - data-testid="article-version-picker" |
35 | | - > |
36 | | - <summary |
37 | | - className="d-block btn btn-invisible color-fg-default" |
38 | | - aria-haspopup="true" |
39 | | - aria-label="Toggle version list" |
40 | | - > |
41 | | - {variant === 'inline' ? ( |
42 | | - <div className="d-flex flex-items-center flex-justify-between"> |
43 | | - <Text>{allVersions[currentVersion].versionTitle}</Text> |
44 | | - <ChevronDownIcon size={24} className="arrow ml-md-1" /> |
45 | | - </div> |
46 | | - ) : ( |
47 | | - <> |
48 | | - <Text>{allVersions[currentVersion].versionTitle}</Text> |
49 | | - <Dropdown.Caret /> |
50 | | - </> |
51 | | - )} |
52 | | - </summary> |
53 | | - {variant === 'inline' ? ( |
54 | | - <Box py="2"> |
55 | | - {(page.permalinks || []).map((permalink) => { |
56 | | - return ( |
57 | | - <Dropdown.Item key={permalink.href} onClick={() => setOpen(false)}> |
58 | | - <Link href={permalink.href}>{permalink.pageVersionTitle}</Link> |
59 | | - </Dropdown.Item> |
60 | | - ) |
61 | | - })} |
62 | | - <Box mt={1}> |
63 | | - <Link |
64 | | - onClick={() => { |
65 | | - setOpen(false) |
66 | | - }} |
67 | | - href={`/${router.locale}/${enterpriseServerVersions[0]}/admin/all-releases`} |
68 | | - className="f6 no-underline color-fg-muted pl-3 pr-2 no-wrap" |
69 | | - > |
70 | | - {t('all_enterprise_releases')}{' '} |
71 | | - <ArrowRightIcon verticalAlign="middle" size={15} className="mr-2" /> |
72 | | - </Link> |
73 | | - </Box> |
74 | | - </Box> |
75 | | - ) : ( |
76 | | - <Dropdown.Menu direction="sw" style={{ width: 'unset' }}> |
77 | | - {(page.permalinks || []).map((permalink) => { |
78 | | - return ( |
79 | | - <Dropdown.Item key={permalink.href} onClick={() => setOpen(false)}> |
80 | | - <Link href={permalink.href}>{permalink.pageVersionTitle}</Link> |
81 | | - </Dropdown.Item> |
82 | | - ) |
83 | | - })} |
84 | | - <Box |
85 | | - borderColor="border.default" |
86 | | - borderTopWidth={1} |
87 | | - borderTopStyle="solid" |
88 | | - mt={2} |
89 | | - pt={2} |
90 | | - pb={1} |
| 25 | + <Picker |
| 26 | + variant={variant} |
| 27 | + data-testid="version-picker" |
| 28 | + defaultText="Choose version" |
| 29 | + options={(page.permalinks || []) |
| 30 | + .map((permalink) => ({ |
| 31 | + text: permalink.pageVersionTitle, |
| 32 | + selected: allVersions[currentVersion].versionTitle === permalink.pageVersionTitle, |
| 33 | + item: <Link href={permalink.href}>{permalink.pageVersionTitle}</Link>, |
| 34 | + })) |
| 35 | + .concat([ |
| 36 | + { |
| 37 | + text: t('all_enterprise_releases'), |
| 38 | + selected: false, |
| 39 | + item: ( |
| 40 | + <Link |
| 41 | + href={`/${router.locale}/${enterpriseServerVersions[0]}/admin/all-releases`} |
| 42 | + className="f6 no-underline color-fg-muted" |
91 | 43 | > |
92 | | - <Link |
93 | | - onClick={() => { |
94 | | - setOpen(false) |
95 | | - }} |
96 | | - href={`/${router.locale}/${enterpriseServerVersions[0]}/admin/all-releases`} |
97 | | - className="f6 no-underline color-fg-muted pl-3 pr-2 no-wrap" |
98 | | - > |
99 | | - {t('all_enterprise_releases')}{' '} |
100 | | - <ArrowRightIcon verticalAlign="middle" size={15} className="mr-2" /> |
101 | | - </Link> |
102 | | - </Box> |
103 | | - </Dropdown.Menu> |
104 | | - )} |
105 | | - </Details> |
106 | | - </div> |
107 | | - </> |
| 44 | + {t('all_enterprise_releases')}{' '} |
| 45 | + <ArrowRightIcon verticalAlign="middle" size={15} className="mr-2" /> |
| 46 | + </Link> |
| 47 | + ), |
| 48 | + }, |
| 49 | + ])} |
| 50 | + /> |
108 | 51 | ) |
109 | 52 | } |
0 commit comments