|
|
@@ -0,0 +1,62 @@
|
|
|
+import { TextField, Typography } from "@mui/material";
|
|
|
+import React, { ReactNode, SetStateAction, useContext, useState } from "react";
|
|
|
+
|
|
|
+interface TimeConverterMembers {
|
|
|
+ firstNumber: string;
|
|
|
+ secondNumber: string;
|
|
|
+}
|
|
|
+
|
|
|
+const TimeConverterContext = React.createContext<TimeConverterMembers>(
|
|
|
+ {} as TimeConverterMembers
|
|
|
+);
|
|
|
+
|
|
|
+const TimeConverterContextUpdate = React.createContext<
|
|
|
+ React.Dispatch<SetStateAction<TimeConverterMembers>>
|
|
|
+>({} as React.Dispatch<SetStateAction<TimeConverterMembers>>);
|
|
|
+
|
|
|
+interface Props {
|
|
|
+ children: ReactNode;
|
|
|
+}
|
|
|
+
|
|
|
+export function TimeConverterStateProvider({ children }: Props) {
|
|
|
+ const [currentMembers, setCurrentMembers] = useState<TimeConverterMembers>({
|
|
|
+ firstNumber: "7",
|
|
|
+ secondNumber: "8",
|
|
|
+ });
|
|
|
+ return (
|
|
|
+ <TimeConverterContext.Provider value={currentMembers}>
|
|
|
+ <TimeConverterContextUpdate.Provider value={setCurrentMembers}>
|
|
|
+ {children}
|
|
|
+ </TimeConverterContextUpdate.Provider>
|
|
|
+ </TimeConverterContext.Provider>
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+function TimeConverter() {
|
|
|
+ const members = useContext(TimeConverterContext);
|
|
|
+ const setMembers = useContext(TimeConverterContextUpdate);
|
|
|
+ console.debug("TimeConverter rerender! Members: " + members.firstNumber);
|
|
|
+
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ <Typography variant="h3">Time converter!</Typography>
|
|
|
+ <TextField
|
|
|
+ id="firstNumber"
|
|
|
+ variant="outlined"
|
|
|
+ defaultValue={members.firstNumber}
|
|
|
+ onChange={(e) => {
|
|
|
+ setMembers({ ...members, firstNumber: e.target.value });
|
|
|
+ console.debug(members);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <TextField
|
|
|
+ id="secondNumber"
|
|
|
+ variant="outlined"
|
|
|
+ value={members.firstNumber}
|
|
|
+ />
|
|
|
+ <TextField id="nah" />
|
|
|
+ </>
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+export default TimeConverter;
|