Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

feat: add new useTranslator #2197

Merged
merged 3 commits into from
Jul 8, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/__tests__/shared/hooks/useTranslator.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { renderHook } from '@testing-library/react-hooks'

import { useTranslation } from '../../../__mocks__/react-i18next'
import useTranslator from '../../../shared/hooks/useTranslator'

describe('useTranslator', () => {
it('should return undefined if input value for translation is undefined', () => {
const { result } = renderHook(() => useTranslator())

expect(result.current.t(undefined)).toBe(undefined)
})

it('should return useTranslation hook result if input value is NOT undefined', () => {
const { result: useTranslatorResult } = renderHook(() => useTranslator())
const { result: useTranslationResult } = renderHook(() => useTranslation())

const result = useTranslatorResult.current.t('patient.firstName')
const expected = useTranslationResult.current.t('patient.firstName')

expect(result).toBe(expected)
})
})
4 changes: 2 additions & 2 deletions src/dashboard/Dashboard.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import React from 'react'
import { useTranslation } from 'react-i18next'

import useTitle from '../page-header/title/useTitle'
import useTranslator from '../shared/hooks/useTranslator'

const Dashboard: React.FC = () => {
const { t } = useTranslation()
const { t } = useTranslator()
useTitle(t('dashboard.label'))
return <h3>Example</h3>
}
Expand Down
4 changes: 2 additions & 2 deletions src/incidents/list/ViewIncidents.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Button, Table } from '@hospitalrun/components'
import format from 'date-fns/format'
import React, { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { useHistory } from 'react-router-dom'

Expand All @@ -10,12 +9,13 @@ import useTitle from '../../page-header/title/useTitle'
import SelectWithLabelFormGroup, {
Option,
} from '../../shared/components/input/SelectWithLableFormGroup'
import useTranslator from '../../shared/hooks/useTranslator'
import { RootState } from '../../shared/store'
import IncidentFilter from '../IncidentFilter'
import { searchIncidents } from '../incidents-slice'

const ViewIncidents = () => {
const { t } = useTranslation()
const { t } = useTranslator()
const history = useHistory()
const dispatch = useDispatch()
useTitle(t('incidents.reports.label'))
Expand Down
4 changes: 2 additions & 2 deletions src/incidents/report/ReportIncident.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Button, Row, Column } from '@hospitalrun/components'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { useHistory } from 'react-router-dom'

Expand All @@ -9,14 +8,15 @@ import useTitle from '../../page-header/title/useTitle'
import DateTimePickerWithLabelFormGroup from '../../shared/components/input/DateTimePickerWithLabelFormGroup'
import TextFieldWithLabelFormGroup from '../../shared/components/input/TextFieldWithLabelFormGroup'
import TextInputWithLabelFormGroup from '../../shared/components/input/TextInputWithLabelFormGroup'
import useTranslator from '../../shared/hooks/useTranslator'
import Incident from '../../shared/model/Incident'
import { RootState } from '../../shared/store'
import { reportIncident } from '../incident-slice'

const ReportIncident = () => {
const dispatch = useDispatch()
const history = useHistory()
const { t } = useTranslation()
const { t } = useTranslator()
useTitle(t('incidents.reports.new'))
const breadcrumbs = [
{
Expand Down
4 changes: 2 additions & 2 deletions src/incidents/view/ViewIncident.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { Column, Row, Spinner } from '@hospitalrun/components'
import format from 'date-fns/format'
import React, { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { useParams } from 'react-router-dom'

import useAddBreadcrumbs from '../../page-header/breadcrumbs/useAddBreadcrumbs'
import useTitle from '../../page-header/title/useTitle'
import TextFieldWithLabelFormGroup from '../../shared/components/input/TextFieldWithLabelFormGroup'
import TextInputWithLabelFormGroup from '../../shared/components/input/TextInputWithLabelFormGroup'
import useTranslator from '../../shared/hooks/useTranslator'
import { RootState } from '../../shared/store'
import { fetchIncident } from '../incident-slice'

const ViewIncident = () => {
const dispatch = useDispatch()
const { t } = useTranslation()
const { t } = useTranslator()
const { id } = useParams()
const { incident } = useSelector((state: RootState) => state.incident)
useTitle(incident ? incident.code : '')
Expand Down
4 changes: 2 additions & 2 deletions src/labs/ViewLab.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Row, Column, Badge, Button, Alert } from '@hospitalrun/components'
import format from 'date-fns/format'
import React, { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector, useDispatch } from 'react-redux'
import { useParams, useHistory } from 'react-router-dom'

import useAddBreadcrumbs from '../page-header/breadcrumbs/useAddBreadcrumbs'
import useTitle from '../page-header/title/useTitle'
import TextFieldWithLabelFormGroup from '../shared/components/input/TextFieldWithLabelFormGroup'
import useTranslator from '../shared/hooks/useTranslator'
import Lab from '../shared/model/Lab'
import Patient from '../shared/model/Patient'
import Permissions from '../shared/model/Permissions'
Expand All @@ -19,7 +19,7 @@ const getTitle = (patient: Patient | undefined, lab: Lab | undefined) =>

const ViewLab = () => {
const { id } = useParams()
const { t } = useTranslation()
const { t } = useTranslator()
const history = useHistory()
const dispatch = useDispatch()
const { permissions } = useSelector((state: RootState) => state.user)
Expand Down
4 changes: 2 additions & 2 deletions src/labs/ViewLabs.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Button, Table } from '@hospitalrun/components'
import format from 'date-fns/format'
import React, { useState, useEffect, useCallback } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector, useDispatch } from 'react-redux'
import { useHistory } from 'react-router-dom'

Expand All @@ -12,6 +11,7 @@ import SelectWithLabelFormGroup, {
} from '../shared/components/input/SelectWithLableFormGroup'
import TextInputWithLabelFormGroup from '../shared/components/input/TextInputWithLabelFormGroup'
import useDebounce from '../shared/hooks/useDebounce'
import useTranslator from '../shared/hooks/useTranslator'
import Lab from '../shared/model/Lab'
import Permissions from '../shared/model/Permissions'
import { RootState } from '../shared/store'
Expand All @@ -20,7 +20,7 @@ import { searchLabs } from './labs-slice'
type LabFilter = 'requested' | 'completed' | 'canceled' | 'all'

const ViewLabs = () => {
const { t } = useTranslation()
const { t } = useTranslator()
const history = useHistory()
const setButtons = useButtonToolbarSetter()
useTitle(t('labs.label'))
Expand Down
4 changes: 2 additions & 2 deletions src/labs/requests/NewLabRequest.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Typeahead, Label, Button, Alert } from '@hospitalrun/components'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { useHistory } from 'react-router-dom'

Expand All @@ -9,13 +8,14 @@ import useTitle from '../../page-header/title/useTitle'
import TextFieldWithLabelFormGroup from '../../shared/components/input/TextFieldWithLabelFormGroup'
import TextInputWithLabelFormGroup from '../../shared/components/input/TextInputWithLabelFormGroup'
import PatientRepository from '../../shared/db/PatientRepository'
import useTranslator from '../../shared/hooks/useTranslator'
import Lab from '../../shared/model/Lab'
import Patient from '../../shared/model/Patient'
import { RootState } from '../../shared/store'
import { requestLab } from '../lab-slice'

const NewLabRequest = () => {
const { t } = useTranslation()
const { t } = useTranslator()
const dispatch = useDispatch()
const history = useHistory()
useTitle(t('labs.requests.new'))
Expand Down
4 changes: 2 additions & 2 deletions src/page-header/breadcrumbs/Breadcrumbs.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { Breadcrumb, BreadcrumbItem } from '@hospitalrun/components'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { useHistory } from 'react-router-dom'

import useTranslator from '../../shared/hooks/useTranslator'
import { RootState } from '../../shared/store'

const Breadcrumbs = () => {
const history = useHistory()
const { t } = useTranslation()
const { t } = useTranslator()
const { breadcrumbs } = useSelector((state: RootState) => state.breadcrumbs)

if (breadcrumbs.length === 0) {
Expand Down
4 changes: 2 additions & 2 deletions src/patients/ContactInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Spinner, Row, Column, Icon } from '@hospitalrun/components'
import React, { useEffect, ReactElement } from 'react'
import { useTranslation } from 'react-i18next'

import SelectWithLabelFormGroup, {
Option,
} from '../shared/components/input/SelectWithLableFormGroup'
import TextFieldWithLabelFormGroup from '../shared/components/input/TextFieldWithLabelFormGroup'
import TextInputWithLabelFormGroup from '../shared/components/input/TextInputWithLabelFormGroup'
import useTranslator from '../shared/hooks/useTranslator'
import { ContactInfoPiece } from '../shared/model/ContactInformation'
import { uuid } from '../shared/util/uuid'
import ContactInfoTypes from './ContactInfoTypes'
Expand All @@ -24,7 +24,7 @@ interface Props {
const ContactInfo = (props: Props): ReactElement => {
const { component, data, errors, label, name, isEditable, onChange } = props

const { t } = useTranslation()
const { t } = useTranslator()

useEffect(() => {
if (onChange && data.length === 0) {
Expand Down
24 changes: 8 additions & 16 deletions src/patients/GeneralInformation.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Panel, Checkbox, Alert } from '@hospitalrun/components'
import { startOfDay, subYears, differenceInYears } from 'date-fns'
import React, { ReactElement } from 'react'
import { useTranslation } from 'react-i18next'

import DatePickerWithLabelFormGroup from '../shared/components/input/DatePickerWithLabelFormGroup'
import SelectWithLabelFormGroup, {
Option,
} from '../shared/components/input/SelectWithLableFormGroup'
import TextInputWithLabelFormGroup from '../shared/components/input/TextInputWithLabelFormGroup'
import useTranslator from '../shared/hooks/useTranslator'
import { ContactInfoPiece } from '../shared/model/ContactInformation'
import Patient from '../shared/model/Patient'
import ContactInfo from './ContactInfo'
Expand All @@ -32,7 +32,7 @@ interface Props {
}

const GeneralInformation = (props: Props): ReactElement => {
const { t } = useTranslation()
const { t } = useTranslator()
const { patient, isEditable, onChange, error } = props

const onFieldChange = (name: string, value: string | boolean | ContactInfoPiece[]) => {
Expand Down Expand Up @@ -86,7 +86,7 @@ const GeneralInformation = (props: Props): ReactElement => {
isEditable={isEditable}
onChange={(event) => onFieldChange('prefix', event.currentTarget.value)}
isInvalid={!!error?.prefix}
feedback={error ? (error.prefix ? t(error.prefix) : undefined) : undefined}
feedback={t(error?.prefix)}
/>
</div>
<div className="col-md-4">
Expand All @@ -98,7 +98,7 @@ const GeneralInformation = (props: Props): ReactElement => {
onChange={(event) => onFieldChange('givenName', event.currentTarget.value)}
isRequired
isInvalid={!!error?.givenName}
feedback={error ? (error.givenName ? t(error.givenName) : undefined) : undefined}
feedback={t(error?.givenName)}
/>
</div>
<div className="col-md-4">
Expand All @@ -109,7 +109,7 @@ const GeneralInformation = (props: Props): ReactElement => {
isEditable={isEditable}
onChange={(event) => onFieldChange('familyName', event.currentTarget.value)}
isInvalid={!!error?.familyName}
feedback={error ? (error.familyName ? t(error.familyName) : undefined) : undefined}
feedback={t(error?.familyName)}
/>
</div>
<div className="col-md-2">
Expand All @@ -120,7 +120,7 @@ const GeneralInformation = (props: Props): ReactElement => {
isEditable={isEditable}
onChange={(event) => onFieldChange('suffix', event.currentTarget.value)}
isInvalid={!!error?.suffix}
feedback={error ? (error.suffix ? t(error.suffix) : undefined) : undefined}
feedback={t(error?.suffix)}
/>
</div>
</div>
Expand Down Expand Up @@ -170,9 +170,7 @@ const GeneralInformation = (props: Props): ReactElement => {
maxDate={new Date(Date.now().valueOf())}
onChange={(date: Date) => onFieldChange('dateOfBirth', date.toISOString())}
isInvalid={!!error?.dateOfBirth}
feedback={
error ? (error.dateOfBirth ? t(error.dateOfBirth) : undefined) : undefined
}
feedback={t(error?.dateOfBirth)}
/>
)}
</div>
Expand Down Expand Up @@ -205,13 +203,7 @@ const GeneralInformation = (props: Props): ReactElement => {
isEditable={isEditable}
onChange={(event) => onFieldChange('preferredLanguage', event.currentTarget.value)}
isInvalid={!!error?.preferredLanguage}
feedback={
error
? error.preferredLanguage
? t(error.preferredLanguage)
: undefined
: undefined
}
feedback={t(error?.preferredLanguage)}
/>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/patients/allergies/Allergies.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Button, List, ListItem, Alert } from '@hospitalrun/components'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'

import useAddBreadcrumbs from '../../page-header/breadcrumbs/useAddBreadcrumbs'
import useTranslator from '../../shared/hooks/useTranslator'
import Allergy from '../../shared/model/Allergy'
import Patient from '../../shared/model/Patient'
import Permissions from '../../shared/model/Permissions'
Expand All @@ -15,7 +15,7 @@ interface AllergiesProps {
}

const Allergies = (props: AllergiesProps) => {
const { t } = useTranslation()
const { t } = useTranslator()
const { patient } = props
const { permissions } = useSelector((state: RootState) => state.user)
const [showNewAllergyModal, setShowNewAllergyModal] = useState(false)
Expand Down
4 changes: 2 additions & 2 deletions src/patients/allergies/NewAllergyModal.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Modal, Alert } from '@hospitalrun/components'
import React, { useState, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'

import TextInputWithLabelFormGroup from '../../shared/components/input/TextInputWithLabelFormGroup'
import useTranslator from '../../shared/hooks/useTranslator'
import Allergy from '../../shared/model/Allergy'
import { RootState } from '../../shared/store'
import { addAllergy } from '../patient-slice'
Expand All @@ -16,7 +16,7 @@ interface NewAllergyModalProps {
const NewAllergyModal = (props: NewAllergyModalProps) => {
const { show, onCloseButtonClick } = props
const dispatch = useDispatch()
const { t } = useTranslation()
const { t } = useTranslator()
const { allergyError, patient } = useSelector((state: RootState) => state.patient)

const [allergy, setAllergy] = useState({ name: '' })
Expand Down
4 changes: 2 additions & 2 deletions src/patients/appointments/AppointmentsList.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Button, List, ListItem, Container, Row } from '@hospitalrun/components'
import React, { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector, useDispatch } from 'react-redux'
import { useHistory } from 'react-router-dom'

import useAddBreadcrumbs from '../../page-header/breadcrumbs/useAddBreadcrumbs'
import { fetchPatientAppointments } from '../../scheduling/appointments/appointments-slice'
import useTranslator from '../../shared/hooks/useTranslator'
import { RootState } from '../../shared/store'

interface Props {
Expand All @@ -15,7 +15,7 @@ interface Props {
const AppointmentsList = (props: Props) => {
const dispatch = useDispatch()
const history = useHistory()
const { t } = useTranslation()
const { t } = useTranslator()

const { patientId } = props
const { appointments } = useSelector((state: RootState) => state.appointments)
Expand Down
4 changes: 2 additions & 2 deletions src/patients/care-plans/AddCarePlanModal.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Modal } from '@hospitalrun/components'
import { addMonths } from 'date-fns'
import React, { useState, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'

import useTranslator from '../../shared/hooks/useTranslator'
import CarePlan from '../../shared/model/CarePlan'
import { RootState } from '../../shared/store'
import { addCarePlan } from '../patient-slice'
Expand All @@ -26,7 +26,7 @@ const initialCarePlanState = {
const AddCarePlanModal = (props: Props) => {
const { show, onCloseButtonClick } = props
const dispatch = useDispatch()
const { t } = useTranslation()
const { t } = useTranslator()
const { carePlanError, patient } = useSelector((state: RootState) => state.patient)
const [carePlan, setCarePlan] = useState(initialCarePlanState)

Expand Down