Skip to content

Commit

Permalink
Working Demo
Browse files Browse the repository at this point in the history
  • Loading branch information
gigincg committed Jan 3, 2025
1 parent ab34a7f commit 7cc5e59
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 38 deletions.
1 change: 1 addition & 0 deletions src/Routers/routes/ConsultationRoutes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const consultationRoutes: AppRoutes = {
facilityId={facilityId}
encounterId={encounterId}
questionnaireSlug="encounter"
subjectType="encounter"
patientId={patientId}
/>
),
Expand Down
10 changes: 3 additions & 7 deletions src/components/Questionnaire/QuestionTypes/DateTimeQuestion.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { format } from "date-fns";
import dayjs from "dayjs";
import { useState } from "react";

import { cn } from "@/lib/utils";

Expand Down Expand Up @@ -37,11 +36,9 @@ export function DateTimeQuestion({
clearError,
classes,
}: DateTimeQuestionProps) {
const [currentValue, setCurrentValue] = useState(() => {
return questionnaireResponse.values[0]?.value
? new Date(questionnaireResponse.values[0].value as string)
: undefined;
});
const currentValue = questionnaireResponse.values[0]?.value
? new Date(questionnaireResponse.values[0].value as string)
: undefined;

const handleSelect = (date: Date | undefined) => {
if (!date) {
Expand Down Expand Up @@ -102,7 +99,6 @@ export function DateTimeQuestion({
if (value?.date) {
const date = dayjs(value.date).toDate();
console.log(value, date);
setCurrentValue(date);
handleUpdate(date);
}
}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { MinusCircledIcon } from "@radix-ui/react-icons";
import React, { useState } from "react";
import React from "react";

import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
Expand Down Expand Up @@ -34,7 +34,6 @@ interface MedicationRequestQuestionProps {
updateQuestionnaireResponseCB: (response: QuestionnaireResponse) => void;
disabled?: boolean;
}

const MEDICATION_REQUEST_INITIAL_VALUE: MedicationRequest = {
status: "active",
intent: "order",
Expand All @@ -45,19 +44,14 @@ const MEDICATION_REQUEST_INITIAL_VALUE: MedicationRequest = {
authored_on: new Date().toISOString(),
dosage_instruction: [],
};

export function MedicationRequestQuestion({
question,
questionnaireResponse,
updateQuestionnaireResponseCB,
disabled,
}: MedicationRequestQuestionProps) {
const [medications, setMedications] = useState<MedicationRequest[]>(() => {
return (
(questionnaireResponse.values?.[0]?.value as MedicationRequest[]) || []
);
});

const medications =
(questionnaireResponse.values?.[0]?.value as MedicationRequest[]) || [];
const handleAddMedication = (medication: Code) => {
const newMedications: MedicationRequest[] = [
...medications,
Expand All @@ -77,23 +71,20 @@ export function MedicationRequestQuestion({
],
});
};

const handleRemoveMedication = (index: number) => {
const newMedications = medications.filter((_, i) => i !== index);
updateQuestionnaireResponseCB({
...questionnaireResponse,
values: [{ type: "medication_request", value: newMedications }],
});
};

const handleUpdateMedication = (
index: number,
updates: Partial<MedicationRequest>,
) => {
const newMedications = medications.map((medication, i) =>
i === index ? { ...medication, ...updates } : medication,
);

updateQuestionnaireResponseCB({
...questionnaireResponse,
values: [
Expand All @@ -104,18 +95,12 @@ export function MedicationRequestQuestion({
],
});
};

return (
<div className="space-y-4">
<Label className="text-base font-medium">
{question.text}
{question.required && <span className="ml-1 text-red-500">*</span>}
</Label>
<ScribeStructuredInput
value={medications}
onChange={(value) => {
if (value) {
setMedications(value);
updateQuestionnaireResponseCB({
...questionnaireResponse,
values: [
Expand All @@ -128,7 +113,7 @@ export function MedicationRequestQuestion({
}
}}
name="Medication Request"
prompt={`An array of objects of the following type: {
prompt={`An array of objects of the following type, based on a SNOWMED Medication Product like "Paracetamol containing product": {
status?: "active" | "on-hold" | "ended" | "stopped" | "completed" | "cancelled" | "entered-in-error" | "draft" | "unknown",
intent?: "proposal" | "plan" | "order" | "original_order" | "reflex_order" | "filler_order" | "instance_order",
category?: "inpatient" | "outpatient" | "community" | "discharge",
Expand Down Expand Up @@ -272,6 +257,10 @@ export function MedicationRequestQuestion({
]}
className="rounded-lg border p-4"
>
<Label className="text-base font-medium">
{question.text}
{question.required && <span className="ml-1 text-red-500">*</span>}
</Label>
{medications.length > 0 && (
<div className="rounded-lg border space-y-4">
<ul className="space-y-2 divide-y-2 divide-gray-200 divide-dashed">
Expand Down Expand Up @@ -301,7 +290,6 @@ export function MedicationRequestQuestion({
</div>
);
}

export const MedicationRequestItem: React.FC<{
medication: MedicationRequest;
disabled?: boolean;
Expand All @@ -317,7 +305,6 @@ export const MedicationRequestItem: React.FC<{
dosage_instruction: [{ ...dosageInstruction, ...updates }],
});
};

return (
<div className="p-3 justify-between group focus-within:ring-2 ring-gray-300 rounded-lg space-y-2">
<div className="flex items-center justify-between">
Expand Down Expand Up @@ -403,7 +390,6 @@ export const MedicationRequestItem: React.FC<{
/>
</div>
</div>

<div className="flex gap-2">
<div className="flex-1">
<Label className="mb-1 block text-sm font-medium pr-4">Site</Label>
Expand All @@ -416,7 +402,6 @@ export const MedicationRequestItem: React.FC<{
/>
</div>
</div>

<div className="flex items-center gap-2 mt-2">
<Checkbox
id={`prn-checkbox-${medication.medication?.code}`}
Expand All @@ -437,7 +422,6 @@ export const MedicationRequestItem: React.FC<{
As Needed / PRN
</Label>
</div>

{medication.dosage_instruction[0]?.as_needed_boolean ? (
<div className="flex gap-2">
<div className="flex-1">
Expand Down Expand Up @@ -485,7 +469,6 @@ export const MedicationRequestItem: React.FC<{
</div>
</div>
)}

<div className="flex gap-2">
<div className="flex-1">
<Label className="mb-1 block text-sm font-medium">
Expand All @@ -511,14 +494,12 @@ export const MedicationRequestItem: React.FC<{
</div>
</div>
</div>

{/* <div className="font-mono text-xs whitespace-pre-wrap mt-8">
{JSON.stringify(medication, null, 2)}
</div> */}
</div>
);
};

const reverseFrequencyOption = (
option: MedicationRequest["dosage_instruction"][0]["timing"],
) => {
Expand All @@ -529,7 +510,6 @@ const reverseFrequencyOption = (
value.timing.repeat.period === option?.repeat?.period,
)?.[0] as keyof typeof FREQUENCY_OPTIONS;
};

// TODO: verify period_unit is correct
const FREQUENCY_OPTIONS = {
BD: {
Expand Down
4 changes: 2 additions & 2 deletions src/components/Questionnaire/QuestionnaireForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -431,14 +431,14 @@ export function QuestionnaireForm({
)}

{/* Add a Preview of the QuestionnaireForm */}
{import.meta.env.DEV && (
{/* {import.meta.env.DEV && (
<div className="p-4 space-y-6">
<h2 className="text-xl font-semibold">QuestionnaireForm</h2>
<pre className="text-sm text-muted-foreground">
{JSON.stringify(questionnaireForms, null, 2)}
</pre>
</div>
)}
)} */}
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,14 @@ const AppointmentActions = ({
const isToday = isSameDay(appointment.token_slot.start_datetime, new Date());

if (["fulfilled", "cancelled", "entered_in_error"].includes(currentStatus)) {
return null;
return (
<div className="flex flex-col gap-2 w-64 mx-auto">
<Button variant="outline" onClick={onViewPatient} size="lg">
<PersonIcon className="size-4 mr-2" />
{t("view_patient")}
</Button>
</div>
);
}

if (!["booked", "checked_in", "in_consultation"].includes(currentStatus)) {
Expand Down

0 comments on commit 7cc5e59

Please sign in to comment.