Files
fnx_web/svelte/src/user_home/Subscription.svelte

153 lines
4.0 KiB
Svelte
Raw Normal View History

<script>
import Euro from "../util/Euro.svelte"
2022-04-26 15:23:57 +02:00
import LoadingIndicator from "../util/LoadingIndicator.svelte";
2022-10-18 14:30:50 +02:00
import SuccessMessage from "../util/SuccessMessage.svelte";
let loading = false
let subscription = window.user.subscription.id
2022-10-18 14:30:50 +02:00
let success_message
2022-10-18 14:30:50 +02:00
const update = async () => {
loading = true
const form = new FormData()
2022-10-18 14:30:50 +02:00
form.append("subscription", subscription)
2021-11-23 14:22:42 +01:00
try {
const resp = await fetch(
2022-11-01 16:56:46 +01:00
window.api_endpoint+"/user",
{ method: "PUT", body: form },
)
if(resp.status >= 400) {
let json = await resp.json()
throw json.message
}
2022-10-18 14:30:50 +02:00
success_message.set(true, "Subscription updated")
} catch (err) {
2022-10-18 14:30:50 +02:00
success_message.set(false, "Failed to update subscription: "+err)
2022-03-30 00:32:27 +02:00
} finally {
loading = false
}
}
</script>
2022-04-26 15:23:57 +02:00
<LoadingIndicator loading={loading}/>
2022-01-11 13:28:22 +01:00
<section>
<h2>Manage subscription</h2>
2022-10-18 14:30:50 +02:00
<p>
Current account balance: <Euro amount={window.user.balance_micro_eur}></Euro>
</p>
<p>
When your prepaid subscription is active you will be charged daily based
on usage. The prepaid subscription will stay active for as long as you
have credit on your account. When you reach negative balance the
subscription will automatically end. You will need a positive balance to
activate the subscription again.
</p>
2022-01-11 13:28:22 +01:00
2022-10-18 14:30:50 +02:00
<h3>Prepaid plans</h3>
<SuccessMessage bind:this={success_message}/>
<div class="feat_table">
<div>
<div class="feat_label" class:feat_highlight={subscription === "prepaid"}>
Prepaid<br/>
{#if subscription === "prepaid"}
Currently active
{:else}
<button on:click={() => {subscription = "prepaid"; update("subscription")}}>
<i class="icon">attach_money</i>
Activate
</button>
{/if}
2022-01-11 13:28:22 +01:00
</div>
2022-10-18 14:30:50 +02:00
<div class="feat_normal round_tr" class:feat_highlight={subscription === "prepaid"}>
<ul>
<li>Base price of €1 per month</li>
2022-11-01 10:54:31 +01:00
<li>€4 per TB per month for storage</li>
2022-10-18 14:30:50 +02:00
<li>€2 per TB for data transfer</li>
<li>Files never expire as long as subscription is active</li>
</ul>
2022-01-11 13:28:22 +01:00
</div>
2022-10-18 14:30:50 +02:00
</div>
<div>
<div class="feat_label" class:feat_highlight={subscription === "prepaid_temp_storage_120d"}>
120 days storage<br/>
{#if subscription === "prepaid_temp_storage_120d"}
Currently active
{:else}
<button on:click={() => {subscription = "prepaid_temp_storage_120d"; update("subscription")}}>
<i class="icon">attach_money</i>
Activate
</button>
{/if}
</div>
<div class="feat_normal" class:feat_highlight={subscription === "prepaid_temp_storage_120d"}>
<ul>
<li>Base price of €1 per month</li>
<li>€0.50 per TB per month for storage</li>
<li>€2 per TB for data transfer</li>
<li>Files expire 120 days after the last time they're viewed</li>
</ul>
2022-01-11 13:28:22 +01:00
</div>
2022-10-18 14:30:50 +02:00
</div>
<div>
<div class="feat_label" class:feat_highlight={subscription === ""}>
Free<br/>
{#if subscription === ""}
Currently active
{:else}
<button on:click={() => {subscription = ""; update("subscription")}}>
<i class="icon">money_off</i>
Activate
</button>
{/if}
2022-01-11 13:28:22 +01:00
</div>
2022-10-18 14:30:50 +02:00
<div class="feat_normal round_br" class:feat_highlight={subscription === ""}>
<ul>
<li>Standard free plan, files expire after 60 days.</li>
</ul>
2022-01-11 13:28:22 +01:00
</div>
</div>
2022-10-18 14:30:50 +02:00
</div>
2022-01-11 13:28:22 +01:00
</section>
<style>
.feat_table {
display: flex;
flex-direction: column;
}
.feat_table > div {
display: flex;
flex-direction: row;
}
.feat_table > div > div:first-child {
flex: 0 0 25%;
max-width: 25%;
}
.feat_table > div > div {
flex: 1 1 0;
margin: 0.25em;
padding: 0.5em;
word-wrap: break-word;
hyphens: auto;
}
.feat_table > div > .feat_label {
border-top-left-radius: 0.5em;
border-bottom-left-radius: 0.5em;
2022-04-04 12:37:58 +02:00
border: 2px solid var(--separator);
font-size: 1.1em;
}
.feat_table > div > .feat_normal {
background: var(--card_color);
}
.feat_table > div > .feat_highlight {
2022-04-04 12:37:58 +02:00
border: 2px solid var(--highlight_color)
}
.feat_table > div > div.round_tr { border-top-right-radius: 0.5em; }
.feat_table > div > div.round_br { border-bottom-right-radius: 0.5em; }
</style>