Skip to content

Commit

Permalink
SSGSO-7: Configure PRO form language
Browse files Browse the repository at this point in the history
  • Loading branch information
reagan-meant committed Nov 4, 2024
1 parent a797bc4 commit e29dfeb
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export type SmsFormData = {
body: string;
source: string;
patientUuid: string;
locale: string;
};

export type UpdateSmsPayload = SmsFormData & {};
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,21 @@ import { first } from 'rxjs/operators';
import { useTranslation } from 'react-i18next';
import { z } from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';
import { ExtensionSlot, showSnackbar, useConnectivity, useLayoutType, usePatient } from '@openmrs/esm-framework';
import {
ExtensionSlot,
showSnackbar,
useConnectivity,
useLayoutType,
usePatient,
useSession,
} from '@openmrs/esm-framework';
import { type DefaultPatientWorkspaceProps } from '@openmrs/esm-patient-common-lib';
import { type SmsFormData } from './common/types';
import styles from './send-sms-form.scss';
import { saveQuestionnaire } from './common';
import SendSmsField from './send-sms-input.componet';
import { Select } from '@carbon/react';
import { SelectItem } from '@carbon/react';

interface SendSmsFormProps extends DefaultPatientWorkspaceProps {
showPatientHeader?: boolean;
Expand All @@ -27,6 +36,7 @@ const SendSmsForm: React.FC<SendSmsFormProps> = ({
const isTablet = useLayoutType() === 'tablet';
const isOnline = useConnectivity();
const { patientUuid, patient } = usePatient();
const { locale, allowedLocales } = useSession();
const visitHeaderSlotState = useMemo(() => ({ patientUuid }), [patientUuid]);
const [isSubmitting, setIsSubmitting] = useState(false);

Expand All @@ -38,6 +48,7 @@ const SendSmsForm: React.FC<SendSmsFormProps> = ({
const phoneValidation = /^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/;
return z.object({
to: z.string().regex(phoneValidation, { message: 'Invalid phone number' }),
locale: z.string().min(1, { message: 'Language selection is required' }),
});
}, []);

Expand All @@ -58,17 +69,23 @@ const SendSmsForm: React.FC<SendSmsFormProps> = ({
promptBeforeClosing(() => isDirty);
}, [isDirty, promptBeforeClosing, patient]);

useEffect(() => {
if (locale) {
methods.setValue('locale', locale);
}
}, [locale]);

const onSubmit = useCallback(
(data: SmsFormData, event: any) => {
if (!patientUuid) {
return;
}

setIsSubmitting(true);
const { to, locale } = data;

const { to } = data;
const guid = uuid();
const body = window.location.host.concat(`/outcomes?pid=${guid}`);
const body = window.location.host.concat(`/outcomes?pid=${guid}&locale=${locale}`);
const source = window.location.host;

let payload: SmsFormData = {
Expand All @@ -77,6 +94,7 @@ const SendSmsForm: React.FC<SendSmsFormProps> = ({
body: body,
source: source,
patientUuid: patientUuid,
locale: locale,
};

const abortController = new AbortController();
Expand Down Expand Up @@ -157,6 +175,18 @@ const SendSmsForm: React.FC<SendSmsFormProps> = ({
inputFieldType="text"
inputFieldPlaceholder={t('smsReceiver', 'SMS Recipient phone number')}
/>
<div>
<Select
id="locale-select"
labelText={t('selectLanguage', 'Select Language')}
invalid={!!methods.formState.errors.locale}
invalidText={methods.formState.errors.locale?.message}
{...methods.register('locale')}>
{allowedLocales?.map((allowedLocale) => (
<SelectItem key={allowedLocale} value={allowedLocale} text={allowedLocale} />
))}
</Select>
</div>
</Stack>
</div>
<ButtonSet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const payload: SmsFormData = {
body: bodyValue,
source: sourceValue,
patientUuid: mockPatient.id,
locale: '',
};

const testProps = {
Expand All @@ -36,6 +37,7 @@ describe('SendSmsForm', () => {
render(<SendSmsForm {...testProps} />);

expect(screen.getByText(/Phone number/i)).toBeInTheDocument();
expect(screen.getByRole('combobox', { name: /Select Language/i })).toBeInTheDocument();
expect(screen.getByRole('button', { name: /Send SMS/i })).toBeInTheDocument();
});

Expand Down

0 comments on commit e29dfeb

Please sign in to comment.