Skip to content

Commit 9bb18e1

Browse files
committed
fibo
1 parent b708c5b commit 9bb18e1

File tree

6 files changed

+107
-7
lines changed

6 files changed

+107
-7
lines changed

app/components/player/index.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ export type PlayerState = {
1717
timers: PlayerTimers;
1818
status: PlayerStatus;
1919
speed: PlayerSpeed;
20+
iters: number;
2021
};
2122

2223
type PlayerProps = {
2324
title: string;
25+
enabled: boolean;
2426
children: ReactNode;
2527
done?: boolean;
2628
onChange: (state: PlayerState) => void;
@@ -29,12 +31,14 @@ type PlayerProps = {
2931
export const InitialPlayerState: PlayerState = {
3032
status: "not_started",
3133
speed: "4x",
34+
iters: 0,
3235
timers: {
3336
start: "",
3437
end: "",
3538
duration: 0,
3639
},
3740
};
41+
3842
const speed_map = {
3943
"1x": 2000,
4044
"2x": 1000,
@@ -48,6 +52,7 @@ export const Player: FC<PlayerProps> = ({
4852
title,
4953
children,
5054
done,
55+
enabled,
5156
onChange,
5257
}) => {
5358
const [state, setState] = useState<PlayerState>(InitialPlayerState);
@@ -87,8 +92,10 @@ export const Player: FC<PlayerProps> = ({
8792
const timer = setInterval(() => {
8893
const new_state: PlayerState = {
8994
...state,
95+
iters: state.iters + 1,
9096
timers: { ...state.timers, duration: state.timers.duration + 100 },
9197
};
98+
9299
setState(new_state);
93100
onChange(new_state);
94101
}, speed_map[state.speed]);
@@ -110,8 +117,7 @@ export const Player: FC<PlayerProps> = ({
110117
<Section>{title}</Section>
111118
<Section>
112119
{state.status && <Text>Status: {state.status}</Text>}
113-
{state.timers.start && <Text>Start: {state.timers.start}</Text>}
114-
{state.timers.end && <Text>End: {state.timers.end}</Text>}
120+
<Text margin={{ left: "4" }}>iterations: {state.iters}</Text>
115121
<Text margin={{ left: "4" }}>
116122
Duration: {(state.timers.duration / 1000).toFixed(2)}
117123
</Text>
@@ -139,7 +145,10 @@ export const Player: FC<PlayerProps> = ({
139145
/>
140146
</Button>
141147
)}
142-
<Button onClick={handleOnPlay} disabled={state.status != "not_started"}>
148+
<Button
149+
onClick={handleOnPlay}
150+
disabled={state.status != "not_started" || !enabled}
151+
>
143152
<Icon
144153
figure="PlayIcon"
145154
colors={{ text: { color: "green", weight: "200" } }}

app/routes/interviews.fibonacci.tsx

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import React, { useState, useEffect } from "react";
2+
import { Text } from "@bennie-ui/text";
3+
import { Input } from "@bennie-ui/inputs";
4+
import { Section } from "@bennie-ui/section";
5+
import { Player, PlayerState, InitialPlayerState } from "../components/player";
6+
7+
export default function Index() {
8+
const [max_number, set_max_number] = useState(20);
9+
const [state, setState] = useState<PlayerState>(InitialPlayerState);
10+
const [enabled, is_enabled] = useState(max_number > 0);
11+
12+
const [data, setData] = useState<number[]>([1]);
13+
const [done, is_done] = useState(false);
14+
15+
const onChange = (state: PlayerState) => {
16+
setState(state);
17+
18+
if (data.length - 1 >= 100) {
19+
is_done(true);
20+
return;
21+
}
22+
23+
let new_value = 1;
24+
25+
if (data.length >= 2) {
26+
new_value = data[data.length - 1] + data[data.length - 2];
27+
}
28+
29+
setData([...data, new_value]);
30+
};
31+
32+
return (
33+
<Player
34+
title="fibonnacci"
35+
onChange={onChange}
36+
done={done}
37+
enabled={enabled}
38+
>
39+
{state.status === "not_started" && (
40+
<Section>
41+
<Text>
42+
Please enter a max-number (max: 1000) in the input field below, and
43+
hit play
44+
</Text>
45+
<Input
46+
name="max-number"
47+
value={max_number.toString()}
48+
onChange={(event) => {
49+
let value = parseInt(event.target.value);
50+
51+
if (isNaN(value)) {
52+
value = 0;
53+
}
54+
55+
is_enabled(value != 0 && value <= 100);
56+
set_max_number(value);
57+
}}
58+
/>
59+
</Section>
60+
)}
61+
62+
{state.status === "running" && (
63+
<Section padding={{ all: "4" }}>
64+
<Text>Running...</Text>
65+
<Section grid={{ templates: { columns: "5" }, gap: "3" }}>
66+
{data.map((it, idx) => (
67+
<Section
68+
key={idx}
69+
align="center"
70+
rounding={{ all: "md" }}
71+
border={{ style: "solid", width: { all: "1" } }}
72+
colors={{ background: { color: "blue", weight: "400" } }}
73+
>
74+
{it}
75+
</Section>
76+
))}
77+
</Section>
78+
</Section>
79+
)}
80+
</Player>
81+
);
82+
}

app/routes/interviews.fizzbuzz.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default function Index() {
3434
};
3535

3636
return (
37-
<Player title="fizzbuzz" onChange={onChange} done={done}>
37+
<Player title="fizzbuzz" onChange={onChange} done={done} enabled={true}>
3838
{state.status === "not_started" &&
3939
"I am just a fizzbuzz player, hit play to see me print."}
4040
{state.status === "running" && (

app/routes/interviews.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
import React from "react";
2-
import { Page } from "../components/page";
32
import { Outlet } from "@remix-run/react";
3+
import { Link } from "@bennie-ui/text";
4+
import { Page } from "../components/page";
5+
import { Section } from "@bennie-ui/section";
46

57
export default function Index() {
68
return (
79
<Page>
8-
<h1>Interviews</h1>
10+
<Link href="/interviews" colors={{ text: { color: "white" } }}>
11+
Interviews
12+
</Link>
13+
<Section grid={{ templates: { columns: "8" }, gap: "1" }}>
14+
<Link href="/interviews/fizzbuzz">FizzBuzz</Link>
15+
<Link href="/interviews/fibonacci">Fibonacci</Link>
16+
</Section>
917
<Outlet />
1018
</Page>
1119
);

bun.lockb

7.82 KB
Binary file not shown.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
},
1616
"workspaces": [
1717
"packages/bennie-ui/libraries/*",
18-
"packages/bennie-ui/components/primitives/*"
18+
"packages/bennie-ui/components/primitives/*",
19+
"packages/bennie-ui/components/composites/forms/*"
1920
],
2021
"dependencies": {
2122
"@heroicons/react": "^2.1.3",

0 commit comments

Comments
 (0)