Skip to content
Merged
6 changes: 5 additions & 1 deletion apps/web/src/hooks/useCreateAssignment.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useNotificationsStore } from '@douglasneuroinformatics/libui/hooks';
import { $Assignment } from '@opendatacapture/schemas/assignment';
import type { CreateAssignmentData } from '@opendatacapture/schemas/assignment';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import axios from 'axios';
Expand All @@ -7,7 +8,10 @@ export function useCreateAssignment() {
const queryClient = useQueryClient();
const addNotification = useNotificationsStore((store) => store.addNotification);
return useMutation({
mutationFn: ({ data }: { data: CreateAssignmentData }) => axios.post('/v1/assignments', data),
mutationFn: async ({ data }: { data: CreateAssignmentData }) => {
const response = await axios.post('/v1/assignments', data);
return $Assignment.parse(response.data);
},
onSuccess() {
addNotification({ type: 'success' });
void queryClient.invalidateQueries({ queryKey: ['assignments'] });
Expand Down
18 changes: 17 additions & 1 deletion apps/web/src/hooks/useNavItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
LogsIcon,
PackageIcon,
PaletteIcon,
SendIcon,
UploadIcon,
UserCogIcon,
UsersIcon
Expand Down Expand Up @@ -148,6 +149,15 @@ export function useNavItems() {
url: '/instruments/accessible-instruments'
});
}
// Remote assignment requires the gateway to be enabled, since assignments are served through it
if (ability?.can('create', 'Assignment') && setupStateQuery.data.isGatewayEnabled) {
sessionItems.push({
disabled: currentSession === null,
icon: SendIcon,
label: t('layout.navLinks.remoteAssignment'),
url: '/session/remote-assignment'
});
}
if (ability?.can('read', 'Subject') && ability.can('read', 'InstrumentRecord')) {
sessionItems.push({
disabled: currentSession === null,
Expand All @@ -157,7 +167,13 @@ export function useNavItems() {
});
}
setNavItems([globalItems, adminItems, sessionItems].filter((arr) => arr.length));
}, [currentSession, currentUser, resolvedLanguage, setupStateQuery.data.isExperimentalFeaturesEnabled]);
}, [
currentSession,
currentUser,
resolvedLanguage,
setupStateQuery.data.isExperimentalFeaturesEnabled,
setupStateQuery.data.isGatewayEnabled
]);

