nitro-v36-with-renderer-v36
/
src /
components /
housekeeping /
views /
users /
HousekeepingUserEconomyView.tsx
HousekeepingUserEconomyView.tsx 5.2 Ko
Télécharger le fichier
import { FC, useState } from 'react';
import { FaCrown, FaGift, FaPiggyBank } from 'react-icons/fa';
import { IHousekeepingUser, LocalizeText } from '../../../../api';
import { LayoutCurrencyIcon } from '../../../../common';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';
import { useHousekeeping } from '../../../../hooks';
import { HousekeepingButton, HousekeepingNumberField, HousekeepingSection } from '../common/HousekeepingParts';
/** Currency, item and HC grants for the selected user. */
export const HousekeepingUserEconomyView: FC<{ user: IHousekeepingUser }> = ({ user }) => {
const { isActionPending, giveCredits, giveDuckets, giveDiamonds, grantItem, setHcSubscription } = useHousekeeping();
const [credits, setCredits] = useState(1000);
const [duckets, setDuckets] = useState(100);
const [diamonds, setDiamonds] = useState(10);
const [itemId, setItemId] = useState(0);
const [itemQuantity, setItemQuantity] = useState(1);
const [hcDays, setHcDays] = useState(31);
const currencies = [
{ type: -1, value: credits, set: setCredits, give: () => giveCredits(user.id, credits), key: 'housekeeping.economy.give_credits' },
{ type: 0, value: duckets, set: setDuckets, give: () => giveDuckets(user.id, duckets), key: 'housekeeping.economy.give_duckets' },
{ type: 5, value: diamonds, set: setDiamonds, give: () => giveDiamonds(user.id, diamonds), key: 'housekeeping.economy.give_diamonds' }
];
return (
<NativeTextTree>
<div className="flex flex-col gap-2">
<HousekeepingSection
icon={<FaPiggyBank className="text-amber-500" size={9} />}
title={LocalizeText('housekeeping.economy.currencies')}
tone="warning"
>
<div className="grid grid-cols-3 gap-2">
{currencies.map((currency) => (
<div key={currency.type} className="flex min-w-0 items-center gap-1">
<LayoutCurrencyIcon classNames={['shrink-0']} type={currency.type} />
<HousekeepingNumberField value={currency.value} widthClass="w-16" onChange={currency.set} />
<HousekeepingButton
classNames={['grow', 'min-w-0']}
disabled={isActionPending}
size="sm"
title={LocalizeText(currency.key)}
variant="success"
onClick={currency.give}
>
<FaPiggyBank size={9} />
<span className="truncate">{LocalizeText('housekeeping.economy.give')}</span>
</HousekeepingButton>
</div>
))}
</div>
</HousekeepingSection>
<div className="grid grid-cols-2 gap-2">
<HousekeepingSection
icon={<FaGift className="text-violet-500" size={9} />}
title={LocalizeText('housekeeping.economy.grant_item.label')}
tone="accent"
>
<div className="flex items-center gap-1.5">
<HousekeepingNumberField
label={LocalizeText('housekeeping.economy.item_id')}
value={itemId}
widthClass="w-20"
onChange={setItemId}
/>
<HousekeepingNumberField label="×" value={itemQuantity} widthClass="w-12" onChange={setItemQuantity} />
</div>
<HousekeepingButton
disabled={isActionPending || !itemId}
gap={1}
variant="primary"
onClick={() => grantItem(user.id, itemId, itemQuantity)}
>
<FaGift size={10} />
<span>{LocalizeText('housekeeping.economy.grant_item')}</span>
</HousekeepingButton>
</HousekeepingSection>
<HousekeepingSection
icon={<FaCrown className="text-amber-600" size={9} />}
title={LocalizeText('housekeeping.economy.hc.label')}
tone="warning"
>
<HousekeepingNumberField min={0} unit={LocalizeText('housekeeping.unit.days')} value={hcDays} widthClass="w-20" onChange={setHcDays} />
<HousekeepingButton disabled={isActionPending} gap={1} variant="warning" onClick={() => setHcSubscription(user.id, hcDays)}>
<FaCrown size={10} />
<span>{LocalizeText('housekeeping.economy.set_hc_days')}</span>
</HousekeepingButton>
</HousekeepingSection>
</div>
</div>
</NativeTextTree>
);
};
