Skip to content

Commit ef34bfb

Browse files
committed
self review
1 parent 33f3ee3 commit ef34bfb

File tree

5 files changed

+29
-21
lines changed

5 files changed

+29
-21
lines changed

src/js/bun.lockb

-1.81 KB
Binary file not shown.

src/js/package.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
{
22
"type": "module",
3-
"version": "1.0.0",
43
"scripts": {
54
"format": "prettier --write . && eslint --fix",
65
"check": "prettier --check . && eslint"
76
},
87
"devDependencies": {
9-
"@types/react": "^18.2.48",
10-
"@types/react-dom": "^18.2.18",
118
"eslint": "^9.13.0",
129
"eslint-plugin-react": "^7.37.1",
1310
"prettier": "^3.3.3",

src/js/src/components.ts

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import type { DjangoFormProps, HttpRequestProps } from "./types";
22
import { useEffect } from "preact/hooks";
3-
import { render, createElement } from "preact";
3+
import { type ComponentChildren, render, createElement } from "preact";
44
/**
55
* Interface used to bind a ReactPy node to React.
66
*/
7-
export function bind(node) {
7+
export function bind(node: HTMLElement | Element | Node) {
88
return {
9-
create: (type, props, children) => createElement(type, props, ...children),
10-
render: (element) => {
9+
create: (
10+
type: string,
11+
props: Record<string, unknown>,
12+
children: ComponentChildren[],
13+
) => createElement(type, props, ...children),
14+
render: (element: HTMLElement | Element | Node) => {
1115
render(element, node);
1216
},
1317
unmount: () => render(null, node),
@@ -22,26 +26,29 @@ export function DjangoForm({
2226
const form = document.getElementById(formId) as HTMLFormElement;
2327

2428
// Submission event function
25-
const onSubmitEvent = (event) => {
29+
const onSubmitEvent = (event: Event) => {
2630
event.preventDefault();
2731
const formData = new FormData(form);
2832

2933
// Convert the FormData object to a plain object by iterating through it
3034
// If duplicate keys are present, convert the value into an array of values
3135
const entries = formData.entries();
3236
const formDataArray = Array.from(entries);
33-
const formDataObject = formDataArray.reduce((acc, [key, value]) => {
34-
if (acc[key]) {
35-
if (Array.isArray(acc[key])) {
36-
acc[key].push(value);
37+
const formDataObject = formDataArray.reduce<Record<string, unknown>>(
38+
(acc, [key, value]) => {
39+
if (acc[key]) {
40+
if (Array.isArray(acc[key])) {
41+
acc[key].push(value);
42+
} else {
43+
acc[key] = [acc[key], value];
44+
}
3745
} else {
38-
acc[key] = [acc[key], value];
46+
acc[key] = value;
3947
}
40-
} else {
41-
acc[key] = value;
42-
}
43-
return acc;
44-
}, {});
48+
return acc;
49+
},
50+
{},
51+
);
4552

4653
onSubmitCallback(formDataObject);
4754
};

src/js/src/mount.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export function mountComponent(
7878
if (client.mountElement) {
7979
render(<Layout client={client} />, client.mountElement);
8080
} else {
81-
console.error("Mount element is not defined. Cannot render the component.");
81+
console.error(
82+
"ReactPy mount element is undefined, cannot render the component!",
83+
);
8284
}
8385
}

src/js/tsconfig.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"isolatedModules": true,
1111
"jsx": "react-jsx",
1212
"jsxImportSource": "preact",
13-
"lib": ["ESNext"],
13+
"lib": ["ESNext", "DOM", "DOM.Iterable"],
1414
"module": "Preserve",
1515
"moduleDetection": "force",
1616
"moduleResolution": "bundler",
@@ -19,7 +19,9 @@
1919
"noUnusedLocals": true,
2020
"paths": {
2121
"react": ["./node_modules/preact/compat/"],
22-
"react-dom": ["./node_modules/preact/compat/"]
22+
"react-dom": ["./node_modules/preact/compat/"],
23+
"react-dom/*": ["./node_modules/preact/compat/*"],
24+
"react/jsx-runtime": ["./node_modules/preact/jsx-runtime"]
2325
},
2426
"resolveJsonModule": true,
2527
"skipLibCheck": true,

0 commit comments

Comments
 (0)