This commit is contained in:
Philip Cesar Garay
2025-08-26 18:08:09 +08:00
parent b9f7c4b4a0
commit 2a34e9d547
47 changed files with 944 additions and 568 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

After

Width:  |  Height:  |  Size: 4.1 MiB

+2
View File
@@ -233,6 +233,7 @@ import placeholder2 from "./UI/placeholder2.jpg";
import placeholder3 from "./UI/placeholder3.png";
import placeholder4 from "./UI/placeholder4.jpg";
import profile from "./UI/profile.jpg";
import goodVibe from './UI/goodVibe.png'
export const img = {
placeholder,
@@ -240,4 +241,5 @@ export const img = {
placeholder3,
placeholder4,
profile,
goodVibe,
};
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text } from "react-native";
import { View, Text, Platform } from "react-native";
import React from "react";
import ActionSheet from "react-native-actions-sheet";
import { gutters, Palette } from "../styles";
@@ -27,6 +27,9 @@ const AppActionSheet = ({ children, props }) => {
borderTopRightRadius: 20,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
{children}
</BlurView>
+15 -2
View File
@@ -1,4 +1,11 @@
import { View, Text, Pressable, StyleSheet, Image } from "react-native";
import {
View,
Text,
Pressable,
StyleSheet,
Image,
Platform,
} from "react-native";
import React from "react";
import { BlurView } from "expo-blur";
import { Palette, Style } from "../styles";
@@ -9,7 +16,13 @@ import { size } from "../styles/Style";
const BlurItemButton = ({ onPress, title = "" }) => {
return (
<Pressable onPress={onPress}>
<BlurView intensity={20} style={styles.buttonContainer}>
<BlurView
intensity={20}
style={styles.buttonContainer}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.buttonText}>{title}</Text>
<Image
source={icons.chevronDown}
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable, Image } from "react-native";
import { View, Text, Pressable, Image, Platform } from "react-native";
import React from "react";
import BorderGradient from "./BorderGradient/BorderGradient";
import { Palette, Style } from "../styles";
@@ -50,6 +50,9 @@ const BorderGradientButton = ({
borderRadius: 14,
gap: 11,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
{icon && <Image source={icon} style={size({ size: 16 })} />}
<Text
+4 -1
View File
@@ -1,5 +1,5 @@
import { useState, useEffect } from "reactn";
import { Pressable, TextInput, View, Image } from "react-native";
import { Pressable, TextInput, View, Image, Platform } from "react-native";
import { BlurView } from "expo-blur";
import { Fonts, gutters, Palette } from "../styles";
@@ -65,6 +65,9 @@ const ChatInput = ({
intensity={30}
tint="dark"
style={{ flex: 1, justifyContent: "center" }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<FilesPreview
files={files}
+62 -41
View File
@@ -6,6 +6,7 @@ import {
View,
Image,
Keyboard,
Platform,
} from "react-native";
import { useState } from "react";
import CountryPicker, { DARK_THEME } from "react-native-country-picker-modal";
@@ -13,10 +14,11 @@ import usePlaceApi from "react-native-minuit/src/hooks/usePlacesApi";
import { art, icons } from "../assets";
import { Fonts, Palette, Style, gutters } from "../styles";
import { fontTypeList } from "../styles/Fonts";
import { FONT_FAMILY, fontTypeList } from "../styles/Fonts";
import { isWeb } from "../hooks/useLayoutType";
import { GOOGLE_API_KEY } from "../data/keys";
import { BlurView } from "expo-blur";
const Input = ({
inputRef = null,
@@ -39,6 +41,7 @@ const Input = ({
layout = "default", // "default" | "line"
isNumeric = false,
isBlur = false,
}) => {
const [isFocused, setIsFocused] = useState(false);
const [showPassword, setShowPassword] = useState(false);
@@ -63,51 +66,66 @@ const Input = ({
minChars: 2,
});
const ContainerView = isBlur ? BlurView : View;
return (
<>
<View
style={{
...(isRoundedRectangle
? {
...Style.containerItem,
...(isDefaultLayout
? {
paddingVertical: 10,
backgroundColor:
type === "coinAmount"
? Palette.transparentRadioactivGreen
: Palette.lightPurple,
height: type === "textarea" ? 150 : "auto",
}
: {}),
}
: {
...Style.containerCenter,
borderBottomColor: mainColor,
borderBottomWidth: 1,
}),
...(borderType === "dashed"
? {
borderStyle: "dashed",
borderColor: isFocused
? Palette.primary
: Palette.transparentPrimary,
borderWidth: 1,
}
: {}),
width: "100%",
...containerStyle,
gap: 4,
}}
>
{label?.length > 0 && (
<Text style={{ ...Fonts({ type: "default" }) }}>{label}</Text>
<Text
style={{
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
}}
>
{label}
</Text>
)}
<View
<ContainerView
tint="dark"
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
style={{
...Style.containerRow,
...(isRoundedRectangle ? { flex: 1 } : {}),
paddingVertical: 10,
...(isRoundedRectangle
? {
...Style.containerItem,
...(isDefaultLayout
? {
paddingVertical: 10,
backgroundColor:
type === "coinAmount"
? Palette.transparentRadioactivGreen
: Palette.glass,
height: type === "textarea" ? 150 : 50,
overflow: "hidden",
borderRadius: 12,
}
: {}),
}
: {
...Style.containerCenter,
borderBottomColor: mainColor,
borderBottomWidth: 1,
}),
...(borderType === "dashed"
? {
borderStyle: "dashed",
borderColor: isFocused
? Palette.primary
: Palette.transparentPrimary,
borderWidth: 1,
}
: {}),
width: "100%",
}}
>
@@ -155,7 +173,7 @@ const Input = ({
<TextInput
ref={inputRef}
placeholder={placeholder}
placeholderTextColor={mainColor}
placeholderTextColor={Palette.gray}
value={value}
onChangeText={setValue}
multiline={type === "textarea"}
@@ -165,9 +183,15 @@ const Input = ({
style={{
width: "100%",
...(isRoundedRectangle
? { height: "100%", flex: 1, textAlignVertical: "top" }
? {
height: "100%",
flex: 1,
textAlignVertical: type === "textarea" ? "top" : "center",
}
: { textAlign: "center" }),
...Fonts({ type: "default", color: mainColor }),
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
...(isWeb
? {
lineHeight: "auto",
@@ -199,10 +223,7 @@ const Input = ({
)}
{type === "password" ? (
<Pressable
onPress={() => setShowPassword(!showPassword)}
style={{ position: "absolute", right: 0 }}
>
<Pressable onPress={() => setShowPassword(!showPassword)}>
<Image
source={icons.eye}
style={[Style.iconDefault]}
@@ -216,7 +237,7 @@ const Input = ({
resizeMode="contain"
/>
) : null}
</View>
</ContainerView>
{type === "autoCompleteAddress" &&
places?.[0]?.description &&
@@ -1,4 +1,4 @@
import { View, Text, StyleSheet } from "react-native";
import { View, Text, StyleSheet, Platform } from "react-native";
import React from "react";
import BorderGradient from "../BorderGradient/BorderGradient";
import { BlurView } from "expo-blur";
@@ -25,7 +25,14 @@ const ItemContainer = ({
}}
>
<View style={styles.blurContainer}>
<BlurView intensity={40} tint="dark" style={{ flex: 1, padding: 6 }}>
<BlurView
intensity={40}
tint="dark"
style={{ flex: 1, padding: 6 }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
{children}
</BlurView>
</View>
@@ -1,4 +1,4 @@
import { View, Text, StyleSheet } from "react-native";
import { View, Text, StyleSheet, Platform } from "react-native";
import React, { useState } from "react";
import BorderGradient from "../BorderGradient/BorderGradient";
import { responsiveHeight } from "react-native-responsive-dimensions";
@@ -55,6 +55,9 @@ const ItemContainer = ({
alignSelf: "center",
height: "99.2%",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
{children}
</BlurView>
+4 -1
View File
@@ -1,5 +1,5 @@
import React from "react";
import { Pressable, StyleSheet } from "react-native";
import { Platform, Pressable, StyleSheet } from "react-native";
import { AnimatePresence, Motion } from "@legendapp/motion";
import { BlurView } from "expo-blur";
import { Portal } from "@gorhom/portal";
@@ -55,6 +55,9 @@ const Overlay = ({
...StyleSheet.absoluteFillObject,
...contentContainerStyle,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Pressable
style={{
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, TextInput, Image } from "react-native";
import { View, Text, TextInput, Image, Platform } from "react-native";
import React from "react";
import { BlurView } from "expo-blur";
import { icons } from "../assets";
@@ -20,6 +20,9 @@ const SearchBar = ({
gap: 10,
...Style.containerRow,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Image source={icons.search} />
<TextInput
+2 -3
View File
@@ -1,8 +1,7 @@
import { View, Text } from "react-native";
import React from "react";
import ActionSheet, { SheetManager } from "react-native-actions-sheet";
import { gutters, Palette } from "../../styles";
import { BlurView } from "expo-blur";
import { SheetManager } from "react-native-actions-sheet";
import { Palette } from "../../styles";
import BorderGradientButton from "../BorderGradientButton";
import GradientButton from "../GradientButton";
import { FONT_FAMILY } from "../../styles/Fonts";
+1
View File
@@ -1,3 +1,4 @@
/* eslint-disable react/display-name */
import React, { useState } from "reactn";
import { Image, View } from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
+1 -1
View File
@@ -53,7 +53,7 @@ export const BottomTabScreen = () => {
return (
<BottomTab.Navigator tabBar={(props) => <TabBar {...props} />}>
<BottomTab.Screen
name={Routes.Create}
name={Routes.HomeStack}
component={HomeStack}
options={{
tabBarLabel: "Créer",
+6
View File
@@ -5,6 +5,7 @@ import { Palette } from "../styles";
import { Routes } from "./Routes";
import Home from "../screens/Home";
import CreateSongs from "../screens/CreateSongs";
const screenOptions = {
headerShown: false,
@@ -36,6 +37,11 @@ export default function HomeStackScreen() {
component={Home}
options={{ headerShown: false }}
/>
<HomeStack.Screen
name={Routes.Create}
component={CreateSongs}
options={{ headerShown: false }}
/>
</HomeStack.Navigator>
);
}
+15
View File
@@ -57,6 +57,9 @@ import ChangeEmailAddress from "../screens/Profile/ChangeEmailAddress";
import ChangePassword from "../screens/Profile/ChangePassword";
import Language from "../screens/Profile/Language";
import Reels from "../screens/Profile/Reels";
import Register from "../screens/Register";
import CreatePassword from "../screens/CreatePassword";
import CreateName from "../screens/CreateName";
const screenOptions = {
headerShown: false,
@@ -267,6 +270,18 @@ const screens = [
name: Routes.Reels,
component: Reels,
},
{
name: Routes.Register,
component: Register,
},
{
name: Routes.CreatePassword,
component: CreatePassword,
},
{
name: Routes.CreateName,
component: CreateName,
},
];
export default function Main() {
+3
View File
@@ -3,6 +3,9 @@ export const Routes = {
Onboarding: "Onboarding",
Login: "Login",
ForgotPassword: "ForgotPassword",
Register: "Register",
CreatePassword: "CreatePassword",
CreateName: "CreateName",
BottomTab: "BottomTab",
Welcome: "Welcome",
+62
View File
@@ -0,0 +1,62 @@
import { View, Text } from "react-native";
import React from "react";
import Page from "../layouts/Page";
import { background } from "../assets";
import ItemContainer from "../components/ItemContainer/ItemContainer";
import { Palette } from "../styles";
import { FONT_FAMILY } from "../styles/Fonts";
import { Input } from "../components/Input";
import GradientButton from "../components/GradientButton";
import { navigate } from "../navigation/NavigationService";
import { Routes } from "../navigation";
const CreateName = () => {
return (
<Page
backgroundImg={background.homeBG}
headerType="NAVIGATION"
title="Inscription"
>
<View style={{ flex: 1, paddingTop: 20 }}>
<ItemContainer height={275}>
<View style={{ gap: 32, paddingTop: 5, paddingHorizontal: 5 }}>
<View style={{ gap: 16 }}>
<View style={{ gap: 2 }}>
<Text
style={{
fontSize: 22,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Comment tappelles-tu?
</Text>
<Text
style={{
fontSize: 14,
color: Palette.gray,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
Invisible pour les autres, sauf si tu lutilises comme nom
dartiste.
</Text>
</View>
<Input placeholder="Prénom" label="Prénom" isBlur />
</View>
<GradientButton
title="Suivant"
containerStyle={{
width: "80%",
alignSelf: "center",
}}
onPress={() => navigate(Routes.Login)}
/>
</View>
</ItemContainer>
</View>
</Page>
);
};
export default CreateName;
+66
View File
@@ -0,0 +1,66 @@
import { View, Text, Pressable } from "react-native";
import React from "react";
import Page from "../layouts/Page";
import { background } from "../assets";
import ItemContainer from "../components/ItemContainer/ItemContainer";
import { Palette } from "../styles";
import { FONT_FAMILY } from "../styles/Fonts";
import { Input } from "../components/Input";
import GradientButton from "../components/GradientButton";
import { navigate } from "../navigation/NavigationService";
import { Routes } from "../navigation";
const CreatePassword = () => {
return (
<Page
backgroundImg={background.homeBG}
headerType="NAVIGATION"
title="Inscription"
>
<View style={{ flex: 1, paddingTop: 20 }}>
<ItemContainer height={300}>
<View style={{ gap: 32, paddingTop: 5, paddingHorizontal: 5 }}>
<View style={{ gap: 16 }}>
<View style={{ gap: 2 }}>
<Text
style={{
fontSize: 22,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Choisis un mot de passe{"\n"}sécurisé
</Text>
<Text
style={{
fontSize: 14,
color: Palette.gray,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
Utilise au moins 8 caractères pour sécuriser ton compte.
</Text>
</View>
<Input
placeholder="Mot de passe"
label="Mot de passe"
isBlur
type="password"
/>
</View>
<GradientButton
title="Suivant"
containerStyle={{
width: "80%",
alignSelf: "center",
}}
onPress={() => navigate(Routes.CreateName)}
/>
</View>
</ItemContainer>
</View>
</Page>
);
};
export default CreatePassword;
+193
View File
@@ -0,0 +1,193 @@
import { View, Text, Image, Pressable, Platform } from "react-native";
import React, { useState } from "react";
import Page from "../layouts/Page";
import { ai, background, icons } from "../assets";
import { Palette, Style } from "../styles";
import { responsiveHeight } from "react-native-responsive-dimensions";
import BorderGradient from "../components/BorderGradient/BorderGradient";
import { BlurView } from "expo-blur";
import { FONT_FAMILY } from "../styles/Fonts";
import { size } from "../styles/Style";
import GradientButton from "../components/GradientButton";
import { goBack } from "../navigation/NavigationService";
const CreateSongs = () => {
const [selectedIndex, setSelectedIndex] = useState(null);
return (
<Page backgroundImg={background.homeBG} headerType="NONE">
<View style={{ flex: 1, ...Style.containerCenter }}>
<View
style={{
width: "100%",
height: responsiveHeight(60),
}}
>
<BorderGradient
gradientProps={{
colors: ["#FFFFFF00", Palette.white],
start: { x: 0, y: 0 },
end: { x: 1, y: 0.4 },
}}
style={{
borderWidth: 1,
borderRadius: 20,
height: responsiveHeight(55),
}}
>
<Image
source={ai.nathalie}
style={{
width: 171,
height: 250,
position: "absolute",
zIndex: 3,
top: -100,
alignSelf: "center",
}}
resizeMode="contain"
/>
<BlurView
intensity={40}
style={{
flex: 1,
borderRadius: 20,
overflow: "hidden",
justifyContent: "flex-end",
backgroundColor: Palette.glass,
paddingHorizontal: 10,
zIndex: 1,
gap: 20,
paddingVertical: 20,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Pressable
style={{
position: "absolute",
...Style.containerCenter,
...size({ size: 24 }),
top: 10,
left: 10,
}}
onPress={goBack}
>
<Image
source={icons.close}
style={{
...size({ size: 15 }),
}}
/>
</Pressable>
<View style={{ alignItems: "center", zIndex: 2 }}>
<Text
style={{
fontSize: 22,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Atelier écriture
</Text>
<Text
style={{
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
C'est ici que je vais t'aider à écrire ta chanson.
</Text>
</View>
<View style={{ gap: 10, zIndex: 1 }}>
{Array.from({ length: 3 }).map((item, index) => (
<Pressable
key={index}
onPress={() => {
console.log("Pressed");
if (selectedIndex === index) {
setSelectedIndex(null);
} else {
setSelectedIndex(index);
}
}}
style={{ zIndex: 1 }}
>
<BlurView
tint={selectedIndex === index ? "default" : "dark"}
style={{
...Style.containerSpaceBetween,
paddingHorizontal: 12,
paddingVertical: 10,
borderRadius: 14,
backgroundColor: Palette.glass,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View>
<Text
style={{
fontSize: 16,
color:
selectedIndex === index
? Palette.black
: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
Chanson sans titre
</Text>
<Text
style={{
fontSize: 12,
color:
selectedIndex === index
? Palette.black
: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
Modifié le 23/04
</Text>
</View>
<Pressable>
<Image
source={icons.threeDots}
style={{
...size({ size: 24 }),
transform: [{ rotateZ: "90deg" }],
}}
tintColor={
selectedIndex === index
? Palette.black
: Palette.white
}
resizeMode="contain"
/>
</Pressable>
</BlurView>
</Pressable>
))}
</View>
<GradientButton
title="Créer un texte"
containerStyle={{
width: "80%",
alignSelf: "center",
marginTop: 10,
}}
/>
</BlurView>
</BorderGradient>
</View>
</View>
</Page>
);
};
export default CreateSongs;
@@ -1,4 +1,4 @@
import { View, Text, Image } from "react-native";
import { View, Text, Image, Platform } from "react-native";
import React from "react";
import { BlurView } from "expo-blur";
import { img } from "../../../assets";
@@ -19,6 +19,9 @@ const PlaybacksCard = () => {
backgroundColor: Palette.glass,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View
style={{
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Image } from "react-native";
import { View, Text, Image, Platform } from "react-native";
import React from "react";
import { img } from "../../../assets";
import { BlurView } from "expo-blur";
@@ -31,6 +31,9 @@ const SongCard = () => {
...Style.containerRow,
}}
tint="dark"
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={{ flex: 1, ...Style.containerRow, gap: 15 }}>
<Text
+129 -155
View File
@@ -1,163 +1,137 @@
import { useState } from "react";
import React from "reactn";
import { responsiveHeight } from "react-native-responsive-dimensions";
import useMinuit from "react-native-minuit/src/hooks/useMinuit";
import {
View,
Text,
Image,
ScrollView,
Pressable,
Platform,
} from "react-native";
import React from "react";
import Page from "../layouts/Page";
import { ai, background, img } from "../assets";
import { responsiveHeight } from "react-native-responsive-dimensions";
import { BlurView } from "expo-blur";
import { Palette } from "../styles";
import { FONT_FAMILY } from "../styles/Fonts";
import { navigate } from "../navigation/NavigationService";
import { Routes } from "../navigation";
import { Palette, gutters } from "../styles";
import SectionTextHeader from "../components/SectionTextHeader";
import OptionSelector from "../components/OptionSelector";
import { Input } from "../components/Input";
import Button from "../components/Button";
import DocumentDropZone from "../components/DocumentDropZone";
import FilesPreview from "../components/FilesPreview";
import { documentsRef } from "../config/firebase";
import { background } from "../assets";
const accountTypeList = {
INDIVIDUAL: "Particulier",
COMPANY: "Société",
};
const accountTypeColorMap = {
INDIVIDUAL: {
primary: Palette.primary,
secondary: Palette.transparentPrimary,
const CREATE_DATA = [
{
img: ai.nathalie,
bg: background.writingBG,
label: "Nathalie",
desc: "Lets write lyrics together !",
type: "Songwriter",
},
COMPANY: {
primary: Palette.radioactivGreen,
secondary: Palette.transparentRadioactivGreen,
{
img: ai.theo,
bg: background.studioBG,
label: "Theo",
desc: "Come back, when\nyoull have lyrics!",
type: "Beatmaker",
},
};
export default ({ containerStyle = {} }) => {
const { setIsLoading, setTooltip } = useMinuit();
const documentID = "TEST_DOCUMENT_ID";
const [billingDetails, setBillingDetails] = useState({
type: "INDIVIDUAL",
name: "",
address: "",
city: "",
zipCode: "",
countryCode: "",
vatNumber: "",
companyIdentifier: "",
files: [],
});
const {
type = "INDIVIDUAL",
name = "",
address = "",
city = "",
zipCode = "",
countryCode = "FR",
vatNumber = "",
companyIdentifier = "",
files = [],
} = billingDetails || {};
const updateBillingDetails = (key, value) => {
setBillingDetails({
...billingDetails,
[key]: value,
});
};
const fieldList = [
{
key: "name",
label: type === "COMPANY" ? "Raison sociale" : "Nom",
value: name,
inputProps: {
autoCapitalize: type === "COMPANY" ? "none" : "words",
},
},
{
key: "address",
label: "Adresse",
value: address,
inputProps: {
type: "autoCompleteAddress",
},
},
{
key: "city",
label: "Ville",
value: city,
},
{
key: "zipCode",
label: "Code postal",
value: zipCode,
inputProps: {
isNumeric: true,
},
},
{
key: "countryCode",
label: "Pays",
value: countryCode,
type: "countryPicker",
},
{
key: "vatNumber",
label: "Numéro de TVA intracommunautaire (facultatif)",
value: vatNumber,
condition: type === "COMPANY",
required: false,
},
{
key: "companyIdentifier",
label: "Numéro SIRET",
value: companyIdentifier,
condition: type === "COMPANY",
},
].filter(({ condition = true }) => condition);
const onSubmit = async () => {
try {
setIsLoading(true);
let cleanObject = {};
fieldList.forEach(({ key, value, label, required = true }) => {
if (value) {
cleanObject[key] = value;
} else if (required) {
throw new Error(`Le champ ${label.toLowerCase()} est obligatoire`);
}
});
await documentsRef.doc(documentID).set(
{
...cleanObject,
},
{
merge: true,
}
);
setTooltip({
type: "sucess",
text: "Document publié!",
});
} catch (error) {
setTooltip({
type: "error",
text: error.message,
});
} finally {
setIsLoading(false);
}
};
{
img: ai.bena,
bg: background.productionBG,
label: "Bena",
desc: "Come back when you want\nto publish the song!",
type: "Producer",
},
{
img: ai.john,
bg: background.playbackBG,
label: "John",
desc: "Come back when your\naudio is ready!",
type: "Director",
},
];
const Home = () => {
return (
<Page backgroundImg={background.homeBG} headerType="NONE"></Page>
<Page backgroundImg={background.homeBG} headerType="NONE">
<View style={{ flex: 1 }}>
<Image
source={img.goodVibe}
style={{ alignSelf: "center", position: "absolute" }}
/>
<ScrollView
contentContainerStyle={{
flexGrow: 1,
gap: 57,
paddingBottom: responsiveHeight(20),
}}
showsVerticalScrollIndicator={false}
>
<View style={{ height: responsiveHeight(60) }} />
{CREATE_DATA.map((item, index) => (
<Pressable
key={index}
onPress={() =>
navigate(Routes.Create, {
action: item.type,
})
}
>
<BlurView
tint="dark"
intensity={20}
style={{
position: "absolute",
zIndex: 1,
left: 110,
top: 10,
paddingVertical: 8,
paddingHorizontal: 12,
borderRadius: 14,
borderBottomLeftRadius: 0,
overflow: "hidden",
backgroundColor: Palette.glass,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
fontSize: 13,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
{item.label}, {item.type}
</Text>
<Text
style={{
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
{item.desc}
</Text>
</BlurView>
<Image
source={item.bg}
style={{
width: "100%",
height: 152,
borderRadius: 20,
position: "absolute",
bottom: 0,
}}
/>
<Image
source={item.img}
style={{ width: 130, height: 200 }}
resizeMode="contain"
/>
</Pressable>
))}
</ScrollView>
</View>
</Page>
);
};
export default Home;
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable } from "react-native";
import { View, Text, Pressable, Platform } from "react-native";
import React, { useState } from "react";
import Page from "../../layouts/Page";
import { background } from "../../assets";
@@ -68,6 +68,9 @@ const AllMyLikedMusic = () => {
borderRadius: 12,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Image, Pressable } from "react-native";
import { View, Text, Image, Pressable, Platform } from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background, icons } from "../../assets";
@@ -33,6 +33,9 @@ const AllMyPlaylist = () => {
height: 59,
paddingHorizontal: 10,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
+11 -1
View File
@@ -1,4 +1,11 @@
import { View, Text, Image, Pressable, StyleSheet } from "react-native";
import {
View,
Text,
Image,
Pressable,
StyleSheet,
Platform,
} from "react-native";
import React, { useEffect, useState } from "react";
import { Palette, Style } from "../../../styles";
import { icons, img } from "../../../assets";
@@ -45,6 +52,9 @@ const MusicCard = ({ onPress, onPressMore }) => {
...Style.containerSpaceBetween,
paddingHorizontal: 8,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View>
<Text style={styles.title}>Alors on danse</Text>
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable, Image } from "react-native";
import { View, Text, Pressable, Image, Platform } from "react-native";
import React from "react";
import CardContainer from "./CardContainer";
import { BlurView } from "expo-blur";
@@ -25,6 +25,9 @@ const MyPlaylist = () => {
height: 59,
paddingHorizontal: 10,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
@@ -1,4 +1,4 @@
import { View, Text, Pressable, StyleSheet } from "react-native";
import { View, Text, Pressable, StyleSheet, Platform } from "react-native";
import React from "react";
import SearchBar from "../../../components/SearchBar";
import { Palette, Style } from "../../../styles";
@@ -31,7 +31,13 @@ const ResearchHeader = ({ onPress, selected }) => {
style={styles.borderGradient}
/>
<View style={styles.blurContainer}>
<BlurView intensity={20} style={styles.blurView}>
<BlurView
intensity={20}
style={styles.blurView}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.menu}>{item}</Text>
</BlurView>
</View>
+99 -323
View File
@@ -1,345 +1,121 @@
import React, { useState, useRef, useEffect, useGlobal } from "reactn";
import {
Text,
View,
KeyboardAvoidingView,
Image,
Pressable,
} from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
/* eslint-disable react/display-name */
import React from "reactn";
import { Pressable, Text, View } from "react-native";
import {
responsiveHeight,
responsiveWidth,
} from "../actions/responsiveSizes.js";
import firebase from "../config/firebase";
import Button from "../components/Button";
import { Input } from "../components/Input";
import { Fonts, gutters, Palette, Style } from "../styles";
import { Routes } from "../navigation";
import { art, mockups } from "../assets";
import {
checkIfEmailIsValid,
checkIfPasswordIsStrongEnough,
handleFirebaseError,
} from "../actions/signupActions";
import useLayoutType from "../hooks/useLayoutType.js";
import { capitalize } from "../helpers/index.js";
import Page from "../layouts/Page.js";
import { background } from "../assets/index.js";
import { Input } from "../components/Input.js";
import GradientButton from "../components/GradientButton.js";
import Palette from "../styles/Palette.js";
import { FONT_FAMILY } from "../styles/Fonts.js";
import { navigate } from "../navigation/NavigationService.js";
import { Routes } from "../navigation/Routes.js";
import ItemContainer from "../components/ItemContainer/ItemContainer.js";
export default ({ navigation }) => {
console.log("LOGINSCREEN");
const [, setTooltip] = useGlobal("_tooltip");
const [, setIsLoading] = useGlobal("_isLoading");
const [mode, setMode] = useState("LOGIN");
const [emailIsStatic, setEmailIsStatic] = useState(false);
const [email, setEmail] = useState("login@minuit.com");
const [password, setPassword] = useState("password");
const [firstName, setFirstName] = useState("");
const [lastName, setLastName] = useState("");
const passwordInputRef = useRef();
const { isDesktop } = useLayoutType();
useEffect(() => {
const checkIfUserIsLoggedIn = async () => {
const userEmail = await AsyncStorage.getItem("userEmail");
if (userEmail) {
setEmail(userEmail);
setEmailIsStatic(true);
}
};
checkIfUserIsLoggedIn();
}, []);
const onLogin = async () => {
try {
setIsLoading(true);
let trimmedEmail = email.trim();
await firebase.auth().signInWithEmailAndPassword(trimmedEmail, password);
await AsyncStorage.setItem("userEmail", trimmedEmail);
onAuthSuccess();
} catch (error) {
console.log(error);
setTooltip({
text: handleFirebaseError(error.code),
type: "error",
});
} finally {
setIsLoading(false);
}
};
const onSignup = async () => {
try {
setIsLoading(true);
if (!checkIfPasswordIsStrongEnough({ password })) {
throw new Error(
"Votre mot de passe doit contenir au moins 6 caractères, une majuscule et un chiffre."
);
}
if (!checkIfEmailIsValid({ email })) {
throw new Error("Veuillez renseigner une adresse email valide.");
}
const { user = null } = await firebase
.auth()
.createUserWithEmailAndPassword(email, password);
if (!user) {
throw new Error("Erreur lors de la création du compte");
}
let userObject = {
firstName: capitalize(firstName.trim()),
lastName: capitalize(lastName.trim()),
};
// push user data to firestore
onAuthSuccess();
setTooltip({
text: "Votre compte a été créé avec succès!",
type: "success",
});
} catch (error) {
console.log(error);
setTooltip({
text: error?.code?.startsWith("auth/")
? handleFirebaseError(error.code)
: error.message,
type: "error",
});
} finally {
setIsLoading(false);
}
};
const onAuthSuccess = async () => {
navigation.reset({
index: 0,
routes: [{ name: Routes.Splash }],
});
};
return (
<View
headerType="NONE"
style={{
flex: 1,
backgroundColor: Palette.lightPurple,
...Style.containerRow,
}}
<Page
backgroundImg={background.homeBG}
headerType="NAVIGATION"
title="Connexion"
>
<View
style={{
position: "relative",
flex: 1,
padding: 2 * gutters,
backgroundColor: Palette.darkPurple,
height: "100%",
...Style.containerCenter,
}}
>
<Image
resizeMode="contain"
source={art.gradientTriangle}
style={{
position: "absolute",
top: responsiveHeight(20),
right: responsiveHeight(5),
width: responsiveWidth(140),
height: responsiveWidth(140),
}}
/>
<KeyboardAvoidingView
style={{ ...Style.containerCenter, width: "100%" }}
behavior="padding"
keyboardVerticalOffset={responsiveHeight(10)}
>
<Text
style={{
...Fonts({ type: "megaTitle" }),
marginBottom: responsiveHeight(10),
}}
>
minuit.starter
</Text>
{emailIsStatic && mode === "LOGIN" ? (
<>
<View style={{ flex: 1, paddingTop: 20 }}>
<ItemContainer height={490}>
<View style={{ gap: 30, paddingTop: 5, paddingHorizontal: 5 }}>
<View style={{ gap: 2 }}>
<Text
style={{
...Fonts({
type: "default",
color: Palette.white,
style: { marginBottom: 20, textAlign: "center" },
}),
fontSize: 22,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
{`Vous êtes connecté(e) avec l'adresse ${email},`}
Bonjour, pseudo!
</Text>
<Pressable
onPress={async () => {
await AsyncStorage.removeItem("userEmail");
setEmailIsStatic(false);
<Text
style={{
fontSize: 14,
color: Palette.gray,
fontFamily: FONT_FAMILY.InterRegular,
}}
>
Nous sommes heureux de te revoir parmi nous. Prêt·e à reprendre
le rythme ?
</Text>
</View>
<View style={{ gap: 20 }}>
<Input
placeholder="Adresse mail ou pseudo"
label="Adresse mail ou pseudo"
isBlur
/>
<View style={{ gap: 4 }}>
<Input
placeholder="Mot de passe"
label="Mot de passe"
type="password"
isBlur
/>
<Pressable>
<Text
style={{
fontSize: 12,
color: Palette.white,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
}}
>
Mot de passe oublié?
</Text>
</Pressable>
</View>
</View>
<GradientButton
title="Poursuivre la création"
containerStyle={{
width: "80%",
alignSelf: "center",
}}
onPress={() => navigate(Routes.BottomTab)}
/>
<View
style={{
alignItems: "center",
gap: 4,
}}
>
<Text
style={{
fontSize: 12,
color: Palette.gray,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
textAlign: "center",
}}
>
En tinscrivant, tu acceptes nos conditions générales{"\n"}
dutilisation et notre politique de confidentialité.
</Text>
<Pressable onPress={() => navigate(Routes.Register)}>
<Text
style={{
...Fonts({
type: "default",
color: Palette.primary,
style: {
marginBottom: 20,
textAlign: "center",
textDecorationLine: "underline",
},
}),
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
}}
>
Modifier
Tu as déjà un compte?{" "}
<Text
style={{
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Se connecter
</Text>
</Text>
</Pressable>
</>
) : (
<Input
layout="line"
type="email"
label="Adresse email"
placeholder="Votre adresse email"
value={email}
setValue={setEmail}
containerStyle={{ marginBottom: 20 }}
textInputProps={{
returnKeyType: "next",
onSubmitEditing: () => passwordInputRef.current.focus(),
}}
/>
)}
<Input
layout="line"
inputRef={passwordInputRef}
label="Mot de passe"
placeholder="Votre mot de passe"
value={password}
setValue={setPassword}
type="password"
containerStyle={{ marginBottom: gutters }}
textInputProps={{
returnKeyType: "done",
onSubmitEditing: onLogin,
}}
/>
{mode === "LOGIN" ? (
<Pressable
onPress={() => navigation.navigate("ForgotPassword")}
style={{ marginBottom: gutters }}
>
<Text
style={{
...Fonts({
type: "default",
style: { textDecorationLine: "underline" },
}),
}}
>
Mot de passe oublié?
</Text>
</Pressable>
) : (
<>
<Input
layout="line"
label="Prénom"
placeholder="Votre prénom"
value={firstName}
setValue={setFirstName}
containerStyle={{ marginBottom: gutters }}
/>
<Input
layout="line"
label="Nom"
placeholder="Votre nom"
value={lastName}
setValue={setLastName}
containerStyle={{ marginBottom: gutters }}
/>
</>
)}
<Button
{...(mode === "LOGIN"
? { text: "Connexion", onPress: () => navigate(Routes.BottomTab) }
: {
text: "Inscription",
onPress: onSignup,
})}
containerStyle={{ marginBottom: gutters }}
/>
<Pressable onPress={() => navigation.navigate("TermsOfUse")}>
<Text
style={Fonts({
type: "default",
style: { textAlign: "center", opacity: 1 },
})}
>
En vous {mode === "LOGIN" ? "connectant" : "inscrivant"}, vous
acceptez sans réserve les{" "}
<Text
style={{
color: Palette.primary,
textDecorationLine: "underline",
}}
>
conditions générales d'utilisation
</Text>{" "}
de minuit.starter.
</Text>
</Pressable>
</KeyboardAvoidingView>
</View>
</View>
</ItemContainer>
</View>
{isDesktop && (
<View style={{ flex: 2, height: "100%", overflow: "hidden" }}>
<Image
resizeMode="contain"
source={mockups.loginAppDashboard}
style={{
position: "absolute",
top: 0,
right: 0,
bottom: 0,
width: "100%",
height: "100%",
}}
/>
</View>
)}
</View>
</Page>
);
};
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Image } from "react-native";
import { View, Text, Image, Platform } from "react-native";
import React, { useEffect, useState } from "react";
import Page from "../../layouts/Page";
import { ai, background } from "../../assets";
@@ -73,6 +73,9 @@ const CreatingDecor = () => {
intensity={40}
tint="dark"
style={{ flex: 1, padding: 10, paddingBottom: 20 }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={{ flex: 1, justifyContent: "flex-end", gap: 20 }}>
<View>
+7 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Image, Pressable } from "react-native";
import { View, Text, Image, Pressable, Platform } from "react-native";
import React from "react";
import { responsiveHeight } from "react-native-responsive-dimensions";
import { icons, img } from "../assets";
@@ -64,6 +64,9 @@ const Playbacks = () => {
borderColor: Palette.white,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
@@ -99,6 +102,9 @@ const Playbacks = () => {
backgroundColor: Palette.glass,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
+38 -8
View File
@@ -1,4 +1,11 @@
import { View, Text, StyleSheet, Image, Pressable } from "react-native";
import {
View,
Text,
StyleSheet,
Image,
Pressable,
Platform,
} from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background, img } from "../../assets";
@@ -43,7 +50,10 @@ const DownloadSongs = () => {
}}
/>
<View style={{ gap: 12, paddingVertical: 12 }}>
<Text style={styles.title}>Prêt à télécharger {action === "playback" ? "ton Playback" : "ta chanson"} ?</Text>
<Text style={styles.title}>
Prêt à télécharger{" "}
{action === "playback" ? "ton Playback" : "ta chanson"} ?
</Text>
<View style={{ gap: 10 }}>
<Pressable
style={styles.itemContainer}
@@ -53,8 +63,18 @@ const DownloadSongs = () => {
})
}
>
<BlurView style={styles.blurView} intensity={40} tint="dark">
<Text style={styles.label}>Télécharger {action === "playback" ? "mon Playback" : "ma chanson"}</Text>
<BlurView
style={styles.blurView}
intensity={40}
tint="dark"
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.label}>
Télécharger{" "}
{action === "playback" ? "mon Playback" : "ma chanson"}
</Text>
<Text style={styles.description}>Pour moi uniquement</Text>
</BlurView>
</Pressable>
@@ -66,14 +86,24 @@ const DownloadSongs = () => {
})
}
>
<BlurView style={styles.blurView} intensity={40} tint="dark">
<BlurView
style={styles.blurView}
intensity={40}
tint="dark"
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.label}>
Diffuser {action === "playback" ? "mon Playback" : "ma chanson"} sur la plateforme de MusicLand (+
réseaux sociaux) et participer au concours
Diffuser{" "}
{action === "playback" ? "mon Playback" : "ma chanson"} sur
la plateforme de MusicLand (+ réseaux sociaux) et participer
au concours
</Text>
<Text style={styles.description}>
Top 3: 1er 15% du CA ML - 2ème 10% du CA ML - 3ème 5% du CA
ML (catégorie {action === "playback" ? "Playback" : "chanson"})
ML (catégorie{" "}
{action === "playback" ? "Playback" : "chanson"})
</Text>
</BlurView>
</Pressable>
+4 -1
View File
@@ -1,4 +1,4 @@
import { View } from "react-native";
import { Platform, View } from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background } from "../../assets";
@@ -31,6 +31,9 @@ const ChangeEmailAddress = () => {
overflow: "hidden",
backgroundColor: Palette.glass,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<EditInput placeholder="Adresse mail" label="Adresse mail" />
</BlurView>
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable } from "react-native";
import { View, Text, Pressable, Platform } from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background } from "../../assets";
@@ -33,6 +33,9 @@ const ChangePassword = () => {
backgroundColor: Palette.glass,
gap: 4,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<EditInput
placeholder="Mot de passe"
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Image, TextInput } from "react-native";
import { View, Text, Image, TextInput, Platform } from "react-native";
import React from "react";
import Page from "../../layouts/Page";
import { background, img } from "../../assets";
@@ -34,6 +34,9 @@ const EditProfile = () => {
overflow: "hidden",
gap: 24,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={{ alignItems: "center" }}>
<Image
+4 -1
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable } from "react-native";
import { View, Text, Pressable, Platform } from "react-native";
import React, { useState } from "react";
import Page from "../../layouts/Page";
import { background } from "../../assets";
@@ -37,6 +37,9 @@ const Language = () => {
borderRadius: 20,
overflow: "hidden",
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text
style={{
+5 -1
View File
@@ -1,8 +1,9 @@
/* eslint-disable react/display-name */
import React from "reactn";
import Page from "../../layouts/Page";
import { gutters, Palette, Style } from "../../styles";
import { background } from "../../assets";
import { Text, View } from "react-native";
import { Platform, Text, View } from "react-native";
import { responsiveHeight } from "react-native-responsive-dimensions";
import { BlurView } from "expo-blur";
import Switch from "../../components/Switch";
@@ -35,6 +36,9 @@ export default (props) => {
overflow: "hidden",
backgroundColor: Palette.glass,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={Style.containerSpaceBetween}>
<Text
+11 -1
View File
@@ -5,6 +5,7 @@ import {
Image,
FlatList,
StyleSheet,
Platform,
} from "react-native";
import React, { useState } from "react";
import Page from "../../layouts/Page";
@@ -54,6 +55,9 @@ const Profile = () => {
backgroundColor: Palette.glass,
paddingHorizontal: 20,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={{ alignItems: "center" }}>
<Image
@@ -122,7 +126,13 @@ const Profile = () => {
style={styles.borderGradient}
/>
<View style={styles.blurContainer}>
<BlurView intensity={20} style={styles.blurView}>
<BlurView
intensity={20}
style={styles.blurView}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.menu}>{item}</Text>
</BlurView>
</View>
+4 -1
View File
@@ -65,7 +65,10 @@ const Settings = () => {
))}
</View>
<View style={{ width: "80%", gap: 5, alignSelf: "center" }}>
<BorderGradientButton title="Déconnexion" />
<BorderGradientButton
title="Déconnexion"
onPress={() => navigate(Routes.Login)}
/>
<BorderGradientButton
title="Supprimer mon profil"
titleStyle={{
+11 -1
View File
@@ -5,6 +5,7 @@ import {
Image,
StyleSheet,
FlatList,
Platform,
} from "react-native";
import React, { useState } from "react";
import Page from "../../layouts/Page";
@@ -54,6 +55,9 @@ const SingerProfile = () => {
backgroundColor: Palette.glass,
paddingHorizontal: 20,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<View style={{ alignItems: "center" }}>
<Image
@@ -122,7 +126,13 @@ const SingerProfile = () => {
style={styles.borderGradient}
/>
<View style={styles.blurContainer}>
<BlurView intensity={20} style={styles.blurView}>
<BlurView
intensity={20}
style={styles.blurView}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Text style={styles.menu}>{item}</Text>
</BlurView>
</View>
+11 -1
View File
@@ -1,4 +1,11 @@
import { View, Text, TextInput, Image, Pressable } from "react-native";
import {
View,
Text,
TextInput,
Image,
Pressable,
Platform,
} from "react-native";
import React, { useState } from "react";
import { Palette, Style } from "../../../styles";
import { FONT_FAMILY } from "../../../styles/Fonts";
@@ -44,6 +51,9 @@ const EditInput = ({ label = "", placeholder = "", type = "default" }) => {
height: 52,
...Style.containerRow,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<TextInput
placeholder={placeholder}
+84
View File
@@ -0,0 +1,84 @@
import { View, Text, Pressable } from "react-native";
import React from "react";
import Page from "../layouts/Page";
import { background } from "../assets";
import { Palette } from "../styles";
import { FONT_FAMILY } from "../styles/Fonts";
import { Input } from "../components/Input";
import BorderGradientButton from "../components/BorderGradientButton";
import { navigate } from "../navigation/NavigationService";
import { Routes } from "../navigation";
import ItemContainer from "../components/ItemContainer/ItemContainer";
const Register = () => {
return (
<Page
backgroundImg={background.homeBG}
headerType="NAVIGATION"
title="Inscription"
>
<View style={{ flex: 1, paddingTop: 20 }}>
<ItemContainer height={360}>
<View style={{ gap: 32, paddingTop: 5, paddingHorizontal: 5 }}>
<Text
style={{
fontSize: 22,
color: Palette.white,
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Saisis ton adresse mail pour commencer
</Text>
<Input placeholder="Adresse mail" label="Adresse mail" isBlur />
<BorderGradientButton
title="Créer mon compte"
containerStyle={{
width: "80%",
alignSelf: "center",
}}
onPress={() => navigate(Routes.CreatePassword)}
/>
<View
style={{
alignItems: "center",
gap: 4,
}}
>
<Text
style={{
fontSize: 12,
color: Palette.gray,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
textAlign: "center",
}}
>
En tinscrivant, tu acceptes nos conditions générales{"\n"}
dutilisation et notre politique de confidentialité.
</Text>
<Pressable onPress={() => navigate(Routes.Login)}>
<Text
style={{
fontSize: 14,
color: Palette.white,
fontFamily: FONT_FAMILY.HelveticaNeueRegular,
}}
>
Tu as déjà un compte?{" "}
<Text
style={{
fontFamily: FONT_FAMILY.InterSemiBold,
}}
>
Se connecter
</Text>
</Text>
</Pressable>
</View>
</View>
</ItemContainer>
</View>
</Page>
);
};
export default Register;
+8 -4
View File
@@ -1,4 +1,4 @@
import { View, Text, Image, Pressable } from "react-native";
import { View, Text, Image, Pressable, Platform } from "react-native";
import React, { useEffect, useState } from "react";
import { ai, icons } from "../../assets";
import { BlurView } from "expo-blur";
@@ -69,7 +69,7 @@ const CreatingSong = ({ active, config }) => {
const elapsed = moment().diff(moment(startDate));
const pct = Math.max(
0,
Math.min(100, Math.floor((elapsed / totalMs) * 100)),
Math.min(100, Math.floor((elapsed / totalMs) * 100))
);
setProgress(pct);
if (pct >= 100) {
@@ -119,10 +119,11 @@ const CreatingSong = ({ active, config }) => {
{
sunoTaskId: taskId,
musicStatus: "GENERATING",
generationStartAt: firebase.firestore.FieldValue.serverTimestamp(),
generationStartAt:
firebase.firestore.FieldValue.serverTimestamp(),
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
},
{ merge: true },
{ merge: true }
);
}
} catch (e) {
@@ -179,6 +180,9 @@ const CreatingSong = ({ active, config }) => {
intensity={40}
tint="dark"
style={{ flex: 1, padding: 10, paddingBottom: 20 }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Pressable
style={{
+4 -1
View File
@@ -4,7 +4,7 @@ import { background, icons } from "../../assets";
import MusicLandHeader from "../../components/MusicLandHeader";
import { goBack, navigate } from "../../navigation/NavigationService";
import Slider from "../../components/Slider";
import { Image, Pressable, View } from "react-native";
import { Image, Platform, Pressable, View } from "react-native";
import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader";
import { BlurView } from "expo-blur";
import { Style } from "../../styles";
@@ -39,6 +39,9 @@ const SongReady = () => {
intensity={40}
tint="dark"
style={{ ...Style.containerCenter, flex: 1 }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Image source={icons.disk} />
</BlurView>
+9 -2
View File
@@ -1,4 +1,4 @@
import { View, Text, Pressable, Image } from "react-native";
import { View, Text, Pressable, Image, Platform } from "react-native";
import React, { useEffect, useState } from "react";
import { Palette, Style } from "../../styles";
import { BlurView } from "expo-blur";
@@ -117,6 +117,9 @@ const CreatingLyrics = ({ active, config, regenerateKey, selections }) => {
intensity={40}
tint="dark"
style={{ flex: 1, padding: 10, paddingBottom: 20 }}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
<Pressable
style={{
@@ -161,7 +164,11 @@ const CreatingLyrics = ({ active, config, regenerateKey, selections }) => {
alignSelf: "center",
}}
onPress={() =>
navigate(Routes.Lyrics, { lyricsData: result, config, selections })
navigate(Routes.Lyrics, {
lyricsData: result,
config,
selections,
})
}
/>
</View>
@@ -1,4 +1,4 @@
import { View, Text, Pressable } from "react-native";
import { View, Text, Pressable, Platform } from "react-native";
import React, { useState } from "react";
import { BlurView } from "expo-blur";
import BorderGradient from "../../../components/BorderGradient/BorderGradient";
@@ -65,6 +65,9 @@ const CreateLyricsHeader = ({
gap: 4,
...blurViewStyle,
}}
experimentalBlurMethod={
Platform.OS !== "ios" ? "dimezisBlurView" : "none"
}
>
{title && (
<Text