diff --git a/src/components/ProjectDropDown/ProjectDropDown.js b/src/components/ProjectDropDown/ProjectDropDown.js
index b6049e8..0ce6825 100644
--- a/src/components/ProjectDropDown/ProjectDropDown.js
+++ b/src/components/ProjectDropDown/ProjectDropDown.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useMemo, useRef, useState } from "react";
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
import {
FlatList,
Image,
@@ -66,30 +66,36 @@ const ProjectDropDown = ({
})
: normalizedProjects;
- const toggleDropdown = () => {
+ const toggleDropdown = useCallback(() => {
if (isDisabled) {
return;
}
setIsOpen((prev) => !prev);
- };
+ }, [isDisabled]);
- const closeDropdown = () => setIsOpen(false);
+ const closeDropdown = useCallback(() => setIsOpen(false), []);
- const handleSelect = (project) => {
- if (!project?.id) return;
- onSelectProject?.(project);
- closeDropdown();
- };
+ const handleSelect = useCallback(
+ (project) => {
+ if (!project?.id) return;
+ onSelectProject?.(project);
+ closeDropdown();
+ },
+ [closeDropdown, onSelectProject],
+ );
- const handleModify = (project, topPosition) => {
- if (!project?.id) return;
- onModifyProject?.(project, topPosition);
- };
+ const handleModify = useCallback(
+ (project, topPosition) => {
+ if (!project?.id) return;
+ onModifyProject?.(project, topPosition);
+ },
+ [onModifyProject],
+ );
- const handleCreate = () => {
+ const handleCreate = useCallback(() => {
onCreateProject?.();
closeDropdown();
- };
+ }, [closeDropdown, onCreateProject]);
const dropdownWidth = useMemo(
() => triggerLayout?.width || 0,
@@ -124,35 +130,26 @@ const ProjectDropDown = ({
/>
- {isOpen && (
-
-
+
+
-
-
+
project?.id || project?.title || `project-${index}`
@@ -171,14 +168,13 @@ const ProjectDropDown = ({
contentContainerStyle={styles.dropdownListContent}
style={styles.dropdownList}
/>
-
-
-
- )}
+
+
+
);
@@ -227,6 +223,10 @@ const ProjectRow = ({
project?.coverUrl ||
project?.coverUri ||
(typeof project?.cover === "string" ? project.cover : project?.cover?.uri);
+ const imageSource = useMemo(
+ () => (coverUri ? { uri: coverUri } : img.placeholder),
+ [coverUri],
+ );
const title =
project?.title || (isEmptyProject ? "Nouvelle musique" : "Sans titre");
const formattedDate = !isEmptyProject
@@ -245,10 +245,7 @@ const ProjectRow = ({
onLayout={(event) => setLayout(event.nativeEvent.layout)}
style={styles.projectRowPressable}
>
-
+
@@ -306,6 +303,22 @@ const styles = StyleSheet.create({
position: "relative",
zIndex: 3,
},
+ dropdownOverlay: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ borderRadius: 16,
+ paddingHorizontal: 8,
+ paddingVertical: 8,
+ gap: 9,
+ maxHeight: 400,
+ zIndex: 4,
+ elevation: 4,
+ overflow: "hidden",
+ },
+ dropdownOverlayHidden: {
+ opacity: 0,
+ },
dropdownOverlayContent: {
maxHeight: 260,
width: "100%",