5180 fichiers 38.5 Mo 0 téléchargements 234 vues mis à jour il y a 5 heures ui
AvatarEditorIcon.tsx 5.1 Ko Télécharger le fichier
import { DetailedHTMLProps, HTMLAttributes, PropsWithChildren, Ref } from 'react';
import waSelectedIcon from '../../assets/images/avatareditor/air/bottom-accessories.png';
import waIcon from '../../assets/images/avatareditor/air/bottom-accessories-off.png';
import shSelectedIcon from '../../assets/images/avatareditor/air/bottom-shoes.png';
import shIcon from '../../assets/images/avatareditor/air/bottom-shoes-off.png';
import lgSelectedIcon from '../../assets/images/avatareditor/air/bottom-trousers.png';
import lgIcon from '../../assets/images/avatareditor/air/bottom-trousers-off.png';
import femaleSelectedIcon from '../../assets/images/avatareditor/air/gender-female.png';
import femaleIcon from '../../assets/images/avatareditor/air/gender-female-off.png';
import maleSelectedIcon from '../../assets/images/avatareditor/air/gender-male.png';
import maleIcon from '../../assets/images/avatareditor/air/gender-male-off.png';
import heSelectedIcon from '../../assets/images/avatareditor/air/head-accessories.png';
import heIcon from '../../assets/images/avatareditor/air/head-accessories-off.png';
import eaSelectedIcon from '../../assets/images/avatareditor/air/head-eyewear.png';
import eaIcon from '../../assets/images/avatareditor/air/head-eyewear-off.png';
import faSelectedIcon from '../../assets/images/avatareditor/air/head-face-accessories.png';
import faIcon from '../../assets/images/avatareditor/air/head-face-accessories-off.png';
import hrSelectedIcon from '../../assets/images/avatareditor/air/head-hair.png';
import hrIcon from '../../assets/images/avatareditor/air/head-hair-off.png';
import haSelectedIcon from '../../assets/images/avatareditor/air/head-hats.png';
import haIcon from '../../assets/images/avatareditor/air/head-hats-off.png';
import hdIcon from '../../assets/images/avatareditor/air/main-generic.png';
import mcSelectedIcon from '../../assets/images/avatareditor/air/misc-misc.png';
import mcIcon from '../../assets/images/avatareditor/air/misc-misc-off.png';
import ptSelectedIcon from '../../assets/images/avatareditor/air/misc-pets.png';
import ptIcon from '../../assets/images/avatareditor/air/misc-pets-off.png';
import clearIcon from '../../assets/images/avatareditor/air/remove-selection.png';
import caSelectedIcon from '../../assets/images/avatareditor/air/top-accessories.png';
import caIcon from '../../assets/images/avatareditor/air/top-accessories-off.png';
import ccSelectedIcon from '../../assets/images/avatareditor/air/top-jacket.png';
import ccIcon from '../../assets/images/avatareditor/air/top-jacket-off.png';
import cpSelectedIcon from '../../assets/images/avatareditor/air/top-prints.png';
import cpIcon from '../../assets/images/avatareditor/air/top-prints-off.png';
import chSelectedIcon from '../../assets/images/avatareditor/air/top-shirt.png';
import chIcon from '../../assets/images/avatareditor/air/top-shirt-off.png';
import sellableIcon from '../../assets/images/avatareditor/air/wearable.png';
import arrowLeftIcon from '../../assets/images/avatareditor/arrow-left-icon.png';
import arrowRightIcon from '../../assets/images/avatareditor/arrow-right-icon.png';
import { NativeTextTree } from '../../common/native-text/NativeTextTree';
import { classNames } from '../../layout';

const ICON_MAP: Record<string, { normal: string; selected?: string }> = {
    'arrow-left': { normal: arrowLeftIcon },
    'arrow-right': { normal: arrowRightIcon },
    ca: { normal: caIcon, selected: caSelectedIcon },
    cc: { normal: ccIcon, selected: ccSelectedIcon },
    ch: { normal: chIcon, selected: chSelectedIcon },
    clear: { normal: clearIcon },
    cp: { normal: cpIcon, selected: cpSelectedIcon },
    ea: { normal: eaIcon, selected: eaSelectedIcon },
    fa: { normal: faIcon, selected: faSelectedIcon },
    female: { normal: femaleIcon, selected: femaleSelectedIcon },
    ha: { normal: haIcon, selected: haSelectedIcon },
    hd: { normal: hdIcon },
    he: { normal: heIcon, selected: heSelectedIcon },
    hr: { normal: hrIcon, selected: hrSelectedIcon },
    lg: { normal: lgIcon, selected: lgSelectedIcon },
    male: { normal: maleIcon, selected: maleSelectedIcon },
    mc: { normal: mcIcon, selected: mcSelectedIcon },
    pt: { normal: ptIcon, selected: ptSelectedIcon },
    sellable: { normal: sellableIcon },
    sh: { normal: shIcon, selected: shSelectedIcon },
    wa: { normal: waIcon, selected: waSelectedIcon }
};

type AvatarEditorIconProps = PropsWithChildren<{
    icon: string;
    selected?: boolean;
    ref?: Ref<HTMLDivElement>;
}> &
    DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;

export const AvatarEditorIcon = ({ ref, icon = null, selected = false, className = null, children, ...rest }: AvatarEditorIconProps) => {
    const iconEntry = icon ? ICON_MAP[icon] : null;

    if (!iconEntry) return null;

    const src = selected && iconEntry.selected ? iconEntry.selected : iconEntry.normal;

    return (
        <NativeTextTree>
            <div ref={ref} className={classNames('avatar-editor-icon flex items-center justify-center cursor-pointer', className)} {...rest}>
                <img src={src} alt="" className="pointer-events-none" draggable={false} />
                {children}
            </div>
        </NativeTextTree>
    );
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser