Skip to content

Commit d9e41ff

Browse files
committed
feat: add react dsv import
1 parent e5d4d1a commit d9e41ff

File tree

8 files changed

+83
-2
lines changed

8 files changed

+83
-2
lines changed

apps/frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
"openapi-fetch": "0.13.3",
3131
"openapi-react-query": "0.2.8",
3232
"react": "^18.3.1",
33-
"react-dom": "^18.3.1"
33+
"react-dom": "^18.3.1",
34+
"react-dsv-import": "^0.4.6"
3435
},
3536
"devDependencies": {
3637
"@tanstack/router-devtools": "^1.90.0",

apps/frontend/src/routeTree.gen.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { Route as AuthQuestionnaireQuestionnaireNewImport } from "./routes/_auth
3838
import { Route as AuthAdministrationUsersNewImport } from "./routes/_auth/administration/users/new";
3939
import { Route as AuthAdministrationStudiesNewImport } from "./routes/_auth/administration/studies/new";
4040
import { Route as AuthAdministrationParticipantsNewImport } from "./routes/_auth/administration/participants/new";
41+
import { Route as AuthAdministrationParticipantsImportImport } from "./routes/_auth/administration/participants/import";
4142
import { Route as AuthAdministrationLanguagesNewImport } from "./routes/_auth/administration/languages/new";
4243
import { Route as AuthAdministrationCarersNewImport } from "./routes/_auth/administration/carers/new";
4344
import { Route as AuthQuestionnaireQuestionnaireIdRemarksImport } from "./routes/_auth/questionnaire/_questionnaire/$id/remarks";
@@ -230,6 +231,13 @@ const AuthAdministrationParticipantsNewRoute =
230231
getParentRoute: () => AuthAdministrationParticipantsRoute,
231232
} as any);
232233

