import { View, Image, useWindowDimensions } from 'react-native'; import { Divider, Text, ScrollView, Flex, Row, useMediaQuery, useTheme } from 'native-base'; import { useQuery, useQueries } from '../../Queries'; import API from '../../API'; import Song from '../../models/Song'; import { LinearGradient } from 'expo-linear-gradient'; import ButtonBase from './ButtonBase'; import { Icon } from 'iconsax-react-native'; import { LoadingView } from '../Loading'; import { translate } from '../../i18n/i18n'; import { useNavigation } from '../../Navigation'; import Spacer from './Spacer'; import User from '../../models/User'; import LogoutButtonCC from './LogoutButtonCC'; import GlassmorphismCC from './Glassmorphism'; import { ColorSchemeProvider } from '../../Theme'; import useColorScheme from '../../hooks/colorScheme'; type ScaffoldDesktopCCProps = { widthPadding: boolean, children?: React.ReactNode; user: User; logo: string; routeName: string; menu: { type: "main" | "sub"; title: string; icon: Icon; link: string; }[] }; const SongHistory = (props: {quantity: number}) => { const playHistoryQuery = useQuery(API.getUserPlayHistory); const songHistory = useQueries( playHistoryQuery.data?.map(({ songID }) => API.getSong(songID)) ?? [] ); if (!playHistoryQuery.data || playHistoryQuery.isLoading) { return ; } return ( {songHistory.length === 0 ? {translate('menuNoSongsPlayedYet')} : songHistory .map((h) => h.data) .filter((data): data is Song => data !== undefined) .filter( (song, i, array) => array.map((s) => s.id).findIndex((id) => id == song.id) == i ) .slice(0, props.quantity + 1) .map((histoItem, index) => ( {histoItem.name} ) ) } ); } const ScaffoldDesktopCC = (props: ScaffoldDesktopCCProps) => { const navigation = useNavigation(); const userQuery = useQuery(API.getUserInfo); const [isSmallScreen] = useMediaQuery({ maxWidth: 1100 }); const { colors } = useTheme(); if (!userQuery.data || userQuery.isLoading) { return ; } return ( {!isSmallScreen && Chromacase } {props.menu.map((value) => ( value.type === "main" && navigation.navigate(value.link as never) } /> ))} {!isSmallScreen && {translate('menuRecentlyPlayed')} } {props.menu.map((value) => ( value.type === "sub" && navigation.navigate(value.link as never) } /> ))} {props.children} ); }; export default ScaffoldDesktopCC;