import { FC, useEffect, useState } from 'react'; import { FaPlus, FaTrash } from 'react-icons/fa'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Button, Slider, Text } from '../../../../common'; import { useWired } from '../../../../hooks'; import { NitroInput } from '../../../../layout'; import { WiredActionBaseView } from './WiredActionBaseView'; import { WiredSourcesSelector } from '../WiredSourcesSelector'; export const WiredActionGiveRewardView: FC<{}> = props => { const [ limitEnabled, setLimitEnabled ] = useState(false); const [ rewardTime, setRewardTime ] = useState(1); const [ uniqueRewards, setUniqueRewards ] = useState(false); const [ rewardsLimit, setRewardsLimit ] = useState(1); const [ limitationInterval, setLimitationInterval ] = useState(1); const [ rewards, setRewards ] = useState<{ isBadge: boolean, itemCode: string, probability: number }[]>([]); const { trigger = null, setIntParams = null, setStringParam = null } = useWired(); const [ userSource, setUserSource ] = useState(() => { if(trigger?.intData?.length > 4) return trigger.intData[4]; return 0; }); const addReward = () => setRewards(rewards => [ ...rewards, { isBadge: false, itemCode: '', probability: null } ]); const removeReward = (index: number) => { setRewards(prevValue => { const newValues = Array.from(prevValue); newValues.splice(index, 1); return newValues; }); }; const updateReward = (index: number, isBadge: boolean, itemCode: string, probability: number) => { const rewardsClone = Array.from(rewards); const reward = rewardsClone[index]; if(!reward) return; reward.isBadge = isBadge; reward.itemCode = itemCode; reward.probability = probability; setRewards(rewardsClone); }; const save = () => { let stringRewards = []; for(const reward of rewards) { if(!reward.itemCode) continue; const rewardsString = [ reward.isBadge ? '0' : '1', reward.itemCode, reward.probability.toString() ]; stringRewards.push(rewardsString.join(',')); } if(stringRewards.length > 0) { setStringParam(stringRewards.join(';')); setIntParams([ rewardTime, uniqueRewards ? 1 : 0, rewardsLimit, limitationInterval, userSource ]); } }; useEffect(() => { const readRewards: { isBadge: boolean, itemCode: string, probability: number }[] = []; if(trigger.stringData.length > 0 && trigger.stringData.includes(';')) { const splittedRewards = trigger.stringData.split(';'); for(const rawReward of splittedRewards) { const reward = rawReward.split(','); if(reward.length !== 3) continue; readRewards.push({ isBadge: reward[0] === '0', itemCode: reward[1], probability: Number(reward[2]) }); } } if(readRewards.length === 0) readRewards.push({ isBadge: false, itemCode: '', probability: null }); setRewardTime((trigger.intData.length > 0) ? trigger.intData[0] : 0); setUniqueRewards((trigger.intData.length > 1) ? (trigger.intData[1] === 1) : false); setRewardsLimit((trigger.intData.length > 2) ? trigger.intData[2] : 0); setLimitationInterval((trigger.intData.length > 3) ? trigger.intData[3] : 0); setLimitEnabled((trigger.intData.length > 3) ? trigger.intData[3] > 0 : false); setUserSource((trigger.intData.length > 4) ? trigger.intData[4] : 0); setRewards(readRewards); }, [ trigger ]); return ( }>
setLimitEnabled(event.target.checked) } /> { LocalizeText('wiredfurni.params.prizelimit', [ 'amount' ], [ limitEnabled ? rewardsLimit.toString() : '' ]) }
{ !limitEnabled && Reward limit not set. Make sure rewards are badges or non-tradeable items. } { limitEnabled && setRewardsLimit(event) } /> }
How often can a user be rewarded?
{ (rewardTime > 0) && setLimitationInterval(Number(event.target.value)) } /> }

setUniqueRewards(e.target.checked) } /> Unique rewards
If checked each reward will be given once to each user. This will disable the probabilities option.
Rewards
{ rewards && rewards.map((reward, index) => { return (
updateReward(index, e.target.checked, reward.itemCode, reward.probability) } /> Badge?
updateReward(index, reward.isBadge, e.target.value, reward.probability) } /> updateReward(index, reward.isBadge, reward.itemCode, Number(e.target.value)) } /> { (index > 0) && }
); }) }
); };