234+
const AuthAdministrationParticipantsImportRoute =
235+
AuthAdministrationParticipantsImportImport.update({
236+
id: "/import",
237+
path: "/import",
238+
getParentRoute: () => AuthAdministrationParticipantsRoute,
239+
} as any);
240+
233241
const AuthAdministrationLanguagesNewRoute =
234242
AuthAdministrationLanguagesNewImport.update({
235243
id: "/new",
@@ -437,6 +445,13 @@ declare module "@tanstack/react-router" {
437445
preLoaderRoute: typeof AuthAdministrationLanguagesNewImport;
438446
parentRoute: typeof AuthAdministrationLanguagesImport;
439447
};
448+
"/_auth/administration/participants/import": {
449+
id: "/_auth/administration/participants/import";
450+
path: "/import";
451+
fullPath: "/administration/participants/import";
452+
preLoaderRoute: typeof AuthAdministrationParticipantsImportImport;
453+
parentRoute: typeof AuthAdministrationParticipantsImport;
454+
};
440455
"/_auth/administration/participants/new": {
441456
id: "/_auth/administration/participants/new";
442457
path: "/new";
@@ -649,13 +664,16 @@ const AuthAdministrationLanguagesRouteWithChildren =
649664
);
650665

651666
interface AuthAdministrationParticipantsRouteChildren {
667+
AuthAdministrationParticipantsImportRoute: typeof AuthAdministrationParticipantsImportRoute;
652668
AuthAdministrationParticipantsNewRoute: typeof AuthAdministrationParticipantsNewRoute;
653669
AuthAdministrationParticipantsIndexRoute: typeof AuthAdministrationParticipantsIndexRoute;
654670
AuthAdministrationParticipantsEditIdRoute: typeof AuthAdministrationParticipantsEditIdRoute;
655671
}
656672

657673
const AuthAdministrationParticipantsRouteChildren: AuthAdministrationParticipantsRouteChildren =
658674
{
675+
AuthAdministrationParticipantsImportRoute:
676+
AuthAdministrationParticipantsImportRoute,
659677
AuthAdministrationParticipantsNewRoute:
660678
AuthAdministrationParticipantsNewRoute,
661679
AuthAdministrationParticipantsIndexRoute:
@@ -826,6 +844,7 @@ export interface FileRoutesByFullPath {
826844
"/questionnaire/": typeof AuthQuestionnaireIndexRoute;
827845
"/administration/carers/new": typeof AuthAdministrationCarersNewRoute;
828846
"/administration/languages/new": typeof AuthAdministrationLanguagesNewRoute;
847+
"/administration/participants/import": typeof AuthAdministrationParticipantsImportRoute;
829848
"/administration/participants/new": typeof AuthAdministrationParticipantsNewRoute;
830849
"/administration/studies/new": typeof AuthAdministrationStudiesNewRoute;
831850
"/administration/users/new": typeof AuthAdministrationUsersNewRoute;
@@ -857,6 +876,7 @@ export interface FileRoutesByTo {
857876
"/administration": typeof AuthAdministrationIndexRoute;
858877
"/administration/carers/new": typeof AuthAdministrationCarersNewRoute;
859878
"/administration/languages/new": typeof AuthAdministrationLanguagesNewRoute;
879+
"/administration/participants/import": typeof AuthAdministrationParticipantsImportRoute;
860880
"/administration/participants/new": typeof AuthAdministrationParticipantsNewRoute;
861881
"/administration/studies/new": typeof AuthAdministrationStudiesNewRoute;
862882
"/administration/users/new": typeof AuthAdministrationUsersNewRoute;
@@ -900,6 +920,7 @@ export interface FileRoutesById {
900920
"/_auth/questionnaire/": typeof AuthQuestionnaireIndexRoute;
901921
"/_auth/administration/carers/new": typeof AuthAdministrationCarersNewRoute;
902922
"/_auth/administration/languages/new": typeof AuthAdministrationLanguagesNewRoute;
923+
"/_auth/administration/participants/import": typeof AuthAdministrationParticipantsImportRoute;
903924
"/_auth/administration/participants/new": typeof AuthAdministrationParticipantsNewRoute;
904925
"/_auth/administration/studies/new": typeof AuthAdministrationStudiesNewRoute;
905926
"/_auth/administration/users/new": typeof AuthAdministrationUsersNewRoute;
@@ -943,6 +964,7 @@ export interface FileRouteTypes {
943964
| "/questionnaire/"
944965
| "/administration/carers/new"
945966
| "/administration/languages/new"
967+
| "/administration/participants/import"
946968
| "/administration/participants/new"
947969
| "/administration/studies/new"
948970
| "/administration/users/new"
@@ -973,6 +995,7 @@ export interface FileRouteTypes {
973995
| "/administration"
974996
| "/administration/carers/new"
975997
| "/administration/languages/new"
998+
| "/administration/participants/import"
976999
| "/administration/participants/new"
9771000
| "/administration/studies/new"
9781001
| "/administration/users/new"
@@ -1014,6 +1037,7 @@ export interface FileRouteTypes {
10141037
| "/_auth/questionnaire/"
10151038
| "/_auth/administration/carers/new"
10161039
| "/_auth/administration/languages/new"
1040+
| "/_auth/administration/participants/import"
10171041
| "/_auth/administration/participants/new"
10181042
| "/_auth/administration/studies/new"
10191043
| "/_auth/administration/users/new"
@@ -1129,6 +1153,7 @@ export const routeTree = rootRoute
11291153
"filePath": "_auth/administration/participants.tsx",
11301154
"parent": "/_auth/administration",
11311155
"children": [
1156+
"/_auth/administration/participants/import",
11321157
"/_auth/administration/participants/new",
11331158
"/_auth/administration/participants/",
11341159
"/_auth/administration/participants/edit/$id"
@@ -1188,6 +1213,10 @@ export const routeTree = rootRoute
11881213
"filePath": "_auth/administration/languages/new.tsx",
11891214
"parent": "/_auth/administration/languages"
11901215
},
1216+
"/_auth/administration/participants/import": {
1217+
"filePath": "_auth/administration/participants/import.tsx",
1218+
"parent": "/_auth/administration/participants"
1219+
},
11911220
"/_auth/administration/participants/new": {
11921221
"filePath": "_auth/administration/participants/new.tsx",
11931222
"parent": "/_auth/administration/participants"
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { createFileRoute } from "@tanstack/react-router";
2+
import { ColumnType, DSVImport } from "react-dsv-import";
3+
4+
type BasicType = { forename: string; surname: string; email: string };
5+
6+
const columns: ColumnType<BasicType>[] = [
7+
{ key: "forename", label: "Forename" },
8+
{ key: "surname", label: "Surname" },
9+
{ key: "email", label: "Email" },
10+
];
11+
12+
function AdministrationParticipantsImport() {
13+
return (
14+
<div>
15+
<DSVImport<BasicType> columns={columns}>
16+
<DSVImport.TextareaInput />
17+
<DSVImport.TablePreview />
18+
</DSVImport>
19+
</div>
20+
);
21+
}
22+
23+
export const Route = createFileRoute("/_auth/administration/participants/import")({
24+
component: AdministrationParticipantsImport,
25+
});

apps/frontend/src/routes/_auth/administration/participants/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ function AdministrationParticipantsIndex() {
1414
<Button variant="default" renderRoot={(props) => <Link to="/administration/participants/new" {...props} />}>
1515
New participant
1616
</Button>
17+
<Button variant="default" renderRoot={(props) => <Link to="/administration/participants/import" {...props} />}>
18+
Import participants
19+
</Button>
1720
<Table>
1821
<Table.Thead>
1922
<Table.Tr>

libs/ui/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
"@tabler/icons-react": "3.25.0",
3434
"dayjs": "^1.11.13",
3535
"react": "^18.3.1",
36-
"react-dom": "^18.3.1"
36+
"react-dom": "^18.3.1",
37+
"react-dsv-import": "^0.4.6"
3738
},
3839
"devDependencies": {
3940
"@eslint/js": "^9.17.0",

libs/ui/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,6 @@ export {
8686
IconMapSearch,
8787
IconMinus,
8888
} from "@tabler/icons-react";
89+
90+
export { DSVImport } from "react-dsv-import";
91+
export type { ColumnType } from "react-dsv-import";

libs/ui/vite.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ export default defineConfig({
2626
"@mantine/core": "mantineCore",
2727
"@mantine/dates": "mantineDates",
2828
"@mantine/hooks": "mantineHooks",
29+
"@mantine/form": "mantineForm",
2930
"@tabler/icons-react/dist/esm/icons/index.mjs": "tablerIconsReact",
31+
"react-dsv-import": "reactDsvImport",
3032
},
3133
},
3234
},

pnpm-lock.yaml

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

0 commit comments

Comments
 (0)