mirror of
https://github.com/TheRealOwenRees/chess-scribe-website.git
synced 2026-07-23 09:56:57 +00:00
update header fields on typing
This commit is contained in:
@@ -1,11 +1,13 @@
|
|||||||
|
import type { ChangeEvent } from "react";
|
||||||
import FormField from "#/components/FormField.tsx";
|
import FormField from "#/components/FormField.tsx";
|
||||||
import type { IHeader } from "#/interfaces.ts";
|
import type { IHeader } from "#/interfaces.ts";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
headers: IHeader;
|
headers: IHeader;
|
||||||
|
updateHeaders: (e: ChangeEvent<HTMLInputElement>, fieldName: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const CustomHeaders = ({ headers }: IProps) => {
|
const CustomHeaders = ({ headers, updateHeaders }: IProps) => {
|
||||||
return (
|
return (
|
||||||
<div className="my-4 w-full">
|
<div className="my-4 w-full">
|
||||||
<details className="bg-(--neutral-content)/20 p-4 rounded-lg">
|
<details className="bg-(--neutral-content)/20 p-4 rounded-lg">
|
||||||
@@ -18,10 +20,30 @@ const CustomHeaders = ({ headers }: IProps) => {
|
|||||||
</summary>
|
</summary>
|
||||||
<div>
|
<div>
|
||||||
<form className="grid place-items-center gap-4 sm:grid-cols-2 mt-2">
|
<form className="grid place-items-center gap-4 sm:grid-cols-2 mt-2">
|
||||||
<FormField fieldName="title" type="text" headers={headers} />
|
<FormField
|
||||||
<FormField fieldName="subtitle" type="text" headers={headers} />
|
fieldName="title"
|
||||||
<FormField fieldName="date" type="text" headers={headers} />
|
type="text"
|
||||||
<FormField fieldName="author" type="text" headers={headers} />
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="subtitle"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="date"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="author"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
import { useChessGame } from "#/hooks/useChessGame.ts";
|
import type { ChangeEvent } from "react";
|
||||||
import type { IHeader } from "#/interfaces.ts";
|
import type { IHeader } from "#/interfaces.ts";
|
||||||
|
|
||||||
export interface IFormField {
|
export interface IFormField {
|
||||||
fieldName: string;
|
fieldName: string;
|
||||||
type: string;
|
type: string;
|
||||||
headers: IHeader;
|
headers: IHeader;
|
||||||
|
updateHeaders: (e: ChangeEvent<HTMLInputElement>, fieldName: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const FormField = ({ fieldName, type, headers }: IFormField) => {
|
const FormField = ({ fieldName, type, headers, updateHeaders }: IFormField) => {
|
||||||
const { updateHeaders } = useChessGame();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<label htmlFor={fieldName} className="text-sm capitalize">
|
<label htmlFor={fieldName} className="text-sm capitalize">
|
||||||
|
|||||||
@@ -1,35 +1,100 @@
|
|||||||
|
import type { ChangeEvent } from "react";
|
||||||
import FormField from "#/components/FormField.tsx";
|
import FormField from "#/components/FormField.tsx";
|
||||||
import type { IHeader } from "#/interfaces.ts";
|
import type { IHeader } from "#/interfaces.ts";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
headers: IHeader;
|
headers: IHeader;
|
||||||
|
updateHeaders: (e: ChangeEvent<HTMLInputElement>, fieldName: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const HeaderFields = ({ headers }: IProps) => {
|
const HeaderFields = ({ headers, updateHeaders }: IProps) => {
|
||||||
console.log(headers);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="my-4 w-full">
|
<div className="my-4 w-full">
|
||||||
<details className="bg-(--neutral-content)/20 p-4 rounded-lg">
|
<details className="bg-(--neutral-content)/15 p-4 rounded-lg">
|
||||||
<summary>
|
<summary>
|
||||||
Headers
|
Headers
|
||||||
<p className="text-sm font-normal">Edit the game PGN headers</p>
|
<p className="text-sm font-normal">Edit the game PGN headers</p>
|
||||||
</summary>
|
</summary>
|
||||||
<div>
|
<div>
|
||||||
<form className="grid place-items-center gap-4 sm:grid-cols-2 mt-2">
|
<form className="grid place-items-center gap-4 sm:grid-cols-2 mt-2">
|
||||||
<FormField fieldName="event" type="text" headers={headers} />
|
<FormField
|
||||||
<FormField fieldName="site" type="text" headers={headers} />
|
fieldName="event"
|
||||||
<FormField fieldName="date" type="text" headers={headers} />
|
type="text"
|
||||||
<FormField fieldName="round" type="text" headers={headers} />
|
headers={headers}
|
||||||
<FormField fieldName="white" type="text" headers={headers} />
|
updateHeaders={updateHeaders}
|
||||||
<FormField fieldName="black" type="text" headers={headers} />
|
/>
|
||||||
<FormField fieldName="result" type="text" headers={headers} />
|
<FormField
|
||||||
<FormField fieldName="eco" type="text" headers={headers} />
|
fieldName="site"
|
||||||
<FormField fieldName="whiteElo" type="text" headers={headers} />
|
type="text"
|
||||||
<FormField fieldName="blackElo" type="text" headers={headers} />
|
headers={headers}
|
||||||
<FormField fieldName="plyCount" type="text" headers={headers} />
|
updateHeaders={updateHeaders}
|
||||||
<FormField fieldName="eventDate" type="text" headers={headers} />
|
/>
|
||||||
<FormField fieldName="source" type="text" headers={headers} />
|
<FormField
|
||||||
|
fieldName="date"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="round"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="white"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="black"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="result"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="eco"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="whiteElo"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="blackElo"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="plyCount"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="eventDate"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
fieldName="source"
|
||||||
|
type="text"
|
||||||
|
headers={headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ export const useChessGame = () => {
|
|||||||
...getHeaders(pgnString),
|
...getHeaders(pgnString),
|
||||||
title: "",
|
title: "",
|
||||||
subtitle: "",
|
subtitle: "",
|
||||||
|
author: "",
|
||||||
};
|
};
|
||||||
gameDispatch({
|
gameDispatch({
|
||||||
type: "SET_GAME",
|
type: "SET_GAME",
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const Chessboard = () => {
|
|||||||
handleToggleClock,
|
handleToggleClock,
|
||||||
handleToggleDiagram,
|
handleToggleDiagram,
|
||||||
handlePlyChange,
|
handlePlyChange,
|
||||||
|
updateHeaders,
|
||||||
} = useChessGame();
|
} = useChessGame();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -101,8 +102,14 @@ const Chessboard = () => {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<HeaderFields headers={gameState.headers} />
|
<HeaderFields
|
||||||
<CustomHeaders headers={gameState.headers} />
|
headers={gameState.headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
|
<CustomHeaders
|
||||||
|
headers={gameState.headers}
|
||||||
|
updateHeaders={updateHeaders}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
&:focus {
|
&:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
border-color: var(--accent);
|
border-color: var(--accent);
|
||||||
|
background-color: var(--header-bg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user