Skip to content

Commit

Permalink
Switch to preact
Browse files Browse the repository at this point in the history
  • Loading branch information
marlonbaeten committed May 28, 2024
1 parent 599542f commit da2a380
Show file tree
Hide file tree
Showing 17 changed files with 582 additions and 380 deletions.
24 changes: 15 additions & 9 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ervaringskompas</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/svg+xml" href="./src/icon.svg">
<meta name="description"
content="Welke ervaring heb je opgedaan met deze beroepsactiviteit in de praktijk (in een huisartsgeneekundige setting)?">
<title>Ervaringskompas</title>
</head>

<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>

</html>
7 changes: 2 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,12 @@
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
"preact": "^10.22.0"
},
"devDependencies": {
"@types/react": "^18.2.66",
"@types/react-dom": "^18.2.22",
"@preact/preset-vite": "^2.8.2",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"@vitejs/plugin-react": "^4.2.1",
"eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.6",
Expand Down
5 changes: 3 additions & 2 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ import Table from './Table';
import usePersistence, { upload } from './usePersistence';
import { copyLink, downloadFile, saveStateLocal } from './util';

export default function App(): JSX.Element {
export default function App() {
const { state, select, mark, note, setState } = usePersistence();

return (
<>
<h1>Ervaringskompas</h1>

<p>
Welke ervaring heb je opgedaan met deze beroepsactiviteit in de praktijk
(in een huisartsgeneekundige setting)?
Expand Down Expand Up @@ -42,7 +43,7 @@ export default function App(): JSX.Element {
<input
type="file"
id="upload"
onChange={(e) => upload(e.target, setState)}
onChange={(e) => upload(e.target as HTMLInputElement, setState)}
/>
</label>
</p>
Expand Down
6 changes: 1 addition & 5 deletions src/CompetenceResult.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { MAX_LEVEL, State } from './usePersistence';

export default function CompetenceResult({
state,
}: {
state: State;
}): JSX.Element {
export default function CompetenceResult({ state }: { state: State }) {
const results = state.competences.map((competence, index) => {
const [score, max] = state.themes.reduce(
(acc, theme) => {
Expand Down
4 changes: 2 additions & 2 deletions src/ExperienceRow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export default function ExperienceRow({
selected,
onMark,
onSelect,
}: ExperienceRowProps): JSX.Element {
}: ExperienceRowProps) {
return (
<tr className={`selectable ${marked ? 'marked' : ''}`}>
<th
Expand Down Expand Up @@ -68,7 +68,7 @@ export default function ExperienceRow({
id={`check-${themeIndex}-${index}`}
name={`check-${themeIndex}-${index}`}
checked={marked}
onChange={(e) => onMark(e.target.checked)}
onChange={(e) => onMark((e.target as HTMLInputElement).checked)}
/>
</label>
</td>
Expand Down
2 changes: 1 addition & 1 deletion src/Marked.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ interface MarkedProps {
mark: Mark;
}

export default function Marked({ state, mark }: MarkedProps): JSX.Element {
export default function Marked({ state, mark }: MarkedProps) {
const items = state.themes
.map((theme, themeIndex) =>
theme.experiences.map((experience, index) => {
Expand Down
8 changes: 2 additions & 6 deletions src/Results.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ interface ResultProps {
note: (content: string) => void;
}

export default function Results({
state,
mark,
note,
}: ResultProps): JSX.Element {
export default function Results({ state, mark, note }: ResultProps) {
return (
<>
<h2>Ervaring</h2>
Expand All @@ -37,7 +33,7 @@ export default function Results({
<h2>Notities</h2>
<textarea
value={state.notes}
onChange={(event) => note(event.target.value)}
onChange={(event) => note((event.target as HTMLTextAreaElement).value)}
/>
</>
);
Expand Down
6 changes: 1 addition & 5 deletions src/Table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ interface TableProps {
select: Select;
}

export default function Table({
state,
select,
mark,
}: TableProps): JSX.Element {
export default function Table({ state, select, mark }: TableProps) {
return (
<table className="form">
<thead>
Expand Down
2 changes: 1 addition & 1 deletion src/ThemeResult.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { MAX_LEVEL, State } from './usePersistence';

export default function ThemeResult({ state }: { state: State }): JSX.Element {
export default function ThemeResult({ state }: { state: State }) {
let totalScore = 0;
let totalMax = 0;

Expand Down
7 changes: 3 additions & 4 deletions src/ThemeSection.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Fragment } from 'react';
import { Mark, Select, Theme } from './usePersistence';
import ExperienceRow from './ExperienceRow';

Expand All @@ -16,9 +15,9 @@ export default function ThemeSection({
levels,
select,
mark,
}: ThemeProps): JSX.Element {
}: ThemeProps) {
return (
<Fragment>
<>
<tr>
<th
style={{
Expand Down Expand Up @@ -47,6 +46,6 @@ export default function ThemeSection({
onSelect={(level: number) => select(themeIndex, index, level)}
/>
))}
</Fragment>
</>
);
}
2 changes: 1 addition & 1 deletion src/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@
},
{
"name": "Palliatieve en terminale zorg",
"color": "#f36421",
"color": "#f89c1c",
"experiences": [
{
"name": "Voert een gesprek over het naderend levenseinde.",
Expand Down
103 changes: 103 additions & 0 deletions src/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 2 additions & 9 deletions src/main.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import { render } from 'preact';
import App from './App.tsx';
import './index.css';

const element = document.getElementById('root')!;

ReactDOM.createRoot(element).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
render(<App />, document.getElementById('root')!);
7 changes: 2 additions & 5 deletions src/usePersistence.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Reducer, useReducer } from 'react';
import { useReducer } from 'preact/hooks';
import rawData from './data.json';
import { decode } from './util';

Expand Down Expand Up @@ -121,10 +121,7 @@ function initialState(): State {
}

export default function usePersistence(): PersistenceState {
const [state, dispatch] = useReducer<Reducer<State, Action>>(
reducer,
initialState()
);
const [state, dispatch] = useReducer<State, Action>(reducer, initialState());

return {
state,
Expand Down
1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"jsxImportSource": "preact",

/* Linting */
"strict": true,
Expand Down
8 changes: 4 additions & 4 deletions vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite';
import preact from '@preact/preset-vite';

// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
})
plugins: [preact()],
});
Loading

0 comments on commit da2a380

Please sign in to comment.