return navItems;
}
22 changes: 22 additions & 0 deletions apps/web/src/route-tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { Route as AppUploadIndexRouteImport } from './routes/_app/upload/index'
import { Route as AppDatahubIndexRouteImport } from './routes/_app/datahub/index'
import { Route as AppUploadInstrumentIdRouteImport } from './routes/_app/upload/$instrumentId'
import { Route as AppSessionStartSessionRouteImport } from './routes/_app/session/start-session'
import { Route as AppSessionRemoteAssignmentRouteImport } from './routes/_app/session/remote-assignment'
import { Route as AppInstrumentsAccessibleInstrumentsRouteImport } from './routes/_app/instruments/accessible-instruments'
import { Route as AppGroupManageRouteImport } from './routes/_app/group/manage'
import { Route as AppAdminSettingsRouteImport } from './routes/_app/admin/settings'
Expand Down Expand Up @@ -98,6 +99,12 @@ const AppSessionStartSessionRoute = AppSessionStartSessionRouteImport.update({
path: '/session/start-session',
getParentRoute: () => AppRouteRoute,
} as any)
const AppSessionRemoteAssignmentRoute =
AppSessionRemoteAssignmentRouteImport.update({
id: '/session/remote-assignment',
path: '/session/remote-assignment',
getParentRoute: () => AppRouteRoute,
} as any)
const AppInstrumentsAccessibleInstrumentsRoute =
AppInstrumentsAccessibleInstrumentsRouteImport.update({
id: '/instruments/accessible-instruments',
Expand Down Expand Up @@ -204,6 +211,7 @@ export interface FileRoutesByFullPath {
'/admin/settings': typeof AppAdminSettingsRoute
'/group/manage': typeof AppGroupManageRoute
'/instruments/accessible-instruments': typeof AppInstrumentsAccessibleInstrumentsRoute
'/session/remote-assignment': typeof AppSessionRemoteAssignmentRoute
'/session/start-session': typeof AppSessionStartSessionRoute
'/upload/$instrumentId': typeof AppUploadInstrumentIdRoute
'/datahub/': typeof AppDatahubIndexRoute
Expand Down Expand Up @@ -234,6 +242,7 @@ export interface FileRoutesByTo {
'/admin/settings': typeof AppAdminSettingsRoute
'/group/manage': typeof AppGroupManageRoute
'/instruments/accessible-instruments': typeof AppInstrumentsAccessibleInstrumentsRoute
'/session/remote-assignment': typeof AppSessionRemoteAssignmentRoute
'/session/start-session': typeof AppSessionStartSessionRoute
'/upload/$instrumentId': typeof AppUploadInstrumentIdRoute
'/datahub': typeof AppDatahubIndexRoute
Expand Down Expand Up @@ -266,6 +275,7 @@ export interface FileRoutesById {
'/_app/admin/settings': typeof AppAdminSettingsRoute
'/_app/group/manage': typeof AppGroupManageRoute
'/_app/instruments/accessible-instruments': typeof AppInstrumentsAccessibleInstrumentsRoute
'/_app/session/remote-assignment': typeof AppSessionRemoteAssignmentRoute
'/_app/session/start-session': typeof AppSessionStartSessionRoute
'/_app/upload/$instrumentId': typeof AppUploadInstrumentIdRoute
'/_app/datahub/': typeof AppDatahubIndexRoute
Expand Down Expand Up @@ -298,6 +308,7 @@ export interface FileRouteTypes {
| '/admin/settings'
| '/group/manage'
| '/instruments/accessible-instruments'
| '/session/remote-assignment'
| '/session/start-session'
| '/upload/$instrumentId'
| '/datahub/'
Expand Down Expand Up @@ -328,6 +339,7 @@ export interface FileRouteTypes {
| '/admin/settings'
| '/group/manage'
| '/instruments/accessible-instruments'
| '/session/remote-assignment'
| '/session/start-session'
| '/upload/$instrumentId'
| '/datahub'
Expand Down Expand Up @@ -359,6 +371,7 @@ export interface FileRouteTypes {
| '/_app/admin/settings'
| '/_app/group/manage'
| '/_app/instruments/accessible-instruments'
| '/_app/session/remote-assignment'
| '/_app/session/start-session'
| '/_app/upload/$instrumentId'
| '/_app/datahub/'
Expand Down Expand Up @@ -470,6 +483,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof AppSessionStartSessionRouteImport
parentRoute: typeof AppRouteRoute
}
'/_app/session/remote-assignment': {
id: '/_app/session/remote-assignment'
path: '/session/remote-assignment'
fullPath: '/session/remote-assignment'
preLoaderRoute: typeof AppSessionRemoteAssignmentRouteImport
parentRoute: typeof AppRouteRoute
}
'/_app/instruments/accessible-instruments': {
id: '/_app/instruments/accessible-instruments'
path: '/instruments/accessible-instruments'
Expand Down Expand Up @@ -623,6 +643,7 @@ interface AppRouteRouteChildren {
AppAdminSettingsRoute: typeof AppAdminSettingsRoute
AppGroupManageRoute: typeof AppGroupManageRoute
AppInstrumentsAccessibleInstrumentsRoute: typeof AppInstrumentsAccessibleInstrumentsRoute
AppSessionRemoteAssignmentRoute: typeof AppSessionRemoteAssignmentRoute
AppSessionStartSessionRoute: typeof AppSessionStartSessionRoute
AppUploadInstrumentIdRoute: typeof AppUploadInstrumentIdRoute
AppDatahubIndexRoute: typeof AppDatahubIndexRoute
Expand All @@ -649,6 +670,7 @@ const AppRouteRouteChildren: AppRouteRouteChildren = {
AppGroupManageRoute: AppGroupManageRoute,
AppInstrumentsAccessibleInstrumentsRoute:
AppInstrumentsAccessibleInstrumentsRoute,
AppSessionRemoteAssignmentRoute: AppSessionRemoteAssignmentRoute,
AppSessionStartSessionRoute: AppSessionStartSessionRoute,
AppUploadInstrumentIdRoute: AppUploadInstrumentIdRoute,
AppDatahubIndexRoute: AppDatahubIndexRoute,
Expand Down
Loading
Loading