All files / src/components/Buttons/SaveOrUpdateDynamicAlertButton index.tsx

0% Statements 0/46
0% Branches 0/18
0% Functions 0/4
0% Lines 0/44

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79                                                                                                                                                             
import { useNavigate, useParams } from "react-router-dom";
import { routes } from "../../../routes";
import { showSnackbar } from "../../../store/features/snackbar/snackbarSlice";
import CustomButton from "../../common/CustomButton";
import { useDispatch } from "react-redux";
import {
  useCreateDynamicAlertMutation,
  useUpdateDynamicAlertMutation,
} from "../../../store/features/dynamicAlerts/api";
import handlePlaybookSavingValidations from "../../../utils/playbook/handlePlaybookSavingValidations";
import { useUpdatePlaybookMutation } from "../../../store/features/playbook/api";
import stateToPlaybook from "../../../utils/parser/playbook/stateToPlaybook";
import { useStartWorkflowExecutionMutation } from "../../../store/features/workflow/api";
 
function SaveOrUpdateDynamicAlertButton() {
  const { alert_id: alertId } = useParams();
  const navigate = useNavigate();
  const dispatch = useDispatch();
  const [triggerStartWorkflow, { isLoading: startExecutionLoading }] =
    useStartWorkflowExecutionMutation();
 
  const [triggerSave, { isLoading: saveLoading }] =
    useCreateDynamicAlertMutation();
  const [triggerUpdate, { isLoading: updateLoading }] =
    useUpdateDynamicAlertMutation();
  const [triggerUpdatePlaybook, { isLoading: updatePbLoading }] =
    useUpdatePlaybookMutation();
 
  const loading = saveLoading || updateLoading || updatePbLoading;
 
  const handleUpdate = async () => {
    Iif (!alertId) return;
    try {
      const error = handlePlaybookSavingValidations();
      Iif (error) throw error;
      const response = await triggerUpdatePlaybook(stateToPlaybook()).unwrap();
 
      Iif (response.success) {
        const workflowUpdateResponse = await triggerUpdate().unwrap();
        Iif (workflowUpdateResponse.success) {
          await triggerStartWorkflow(alertId).unwrap();
          navigate(routes.DYNAMIC_ALERTS);
        }
      }
    } catch (e: any) {
      dispatch(showSnackbar(e?.message?.toString() ?? e.toString()));
    }
  };
 
  const handleSave = async () => {
    try {
      let response: any = {};
      response = await triggerSave().unwrap();
      Iif (response.success) {
        await triggerStartWorkflow(response.workflow?.id).unwrap();
        navigate(routes.DYNAMIC_ALERTS);
      }
    } catch (e: any) {
      dispatch(showSnackbar(e?.message?.toString() ?? e.toString()));
    }
  };
 
  const handleClick = () => {
    if (alertId) {
      handleUpdate();
    } else {
      handleSave();
    }
  };
 
  return (
    <CustomButton disabled={loading} className="w-fit" onClick={handleClick}>
      {loading ? "Loading.." : alertId ? "Update and Start" : "Save and Start"}
    </CustomButton>
  );
}
 
export default SaveOrUpdateDynamicAlertButton;