diff --git a/native/src/components/Categories.tsx b/native/src/components/Categories.tsx index 8ece483017..aac176ba5e 100644 --- a/native/src/components/Categories.tsx +++ b/native/src/components/Categories.tsx @@ -10,6 +10,7 @@ import TileModel from '../models/TileModel' import testID from '../testing/testID' import { LanguageResourceCacheStateType, PageResourceCacheStateType } from '../utils/DataContainer' import CategoryListItem from './CategoryListItem' +import List from './List' import OrganizationContentInfo from './OrganizationContentInfo' import Page from './Page' import Tiles from './Tiles' @@ -80,16 +81,23 @@ const Categories = ({ language={language} path={category.path} AfterContent={category.organization && } - Footer={children.map(it => ( - ( + + )} + // Fixes VirtualizedLists nesting error + scrollEnabled={false} /> - ))} + } /> ) } diff --git a/native/src/components/CategoryListItem.tsx b/native/src/components/CategoryListItem.tsx index 137e84562b..4910db9da7 100644 --- a/native/src/components/CategoryListItem.tsx +++ b/native/src/components/CategoryListItem.tsx @@ -7,6 +7,7 @@ import { contentDirection, isContentDirectionReversalRequired } from '../constan import dimensions from '../constants/dimensions' import { LanguageResourceCacheStateType } from '../utils/DataContainer' import { getCachedThumbnail } from './Categories' +import List from './List' import SimpleImage from './SimpleImage' import SubCategoryListItem from './SubCategoryListItem' import Pressable from './base/Pressable' @@ -82,15 +83,19 @@ const CategoryListItem = ({ - {subCategories.map(subCategory => ( - - ))} + ( + + )} + scrollEnabled={false} + /> ) diff --git a/native/src/components/LayoutedScrollView.tsx b/native/src/components/LayoutedScrollView.tsx index 1bbbbe8216..22c102b5f1 100644 --- a/native/src/components/LayoutedScrollView.tsx +++ b/native/src/components/LayoutedScrollView.tsx @@ -15,6 +15,9 @@ const LayoutedScrollView = (props: LayoutedScrollViewProps): ReactElement => { = { items: Array - noItemsMessage: ReactElement | string + noItemsMessage?: ReactElement | string renderItem: (props: { item: T; index: number }) => ReactElement Header?: ReactElement Footer?: ReactElement + scrollEnabled?: boolean + accessibilityLabel?: string refresh?: () => void onEndReached?: () => void } @@ -26,7 +28,9 @@ const List = ({ Header, Footer, refresh, + accessibilityLabel, onEndReached, + scrollEnabled, }: ListProps): ReactElement => ( ({ paddingHorizontal: 10, }} onEndReachedThreshold={1} + scrollEnabled={scrollEnabled} + accessibilityRole='list' + accessibilityLabel={accessibilityLabel} /> ) diff --git a/native/src/components/SearchListItem.tsx b/native/src/components/SearchListItem.tsx index baf48ce1ee..3d7fc0043d 100644 --- a/native/src/components/SearchListItem.tsx +++ b/native/src/components/SearchListItem.tsx @@ -1,4 +1,5 @@ import React, { memo, ReactElement } from 'react' +import { useTranslation } from 'react-i18next' import Highlighter from 'react-native-highlight-words' import styled, { useTheme } from 'styled-components/native' @@ -58,6 +59,7 @@ const SearchListItem = ({ onItemPress, query, }: SearchListItemProps): ReactElement => { + const { t } = useTranslation('search') const theme = useTheme() const { title, thumbnail } = category const excerpt = getExcerpt(contentWithoutHtml, { query, maxChars: SEARCH_PREVIEW_MAX_CHARS }) @@ -86,7 +88,7 @@ const SearchListItem = ({ /> ) return ( - onItemPress(category)}> + onItemPress(category)} accessibilityHint={t('itemHint')}> diff --git a/native/src/components/base/TextButton.tsx b/native/src/components/base/TextButton.tsx index 36cf9ecdc9..fbe202ad93 100644 --- a/native/src/components/base/TextButton.tsx +++ b/native/src/components/base/TextButton.tsx @@ -30,7 +30,12 @@ type TextButtonProps = { } const TextButton = ({ text, onPress, disabled = false, type = 'primary', style }: TextButtonProps): ReactElement => ( - + {text} ) diff --git a/native/src/routes/SearchModal.tsx b/native/src/routes/SearchModal.tsx index 3319a8a1e0..a76f285a21 100644 --- a/native/src/routes/SearchModal.tsx +++ b/native/src/routes/SearchModal.tsx @@ -114,6 +114,7 @@ const SearchModal = ({ diff --git a/translations/translations.json b/translations/translations.json index 4926d26a9c..2905f0bb08 100644 --- a/translations/translations.json +++ b/translations/translations.json @@ -8412,6 +8412,13 @@ "de": { "nothingFound": "Es wurden leider keine passenden Ergebnisse gefunden.", "searchPlaceholder": "Suche", + "itemHint": "Suchergebnis öffnen", + "searchResultsCount_zero": "0 Suchergebnisse", + "searchResultsCount_one": "1 Suchergebnis", + "searchResultsCount_two": "2 Suchergebnisse", + "searchResultsCount_few": "{{count}} Suchergebnisse", + "searchResultsCount_many": "{{count}} Suchergebnisse", + "searchResultsCount_other": "{{count}} Suchergebnisse", "pageTitle": "Suche", "delete": "Eingabe löschen" }, @@ -8454,6 +8461,13 @@ "en": { "nothingFound": "Sorry, we could not find any matching results.", "searchPlaceholder": "Search", + "itemHint": "View search result", + "searchResultsCount_zero": "0 search results", + "searchResultsCount_one": "1 search result", + "searchResultsCount_two": "2 search results", + "searchResultsCount_few": "{{count}} search results", + "searchResultsCount_many": "{{count}} search results", + "searchResultsCount_other": "{{count}} search results", "pageTitle": "Search", "delete": "Delete input" },