mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-23 14:40:50 +01:00
Update BadgeImageView
This commit is contained in:
parent
c9e64c83dc
commit
f69b40bbfe
@ -1,16 +1,53 @@
|
|||||||
import { BadgeImageReadyEvent, NitroSprite, TextureUtils } from '@nitrots/nitro-renderer';
|
import { BadgeImageReadyEvent, NitroSprite, TextureUtils } from '@nitrots/nitro-renderer';
|
||||||
import { FC, useCallback, useEffect, useState } from 'react';
|
import { FC, useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import { GetSessionDataManager, LocalizeBadgeDescription, LocalizeBadgeName, LocalizeText } from '../../../api';
|
import { GetSessionDataManager, LocalizeBadgeDescription, LocalizeBadgeName, LocalizeText } from '../../../api';
|
||||||
|
import { NitroLayoutBase } from '../../../layout/base';
|
||||||
import { BadgeInformationView } from './badge-info/BadgeInformationView';
|
import { BadgeInformationView } from './badge-info/BadgeInformationView';
|
||||||
import { BadgeImageViewProps } from './BadgeImageView.types';
|
import { BadgeImageViewProps } from './BadgeImageView.types';
|
||||||
|
|
||||||
export const BadgeImageView: FC<BadgeImageViewProps> = props =>
|
export const BadgeImageView: FC<BadgeImageViewProps> = props =>
|
||||||
{
|
{
|
||||||
const { badgeCode = null, isGroup = false, showInfo = false, customTitle = null } = props;
|
const { badgeCode = null, isGroup = false, showInfo = false, customTitle = null, isGrayscale = false, scale = 1, className = '', style = null, children = null, ...rest } = props;
|
||||||
|
|
||||||
const [ badgeUrl, setBadgeUrl ] = useState<string>('');
|
const [ badgeUrl, setBadgeUrl ] = useState<string>('');
|
||||||
const [ isListening, setIsListening ] = useState<boolean>(true);
|
const [ isListening, setIsListening ] = useState<boolean>(true);
|
||||||
|
|
||||||
|
const getScaleClass = useMemo(() =>
|
||||||
|
{
|
||||||
|
let scaleName = scale.toString();
|
||||||
|
|
||||||
|
if(scale === .5) scaleName = '0-5';
|
||||||
|
|
||||||
|
else if(scale === .75) scaleName = '0-75';
|
||||||
|
|
||||||
|
else if(scale === 1.25) scaleName = '1-25';
|
||||||
|
|
||||||
|
else if(scale === 1.50) scaleName = '1-50';
|
||||||
|
|
||||||
|
return `scale-${ scaleName }`;
|
||||||
|
}, [ scale ]);
|
||||||
|
|
||||||
|
const getClassName = useMemo(() =>
|
||||||
|
{
|
||||||
|
let newClassName = 'badge-image';
|
||||||
|
|
||||||
|
if(isGrayscale) newClassName += ' grayscale';
|
||||||
|
|
||||||
|
if((scale !== 1) && getScaleClass.length) newClassName += ` ${ getScaleClass }`;
|
||||||
|
|
||||||
|
if(className && className.length) newClassName += ' ' + className;
|
||||||
|
|
||||||
|
return newClassName;
|
||||||
|
}, [ className, isGrayscale, scale, getScaleClass ]);
|
||||||
|
|
||||||
|
const getStyle = useMemo(() =>
|
||||||
|
{
|
||||||
|
const newStyle = { ...style };
|
||||||
|
|
||||||
|
if(badgeUrl && badgeUrl.length) newStyle.backgroundImage = `url(${ badgeUrl })`;
|
||||||
|
|
||||||
|
return newStyle;
|
||||||
|
}, [ style, badgeUrl ]);
|
||||||
|
|
||||||
const onBadgeImageReadyEvent = useCallback((event: BadgeImageReadyEvent) =>
|
const onBadgeImageReadyEvent = useCallback((event: BadgeImageReadyEvent) =>
|
||||||
{
|
{
|
||||||
if(event.badgeId !== badgeCode) return;
|
if(event.badgeId !== badgeCode) return;
|
||||||
@ -27,6 +64,8 @@ export const BadgeImageView: FC<BadgeImageViewProps> = props =>
|
|||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
|
if(!badgeCode || !badgeCode.length) return;
|
||||||
|
|
||||||
const existing = (isGroup) ? GetSessionDataManager().loadGroupBadgeImage(badgeCode) : GetSessionDataManager().loadBadgeImage(badgeCode);
|
const existing = (isGroup) ? GetSessionDataManager().loadGroupBadgeImage(badgeCode) : GetSessionDataManager().loadBadgeImage(badgeCode);
|
||||||
|
|
||||||
if(!existing)
|
if(!existing)
|
||||||
@ -51,7 +90,10 @@ export const BadgeImageView: FC<BadgeImageViewProps> = props =>
|
|||||||
|
|
||||||
const url = `url('${ badgeUrl }')`;
|
const url = `url('${ badgeUrl }')`;
|
||||||
|
|
||||||
return <div className="badge-image" style={ (url && url.length) ? { backgroundImage: url } : {} }>
|
return (
|
||||||
|
<NitroLayoutBase className={ getClassName } style={ getStyle }>
|
||||||
{ showInfo && <BadgeInformationView title={ isGroup ? customTitle : LocalizeBadgeName(badgeCode) } description={ isGroup ? LocalizeText('group.badgepopup.body') : LocalizeBadgeDescription(badgeCode) } /> }
|
{ showInfo && <BadgeInformationView title={ isGroup ? customTitle : LocalizeBadgeName(badgeCode) } description={ isGroup ? LocalizeText('group.badgepopup.body') : LocalizeBadgeDescription(badgeCode) } /> }
|
||||||
</div>;
|
{ children }
|
||||||
|
</NitroLayoutBase>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
export interface BadgeImageViewProps
|
import { NitroLayoutBaseProps } from '../../../layout/base';
|
||||||
|
|
||||||
|
export interface BadgeImageViewProps extends NitroLayoutBaseProps
|
||||||
{
|
{
|
||||||
badgeCode: string;
|
badgeCode: string;
|
||||||
isGroup?: boolean;
|
isGroup?: boolean;
|
||||||
showInfo?: boolean;
|
showInfo?: boolean;
|
||||||
customTitle?: string;
|
customTitle?: string;
|
||||||
|
isGrayscale?: boolean;
|
||||||
|
scale?: number;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user