on master help sign in
Add trial comet landing page, trial comet over page
commit514a33ec5cf5d17fa0aad1c52c5bef18a1321e77 authorpkova <pyry.kovanen@gmail.com> dateMon 12 Sep 2022, 20:53 (4 years ago) parentff332a2
3 files changed+138−38
pages/index.js−38 pages/trial-over.js+35 pages/trial.js+103
pages/index.js−38
@@ -21,27 +21,6 @@ import fs from "fs";
2121import path from "path";
2222import Meta from "../components/Meta";
2323
24−const postReq = (path, params, method='post') => {
25− const form = document.createElement('form');
26− form.method = method;
27− form.action = path;
28−
29− for (const key in params) {
30− if (params.hasOwnProperty(key)) {
31− const hiddenField = document.createElement('input');
32− hiddenField.type = 'hidden';
33− hiddenField.name = key;
34− hiddenField.value = params[key];
35−
36− form.appendChild(hiddenField);
37− }
38− }
39−
40− document.body.appendChild(form);
41− form.submit();
42−}
43−
44−
4524export default function Home({
4625 posts,
4726 ecosystem,
@@ -73,23 +52,6 @@ export default function Home({
7352 {
7453 // Hero
7554 }
76− <div className="layout px-4 md:px-8">
77− <a className="p-8 button-lg bg-green-400 text-white"
78− onClick={(e) => {
79− e.stopPropagation();
80− fetch('https://api.shore.arvo.network/enter', {
81− method: 'GET',
82− headers: {'Content-Type': 'application/json'}
83− })
84− .then(res => res.json())
85− .then(data => {
86− postReq(data.url + '/~/login', {password: data.code, redirect: '/'});
87− });
88− }}
89− >
90− Try now
91− </a>
92− </div>
9355 <Section>
9456 <div className="bg-yellow-100 dark:bg-[#5C5037] w-full p-8 md:p-12 rounded-3xl flex flex-col md:flex-row">
9557 <div className="md:w-10/12 w-full md:mr-6">
pages/trial-over.jsnew file+35
@@ -0,0 +1,35 @@
1+import Head from "next/head";
2+import Meta from "../components/Meta";
3+import {
4+ Container,
5+ SingleColumn,
6+ Section,
7+ IntraNav,
8+} from "@urbit/foundation-design-system";
9+import Header from "../components/Header";
10+import Footer from "../components/Footer";
11+
12+export default function TrialOver(props) {
13+ const post = {
14+ title: "Trial Over",
15+ };
16+
17+
18+ return (
19+ <Container>
20+ <Head>
21+ <title>Trial Over • urbit.org</title>
22+ {Meta(post)}
23+ </Head>
24+ <IntraNav ourSite="https://urbit.org" search={props.search} />
25+ <SingleColumn>
26+ <Header />
27+ <Section className="pt-8">
28+ <h1>Trial Over</h1>
29+ <p className="mt-12">Your trial has ended.</p>
30+ </Section>
31+ </SingleColumn>
32+ <Footer />
33+ </Container>
34+ );
35+}
pages/trial.jsnew file+103
@@ -0,0 +1,103 @@
1+import { useState, useEffect } from 'react';
2+import Head from "next/head";
3+import Meta from "../components/Meta";
4+import {
5+ Container,
6+ SingleColumn,
7+ Section,
8+ IntraNav,
9+} from "@urbit/foundation-design-system";
10+import Header from "../components/Header";
11+import Footer from "../components/Footer";
12+
13+const postReq = (path, params, method='post') => {
14+ const form = document.createElement('form');
15+ form.method = method;
16+ form.action = path;
17+
18+ for (const key in params) {
19+ if (params.hasOwnProperty(key)) {
20+ const hiddenField = document.createElement('input');
21+ hiddenField.type = 'hidden';
22+ hiddenField.name = key;
23+ hiddenField.value = params[key];
24+
25+ form.appendChild(hiddenField);
26+ }
27+ }
28+
29+ document.body.appendChild(form);
30+ form.submit();
31+}
32+
33+
34+
35+export default function Trial(props) {
36+ const post = {
37+ title: "Trial",
38+ };
39+
40+ const [count, setCount] = useState(0)
41+
42+ useEffect(() => {
43+ fetch('https://api.shore.arvo.network/count', {
44+ method: 'GET',
45+ headers: {'Content-Type': 'application/json'}
46+ })
47+ .then(res => res.json())
48+ .then(data => {
49+ setCount(data.count);
50+ });
51+ }, []);
52+
53+ const available = count > 0;
54+
55+ const buttonBg = available ? '' : 'pink';
56+
57+ return (
58+ <Container>
59+ <Head>
60+ <title>Trial • urbit.org</title>
61+ {Meta(post)}
62+ </Head>
63+ <IntraNav ourSite="https://urbit.org" search={props.search} />
64+ <SingleColumn>
65+ <Header />
66+ <Section className="pt-8">
67+ <h1>Trial</h1>
68+ <p className="mt-12">There are currently {count} trial comets left.</p>
69+ </Section>
70+ <div className="layout px-4 md:px-8">
71+ <a className="p-8 button-lg bg-green-400 text-white"
72+ style={{"backgroundColor": buttonBg}}
73+ onClick={(e) => {
74+ e.stopPropagation();
75+
76+ if (!available) {
77+ return
78+ }
79+
80+ fetch('https://api.shore.arvo.network/enter', {
81+ method: 'GET',
82+ headers: {'Content-Type': 'application/json'}
83+ })
84+ .then(res =>{
85+ if (!res.ok) {
86+ throw 'Error response from shore api.';
87+ }
88+ return res.json();
89+ })
90+ .then(data => {
91+ postReq(data.url + '/~/login', {password: data.code, redirect: '/'});
92+ })
93+ .catch(e => setCount(0));
94+ }}
95+ >
96+ {available ? 'Try now' : 'No trial comets available, try again later'}
97+ </a>
98+ </div>
99+ </SingleColumn>
100+ <Footer />
101+ </Container>
102+ );
103+}