Skip to content

Commit

Permalink
refactor: use third party component for sliders
Browse files Browse the repository at this point in the history
  • Loading branch information
jackcasstlesjones committed Dec 13, 2024
1 parent 49af7fa commit 06543cb
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 18 deletions.
45 changes: 45 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"clsx": "^2.1.1",
"next": "15.0.3",
"plotly.js": "^2.35.2",
"rc-slider": "^11.1.7",
"react": "19.0.0-rc-66855b96-20241106",
"react-dom": "19.0.0-rc-66855b96-20241106",
"react-plotly.js": "^2.6.0",
Expand Down
3 changes: 2 additions & 1 deletion src/app/moods/components/MoodsDisplay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ export default function MoodsDisplay() {
adrenaline: 1,
});

const handleChange = (value: number, chem: string) => {
const handleChange = (value: number | number[], chem: string) => {
setNeuroState((prev) => ({
...prev,
[chem]: value,
}));
console.log(neuroState);
};

const submitMood = () => {
Expand Down
31 changes: 17 additions & 14 deletions src/app/moods/components/Slider.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { NeurochemState } from "./MoodsDisplay";
import Slider from "rc-slider";
import "rc-slider/assets/index.css";

interface SliderProps {
chem: "dopamine" | "serotonin" | "adrenaline";
Expand All @@ -9,12 +11,12 @@ interface SliderProps {
) => void;
neuroState: NeurochemState;
}
export function Slider({ chem, label, handleChange, neuroState }: SliderProps) {
const normaliseValue = (value: unknown): number => {
if (value instanceof Date) return value.getTime();
if (typeof value === "number") return value;
return 1;
};
export function MoodSlider({ chem, label, handleChange }: SliderProps) {
// const normaliseValue = (value: unknown): number => {
// if (value instanceof Date) return value.getTime();
// if (typeof value === "number") return value;
// return 1;
// };

const renderText =
label === "Step 2. How much effort does it take?" ? (
Expand All @@ -34,14 +36,15 @@ export function Slider({ chem, label, handleChange, neuroState }: SliderProps) {
<label htmlFor={chem} className="text-white text-md mb-4">
{label}
</label>
<input
id={chem}
type="range"
min="1"
max="10"
value={normaliseValue(neuroState[chem])}
onChange={(e) => handleChange(parseInt(e.target.value), chem)}
className="w-full m-auto range-slider"
<Slider
// id={chem}
onChange={(value) => handleChange(value as number, chem)} // Ensure the value is a number
styles={{
rail: { backgroundColor: "#893FFC" },
track: { backgroundColor: "#ffc100" },
}}
min={1}
max={10}
/>
<div className="flex justify-between mt-4 w-full m-auto">
{renderText}
Expand Down
9 changes: 6 additions & 3 deletions src/app/moods/components/SliderBox.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Slider } from "./Slider";
import { MoodSlider } from "./Slider";
import { NeurochemState } from "./MoodsDisplay";

interface SliderBoxProps {
Expand All @@ -18,7 +18,10 @@ const sliders: {
{ chem: "adrenaline", label: "Step 3. Does it feel worth doing?" },
];

export default function SliderBox({ handleChange, neuroState }: SliderBoxProps) {
export default function SliderBox({
handleChange,
neuroState,
}: SliderBoxProps) {
return (
<form className="flex flex-col gap-4 w-10/12 m-auto">
<fieldset>
Expand All @@ -27,7 +30,7 @@ export default function SliderBox({ handleChange, neuroState }: SliderBoxProps)
</legend>
{sliders.map((slider) => {
return (
<Slider
<MoodSlider
key={slider.chem}
chem={slider.chem}
label={slider.label}
Expand Down

0 comments on commit 06543cb

Please sign in to comment.