diff --git a/src/components/Encounter/EncounterActions.tsx b/src/components/Encounter/EncounterActions.tsx
new file mode 100644
index 00000000000..5919290ddfc
--- /dev/null
+++ b/src/components/Encounter/EncounterActions.tsx
@@ -0,0 +1,202 @@
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import { Link } from "raviger";
+import { useTranslation } from "react-i18next";
+import { toast } from "sonner";
+
+import { cn } from "@/lib/utils";
+
+import {
+ AlertDialog,
+ AlertDialogAction,
+ AlertDialogCancel,
+ AlertDialogContent,
+ AlertDialogDescription,
+ AlertDialogFooter,
+ AlertDialogHeader,
+ AlertDialogTitle,
+ AlertDialogTrigger,
+} from "@/components/ui/alert-dialog";
+import { Button, buttonVariants } from "@/components/ui/button";
+import { DropdownMenuItem } from "@/components/ui/dropdown-menu";
+
+import { PLUGIN_Component } from "@/PluginEngine";
+import routes from "@/Utils/request/api";
+import mutate from "@/Utils/request/mutate";
+import { Encounter, completedEncounterStatus } from "@/types/emr/encounter";
+
+interface EncounterActionsProps {
+ encounter: Encounter;
+ variant?: "default" | "outline" | "ghost";
+ size?: "default" | "sm" | "lg" | "icon";
+ disableButtons?: boolean;
+ className?: string;
+ layout?: "dropdown" | "standalone";
+}
+
+export default function EncounterActions({
+ encounter,
+ variant = "outline",
+ size = "default",
+ disableButtons = false,
+ className,
+ layout = "standalone",
+}: EncounterActionsProps) {
+ const { t } = useTranslation();
+ const queryClient = useQueryClient();
+
+ const { mutate: updateEncounter } = useMutation({
+ mutationFn: mutate(routes.encounter.update, {
+ pathParams: { id: encounter.id },
+ }),
+ onSuccess: () => {
+ toast.success(t("encounter_marked_as_complete"));
+ queryClient.invalidateQueries({ queryKey: ["encounter", encounter.id] });
+ },
+ onError: () => {
+ toast.error(t("error_updating_encounter"));
+ },
+ });
+
+ const handleMarkAsComplete = () => {
+ updateEncounter({
+ ...encounter,
+ status: "completed",
+ organizations: encounter.organizations.map((org) => org.id),
+ patient: encounter.patient.id,
+ encounter_class: encounter.encounter_class,
+ period: encounter.period,
+ hospitalization: encounter.hospitalization,
+ priority: encounter.priority,
+ external_identifier: encounter.external_identifier,
+ facility: encounter.facility.id,
+ });
+ };
+
+ if (completedEncounterStatus.includes(encounter.status) || disableButtons) {
+ return null;
+ }
+
+ const ActionItems = () => {
+ if (layout === "dropdown") {
+ return (
+ <>
+
{appointment.patient.phone_number}
++ + {appointment.patient.phone_number} + +
- {t("emergency")}: {appointment.patient.emergency_phone_number} + {t("emergency")}:{" "} + {appointment.patient.emergency_phone_number && ( + + {appointment.patient.emergency_phone_number} + + )}