Skip to content

Commit 9087453

Browse files
Merge pull request #152 from Justin-MacIntosh/screener-frontend-ts
feat: Introduced Typescript typing for Screener FrontEnd
2 parents 1e26935 + a3ffda3 commit 9087453

File tree

16 files changed

+113
-36
lines changed

16 files changed

+113
-36
lines changed

screener-frontend/package-lock.json

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

screener-frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"tailwindcss-animate": "^1.0.7"
2222
},
2323
"devDependencies": {
24+
"@types/lodash.debounce": "^4.0.9",
2425
"@types/node": "^22.15.18",
2526
"vite": "^6.3.5",
2627
"vite-plugin-solid": "^2.11.6"

screener-frontend/src/EligibilityResults.jsx renamed to screener-frontend/src/EligibilityResults.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import { Switch, Match, For } from "solid-js";
1+
import { Switch, Match, For, Accessor } from "solid-js";
2+
3+
import type { ResultDetail } from "./api/types";
4+
25
import checkIcon from "./assets/images/checkIcon.svg";
36
import questionIcon from "./assets/images/questionIcon.svg";
47
import xIcon from "./assets/images/xIcon.svg";
58

6-
export default function EligibilityResults({ results }) {
9+
export default function EligibilityResults({ results }: { results: Accessor<ResultDetail[] | undefined> }) {
710
console.log(results());
811
return (
912
<div class="my-2 mx-12">
@@ -48,7 +51,7 @@ export default function EligibilityResults({ results }) {
4851
<img src={xIcon} alt="" class="inline w-4 mr-2" />
4952
</Match>
5053
</Switch>
51-
<span className="text-xs">{check.displayName}</span>
54+
<span class="text-xs">{check.displayName}</span>
5255
</p>
5356
)}
5457
</For>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
export default function ErrorPage({ error }) {
1+
export default function ErrorPage({ error }: { error: any }) {
22
console.log(error);
33
return (
4-
<div className="py-24 flex-col justify-center h-screen items-center">
4+
<div class="py-24 flex-col justify-center h-screen items-center">
55
<h1 class="text-center text-xl">
66
Sorry, there was an error loading the requested screener.
77
</h1>
Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import { onMount } from "solid-js";
2-
import { Form } from "@bpmn-io/form-js-viewer";
2+
33
import debounce from "lodash.debounce";
4+
import { Form } from "@bpmn-io/form-js-viewer";
5+
import { State } from "@bpmn-io/form-js-viewer/dist/types/Form";
6+
47
import "@bpmn-io/form-js/dist/assets/form-js.css";
5-
import { useParams } from "@solidjs/router";
68

7-
function FormRenderer({ schema, submitForm }) {
8-
let container;
9+
10+
function FormRenderer(
11+
{ schema, submitForm }:
12+
{ schema: { [key: string]: any; }, submitForm: (data: any) => void }
13+
) {
14+
let container: Element | null = null;
915

1016
onMount(() => {
11-
const form = new Form({ container });
17+
const form: Form = new Form({ container });
1218

1319
const debouncedSubmit = debounce((data) => {
1420
submitForm(data);
@@ -17,7 +23,7 @@ function FormRenderer({ schema, submitForm }) {
1723
form
1824
.importSchema(schema)
1925
.then(() => {
20-
form.on("changed", (event) => {
26+
form.on("changed", (event: State) => {
2127
debouncedSubmit(event.data);
2228
});
2329
})
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default function Home() {
22
return (
3-
<div className="py-24 flex-col justify-center h-screen items-center">
3+
<div class="py-24 flex-col justify-center h-screen items-center">
44
<h1 class="text-center text-xl">Benefit Decision Toolkit</h1>
55
</div>
66
);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default function Loading() {
22
return (
3-
<div className="py-24 flex-col justify-center h-screen items-center">
3+
<div class="py-24 flex-col justify-center h-screen items-center">
44
<h1 class="text-center text-xl">Loading Screener</h1>
55
<div class="mt-8 flex items-center justify-center h-20">
66
<div class="w-10 h-10 border-4 border-blue-500 border-t-transparent rounded-full animate-spin"></div>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default function NotFound() {
22
return (
3-
<div className="py-24 flex-col justify-center h-screen items-center">
3+
<div class="py-24 flex-col justify-center h-screen items-center">
44
<h1 class="text-center text-xl">404 Screener Not Found</h1>
55
</div>
66
);
Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import { createSignal, createResource, ErrorBoundary } from "solid-js";
22
import { useParams } from "@solidjs/router";
3+
34
import FormRenderer from "./FormRenderer";
4-
import { fetchScreenerData, getDecisionResult } from "./api/api";
55
import Loading from "./Loading";
66
import ErrorPage from "./Error";
77
import EligibilityResults from "./EligibilityResults";
88

9+
import { fetchScreenerData, getDecisionResult } from "./api/api";
10+
11+
import type { ResultDetail, Screener } from "./api/types";
12+
913
export default function Screener() {
1014
const params = useParams();
1115

12-
const [data] = createResource(() => fetchScreenerData(params.screenerId));
13-
const [results, setResults] = createSignal();
16+
const [screener] = createResource<Screener>(() => fetchScreenerData(params.screenerId));
17+
const [results, setResults] = createSignal<ResultDetail[]>();
1418

15-
const submitForm = async (data) => {
19+
const submitForm = async (data: any) => {
1620
try {
1721
let results = await getDecisionResult(params.screenerId, data);
1822
setResults(results);
@@ -27,17 +31,17 @@ export default function Screener() {
2731
<ErrorBoundary
2832
fallback={(error, reset) => <ErrorPage error={error}></ErrorPage>}
2933
>
30-
{data.loading && <Loading></Loading>}
31-
{data() && (
32-
<div className="flex flex-col lg:flex-row">
33-
<div className="flex-1 overflow-y-auto p-4">
34+
{screener.loading && <Loading></Loading>}
35+
{screener() && (
36+
<div class="flex flex-col lg:flex-row">
37+
<div class="flex-1 overflow-y-auto p-4">
3438
<FormRenderer
35-
schema={data().formSchema}
39+
schema={screener()?.formSchema || {}}
3640
submitForm={submitForm}
3741
></FormRenderer>
3842
</div>
3943

40-
<div className="flex-1 overflow-y-auto p-4">
44+
<div class="flex-1 overflow-y-auto p-4">
4145
<EligibilityResults results={results}></EligibilityResults>
4246
</div>
4347
</div>

0 commit comments

Comments
 (0)