From 804004c3df5726d86413a771a51d96a2918b689f Mon Sep 17 00:00:00 2001 From: riiniii Date: Fri, 8 Jan 2021 16:29:12 +0800 Subject: [PATCH 1/3] fix(userequestimaging.tsx, newimagingrequest.tsx): imaging table requestedBy show current usr requestedBy's current user show's 'test', not actual log in user, pass in logged in user from redux store to useRequestImaging hook fix #2540 --- package.json | 2 +- src/imagings/hooks/useRequestImaging.tsx | 26 +++++++++++---------- src/imagings/requests/NewImagingRequest.tsx | 6 ++++- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index a94b1f0d23..62279a2347 100644 --- a/package.json +++ b/package.json @@ -160,4 +160,4 @@ "git add ." ] } -} \ No newline at end of file +} diff --git a/src/imagings/hooks/useRequestImaging.tsx b/src/imagings/hooks/useRequestImaging.tsx index eba9c52bbc..b4c598eeb9 100644 --- a/src/imagings/hooks/useRequestImaging.tsx +++ b/src/imagings/hooks/useRequestImaging.tsx @@ -14,22 +14,24 @@ export interface ImagingRequest { type: string } -async function requestImaging(request: ImagingRequest): Promise { - const error = validateImagingRequest(request) +function requestImagingWrapper(user: any) { + return async function requestImaging(request: ImagingRequest): Promise { + const error = validateImagingRequest(request) - if (!isEmpty(error)) { - throw error - } + if (!isEmpty(error)) { + throw error + } - await ImagingRepository.save({ - ...request, - requestedBy: 'test', - requestedOn: new Date(Date.now()).toISOString(), - } as Imaging) + await ImagingRepository.save({ + ...request, + requestedBy: user?.fullName || '', + requestedOn: new Date(Date.now()).toISOString(), + } as Imaging) + } } -export default function useRequestImaging() { - return useMutation(requestImaging, { +export default function useRequestImaging(user: any) { + return useMutation(requestImagingWrapper(user), { onSuccess: async () => { await queryCache.invalidateQueries('imagings') }, diff --git a/src/imagings/requests/NewImagingRequest.tsx b/src/imagings/requests/NewImagingRequest.tsx index 1e3582de53..723aa03fb4 100644 --- a/src/imagings/requests/NewImagingRequest.tsx +++ b/src/imagings/requests/NewImagingRequest.tsx @@ -1,6 +1,7 @@ import { Typeahead, Label, Button, Alert, Column, Row } from '@hospitalrun/components' import format from 'date-fns/format' import React, { useState, useEffect } from 'react' +import { useSelector } from 'react-redux' import { useHistory } from 'react-router-dom' import useAddBreadcrumbs from '../../page-header/breadcrumbs/useAddBreadcrumbs' @@ -13,17 +14,20 @@ import TextInputWithLabelFormGroup from '../../shared/components/input/TextInput import PatientRepository from '../../shared/db/PatientRepository' import useTranslator from '../../shared/hooks/useTranslator' import Patient from '../../shared/model/Patient' +import { RootState } from '../../shared/store' import useRequestImaging, { ImagingRequest } from '../hooks/useRequestImaging' import { ImagingRequestError } from '../util/validate-imaging-request' const NewImagingRequest = () => { const { t } = useTranslator() const history = useHistory() + const { user } = useSelector((state: RootState) => state.user) + const updateTitle = useUpdateTitle() useEffect(() => { updateTitle(t('imagings.requests.new')) }) - const [mutate] = useRequestImaging() + const [mutate] = useRequestImaging(user) const [error, setError] = useState() const [visitOption, setVisitOption] = useState([] as Option[]) From 5dd6641ae2cb6c1acc99ac3ea03e90c460b73cf7 Mon Sep 17 00:00:00 2001 From: riiniii Date: Mon, 11 Jan 2021 11:53:52 +0800 Subject: [PATCH 2/3] test(userequestimaging.test.tsx, newimagingrequest.test.tsx, user-slice.ts): update tests update tests for NewImagingRequest page and also export relevant interfaces from user-slice.ts fix #2540 --- .../imagings/hooks/useRequestImaging.test.tsx | 11 +++++++++-- .../imagings/requests/NewImagingRequest.test.tsx | 9 ++++++++- src/user/user-slice.ts | 4 ++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/__tests__/imagings/hooks/useRequestImaging.test.tsx b/src/__tests__/imagings/hooks/useRequestImaging.test.tsx index ad7385bd9e..4499a1a25a 100644 --- a/src/__tests__/imagings/hooks/useRequestImaging.test.tsx +++ b/src/__tests__/imagings/hooks/useRequestImaging.test.tsx @@ -5,6 +5,7 @@ import { ImagingRequestError } from '../../../imagings/util/validate-imaging-req import * as imagingRequestValidator from '../../../imagings/util/validate-imaging-request' import ImagingRepository from '../../../shared/db/ImagingRepository' import Imaging from '../../../shared/model/Imaging' +import { UserState, LoginError } from '../../../user/user-slice' import executeMutation from '../../test-utils/use-mutation.util' describe('useReportIncident', () => { @@ -13,6 +14,12 @@ describe('useReportIncident', () => { console.error = jest.fn() }) + const user = { + fullName: 'test', + permissions: [], + loginError: {} as LoginError, + } as UserState + it('should save the imaging request with correct data', async () => { const expectedDate = new Date(Date.now()) Date.now = jest.fn().mockReturnValue(expectedDate) @@ -32,7 +39,7 @@ describe('useReportIncident', () => { } as Imaging jest.spyOn(ImagingRepository, 'save').mockResolvedValue(expectedImagingRequest) - await executeMutation(() => useRequestImaging(), givenImagingRequest) + await executeMutation(() => useRequestImaging(user), givenImagingRequest) expect(ImagingRepository.save).toHaveBeenCalledTimes(1) expect(ImagingRepository.save).toBeCalledWith(expectedImagingRequest) }) @@ -46,7 +53,7 @@ describe('useReportIncident', () => { jest.spyOn(ImagingRepository, 'save').mockResolvedValue({} as Imaging) try { - await executeMutation(() => useRequestImaging(), {}) + await executeMutation(() => useRequestImaging(user), {}) } catch (e) { expect(e).toEqual(expectedImagingRequestError) expect(ImagingRepository.save).not.toHaveBeenCalled() diff --git a/src/__tests__/imagings/requests/NewImagingRequest.test.tsx b/src/__tests__/imagings/requests/NewImagingRequest.test.tsx index 256d907faa..b4c6d3319b 100644 --- a/src/__tests__/imagings/requests/NewImagingRequest.test.tsx +++ b/src/__tests__/imagings/requests/NewImagingRequest.test.tsx @@ -19,6 +19,7 @@ import ImagingRepository from '../../../shared/db/ImagingRepository' import Imaging from '../../../shared/model/Imaging' import Patient from '../../../shared/model/Patient' import { RootState } from '../../../shared/store' +import { UserState, LoginError } from '../../../user/user-slice' const mockStore = createMockStore([thunk]) @@ -35,7 +36,13 @@ describe('New Imaging Request', () => { history = createMemoryHistory() history.push(`/imaging/new`) - const store = mockStore({} as any) + const store = mockStore({ + user: { + fullName: 'test', + permissions: [], + loginError: {} as LoginError, + } as UserState, + } as any) let wrapper: any await act(async () => { diff --git a/src/user/user-slice.ts b/src/user/user-slice.ts index 6d72c8f806..58d04df231 100644 --- a/src/user/user-slice.ts +++ b/src/user/user-slice.ts @@ -6,13 +6,13 @@ import Permissions from '../shared/model/Permissions' import User from '../shared/model/User' import { AppThunk } from '../shared/store' -interface LoginError { +export interface LoginError { message?: string username?: string password?: string } -interface UserState { +export interface UserState { permissions: (Permissions | null)[] user?: User loginError?: LoginError From 2c18c5d7e5fd0d2181a1fd224f8ffdb77e8ff30d Mon Sep 17 00:00:00 2001 From: riiniii Date: Wed, 13 Jan 2021 10:14:54 +0800 Subject: [PATCH 3/3] fix(userequestimaging.tsx, imaging.ts, imagingrequesttable.tsx): save user.id but show user.fullName for requestedBy, save both user.id but also full name, and show user's fullname in table fix #2540 --- src/__tests__/imagings/hooks/useRequestImaging.test.tsx | 4 +++- src/imagings/hooks/useRequestImaging.tsx | 3 ++- src/imagings/search/ImagingRequestTable.tsx | 2 +- src/shared/model/Imaging.ts | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/__tests__/imagings/hooks/useRequestImaging.test.tsx b/src/__tests__/imagings/hooks/useRequestImaging.test.tsx index 4499a1a25a..a62f8f9aab 100644 --- a/src/__tests__/imagings/hooks/useRequestImaging.test.tsx +++ b/src/__tests__/imagings/hooks/useRequestImaging.test.tsx @@ -16,6 +16,7 @@ describe('useReportIncident', () => { const user = { fullName: 'test', + id: 'test-hospitalrun', permissions: [], loginError: {} as LoginError, } as UserState @@ -35,7 +36,8 @@ describe('useReportIncident', () => { const expectedImagingRequest = { ...givenImagingRequest, requestedOn: expectedDate.toISOString(), - requestedBy: 'test', + requestedBy: 'test-hospitalrun', + requestedByFullName: 'test', } as Imaging jest.spyOn(ImagingRepository, 'save').mockResolvedValue(expectedImagingRequest) diff --git a/src/imagings/hooks/useRequestImaging.tsx b/src/imagings/hooks/useRequestImaging.tsx index b4c598eeb9..d5302eec00 100644 --- a/src/imagings/hooks/useRequestImaging.tsx +++ b/src/imagings/hooks/useRequestImaging.tsx @@ -24,7 +24,8 @@ function requestImagingWrapper(user: any) { await ImagingRepository.save({ ...request, - requestedBy: user?.fullName || '', + requestedBy: user?.id || '', + requestedByFullName: user?.fullName || '', requestedOn: new Date(Date.now()).toISOString(), } as Imaging) } diff --git a/src/imagings/search/ImagingRequestTable.tsx b/src/imagings/search/ImagingRequestTable.tsx index efeef47676..8f442385a1 100644 --- a/src/imagings/search/ImagingRequestTable.tsx +++ b/src/imagings/search/ImagingRequestTable.tsx @@ -37,7 +37,7 @@ const ImagingRequestTable = (props: Props) => { { label: t('imagings.imaging.requestedBy'), key: 'requestedBy', - formatter: (row) => extractUsername(row.requestedBy), + formatter: (row) => extractUsername(row.requestedByFullName || ''), }, { label: t('imagings.imaging.status'), key: 'status' }, ]} diff --git a/src/shared/model/Imaging.ts b/src/shared/model/Imaging.ts index 88d91beb6d..ed9cd6a2ed 100644 --- a/src/shared/model/Imaging.ts +++ b/src/shared/model/Imaging.ts @@ -9,6 +9,7 @@ export default interface Imaging extends AbstractDBModel { visitId: string requestedOn: string requestedBy: string // will be the currently logged in user's id + requestedByFullName?: string completedOn?: string canceledOn?: string notes?: string