fix: rotation issues

This commit is contained in:
Fredrik Burmester
2024-10-10 17:27:17 +02:00
parent ef7fbc985f
commit e3baa2f58b
2 changed files with 29 additions and 16 deletions

View File

@@ -32,7 +32,6 @@ import {
tagsFilterAtom, tagsFilterAtom,
yearFilterAtom, yearFilterAtom,
} from "@/utils/atoms/filters"; } from "@/utils/atoms/filters";
import { orientationAtom } from "@/utils/atoms/orientation";
import { import {
BaseItemDto, BaseItemDto,
BaseItemDtoQueryResult, BaseItemDtoQueryResult,
@@ -44,6 +43,7 @@ import {
} from "@jellyfin/sdk/lib/utils/api"; } from "@jellyfin/sdk/lib/utils/api";
import { FlashList } from "@shopify/flash-list"; import { FlashList } from "@shopify/flash-list";
import { useSafeAreaInsets } from "react-native-safe-area-context"; import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useOrientation } from "@/hooks/useOrientation";
const MemoizedTouchableItemRouter = React.memo(TouchableItemRouter); const MemoizedTouchableItemRouter = React.memo(TouchableItemRouter);
@@ -60,12 +60,13 @@ const Page = () => {
const [selectedTags, setSelectedTags] = useAtom(tagsFilterAtom); const [selectedTags, setSelectedTags] = useAtom(tagsFilterAtom);
const [sortBy, _setSortBy] = useAtom(sortByAtom); const [sortBy, _setSortBy] = useAtom(sortByAtom);
const [sortOrder, _setSortOrder] = useAtom(sortOrderAtom); const [sortOrder, _setSortOrder] = useAtom(sortOrderAtom);
const [orientation] = useAtom(orientationAtom);
const [sortByPreference, setSortByPreference] = useAtom(sortByPreferenceAtom); const [sortByPreference, setSortByPreference] = useAtom(sortByPreferenceAtom);
const [sortOrderPreference, setOderByPreference] = useAtom( const [sortOrderPreference, setOderByPreference] = useAtom(
sortOrderPreferenceAtom sortOrderPreferenceAtom
); );
const { orientation } = useOrientation();
useEffect(() => { useEffect(() => {
const sop = getSortOrderPreference(libraryId, sortOrderPreference); const sop = getSortOrderPreference(libraryId, sortOrderPreference);
if (sop) { if (sop) {
@@ -106,11 +107,12 @@ const Page = () => {
[libraryId, sortOrderPreference] [libraryId, sortOrderPreference]
); );
const getNumberOfColumns = useCallback(() => { const nrOfCols = useMemo(() => {
if (orientation === ScreenOrientation.Orientation.PORTRAIT_UP) return 3; if (screenWidth < 300) return 2;
if (screenWidth < 600) return 5; if (screenWidth < 500) return 3;
if (screenWidth < 960) return 6; if (screenWidth < 800) return 5;
if (screenWidth < 1280) return 7; if (screenWidth < 1000) return 6;
if (screenWidth < 1500) return 7;
return 6; return 6;
}, [screenWidth, orientation]); }, [screenWidth, orientation]);
@@ -219,7 +221,7 @@ const Page = () => {
const renderItem = useCallback( const renderItem = useCallback(
({ item, index }: { item: BaseItemDto; index: number }) => ( ({ item, index }: { item: BaseItemDto; index: number }) => (
<MemoizedTouchableItemRouter <TouchableItemRouter
key={item.Id} key={item.Id}
style={{ style={{
width: "100%", width: "100%",
@@ -230,10 +232,10 @@ const Page = () => {
<View <View
style={{ style={{
alignSelf: alignSelf:
orientation === ScreenOrientation.Orientation.PORTRAIT_UP orientation === ScreenOrientation.OrientationLock.PORTRAIT_UP
? index % 3 === 0 ? index % nrOfCols === 0
? "flex-end" ? "flex-end"
: (index + 1) % 3 === 0 : (index + 1) % nrOfCols === 0
? "flex-start" ? "flex-start"
: "center" : "center"
: "center", : "center",
@@ -244,7 +246,7 @@ const Page = () => {
<ItemPoster item={item} /> <ItemPoster item={item} />
<ItemCardText item={item} /> <ItemCardText item={item} />
</View> </View>
</MemoizedTouchableItemRouter> </TouchableItemRouter>
), ),
[orientation] [orientation]
); );
@@ -429,6 +431,7 @@ const Page = () => {
return ( return (
<FlashList <FlashList
key={orientation}
ListEmptyComponent={ ListEmptyComponent={
<View className="flex flex-col items-center justify-center h-full"> <View className="flex flex-col items-center justify-center h-full">
<Text className="font-bold text-xl text-neutral-500">No results</Text> <Text className="font-bold text-xl text-neutral-500">No results</Text>
@@ -437,10 +440,10 @@ const Page = () => {
contentInsetAdjustmentBehavior="automatic" contentInsetAdjustmentBehavior="automatic"
data={flatData} data={flatData}
renderItem={renderItem} renderItem={renderItem}
extraData={orientation} extraData={[orientation, nrOfCols]}
keyExtractor={keyExtractor} keyExtractor={keyExtractor}
estimatedItemSize={244} estimatedItemSize={244}
numColumns={getNumberOfColumns()} numColumns={nrOfCols}
onEndReached={() => { onEndReached={() => {
if (hasNextPage) { if (hasNextPage) {
fetchNextPage(); fetchNextPage();

View File

@@ -214,18 +214,28 @@ export default function page() {
return ( return (
<View <View
style={{ style={{
flex: 1,
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
width: screenDimensions.width, width: screenDimensions.width,
height: screenDimensions.height, height: screenDimensions.height,
position: "relative", position: "relative",
}} }}
className="flex flex-col items-center justify-center"
> >
<StatusBar hidden /> <StatusBar hidden />
<Pressable <Pressable
onPress={() => { onPress={() => {
setShowControls(!showControls); setShowControls(!showControls);
}} }}
className="absolute z-0 h-full w-full" style={{
position: "absolute",
top: 0,
left: 0,
width: screenDimensions.width,
height: screenDimensions.height,
zIndex: 0,
}}
> >
<Video <Video
ref={videoRef} ref={videoRef}