diff options
| -rw-r--r-- | src/lib/socket.js | 3 | ||||
| -rw-r--r-- | src/lib/store.js | 1 | ||||
| -rw-r--r-- | src/routes/invoice/[id]/+page.svelte | 5 | ||||
| -rw-r--r-- | src/routes/invoice/[id]/paid/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/launch/+page.svelte | 33 | ||||
| -rw-r--r-- | src/routes/launch/purchase/+page.server.js | 19 | ||||
| -rw-r--r-- | src/routes/launch/purchase/+page.svelte | 28 | ||||
| -rw-r--r-- | src/routes/launch/ticket/+page.server.js | 9 | ||||
| -rw-r--r-- | src/routes/launch/ticket/+page.svelte | 32 | ||||
| -rw-r--r-- | static/icons/party.svg | 64 | ||||
| -rw-r--r-- | static/images/loft.jpg | bin | 0 -> 286853 bytes |
11 files changed, 150 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> diff --git a/static/icons/party.svg b/static/icons/party.svg new file mode 100644 index 00000000..f33b9fc1 --- /dev/null +++ b/static/icons/party.svg @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 300.948 300.948" style="enable-background:new 0 0 300.948 300.948;" xml:space="preserve"> +<g id="XMLID_1505_"> + <g> + <g> + <path d="M132.166,219.612L120.7,189.007l-18.92,25.645l4.57,12.2l1.089,52.22c0.152,7.28,6.101,13.079,13.349,13.079 + c0.094,0,0.189-0.001,0.284-0.003c7.375-0.154,13.229-6.257,13.076-13.632l-1.137-54.496 + C132.98,222.513,132.694,221.023,132.166,219.612z"/> + <circle cx="92.165" cy="50.896" r="23.069"/> + <path d="M170.846,40.209c-4.878-3.74-11.866-2.818-15.606,2.061l-29.253,38.153l-12.6,2.504c-2.239-1.26-4.819-1.987-7.57-1.997 + l-27.79-0.113c-8.606-0.035-15.612,6.914-15.647,15.521l-0.041,10.148c5.894-4.85,10.2-8.395,16.342-13.449l-27.839,36.752 + c-2.212,3.006-2.77,6.913-1.494,10.412l15.522,42.623c2.131,5.848,8.593,8.715,14.271,6.644c5.774-2.105,8.75-8.493,6.644-14.271 + l-13.189-36.173l25.099-34.09l-1.65,4.137c-2.548,6.388-9.458,23.716-12.013,30.124c9.171,25.153,8.43,23.12,11.792,32.342 + c4.13,11.328-1.694,23.839-13.023,27.969c-5.156,1.88-10.876,1.768-16.015-0.416l-6.946,9.415L7.481,234.98 + c-6.635,3.253-9.357,11.259-6.115,17.872c3.249,6.627,11.25,9.361,17.872,6.115l55.291-27.913 + c1.927-0.944,3.596-2.338,4.87-4.064l39.4-53.405c2.39-3.245,2.291-6.351,2.272-10.854l0.238-58.684l13.132-2.61 + c2.651-0.527,5.019-2,6.663-4.145l31.803-41.48C176.646,50.936,175.724,43.949,170.846,40.209z"/> + <path d="M250.435,216.627c-2.072,3.485-1.699,6.841-1.363,9.642l6.507,54.118c0.881,7.325,7.533,12.547,14.856,11.667 + c7.324-0.88,12.547-7.532,11.667-14.856l-6.236-51.857l7.302-32.973L250.435,216.627z"/> + <circle cx="255.17" cy="49.131" r="23.069"/> + <path d="M300.801,157.11c-0.001-0.005-0.001-0.009-0.002-0.013l-9.775-67.144c-1.24-8.517-9.15-14.416-17.666-13.176 + l-27.433,3.994l-25.751-17.246l-12.368-46.457c-1.582-5.94-7.68-9.474-13.62-7.892c-5.94,1.581-9.474,7.679-7.892,13.62 + l13.447,50.51c0.696,2.612,2.317,4.881,4.563,6.385l25.379,16.996c29.946-8.374,25.085-7.015,34.511-9.651l-36.571,21.323 + l-34.561-16.97c-5.132-2.52-11.407-0.729-14.403,4.194c-3.469,5.696-1.193,12.949,4.591,15.789 + c44.139,21.651,40.969,20.131,41.842,20.447c3.002,1.088,6.429,0.864,9.395-0.846l39.51-23.763l-35.156,33.548l3.577,24.567 + l18.423-2.959l-43.669,32.365c-1.723,1.278-3.113,2.95-4.053,4.879l-27.793,55.352c-3.232,6.631-0.477,14.626,6.154,17.859 + c6.617,3.225,14.619,0.49,17.859-6.154l26.362-52.417c44.648-33.09,34.888-25.947,59.437-43.736 + C299.365,167.448,301.554,162.275,300.801,157.11z"/> + </g> + </g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/static/images/loft.jpg b/static/images/loft.jpg Binary files differnew file mode 100644 index 00000000..39ca49ab --- /dev/null +++ b/static/images/loft.jpg |
