diff --git a/components/Common/Dropdown/__tests__/index.test.mjs b/components/Common/Dropdown/__tests__/index.test.mjs deleted file mode 100644 index 1ea22a3a4fdb8..0000000000000 --- a/components/Common/Dropdown/__tests__/index.test.mjs +++ /dev/null @@ -1,63 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; -import Dropdown from '..'; - -describe('Dropdown component', () => { - const items = [ - { label: 'item1', title: 'Item 1', active: false, onClick: jest.fn() }, - { label: 'item2', title: 'Item 2', active: true, onClick: jest.fn() }, - { label: 'item3', title: 'Item 3', active: false, onClick: jest.fn() }, - ]; - - it('should render the items and apply active styles', () => { - render(); - - items.forEach(item => { - const button = screen.getByText(item.title); - expect(button).toBeInTheDocument(); - - if (item.active) { - expect(button).toHaveStyle('font-weight: bold'); - } else { - expect(button).not.toHaveStyle('font-weight: bold'); - } - }); - }); - - it('should call the onClick function when an item is clicked', () => { - render(); - const button = screen.getByText(items[2].title); - fireEvent.click(button); - expect(items[2].onClick).toHaveBeenCalledTimes(1); - }); - - it('should call the onClick function when Enter or Space is pressed', () => { - render(); - const button = screen.getByText(items[1].title); - fireEvent.keyDown(button, { key: 'Enter', code: 'Enter' }); - fireEvent.keyDown(button, { key: ' ', code: 'Space' }); - expect(items[1].onClick).toHaveBeenCalledTimes(2); - }); - - it('should not render the items when shouldShow prop is false', () => { - render(); - items.forEach(item => { - const button = screen.queryByText(item.title); - expect(button).not.toBeVisible(); - }); - }); - - it('should apply styles passed in the styles prop', () => { - const customStyles = { - backgroundColor: 'green', - padding: '10px', - borderRadius: '5px', - }; - - render(); - - const dropdownList = screen.getByRole('list'); - expect(dropdownList).toHaveStyle('background-color: green'); - expect(dropdownList).toHaveStyle('padding: 10px'); - expect(dropdownList).toHaveStyle('border-radius: 5px'); - }); -}); diff --git a/components/Common/Dropdown/index.module.scss b/components/Common/Dropdown/index.module.scss deleted file mode 100644 index c8a6ab19d1e11..0000000000000 --- a/components/Common/Dropdown/index.module.scss +++ /dev/null @@ -1,43 +0,0 @@ -.dropdownList { - background-color: var(--color-dropdown-background); - border-radius: 5px; - height: fit-content; - list-style-type: none; - max-height: 200px; - min-width: 150px; - overflow-y: auto; - padding: 0; - position: absolute; - width: fit-content; - - > li { - > button { - background: none; - border: none; - color: var(--color-text-primary); - cursor: pointer; - font-size: var(--font-size-body1); - padding: var(--space-12); - text-align: center; - width: 100%; - - &:hover { - background-color: var(--color-dropdown-hover); - } - } - } - - &::-webkit-scrollbar { - width: var(--space-06); - } - - &::-webkit-scrollbar-track { - background: transparent; - } - - &::-webkit-scrollbar-thumb { - background-color: var(--color-text-secondary); - border: transparent; - border-radius: 20px; - } -} diff --git a/components/Common/Dropdown/index.stories.tsx b/components/Common/Dropdown/index.stories.tsx deleted file mode 100644 index e282140ecd36e..0000000000000 --- a/components/Common/Dropdown/index.stories.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import Dropdown from './index'; -import type { Meta as MetaObj, StoryObj } from '@storybook/react'; - -type Story = StoryObj; -type Meta = MetaObj; - -const items = [...Array(10).keys()].map(item => ({ - title: `Item ${item + 1}`, - label: `item-${item + 1}`, - active: false, - onClick: () => { - null; - }, -})); - -items[2].active = true; - -export const Default: Story = { - args: { - items: items, - shouldShow: true, - }, -}; - -export default { component: Dropdown } as Meta; diff --git a/components/Common/Dropdown/index.tsx b/components/Common/Dropdown/index.tsx deleted file mode 100644 index cb0f093ceb2be..0000000000000 --- a/components/Common/Dropdown/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { forwardRef } from 'react'; -import type { DropdownItem } from '@/types'; -import type { CSSProperties, KeyboardEvent, PropsWithChildren } from 'react'; - -import styles from './index.module.scss'; - -type DropdownProps = PropsWithChildren<{ - items: Array; - shouldShow: boolean; - styles: CSSProperties; -}>; - -const Dropdown = forwardRef( - ({ items, shouldShow, styles: extraStyles, children }, ref) => { - const mappedElements = items.map(item => { - const extraStyles = { fontWeight: item.active ? 'bold' : 'normal' }; - - const handleKeyPress = (e: KeyboardEvent) => { - if (e.key === 'Enter' || e.key === ' ') { - item.onClick(); - } - }; - - return ( -
  • - -
  • - ); - }); - - const dropdownStyles = { - display: shouldShow ? 'block' : 'none', - ...extraStyles, - }; - - return ( - <> -
      - {mappedElements} -
    - - {children} - - ); - } -); - -Dropdown.displayName = 'DropdownWithRef'; - -export default Dropdown; diff --git a/components/Common/LanguageSelector/__tests__/index.test.mjs b/components/Common/LanguageSelector/__tests__/index.test.mjs deleted file mode 100644 index 8fbdb2c963a42..0000000000000 --- a/components/Common/LanguageSelector/__tests__/index.test.mjs +++ /dev/null @@ -1,43 +0,0 @@ -import { fireEvent, render, screen } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import LanguageSelector from '..'; - -jest.mock('../../../../hooks/useLocale', () => ({ - useLocale: () => ({ - availableLocales: [ - { code: 'en', name: 'English', localName: 'English' }, - { code: 'es', name: 'Spanish', localName: 'Español' }, - ], - currentLocale: { code: 'en', name: 'English', localName: 'English' }, - }), -})); - -describe('LanguageSelector', () => { - test('clicking the language switch button toggles the dropdown display', () => { - render( - {}}> - - - ); - const button = screen.getByRole('button'); - expect(screen.queryByText('English')).not.toBeVisible(); - fireEvent.click(button); - expect(screen.queryByText('English')).toBeVisible(); - fireEvent.click(button); - expect(screen.queryByText('English')).not.toBeVisible(); - }); - - test('renders the Dropdown component with correct style', () => { - render( - {}}> - - - ); - const button = screen.getByRole('button'); - fireEvent.click(button); - const dropdown = screen.getByRole('list'); - expect(dropdown).toHaveStyle( - 'position: absolute; top: 60%; right: 0; margin: 0;' - ); - }); -}); diff --git a/components/Common/LanguageSelector/index.module.scss b/components/Common/LanguageSelector/index.module.scss deleted file mode 100644 index 2daab20dbfb74..0000000000000 --- a/components/Common/LanguageSelector/index.module.scss +++ /dev/null @@ -1,12 +0,0 @@ -.languageSwitch { - background: none; - border: none; - color: var(--color-text-accent); - cursor: pointer; - line-height: 0; - padding: 0; - - svg { - font-size: 2rem; - } -} diff --git a/components/Common/LanguageSelector/index.stories.tsx b/components/Common/LanguageSelector/index.stories.tsx deleted file mode 100644 index ff88a0f32e206..0000000000000 --- a/components/Common/LanguageSelector/index.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import LanguageSelector from './index'; -import type { Meta as MetaObj, StoryObj } from '@storybook/react'; - -type Story = StoryObj; -type Meta = MetaObj; - -export const Default: Story = {}; - -const containerStyles = { marginLeft: '200px' } as const; - -export default { - component: LanguageSelector, - decorators: [ - Story => ( -
    - -
    - ), - ], -} as Meta; diff --git a/components/Common/LanguageSelector/index.tsx b/components/Common/LanguageSelector/index.tsx deleted file mode 100644 index 5fecfc5a378d4..0000000000000 --- a/components/Common/LanguageSelector/index.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { useMemo, useState } from 'react'; -import { MdOutlineTranslate } from 'react-icons/md'; -import { useIntl } from 'react-intl'; -import styles from './index.module.scss'; -import Dropdown from '@/components/Common/Dropdown'; -import { useLocale } from '@/hooks/useLocale'; -import { useClickOutside } from '@/hooks/useClickOutside'; - -const dropdownStyle = { - position: 'absolute', - top: '60%', - right: '0', - margin: 0, -} as const; - -const LanguageSelector = () => { - const [showDropdown, setShowDropdown] = useState(false); - - const ref = useClickOutside( - () => showDropdown && setShowDropdown(false) - ); - - const { availableLocales, currentLocale } = useLocale(); - - const intl = useIntl(); - - const dropdownItems = useMemo( - () => - availableLocales.map(locale => ({ - title: locale.localName, - label: locale.name, - onClick: () => { - // TODO: "locale changing logic yet to be implemented" - }, - active: currentLocale.code === locale.code, - })), - [availableLocales, currentLocale] - ); - - const ariaLabelText = intl.formatMessage({ - id: 'components.common.languageSelector.button.title', - }); - - return ( - - - - ); -}; - -export default LanguageSelector; diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 5ec6ac2c1f17c..48b0a269bb50f 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -36,7 +36,6 @@ "components.pagination.previous": "Older", "layouts.blogPost.author.byLine": "{author, select, null {} other {By {author}, }}", "layouts.blogIndex.currentYear": "News from {year}", - "components.common.languageSelector.button.title": "Switch Language", "components.api.jsonLink.title": "View as JSON", "components.api.sourceLink": "Source Code:", "pages.404.title": "404: Page could not be found", diff --git a/i18n/locales/id.json b/i18n/locales/id.json index 430bd5cbe70a0..7b1d056ed0ba3 100644 --- a/i18n/locales/id.json +++ b/i18n/locales/id.json @@ -36,7 +36,6 @@ "components.pagination.previous": "Lama", "layouts.blogPost.author.byLine": "{author, select, null {} other {Oleh {author}, }}", "layouts.blogIndex.currentYear": "Berita dari {year}", - "components.common.languageSelector.button.title": "Ganti Bahasa", "components.api.jsonLink.title": "Tampilkan sebagai JSON", "components.api.sourceLink": "Kode Sumber:", "pages.404.title": "404: Halaman tidak dapat ditemukan", diff --git a/i18n/locales/zh-cn.json b/i18n/locales/zh-cn.json index 9891b079a437e..a0a34692b3a0d 100644 --- a/i18n/locales/zh-cn.json +++ b/i18n/locales/zh-cn.json @@ -36,7 +36,6 @@ "components.pagination.previous": "更早的新闻事件", "layouts.blogPost.author.byLine": "{author, select, null {} other {由 {author} }}", "layouts.blogIndex.currentYear": "{year} 年的所有新闻事件", - "components.common.languageSelector.button.title": "切换语言", "components.api.jsonLink.title": "以 JSON 格式查看", "components.api.sourceLink": "源代码:", "pages.404.title": "404:您访问的页面不存在",