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;