Skip to content

Commit bbf8158

Browse files
committed
feat: add selects for carer and languages
1 parent 7f52add commit bbf8158

File tree

5 files changed

+50
-3
lines changed

5 files changed

+50
-3
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { $api } from "../stores/api";
2+
import { EntitySelect, EntitySelectProps } from "./EntitySelect";
3+
4+
type CarerSelectProps = EntitySelectProps;
5+
6+
export function CarerSelect({ value, onChange }: CarerSelectProps) {
7+
const { data } = $api.useQuery("get", "/carers");
8+
9+
return <EntitySelect value={value} onChange={onChange} data={data} buildLabel={(carer) => carer.name} />;
10+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Select, SelectProps } from "@quassel/ui";
2+
3+
export type EntitySelectProps = Omit<SelectProps, "value" | "onChange"> & {
4+
value?: number;
5+
onChange?: (id?: number) => void;
6+
};
7+
8+
type Props<T extends { id: number }> = Omit<EntitySelectProps, "data"> & {
9+
data?: T[];
10+
buildLabel: (value: T) => string;
11+
};
12+
13+
export function EntitySelect<T extends { id: number }>({ value, onChange, data, buildLabel, ...rest }: Props<T>) {
14+
console.log(value);
15+
16+
return (
17+
<Select
18+
value={value?.toString()}
19+
onChange={(value) => onChange?.(value ? parseInt(value) : undefined)}
20+
data={data?.map((entity) => ({ value: entity.id.toString(), label: buildLabel(entity) })) ?? []}
21+
{...rest}
22+
/>
23+
);
24+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { $api } from "../stores/api";
2+
import { EntitySelect, EntitySelectProps } from "./EntitySelect";
3+
4+
type LanguageSelectProps = EntitySelectProps;
5+
6+
export function LanguageSelect({ value, onChange }: LanguageSelectProps) {
7+
const { data } = $api.useQuery("get", "/languages");
8+
9+
return <EntitySelect value={value} onChange={onChange} data={data} buildLabel={(language) => language.name} searchable />;
10+
}

apps/frontend/src/components/questionnaire/calendar/EntryForm.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { isInRange, isNotEmpty, useForm } from "@mantine/form";
2-
import { Button, Group, Select, Stack, TimeInput, NumberInput, ActionIcon, IconMinus } from "@quassel/ui";
2+
import { Button, Group, Stack, TimeInput, NumberInput, ActionIcon, IconMinus } from "@quassel/ui";
33
import { i18n } from "../../../stores/i18n";
44
import { useStore } from "@nanostores/react";
55
import { useEffect } from "react";
6+
import { CarerSelect } from "../../CarerSelect";
7+
import { LanguageSelect } from "../../LanguageSelect";
68

79
type FormValues = {
810
carerId?: number;
@@ -82,13 +84,13 @@ export function EntityForm({ onSave, actionLabel, entry }: EntityFormProps) {
8284
return (
8385
<form onSubmit={f.onSubmit(onSave)}>
8486
<Stack align="flex-start">
85-
<Select {...f.getInputProps("carerId")} />
87+
<CarerSelect {...f.getInputProps("carerId")} />
8688

8789
{f.getValues().languageEntries.map((_, index) => (
8890
// TODO: make key either languageId or name of new language entry
8991
<Group key={`entry-${index}`}>
9092
<NumberInput {...f.getInputProps(`languageEntries.${index}.ratio`)} max={100} min={1} />
91-
<Select {...f.getInputProps(`languageEntries.${index}.languageId`)} />
93+
<LanguageSelect {...f.getInputProps(`languageEntries.${index}.languageId`)} />
9294
{!!index && (
9395
<ActionIcon
9496
variant="light"

libs/ui/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export {
5151
Paper,
5252
PasswordInput,
5353
Select,
54+
type SelectProps,
5455
Stack,
5556
Table,
5657
Text,

0 commit comments

Comments
 (0)