Files
musicland/src/components/Avatar.js
T
Philip Cesar Garay 84fc719a10 update
2025-07-31 21:25:33 +08:00

75 lines
1.8 KiB
JavaScript

import { Text, View } from "react-native";
import { Image } from "expo-image";
import { responsiveWidth } from "../actions/responsiveSizes.js";
import { formatImageURL, getInitials } from "../helpers";
import { Fonts, Palette, Style } from "../styles";
import Badge from "./Badge.js";
export default ({
name = "",
url = null,
size = responsiveWidth(7),
containerStyle = {},
forceRawImage = false,
badge = {},
}) => {
const uniqColorById = (uniqId = "test") => {
// Calculer un nombre unique à partir de l'ID de l'employé
let uniqueNumber = 0;
for (let i = 0; i < uniqId?.length; i++) {
uniqueNumber += uniqId.charCodeAt(i);
}
// génère des couleurs pastels claires
const color = `hsl(${uniqueNumber % 360}, 100%, 90%)`;
return color;
};
return (
<View
style={{
width: size,
height: size,
borderRadius: 500,
...containerStyle,
}}
>
<View
style={{
...Style.containerRound,
width: "100%",
height: "100%",
backgroundColor: url ? "transparent" : uniqColorById(name),
}}
>
{url ? (
<Image
cachePolicy={"memory"}
source={{
uri: forceRawImage ? url : formatImageURL({ url, size: 200 }),
}}
style={{
width: size,
height: size,
borderRadius: size / 2,
}}
/>
) : (
<Text
style={Fonts({
type: "section",
color: Palette.darkPurple,
style: { fontSize: size / 3 },
})}
>
{getInitials(name)}
</Text>
)}
</View>
<Badge {...badge} />
</View>
);
};