improve user communication on subscription required portal
This commit is contained in:
parent
8db71f57ec
commit
6189ec1617
|
@ -78,7 +78,8 @@ function _M.has_subscription()
|
||||||
end
|
end
|
||||||
|
|
||||||
function _M.is_auth_required()
|
function _M.is_auth_required()
|
||||||
return os.getenv("ACCOUNTS_LIMIT_ACCESS") == "authenticated"
|
-- authentication is required if mode is set to "authenticated" or "subscription"
|
||||||
|
return os.getenv("ACCOUNTS_LIMIT_ACCESS") == "authenticated" or _M.is_subscription_required()
|
||||||
end
|
end
|
||||||
|
|
||||||
function _M.is_subscription_required()
|
function _M.is_subscription_required()
|
||||||
|
|
|
@ -47,15 +47,37 @@ const LogInLink = () => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const SubscribeLink = () => {
|
||||||
|
const createAccountsUrl = useAccountsUrl();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
href={createAccountsUrl("payments")}
|
||||||
|
className="uppercase underline-primary hover:text-primary transition-colors duration-200"
|
||||||
|
>
|
||||||
|
available plans
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const Uploader = () => {
|
const Uploader = () => {
|
||||||
const [mode, setMode] = React.useState("file");
|
const [mode, setMode] = React.useState("file");
|
||||||
const [uploads, setUploads] = React.useState([]);
|
const [uploads, setUploads] = React.useState([]);
|
||||||
|
|
||||||
const { data: accounts } = useAccounts();
|
const { data: accounts } = useAccounts();
|
||||||
const showAccountFeatures =
|
|
||||||
accounts && accounts.enabled !== false && !accounts?.auth_required && !accounts?.authenticated;
|
// variables extracted from useAccounts response
|
||||||
const disabledComponent =
|
const isAccountsEnabled = accounts?.enabled === true;
|
||||||
accounts && accounts.enabled !== false && accounts?.auth_required && !accounts?.authenticated;
|
const isSubscriptionRequired = accounts?.subscription_required === true;
|
||||||
|
const isAuthRequired = isSubscriptionRequired || accounts?.auth_required === true;
|
||||||
|
const isAuthenticated = accounts?.authenticated === true;
|
||||||
|
const hasSubscription = accounts?.subscription === true;
|
||||||
|
|
||||||
|
// derive current app state and extract it into variables
|
||||||
|
const showAccountFeatures = isAccountsEnabled && !isAuthRequired && !isAuthenticated;
|
||||||
|
const showAuthenticationRequired = isAccountsEnabled && isAuthRequired && !isAuthenticated;
|
||||||
|
const showSubscriptionRequired = isAccountsEnabled && isAuthenticated && isSubscriptionRequired && !hasSubscription;
|
||||||
|
const isComponentDisabled = showAuthenticationRequired || showSubscriptionRequired;
|
||||||
|
|
||||||
const onUploadStateChange = React.useCallback((id, state) => {
|
const onUploadStateChange = React.useCallback((id, state) => {
|
||||||
setUploads((uploads) => {
|
setUploads((uploads) => {
|
||||||
|
@ -104,7 +126,7 @@ const Uploader = () => {
|
||||||
}, [inputElement, mode]);
|
}, [inputElement, mode]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classnames("relative", { "p-8": disabledComponent })}>
|
<div className={classnames("relative", { "p-8": isComponentDisabled })}>
|
||||||
<div className="max-w-content mx-auto rounded-lg shadow bg-white z-0 relative">
|
<div className="max-w-content mx-auto rounded-lg shadow bg-white z-0 relative">
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<button
|
<button
|
||||||
|
@ -156,7 +178,7 @@ const Uploader = () => {
|
||||||
{mode === "directory" && <span>Drop any folder with an index.html file to deploy to Skynet</span>}
|
{mode === "directory" && <span>Drop any folder with an index.html file to deploy to Skynet</span>}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
{!disabledComponent && (
|
{!isComponentDisabled && (
|
||||||
<div className="absolute left-1/2 -bottom-4 desktop:-bottom-8">
|
<div className="absolute left-1/2 -bottom-4 desktop:-bottom-8">
|
||||||
<div className="relative -left-1/2 transform transition-transform hover:rotate-180" role="button">
|
<div className="relative -left-1/2 transform transition-transform hover:rotate-180" role="button">
|
||||||
<Add />
|
<Add />
|
||||||
|
@ -204,7 +226,7 @@ const Uploader = () => {
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{disabledComponent && (
|
{showAuthenticationRequired && (
|
||||||
<div className="absolute inset-0 bg-palette-500 bg-opacity-90 rounded-lg">
|
<div className="absolute inset-0 bg-palette-500 bg-opacity-90 rounded-lg">
|
||||||
<div className="flex h-full">
|
<div className="flex h-full">
|
||||||
<div className="m-auto">
|
<div className="m-auto">
|
||||||
|
@ -215,6 +237,18 @@ const Uploader = () => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{showSubscriptionRequired && (
|
||||||
|
<div className="absolute inset-0 bg-palette-500 bg-opacity-90 rounded-lg">
|
||||||
|
<div className="flex h-full">
|
||||||
|
<div className="m-auto">
|
||||||
|
<h4 className="font-light text-palette-100 text-lg mt-2 text-center">
|
||||||
|
Active subscription required - <SubscribeLink />
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue