Skip to content

Commit

Permalink
Merge pull request #457 from beda-software/context-readonly-widgets
Browse files Browse the repository at this point in the history
Update readonly QR form item and group controls
  • Loading branch information
ir4y authored Feb 25, 2025
2 parents 69ff00c + fe2e854 commit 7f022cf
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { useContext } from 'react';
import { FormProvider, useForm } from 'react-hook-form';
import {
calcInitialContext,
Expand All @@ -8,6 +9,13 @@ import {
QuestionnaireResponseFormProvider,
} from 'sdc-qrf';

import {
ItemControlGroupItemReadonlyWidgetsContext,
ItemControlQuestionItemReadonlyWidgetsContext,
} from 'src/components/BaseQuestionnaireResponseForm/context';
import { MarkdownRenderControl } from 'src/components/BaseQuestionnaireResponseForm/readonly-widgets/MarkdownRender';

import { AudioAttachment } from './readonly-widgets/AudioAttachment';
import { QuestionBoolean } from './readonly-widgets/boolean';
import { QuestionChoice } from './readonly-widgets/choice';
import { QuestionDateTime } from './readonly-widgets/date';
Expand All @@ -19,7 +27,6 @@ import { AnxietyScore, DepressionScore } from './readonly-widgets/score';
import { QuestionText, TextWithInput } from './readonly-widgets/string';
import { TimeRangePickerControl } from './readonly-widgets/TimeRangePickerControl';
import { UploadFile } from './readonly-widgets/UploadFile';
import { AudioAttachment } from './readonly-widgets/AudioAttachment';

interface Props extends Partial<QRFContextData> {
formData: QuestionnaireResponseFormData;
Expand All @@ -40,6 +47,9 @@ export function ReadonlyQuestionnaireResponseForm(props: Props) {

const formValues = watch();

const ItemControlQuestionItemReadonlyWidgetsFromContext = useContext(ItemControlQuestionItemReadonlyWidgetsContext);
const ItemControlGroupItemReadonlyWidgetsFromContext = useContext(ItemControlGroupItemReadonlyWidgetsContext);

return (
<FormProvider {...methods}>
<form>
Expand All @@ -54,6 +64,7 @@ export function ReadonlyQuestionnaireResponseForm(props: Props) {
row: Row,
'time-range-picker': TimeRangePickerControl,
...itemControlGroupItemComponents,
...ItemControlGroupItemReadonlyWidgetsFromContext,
}}
questionItemComponents={{
text: QuestionText,
Expand All @@ -76,7 +87,9 @@ export function ReadonlyQuestionnaireResponseForm(props: Props) {
'depression-score': DepressionScore,
'input-inside-text': TextWithInput,
'audio-recorder-uploader': AudioAttachment,
'markdown-editor': MarkdownRenderControl,
...itemControlQuestionItemComponents,
...ItemControlQuestionItemReadonlyWidgetsFromContext,
}}
>
<>
Expand Down
3 changes: 3 additions & 0 deletions src/components/BaseQuestionnaireResponseForm/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import { BaseQuestionnaireResponseFormProps } from '.';
export const ItemControlQuestionItemWidgetsContext = createContext<ItemControlQuestionItemComponentMapping>({});
export const ItemControlGroupItemWidgetsContext = createContext<ItemControlGroupItemComponentMapping>({});

export const ItemControlQuestionItemReadonlyWidgetsContext = createContext<ItemControlQuestionItemComponentMapping>({});
export const ItemControlGroupItemReadonlyWidgetsContext = createContext<ItemControlGroupItemComponentMapping>({});

interface BaseQuestionnaireResponseFormPropsContextProps extends BaseQuestionnaireResponseFormProps {
submitting: boolean;
debouncedSaveDraft?: DebouncedFunc<(currentFormValues: FormItems) => Promise<void>>;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import classNames from 'classnames';
import Markdown from 'react-markdown';
import { QuestionItemProps } from 'sdc-qrf';

import { useFieldController } from 'src/components/BaseQuestionnaireResponseForm/hooks';

import s from '../ReadonlyWidgets.module.scss';
import { S } from '../ReadonlyWidgets.styles';

export function MarkdownRenderControl({ parentPath, questionItem }: QuestionItemProps) {
const { linkId, text } = questionItem;
const fieldName = [...parentPath, linkId, 0, 'value', 'string'];
const { value } = useFieldController(fieldName, questionItem);

return (
<S.Question className={classNames(s.question, s.column, 'form__question')}>
<span className={s.questionText}>{text}</span>
<Markdown>{value || '-'}</Markdown>
</S.Question>
);
}

0 comments on commit 7f022cf

Please sign in to comment.