lbry-desktop/ui/component/supportsLiquidate/view.jsx
infiinte-persistence cbb6fc8305 Remove unnecessary variables and strings for translation.
-- "/wallet" --
I believe this is a link and comes from redux, and shouldn't be translated.

-- "%message%" --
No point sending a variable-only to the translators -- the intended replacements are  translated correctly.

-- "%name%" --
Unused.

-- "Something something something..." ---
Unused.

-- Obsolete strings (replaced by better string) --
  "You are not able to see those stats right now. Make sure you are signed in with the correct email and have data sharing turned on."

  "You are not able to see this channel's stats right now. Make sure you are signed in with the correct email and have data sharing turned on."

  "There are no stats for this channel. Make sure you are signed in with the correct email and have data sharing turned on."
2020-06-01 10:29:16 -04:00

179 lines
6 KiB
JavaScript

// @flow
import * as ICONS from 'constants/icons';
import React, { useEffect, useState } from 'react';
import CreditAmount from 'component/common/credit-amount';
import Button from 'component/button';
import { Form, FormField } from 'component/common/form';
import Card from 'component/common/card';
import I18nMessage from 'component/i18nMessage';
import ErrorText from 'component/common/error-text';
type Props = {
balance: number,
totalBalance: number,
claimsBalance: number,
supportsBalance: number,
tipsBalance: number,
claim: any,
metaData: any,
handleClose: () => void,
abandonSupportForClaim: (string, string, boolean | string, boolean) => any,
abandonClaimError: ?string,
};
const SupportsLiquidate = (props: Props) => {
const { claim, abandonSupportForClaim, handleClose, abandonClaimError } = props;
const [previewBalance, setPreviewBalance] = useState(undefined);
const [amount, setAmount] = useState(-1);
const [error, setError] = useState(false);
const initialMessage = __('How much would you like to unlock?');
const [message, setMessage] = useState(initialMessage);
const keep =
amount >= 0
? Boolean(previewBalance) && Number.parseFloat(String(Number(previewBalance) - Number(amount))).toFixed(8)
: Boolean(previewBalance) && Number.parseFloat(String((Number(previewBalance) / 4) * 3)).toFixed(8); // default unlock 25%
const claimId = claim && claim.claim_id;
const type = claim.value_type;
useEffect(() => {
if (claimId && abandonSupportForClaim) {
abandonSupportForClaim(claimId, type, false, true).then(r => {
setPreviewBalance(r.total_input);
});
}
}, [abandonSupportForClaim, claimId, type, setPreviewBalance]);
function handleSubmit() {
abandonSupportForClaim(claimId, type, keep, false).then(r => {
if (r) {
handleClose();
}
});
}
function handleChange(a) {
if (a === undefined || isNaN(Number(a))) {
setMessage(__('Amount must be a number'));
setError(true);
setAmount(0);
} else if (a === '') {
setAmount(0);
setError(true);
setMessage(__('Amount cannot be blank'));
} else if (Number(a) > Number(previewBalance)) {
setMessage(__('Amount cannot be more than available'));
setError(false);
} else if (Number(a) === Number(previewBalance)) {
setMessage(__(`She's about to close up the library!`));
setAmount(a);
setError(false);
} else if (Number(a) > Number(previewBalance) / 2) {
setMessage(__('Your content will do better with more staked on it'));
setAmount(a);
setError(false);
} else if (Number(a) === 0) {
setMessage(__('Amount cannot be zero'));
setAmount(0);
setError(true);
} else if (Number(a) <= Number(previewBalance) / 2) {
setMessage(__('A prudent choice'));
setAmount(Number(a));
setError(false);
} else {
setMessage(initialMessage);
setAmount(a);
setError(false);
}
}
return (
<Card
icon={ICONS.UNLOCK}
title={__('Unlock Tips')}
subtitle={
<>
<p>
{__('You can unlock all or some of this LBC at any time.')}{' '}
{__('Keeping it locked improves the trust and discoverability of your content.')}
</p>
<p>
<I18nMessage
tokens={{
learn_more: <Button button="link" label={__('Learn More')} href="https://lbry.com/faq/tipping" />,
}}
>
It's usually only worth unlocking what you intend to use immediately. %learn_more%
</I18nMessage>
</p>
</>
}
body={
abandonClaimError ? (
<div className="error__wrapper--no-overflow">
<ErrorText>{abandonClaimError}</ErrorText>
</div>
) : (
<>
<div className="section">
<I18nMessage
tokens={{
amount: (
<strong>
<CreditAmount badge={false} amount={Number(previewBalance)} precision={8} />
</strong>
),
}}
>
%amount% available to unlock
</I18nMessage>
</div>
<div className="section">
{previewBalance === 0 && <p>{__('No unlockable tips available')}</p>}
{previewBalance === undefined && <p>{__('Loading...')}</p>}
{previewBalance && (
<Form onSubmit={handleSubmit}>
<label htmlFor="supports_liquidate_range">{__('Amount to unlock')}</label>
<FormField
name="supports_liquidate_range"
type={'range'}
min={0}
step={0.01}
max={previewBalance}
value={Number(amount) >= 0 ? amount : previewBalance / 4} // by default, set it to 25% of available
onChange={e => handleChange(e.target.value)}
/>
<label className="range__label">
<span>0</span>
<span>{previewBalance / 2}</span>
<span>{previewBalance}</span>
</label>
<FormField
type="text"
value={amount >= 0 ? amount || '' : previewBalance && previewBalance / 4}
helper={message}
onChange={e => handleChange(e.target.value)}
/>
</Form>
)}
</div>
</>
)
}
actions={
<React.Fragment>
<div className="section__actions">
<Button
disabled={error}
button="primary"
onClick={abandonClaimError ? handleClose : handleSubmit}
label={abandonClaimError ? __('Done') : __('Unlock')}
/>
</div>
</React.Fragment>
}
/>
);
};
export default SupportsLiquidate;