-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
everything.tsx.txt
124 lines (102 loc) · 2.87 KB
/
everything.tsx.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import { Await } from "../src/await.js";
import { Dynamic } from "../src/dynamic.js";
import { For } from "../src/for.js";
import { h } from "../src/jsx.js";
import { Maybe } from "../src/maybe.js";
import { Accessor, createSignal, untrack } from "../src/primitives.js";
import { createMemo, createStore } from "../src/reactivity.js";
const [age, setAge] = createSignal(14, { name: "age" });
const [name, setName] = createSignal("Zachary", { name: "name" });
const plural = createMemo(() => (age() === 1 ? "" : "s"), { name: "plural" });
const isPlural = createMemo(() => age() !== 1, { name: "isPlural" });
const numbers = createStore<number[]>([], { name: "number list" });
function wait() {
return new Promise<any>((resolve, reject) => {
setTimeout(() => {
if (Math.random() < 0.3) {
reject(
new Error(
`passcode ${(+Math.random().toString().slice(2, 12)).toString(
36
)} is bad`
)
);
} else {
resolve(Math.floor(1000000 * Math.random()));
}
}, Math.random() * 5000);
});
}
function makeWaitSignal() {
const [get, set] = createSignal(wait(), { name: "wait signal" });
setInterval(() => {
set(wait());
}, 10000);
return get;
}
function NumberCard(number: number, index: Accessor<number>) {
return (
<div style={{ backgroundColor: "black", color: "white" }}>
<h1>
My key is {number} at index {index}.
</h1>
<p>{Math.random()}</p>
<button on:click={() => numbers.splice(untrack(index), 1)}>
remove it
</button>
<Await
value={makeWaitSignal()}
then={(value) => <>{value}</>}
catch={() => <>error</>}
pending={<>pending...</>}
/>
</div>
);
}
const [quote, setQuote] = createSignal(
<blockquote>{Math.random()}</blockquote>,
{ name: "blockquote" }
);
setTimeout(() => {
setQuote(<p>abc</p>);
setTimeout(() => {
setQuote(<h3>another heading</h3>);
}, 5000);
}, 5000);
document.body.appendChild(
<>
<input bind:value={[name, setName]} />
<input bind:numeric={[age, setAge]} />
<h1>
{name} is {age} year{plural} old.
</h1>
<Maybe when={isPlural}>
<p>not plural L</p>
</Maybe>
<Dynamic>{quote}</Dynamic>
<button on:click={() => numbers.push(Math.random())}>add at end</button>
<br />
<button on:click={() => numbers.unshift(Math.random())}>
add at front
</button>
<br />
<button
on:click={() => {
const index = Math.floor(numbers.length * Math.random());
console.log(index);
numbers.splice(index, 1);
}}
>
remove at random
</button>
<div
style={{
display: "grid",
gridTemplateColumns: "repeat(auto-fill, minmax(min(400px, 100%), 1fr))",
gap: "0.5em",
}}
>
<For each={numbers}>{NumberCard}</For>
</div>
</>
);