upgrade navbar
continuous-integration/drone/push Build is passing Details

pull/19/head
Emre KARTAL 1 year ago
parent ae0ff4e455
commit 10bd4b892a

Binary file not shown.

Before

Width:  |  Height:  |  Size: 898 KiB

After

Width:  |  Height:  |  Size: 897 KiB

@ -2,15 +2,15 @@ import { UserLocation } from '../models/Location';
import LocationSchema from "../database/LocationSchema"; import LocationSchema from "../database/LocationSchema";
class LocationService { class LocationService {
private locations = LocationSchema; private location = LocationSchema;
public async getNearUser(userId: string, musicId: string, latitude: number, longitude: number) { public async getNearUser(userId: string, musicId: string, latitude: number, longitude: number) {
await this.locations.findOneAndUpdate( await this.location.findOneAndUpdate(
{ userId }, { userId },
{ userId, musicId, latitude, longitude }, { userId, musicId, latitude, longitude },
{ upsert: true } { upsert: true }
); );
const snapshot = await this.locations.find({ userId: { $ne: userId } }); const snapshot = await this.location.find({ userId: { $ne: userId } });
if (!snapshot.length) { if (!snapshot.length) {
console.log('No matching documents.'); console.log('No matching documents.');
return; return;
@ -50,6 +50,17 @@ class LocationService {
return dist; return dist;
} }
} }
public async delete(
id: string
): Promise<void | Error> {
try {
await this.location.findByIdAndRemove(id);
} catch (error: any) {
throw new Error(error.message);
}
}
} }
export default LocationService; export default LocationService;

@ -1,5 +1,4 @@
import { IMusic } from "../models/Music"; import { IMusic } from "../models/Music";
import LocationSchema from "../database/LocationSchema";
import UserSchema from "../database/UserSchema"; import UserSchema from "../database/UserSchema";
import token from "./TokenService"; import token from "./TokenService";
import { IPerson } from "../models/Person"; import { IPerson } from "../models/Person";
@ -7,7 +6,6 @@ import mongoose from "mongoose";
class UserService { class UserService {
private user = UserSchema; private user = UserSchema;
private location = LocationSchema;
public async register( public async register(
name: string, name: string,
@ -52,7 +50,6 @@ class UserService {
): Promise<void | Error> { ): Promise<void | Error> {
try { try {
await this.user.findByIdAndRemove(id); await this.user.findByIdAndRemove(id);
await this.location.findByIdAndRemove(id);
} catch (error: any) { } catch (error: any) {
throw new Error(error.message); throw new Error(error.message);
} }

@ -1,5 +1,5 @@
import { View, Text, StyleSheet, Image } from 'react-native'; import { View, Text, StyleSheet, Image } from 'react-native';
import Music from '../model/Music'; import Music from '../models/Music';
import normalize from './Normalize'; import normalize from './Normalize';
export interface RenderCellProps { export interface RenderCellProps {
@ -18,7 +18,7 @@ export const SimilarMusic = (props: RenderCellProps) => {
const styles = StyleSheet.create({ const styles = StyleSheet.create({
similarContainer: { similarContainer: {
marginHorizontal: normalize(7) marginHorizontal: 6
}, },
similarTitle: { similarTitle: {
color: "#DADADA", color: "#DADADA",

@ -16,7 +16,7 @@ export default function UserInfoBadge(props: UserInfoProps) {
height: 30, height: 30,
paddingHorizontal: normalize(10), paddingHorizontal: normalize(10),
backgroundColor: '#3F1DC3', backgroundColor: '#3F1DC3',
alignSelf: 'flex-start', alignSelf: 'flex-start',
borderRadius: 12, borderRadius: 12,
paddingRight: 20, paddingRight: 20,
}, },
@ -41,26 +41,36 @@ export default function UserInfoBadge(props: UserInfoProps) {
const date = formatDate(props.date); const date = formatDate(props.date);
let timeSection;
if (date.days !== 0) {
timeSection = (
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.days}</Text>
<Text style={styles.text}>j </Text>
</View>
);
} else if (date.hours !== 0) {
timeSection = (
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.hours}</Text>
<Text style={styles.text}>h </Text>
</View>
);
} else {
timeSection = (
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.minutes}</Text>
<Text style={styles.text}>min</Text>
</View>
);
}
return ( return (
<View style={styles.container}> <View style={styles.container}>
<Image source={{ uri: props.image }} style={styles.image} /> <Image source={{ uri: props.image }} style={styles.image} />
<Text style={styles.text}>Il y a </Text> <Text style={styles.text}>Il y a </Text>
{date.days !== 0 ? ( {timeSection}
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.days}</Text>
<Text style={styles.text}>j </Text>
</View>
) : date.hours !== 0 ? (
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.hours}</Text>
<Text style={styles.text}>h </Text>
</View>
) : (
<View style={styles.section}>
<Text style={[styles.text, styles.boldText]}>{date.minutes}</Text>
<Text style={styles.text}>min</Text>
</View>
)}
<Text style={styles.text}> {'<'} </Text> <Text style={styles.text}> {'<'} </Text>
<Text style={[styles.text, styles.boldText]}>{props.distance}</Text> <Text style={[styles.text, styles.boldText]}>{props.distance}</Text>
<Text style={styles.text}>m</Text> <Text style={styles.text}>m</Text>

@ -1,8 +1,8 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { View, Alert } from 'react-native'; import { View, Alert, Platform } from 'react-native';
import { faUser, faEnvelope, faHeart, faMusic } from "@fortawesome/free-solid-svg-icons" import { faUser, faEnvelope, faHeart, faMusic } from "@fortawesome/free-solid-svg-icons"
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { NavigationContainer, DefaultTheme, DarkTheme } from '@react-navigation/native'; import { NavigationContainer } from '@react-navigation/native';
import FavoriteNavigation from './FavoriteNavigation'; import FavoriteNavigation from './FavoriteNavigation';
import SettingNavigation from './SettingNavigation'; import SettingNavigation from './SettingNavigation';
import { FontAwesomeIcon } from "@fortawesome/react-native-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-native-fontawesome";
@ -16,6 +16,7 @@ import * as Location from 'expo-location';
import { getSpotList } from '../redux/thunk/spotThunk'; import { getSpotList } from '../redux/thunk/spotThunk';
import Music from '../models/Music'; import Music from '../models/Music';
import normalize from '../components/Normalize'; import normalize from '../components/Normalize';
import { BlurView } from 'expo-blur';
export default function HomeNavigation() { export default function HomeNavigation() {
//@ts-ignore //@ts-ignore
@ -113,16 +114,25 @@ export default function HomeNavigation() {
} }
}, [errorEmptyMusic]); }, [errorEmptyMusic]);
const MenuBlur = () => {
return (
<BlurView
intensity={30}
style={{ flex: 1, backgroundColor: isDark ? 'rgba(20, 20, 20, 0.9)' : 'rgba(255, 255, 255, 0.7)' }}
/>
);
};
return ( return (
// @ts-ignore <NavigationContainer>
<NavigationContainer theme={isDark ? DarkTheme : DefaultTheme}>
<BottomTabNavigator.Navigator <BottomTabNavigator.Navigator
initialRouteName="Spots" initialRouteName="Spots"
screenOptions={{ screenOptions={{
tabBarBackground: Platform.OS === 'ios' ? () => <MenuBlur /> : undefined,
tabBarActiveTintColor: isDark ? "white" : "rgb(255, 45, 85)", tabBarActiveTintColor: isDark ? "white" : "rgb(255, 45, 85)",
tabBarStyle: { tabBarStyle: {
backgroundColor: isDark ? "rgb(46,46,46)" : "white", position: 'absolute',
borderTopColor: isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(50, 50, 50, 0.07)',
}, },
}}> }}>
<BottomTabNavigator.Screen name="Spots" component={SpotNavigation} <BottomTabNavigator.Screen name="Spots" component={SpotNavigation}
@ -138,7 +148,7 @@ export default function HomeNavigation() {
maxWidth: 12.5, maxWidth: 12.5,
marginTop: 3, marginTop: 3,
maxHeight: 13, maxHeight: 13,
borderRadius: 7, borderRadius: 6.5,
fontSize: normalize(10), fontSize: normalize(10),
lineHeight: 12, lineHeight: 12,
}, },

@ -9,7 +9,7 @@ const initialState = {
favoriteMusic: [] as Spot[], favoriteMusic: [] as Spot[],
userCurrentMusic: null, userCurrentMusic: null,
nbAddedFavoriteMusic: 0, nbAddedFavoriteMusic: 0,
oldSpot: [] as String[], oldSpot: [] as string[],
} }
const appReducer = (state = initialState, action: any) => { const appReducer = (state = initialState, action: any) => {

@ -1,5 +1,5 @@
import { useNavigation } from "@react-navigation/native"; import { useNavigation } from "@react-navigation/native";
import { SafeAreaView, StyleSheet, Text, View, FlatList, TouchableOpacity } from "react-native"; import { StyleSheet, Text, View, FlatList, TouchableOpacity } from "react-native";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { colorsDark } from '../constants/colorsDark'; import { colorsDark } from '../constants/colorsDark';
import { colorsLight } from '../constants/colorsLight'; import { colorsLight } from '../constants/colorsLight';
@ -48,7 +48,7 @@ export default function ConversationScreen() {
}) })
return ( return (
<SafeAreaView style={styles.mainSafeArea}> <View style={styles.mainSafeArea}>
<View style={styles.titleContainer}> <View style={styles.titleContainer}>
<Text style={styles.title}>Messages</Text> <Text style={styles.title}>Messages</Text>
<Text style={styles.description}>Retrouvez ici les discussions</Text> <Text style={styles.description}>Retrouvez ici les discussions</Text>
@ -65,6 +65,6 @@ export default function ConversationScreen() {
</TouchableOpacity> </TouchableOpacity>
)} )}
/> />
</SafeAreaView> </View>
) )
} }

@ -1,5 +1,5 @@
import { useIsFocused, useNavigation } from "@react-navigation/native"; import { useIsFocused, useNavigation } from "@react-navigation/native";
import { View, Text, Image, StyleSheet, TouchableOpacity, ScrollView, Share, Alert, SafeAreaView, Linking, FlatList, ActivityIndicator } from "react-native"; import { View, Text, Image, StyleSheet, TouchableOpacity, ScrollView, Share, Alert, Linking, FlatList, ActivityIndicator, Platform, SafeAreaView } from "react-native";
import Animated, { interpolate, SensorType, useAnimatedSensor, useAnimatedStyle, withSpring } from "react-native-reanimated"; import Animated, { interpolate, SensorType, useAnimatedSensor, useAnimatedStyle, withSpring } from "react-native-reanimated";
import { Audio } from 'expo-av'; import { Audio } from 'expo-av';
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
@ -38,7 +38,7 @@ export default function DetailScreen({ route }) {
if (sound) { if (sound) {
sound.unloadAsync(); sound.unloadAsync();
} }
}; };
}, []); }, []);
const isFocused = useIsFocused(); const isFocused = useIsFocused();
@ -133,12 +133,11 @@ export default function DetailScreen({ route }) {
mainSafeArea: { mainSafeArea: {
height: '100%', height: '100%',
width: '100%', width: '100%',
paddingTop: insets.top
}, },
backgroundSection: { backgroundSection: {
height: "100%", height: "100%",
width: "100%", width: "100%",
position: "absolute" position: "absolute",
}, },
back_drop: { back_drop: {
height: "100%", height: "100%",
@ -149,13 +148,14 @@ export default function DetailScreen({ route }) {
height: "100%", height: "100%",
}, },
card: { card: {
alignItems: 'center' alignItems: 'center',
paddingTop: insets.top
}, },
cardCover: { cardCover: {
width: normalize(390), width: normalize(390),
height: normalize(390), height: normalize(390),
borderRadius: 16, borderRadius: 16,
resizeMode: 'stretch' resizeMode: 'stretch',
}, },
section1: { section1: {
flexDirection: "row", flexDirection: "row",
@ -204,7 +204,7 @@ export default function DetailScreen({ route }) {
fontWeight: "bold", fontWeight: "bold",
color: "white", color: "white",
fontSize: normalize(17), fontSize: normalize(17),
paddingLeft: normalize(5) paddingLeft: "2%"
}, },
date: { date: {
fontWeight: "400", fontWeight: "400",
@ -279,12 +279,10 @@ export default function DetailScreen({ route }) {
return ( return (
<View> <View>
<View style={styles.backgroundSection}> <View style={styles.backgroundSection}>
<Image <Image
blurRadius={Platform.OS !== 'ios' ? 10 : undefined}
style={styles.back_drop} style={styles.back_drop}
source={{ source={{ uri: item.cover }}
uri: item.cover,
}}
/> />
<View style={styles.overlay} /> <View style={styles.overlay} />
<BlurView <BlurView
@ -299,7 +297,6 @@ export default function DetailScreen({ route }) {
</View> </View>
<SafeAreaView style={styles.mainSafeArea}> <SafeAreaView style={styles.mainSafeArea}>
<ScrollView> <ScrollView>
<View style={styles.card}> <View style={styles.card}>
<TouchableOpacity onPress={() => { Linking.openURL(item.url); }}> <TouchableOpacity onPress={() => { Linking.openURL(item.url); }}>
<Animated.Image source={{ uri: item.cover }} style={[styles.cardCover, styleAnimatedImage]} /> <Animated.Image source={{ uri: item.cover }} style={[styles.cardCover, styleAnimatedImage]} />
@ -325,7 +322,7 @@ export default function DetailScreen({ route }) {
</View> </View>
</View> </View>
{item.trackPreviewUrl && ( {!!item.trackPreviewUrl && (
<TouchableOpacity style={styles.playButton} onPress={play}> <TouchableOpacity style={styles.playButton} onPress={play}>
<View style={styles.bodyPlayButton}> <View style={styles.bodyPlayButton}>
<Image style={styles.imagePlayButton} source={isPlaying ? require('../assets/images/play_icon.png') : require('../assets/images/pause_icon.png')} /> <Image style={styles.imagePlayButton} source={isPlaying ? require('../assets/images/play_icon.png') : require('../assets/images/pause_icon.png')} />
@ -349,8 +346,6 @@ export default function DetailScreen({ route }) {
</TouchableOpacity> </TouchableOpacity>
</View> </View>
<View style={{ paddingTop: normalize(25) }}> <View style={{ paddingTop: normalize(25) }}>
<Text style={styles.similarTitle} >Similaire</Text> <Text style={styles.similarTitle} >Similaire</Text>
{loading ? ( {loading ? (

@ -1,10 +1,10 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { StyleSheet, Text, View, FlatList, SafeAreaView, SectionList, TouchableOpacity, RefreshControl } from 'react-native'; import { StyleSheet, Text, View, FlatList, SectionList, TouchableOpacity, RefreshControl } from 'react-native';
import CardMusic from '../components/CardMusicComponent'; import CardMusic from '../components/CardMusicComponent';
import normalize from '../components/Normalize'; import normalize from '../components/Normalize';
import { Svg, Path } from 'react-native-svg'; import { Svg, Path } from 'react-native-svg';
import FladyComponent from '../components/FladyComponent'; import FladyComponent from '../components/FladyComponent';
import { useNavigation } from "@react-navigation/native"; import { useNavigation, useFocusEffect } from "@react-navigation/native";
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
import { colorsDark } from '../constants/colorsDark'; import { colorsDark } from '../constants/colorsDark';
import { colorsLight } from '../constants/colorsLight'; import { colorsLight } from '../constants/colorsLight';
@ -12,7 +12,6 @@ import { getFavoriteMusic } from '../redux/thunk/appThunk';
import { Spot } from '../models/Spot'; import { Spot } from '../models/Spot';
import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { resetNbAddedFavoriteMusic } from '../redux/actions/appActions'; import { resetNbAddedFavoriteMusic } from '../redux/actions/appActions';
import { useFocusEffect } from '@react-navigation/native';
export default function FavoriteScreen() { export default function FavoriteScreen() {
@ -125,7 +124,7 @@ export default function FavoriteScreen() {
}); });
return ( return (
<SafeAreaView style={styles.mainSafeArea}> <View style={styles.mainSafeArea}>
<View style={styles.titleContainer}> <View style={styles.titleContainer}>
<View style={styles.header}> <View style={styles.header}>
<Text style={styles.title}>Favoris</Text> <Text style={styles.title}>Favoris</Text>
@ -176,6 +175,6 @@ export default function FavoriteScreen() {
nestedScrollEnabled={true} nestedScrollEnabled={true}
/> />
</SafeAreaView> </View>
); );
}; };

@ -7,7 +7,7 @@ import { useNavigation } from "@react-navigation/native";
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import normalize from '../components/Normalize'; import normalize from '../components/Normalize';
import * as ImagePicker from 'expo-image-picker'; import * as ImagePicker from 'expo-image-picker';
import { SafeAreaView } from 'react-native-safe-area-context'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { colorsDark } from '../constants/colorsDark'; import { colorsDark } from '../constants/colorsDark';
import { colorsLight } from '../constants/colorsLight'; import { colorsLight } from '../constants/colorsLight';
import { deleteUser } from '../redux/thunk/authThunk'; import { deleteUser } from '../redux/thunk/authThunk';
@ -177,10 +177,13 @@ export default function ProfilScreen() {
} }
}, [errorUpdate]); }, [errorUpdate]);
const insets = useSafeAreaInsets();
const styles = StyleSheet.create({ const styles = StyleSheet.create({
mainSafeArea: { mainSafeArea: {
flex: 1, flex: 1,
backgroundColor: style.body, backgroundColor: style.body,
paddingTop: insets.top
}, },
container: { container: {
marginTop: 20, marginTop: 20,
@ -393,7 +396,7 @@ export default function ProfilScreen() {
return ( return (
<DismissKeyboard> <DismissKeyboard>
<SafeAreaView style={styles.mainSafeArea}> <View style={styles.mainSafeArea}>
<ScrollView> <ScrollView>
<View style={styles.container}> <View style={styles.container}>
<TouchableOpacity <TouchableOpacity
@ -505,7 +508,7 @@ export default function ProfilScreen() {
</Modal> </Modal>
</View> </View>
</ScrollView> </ScrollView>
</SafeAreaView> </View>
</DismissKeyboard> </DismissKeyboard>
); );
}; };

@ -1,6 +1,6 @@
import React, { useEffect, useRef, useState } from 'react'; import React, { useEffect, useRef, useState } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage'; import AsyncStorage from '@react-native-async-storage/async-storage';
import { View, StyleSheet, Text, Image, TouchableWithoutFeedback, Keyboard, TouchableOpacity, SafeAreaView, Alert } from 'react-native'; import { View, StyleSheet, Text, Image, TouchableWithoutFeedback, Keyboard, TouchableOpacity, Alert } from 'react-native';
import { Svg, Path } from 'react-native-svg'; import { Svg, Path } from 'react-native-svg';
import { useNavigation } from "@react-navigation/native"; import { useNavigation } from "@react-navigation/native";
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
@ -272,7 +272,7 @@ export default function SettingScreen() {
}) })
return ( return (
<DismissKeyboard> <DismissKeyboard>
<SafeAreaView style={styles.mainSafeArea}> <View style={styles.mainSafeArea}>
<ScrollView> <ScrollView>
<View style={styles.container}> <View style={styles.container}>
<Text style={styles.title}>Réglages</Text> <Text style={styles.title}>Réglages</Text>
@ -384,7 +384,7 @@ export default function SettingScreen() {
</View> </View>
</View> </View>
</ScrollView> </ScrollView>
</SafeAreaView> </View>
</DismissKeyboard> </DismissKeyboard>
); );
}; };

@ -8,17 +8,20 @@ import Loading from '../components/LoadingComponent';
import { useNavigation } from '@react-navigation/native'; import { useNavigation } from '@react-navigation/native';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { Spot } from '../models/Spot'; import { Spot } from '../models/Spot';
import { removeFromSpotList } from '../redux/actions/spotActions';
import { MusicServiceProvider } from '../models/MusicServiceProvider';
import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
import Artist from '../models/Artist'; import Artist from '../models/Artist';
import { addMusicToFavorite } from '../redux/thunk/appThunk'; import { addMusicToFavorite } from '../redux/thunk/appThunk';
import { addToPlaylist, removeSpot } from '../redux/thunk/spotThunk'; import { addToPlaylist, removeSpot } from '../redux/thunk/spotThunk';
import UserInfoBadge from '../components/UserInfoBadgeComponent'; import UserInfoBadge from '../components/UserInfoBadgeComponent';
import { colorsDark } from '../constants/colorsDark';
import { colorsLight } from '../constants/colorsLight';
export default function SpotScreen() { export default function SpotScreen() {
//@ts-ignore //@ts-ignore
const spotReducer: Spot[] = useSelector(state => state.appReducer.spot) const spotReducer: Spot[] = useSelector(state => state.appReducer.spot)
// @ts-ignore
const isDark = useSelector(state => state.userReducer.dark);
const style = isDark ? colorsDark : colorsLight;
const [cards, setCards] = useState<Spot[]>(spotReducer); const [cards, setCards] = useState<Spot[]>(spotReducer);
const [currentCard, setcurrentCard] = useState<Spot>(cards[cards.length - 1]); const [currentCard, setcurrentCard] = useState<Spot>(cards[cards.length - 1]);
@ -66,7 +69,7 @@ export default function SpotScreen() {
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',
flex: 1, flex: 1,
backgroundColor: "#141414", backgroundColor: style.body,
paddingTop: insets.top paddingTop: insets.top
}, },
posterBackground: { posterBackground: {
@ -106,7 +109,7 @@ export default function SpotScreen() {
paddingHorizontal: 30, paddingHorizontal: 30,
width: '100%', width: '100%',
position: "absolute", position: "absolute",
top: "85%" top: "80%"
}, },
button: { button: {
alignItems: 'center', alignItems: 'center',

Loading…
Cancel
Save