aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-18 21:03:27 -0700
committerAdam Soltys <[email protected]>2022-10-18 21:03:27 -0700
commitad24f34434368d3767fd147d80d45adc3c28f106 (patch)
treef98eea88a95a2c1fbe79283cfa3f77e4ff737449 /src
parent02af363d2f0d552a72dc1c90bf8d785e04465d3a (diff)
downloadcoinos-ui-ad24f34434368d3767fd147d80d45adc3c28f106.tar.gz
coinos-ui-ad24f34434368d3767fd147d80d45adc3c28f106.zip
tickets wip
Diffstat (limited to 'src')
-rw-r--r--src/lib/socket.js3
-rw-r--r--src/lib/store.js1
-rw-r--r--src/routes/invoice/[id]/+page.svelte5
-rw-r--r--src/routes/invoice/[id]/paid/+page.svelte2
-rw-r--r--src/routes/launch/+page.svelte33
-rw-r--r--src/routes/launch/purchase/+page.server.js19
-rw-r--r--src/routes/launch/purchase/+page.svelte28
-rw-r--r--src/routes/launch/ticket/+page.server.js9
-rw-r--r--src/routes/launch/ticket/+page.svelte32
9 files changed, 86 insertions, 46 deletions
diff --git a/src/lib/socket.js b/src/lib/socket.js
index fb77333f..b385db9d 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -19,13 +19,14 @@ export const messages = (data) => ({
rate.set(data);
},
- payment() {
+ async payment() {
let { amount, invoice } = data;
if (get(user).account_id !== data.account_id) return;
if (invoice) {
invoices.set({ ...get(invoices), [invoice.uuid]: invoice });
}
+
newPayment.set(true);
if (amount > 0) {
success(`Received ${amount} sats!`);
diff --git a/src/lib/store.js b/src/lib/store.js
index ffafa70b..e317ed24 100644
--- a/src/lib/store.js
+++ b/src/lib/store.js
@@ -27,7 +27,6 @@ const persistLocal = (key, defaultValue) => {
return s;
};
-export const invoiceRedirect = writable();
export const loginRedirect = writable();
export const rate = writable();
export const user = writable();
diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte
index 8e9e6ff4..cfff251e 100644
--- a/src/routes/invoice/[id]/+page.svelte
+++ b/src/routes/invoice/[id]/+page.svelte
@@ -1,7 +1,7 @@
<script>
import { copy, f, get, reverseFormat, s, sats } from '$lib/utils';
import { browser } from '$app/environment';
- import { invoices, invoiceRedirect } from '$lib/store';
+ import { invoices } from '$lib/store';
import { Icon, Heart, Image, Qr, Tip } from '$comp';
import { goto } from '$app/navigation';
import { t } from '$lib/translations';
@@ -46,7 +46,7 @@
$invoices[id] = { amount, id, rate, received, text, tip, username };
$: browser &&
$invoices[id]?.received >= $invoices[id]?.amount &&
- goto($invoiceRedirect || `/invoice/${id}/paid`);
+ goto(($invoices[id].memo === 'launch' && '/launch/purchase') || `/invoice/${id}/paid`);
$: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2));
@@ -55,6 +55,7 @@
$: invoiceAmountFiatFormatted = f(amountFiat, currency);
</script>
+{$invoices[id]?.memo}
<div class:full-shadow={showMobileTip}>
<button
class="ml-5 md:ml-20 mt-5 md:mt-10 hover:opacity-80"
diff --git a/src/routes/invoice/[id]/paid/+page.svelte b/src/routes/invoice/[id]/paid/+page.svelte
index 95c721d0..d619b7ff 100644
--- a/src/routes/invoice/[id]/paid/+page.svelte
+++ b/src/routes/invoice/[id]/paid/+page.svelte
@@ -22,7 +22,7 @@
};
</script>
-<div class="container px-4 text-center">
+<div class="container px-4 text-center mx-auto">
<div class="flex w-full py-20 max-w-[200px] mx-auto" in:scale={{ start: 0.5 }}>
<Icon icon="check" style="mx-auto" />
</div>
diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte
index 843c7705..ec649b92 100644
--- a/src/routes/launch/+page.svelte
+++ b/src/routes/launch/+page.svelte
@@ -8,7 +8,7 @@
$loginRedirect = '/launch/purchase';
let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset));
- $: link = user ? $loginRedirect : '/register';
+ $: link = hasTicket ? '/launch/ticket' : user ? $loginRedirect : '/register';
$: text = (hasTicket ? 'View' : 'Purchase') + ' Ticket';
beforeNavigate(({ to }) => {
@@ -39,26 +39,35 @@
rel="noreferrer">first commit</a
>!
</p>
- <div class="ml-8">
- <p><b>When</b></p>
- <p>6pm on October 26</p>
- </div>
- <div class="ml-8">
- <p><b>Where</b></p>
- <p>1184 Denman Street, #203</p>
- <p>Vancouver, BC</p>
+
+ <div class="flex">
+ <div class="space-y-5">
+ <div class="ml-8">
+ <p><b>When</b></p>
+ <p>6pm October 26</p>
+ </div>
+ <div class="ml-8">
+ <p><b>Where</b></p>
+ <p>The Loft Lounge</p>
+ <p>1184 Denman Street, #203</p>
+ <p>Vancouver, BC</p>
+ </div>
+ </div>
+
+ <img src="/icons/party.svg" alt="Partygoers" class="w-[120px] mx-auto" />
</div>
<p>
- We'll introduce our new interface for merchants to take bitcoin payments and afterwards
- we'll network and enjoy tasty food and drinks from <a
+ We'll introduce our new interface for merchants to take bitcoin payments, discuss how we
+ can get all of Metro Vancouver on a bitcoin economy, and enjoy tasty food and drinks from <a
href="https://loftondenman.com/"
class="underline">The Loft</a
>!
</p>
<p>
- We're charging a nominal $6 entry fee so we can get an idea of how much space to reserve.
+ We're asking for a nominal $6 entry fee so we can get an idea of how much space to
+ reserve.
</p>
<div class="flex w-full my-8">
diff --git a/src/routes/launch/purchase/+page.server.js b/src/routes/launch/purchase/+page.server.js
index ff5efc84..3317b420 100644
--- a/src/routes/launch/purchase/+page.server.js
+++ b/src/routes/launch/purchase/+page.server.js
@@ -7,16 +7,29 @@ import { browser } from '$app/environment';
export const load = async ({ parent }) => {
let tickets = await get('/tickets');
- return { ...(await parent()), tickets };
+ let { user } = await parent();
+ let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset));
+ if (hasTicket) throw redirect(307, '/launch/ticket');
+ return { tickets };
};
export const actions = {
internal: async ({ cookies, request }) => {
+ let form = await request.formData();
+ let username = form.get('username');
+
+ let { address } = await post(
+ '/invoice',
+ { invoice: { network: 'liquid' }, user: { username } },
+ auth(cookies)
+ );
+
let { ticket } = await get('/ticket');
let { asset } = await post(
'/assets',
{
+ address,
name: `Launch Party Ticket ${ticket}`,
ticker: 'LPT',
precision: 0,
@@ -25,9 +38,10 @@ export const actions = {
domain: 'coinos.io',
filename: tickets[ticket]
},
- auth(cookies)
+ { authorization: `Bearer ${env.LAUNCH}` }
);
+ await post('/send', { amount: 25000, username: 'launch' }, auth(cookies));
await post('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` });
throw redirect(307, `/launch/thanks/${asset}`);
@@ -40,6 +54,7 @@ export const actions = {
let invoice = {
amount: 25000,
+ memo: 'launch',
network: 'lightning',
prompt: false,
rate: rates[form.get('currency')]
diff --git a/src/routes/launch/purchase/+page.svelte b/src/routes/launch/purchase/+page.svelte
index d31d20f0..d78b95d2 100644
--- a/src/routes/launch/purchase/+page.svelte
+++ b/src/routes/launch/purchase/+page.svelte
@@ -1,6 +1,7 @@
<script>
+ import { onMount } from 'svelte';
import { enhance } from '$app/forms';
- import { invoiceRedirect, selectedRate } from '$lib/store';
+ import { selectedRate } from '$lib/store';
import { post } from '$lib/utils';
import { goto } from '$app/navigation';
@@ -8,7 +9,6 @@
let amount = 25000;
let {
- address,
currency,
account: { balance },
username
@@ -16,24 +16,6 @@
let { tickets } = data;
let ticket = tickets.length;
-
- let invoice;
- let get = async (network) => {
- let { uuid } = await post('/invoice', {
- amount,
- rate: $selectedRate,
- network,
- username
- });
-
- $invoiceRedirect = '/launch/purchase';
- goto(`/invoice/${uuid}`);
- };
-
- let lightning = () => get('lightning');
- let bitcoin = () => get('bitcoin');
-
- // if (balance < amount) throw redirect(307, `/${username}/fund/${amount - balance}`);
</script>
<div class="mx-auto h-screen flex items-center justify-center px-4">
@@ -48,9 +30,10 @@
alt="Ticket"
/>
- {#if balance > amount}
+ {#if balance >= amount}
<form action="?/internal" method="POST" use:enhance>
- <input type="hidden" name="ticket" value={ticket} />
+ <input type="hidden" name="username" value={username} />
+
<div class="w-full flex">
<button
class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
@@ -77,7 +60,6 @@
<form action="?/bitcoin" method="POST">
<button
class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
- on:click={bitcoin}
>
Bitcoin
</button>
diff --git a/src/routes/launch/ticket/+page.server.js b/src/routes/launch/ticket/+page.server.js
new file mode 100644
index 00000000..59ea966e
--- /dev/null
+++ b/src/routes/launch/ticket/+page.server.js
@@ -0,0 +1,9 @@
+import { get } from '$lib/utils';
+
+export const load = async ({ cookies, parent }) => {
+ let { user } = await parent();
+ let tickets = await get('/tickets');
+ let ticket = tickets.findIndex((t) => user.accounts.find((a) => a.asset === t));
+ console.log("TICK", ticket)
+ return { ticket };
+};
diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte
index 229c18f0..2585c57c 100644
--- a/src/routes/launch/ticket/+page.svelte
+++ b/src/routes/launch/ticket/+page.svelte
@@ -1,4 +1,28 @@
-<img
- src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
- class="w-full max-w-[800px]"
-/>
+<script>
+ export let data;
+ let { ticket } = data;
+</script>
+
+<div class="mx-auto h-screen flex items-center justify-center px-4">
+ <div class="font-normal text-gray-800 mx-auto mb-8 space-y-8">
+ <h1 class="mb-4 text-4xl font-bold leading-none tracking-tight text-gray-800 text-center">
+ Your Ticket
+ </h1>
+
+ <img
+ src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
+ class="w-full max-w-[800px]"
+ alt="Ticket"
+ />
+
+ <div class="w-full flex">
+ <a href="/" class="mx-auto">
+ <button
+ class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 text-2xl"
+ >
+ Done
+ </button>
+ </a>
+ </div>
+ </div>
+</div>