{"version":3,"file":"WorkflowActions.mjs","names":["React","useState","useCallback","useMemo","useRef","useTranslation","DocumentIcon","FluentDialog","SideSheet","useAxiosMutate","ConfigService","UdpActionCard","getIconFromName","TransactionActionTypeEnums","TransactionRuleTypeEnums","useTransactionEngine","UdpTransactionCustomPage","useHandleAxiosSnackbar","TransactionActionButton","t0","$","_c","icon","primaryText","secondaryText","onClick","action","disabled","loading","t1","actionCardIcon","t2","t3","t4","WorkflowActions","transaction","closeSideSheet","refreshGridData","handleSidesheet","onTransactionStatusChange","dialogOpen","setDialogOpen","dialogUserStrings","setDialogUserStrings","selectedAction","setSelectedAction","sideSheetOpen","setSideSheetOpen","setLoading","sidesheetPrimaryButtonDisabled","setSidesheetPrimaryButtonDisabled","sidesheetSecondaryAction","setSidesheetSecondaryAction","formRef","getTransactionTypeTransactionActions","transactionTypeId","handleErrorSnackbar","handleSuccessSnackbar","handleOnCloseSideSheet","pageSidesheetParams","sidesheetParams","handleSubmitWorkflowAction","current","form","submit","handleSubmitSuccessfulWorkflowAction","response","data","currentStatusId","transactionTypeTransactionActions","Sidesheet","transactionData","postTransactionData","productV1ApiUrl","method","i18n","t","handleDialogOpen","title","message","handleDialogClose","submitTransactionAction","url","transactionTypeTransactionActionId","transactionId","status","apiResult","actionApiResult","isSuccessful","success","defaultValue","errorMessage","Error","event","handleConfirmActionDialog","handleOnActionClick","pageId","parameters","transactionActionId","Open_Edit_Transaction_Sidesheet","Update_Status","Product_Action","enableConfirmationDialog","name","description","TransactionActionButtons","length","map","undefined","label"],"sources":["../../../../../src/udp/pages/UdpTransactionsPage/sidesheets/WorkflowActions.jsx"],"sourcesContent":["import React, { useState, useCallback, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { DocumentIcon } from '@fluentui/react-icons';\nimport { FluentDialog, SideSheet } from '../../../../UI';\nimport { useAxiosMutate } from '../../../../utilities';\nimport { ConfigService } from '../../../../configService';\nimport { UdpActionCard } from '../../../../UI/inputs/buttons/UdpActionCard/UdpActionCard';\nimport { getIconFromName } from '../../../../utilities/tree';\nimport './WorkflowActions.css';\nimport {\n  TransactionActionTypeEnums,\n  TransactionRuleTypeEnums\n} from '../../../../enums/unitySystemEnums';\nimport { useTransactionEngine } from '../../../../utilities/transactions/useTransactionEngine';\nimport UdpTransactionCustomPage from '../components/UdpTransactionCustomPage';\nimport { useHandleAxiosSnackbar } from '../../../../utilities/apiHelpers';\n\nconst TransactionActionButton = ({\n  icon,\n  primaryText,\n  secondaryText,\n  onClick,\n  action,\n  disabled,\n  loading\n}) => {\n  const actionCardIcon = useMemo(() => getIconFromName(icon), [icon]);\n\n  return (\n    <UdpActionCard\n      icon={actionCardIcon ? actionCardIcon : DocumentIcon}\n      primaryText={primaryText}\n      secondaryText={secondaryText}\n      disabled={disabled}\n      loading={loading}\n      onClick={() => {\n        onClick(action);\n      }}\n    />\n  );\n};\n\nconst WorkflowActions = ({\n  transaction,\n  closeSideSheet,\n  refreshGridData,\n  handleSidesheet,\n  onTransactionStatusChange\n}) => {\n  const [dialogOpen, setDialogOpen] = useState(false);\n  const [dialogUserStrings, setDialogUserStrings] = useState(null);\n  const [selectedAction, setSelectedAction] = useState(null);\n  const [sideSheetOpen, setSideSheetOpen] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [sidesheetPrimaryButtonDisabled, setSidesheetPrimaryButtonDisabled] =\n    useState(false);\n  // A secondary header button contributed by the rendered page, in the shape\n  // `{ label, onClick, disabled?, icon? }`. The page registers it while it is\n  // mounted and passes null to withdraw it, so the button cannot outlive the\n  // page that owns its handler.\n  const [sidesheetSecondaryAction, setSidesheetSecondaryAction] =\n    useState(null);\n\n  const formRef = useRef(null);\n\n  const { getTransactionTypeTransactionActions } = useTransactionEngine(\n    transaction?.transactionTypeId\n  );\n\n  const { handleErrorSnackbar, handleSuccessSnackbar } =\n    useHandleAxiosSnackbar();\n\n  const handleOnCloseSideSheet = useCallback(() => {\n    setSideSheetOpen(false);\n    // Dropped here as well as on the page's unmount, so a page that forgets to\n    // withdraw its action cannot leave a stale button on the next one.\n    setSidesheetSecondaryAction(null);\n  }, []);\n\n  // Memoized: the page receives this object and registers its action from an\n  // effect keyed on it, so a fresh object each render would loop.\n  const pageSidesheetParams = useMemo(\n    () => ({\n      sidesheetParams: {\n        setSidesheetPrimaryButtonDisabled,\n        setSidesheetSecondaryAction\n      }\n    }),\n    []\n  );\n\n  const handleSubmitWorkflowAction = useCallback(async () => {\n    setLoading(true);\n    await formRef.current?.form?.submit();\n    setLoading(false);\n  }, [formRef]);\n\n  const handleSubmitSuccessfulWorkflowAction = useCallback(\n    (response) => {\n      handleOnCloseSideSheet();\n      closeSideSheet();\n      refreshGridData();\n      onTransactionStatusChange?.(\n        response?.data?.transaction?.currentStatusId,\n        transaction\n      );\n    },\n    [\n      handleOnCloseSideSheet,\n      refreshGridData,\n      closeSideSheet,\n      onTransactionStatusChange,\n      transaction\n    ]\n  );\n\n  const transactionTypeTransactionActions = useMemo(() => {\n    return (\n      getTransactionTypeTransactionActions(\n        transaction,\n        TransactionRuleTypeEnums.Sidesheet\n      ) || []\n    );\n  }, [getTransactionTypeTransactionActions, transaction]);\n\n  // Base URL and url get overwritten in postTransactionData function call in handleConfirmActionDialog()\n  const [{ data: transactionData }, postTransactionData] = useAxiosMutate(\n    `${ConfigService.productV1ApiUrl}`,\n    'udptransactiontypeTransactionAction',\n    {\n      method: 'post'\n    },\n    {}\n  );\n\n  const i18n = useTranslation().t;\n\n  const handleDialogOpen = useCallback((title, message) => {\n    setDialogUserStrings({ title, message });\n    setDialogOpen(true);\n  }, []);\n\n  const handleDialogClose = useCallback(() => {\n    setDialogOpen(false);\n  }, []);\n\n  const submitTransactionAction = useCallback(\n    async (action) => {\n      setLoading(true);\n      try {\n        const response = await postTransactionData({\n          // Change URL to config\n          url:\n            `${ConfigService.productV1ApiUrl}` +\n            `/udptransactiontypeTransactionAction/${action.transactionTypeTransactionActionId}/transaction/${transaction.transactionId}/submit`,\n          data: {}\n        });\n        const { status, data } = response || {};\n        const apiResult = data?.actionApiResult;\n\n        if (status === 200) {\n          const isSuccessful = !apiResult || apiResult.success;\n\n          if (isSuccessful) {\n            handleSuccessSnackbar(\n              i18n('transactions.sidesheet.workflowSubmitSuccess', {\n                defaultValue: 'Successfully submitted!'\n              })\n            );\n            closeSideSheet();\n            refreshGridData();\n            onTransactionStatusChange?.(\n              data?.transaction?.currentStatusId,\n              transaction\n            );\n          } else if (apiResult?.errorMessage) {\n            handleErrorSnackbar(new Error(apiResult.errorMessage));\n          }\n        }\n      } catch (event) {\n        handleSuccessSnackbar(i18n(event.message));\n      }\n      setLoading(false);\n    },\n    [\n      postTransactionData,\n      transaction,\n      i18n,\n      closeSideSheet,\n      refreshGridData,\n      handleSuccessSnackbar,\n      handleErrorSnackbar,\n      onTransactionStatusChange\n    ]\n  );\n\n  const handleConfirmActionDialog = useCallback(async () => {\n    // Keep the dialog open with its progress bar until the submit completes\n    await submitTransactionAction(selectedAction);\n    handleDialogClose();\n  }, [handleDialogClose, submitTransactionAction, selectedAction]);\n\n  const handleOnActionClick = useCallback(\n    (action) => {\n      const pageId = action.parameters.pageId;\n      setSelectedAction(action);\n      if (pageId) {\n        setSideSheetOpen(true);\n      } else if (\n        action.transactionActionId ==\n        TransactionActionTypeEnums.Open_Edit_Transaction_Sidesheet\n      ) {\n        handleSidesheet('edit', true, transaction);\n      } else if (\n        (action.transactionActionId ==\n          TransactionActionTypeEnums.Update_Status ||\n          action.transactionActionId ==\n            TransactionActionTypeEnums.Product_Action) &&\n        action.parameters?.enableConfirmationDialog === false\n      ) {\n        // Confirmation dialog disabled on this action — submit it directly\n        submitTransactionAction(action);\n      } else {\n        handleDialogOpen(action.name, action.description);\n      }\n    },\n    [handleDialogOpen, transaction, handleSidesheet, submitTransactionAction]\n  );\n\n  const TransactionActionButtons = useMemo(() => {\n    if (!transactionTypeTransactionActions.length) {\n      return null;\n    }\n    return transactionTypeTransactionActions?.map((action) => (\n      <TransactionActionButton\n        key={action.transactionTypeTransactionActionId}\n        primaryText={action.name}\n        secondaryText={action.description}\n        icon={action.icon}\n        onClick={handleOnActionClick}\n        action={action}\n        disabled={loading}\n        loading={\n          loading &&\n          !dialogOpen &&\n          !sideSheetOpen &&\n          selectedAction?.transactionTypeTransactionActionId === action.transactionTypeTransactionActionId\n        }\n      />\n    ));\n  }, [\n    transactionTypeTransactionActions,\n    handleOnActionClick,\n    loading,\n    dialogOpen,\n    sideSheetOpen,\n    selectedAction\n  ]);\n\n  return (\n    <>\n      <div className='transaction-action-buttons-container'>\n        {TransactionActionButtons}\n      </div>\n\n      {dialogUserStrings && (\n        <FluentDialog\n          title={i18n('transactions.sidesheet.proceedConfirmTitle', {\n            defaultValue: 'Are you sure you want to proceed with \"{{title}}\"?',\n            title: dialogUserStrings.title\n          })}\n          message={dialogUserStrings.message}\n          labelOne={i18n('common.confirm', { defaultValue: 'Confirm' })}\n          actionOne={handleConfirmActionDialog}\n          labelTwo={i18n('common.cancel', { defaultValue: 'Cancel' })}\n          actionTwo={handleDialogClose}\n          disableOne={loading}\n          disableTwo={loading}\n          progress={loading}\n          open={dialogOpen}\n          handleClose={loading ? undefined : handleDialogClose}\n        />\n      )}\n\n      <SideSheet\n        open={sideSheetOpen}\n        title={selectedAction?.name} // To Change\n        onClose={handleOnCloseSideSheet}\n        width={600}\n        buttonLabel={i18n('common.submit', { defaultValue: 'Submit' })}\n        onSubmit={handleSubmitWorkflowAction}\n        progress={loading}\n        variant='indeterminate'\n        color='primary'\n        buttonOneDisabled={loading || sidesheetPrimaryButtonDisabled}\n        buttonTwoLabel={sidesheetSecondaryAction?.label}\n        buttonTwoIcon={sidesheetSecondaryAction?.icon}\n        buttonTwoAction={sidesheetSecondaryAction?.onClick}\n        buttonTwoDisabled={loading || sidesheetSecondaryAction?.disabled}\n      >\n        {selectedAction && selectedAction.parameters?.pageId && (\n          <UdpTransactionCustomPage\n            pageId={selectedAction.parameters.pageId}\n            transaction={transaction}\n            formRef={formRef}\n            transactionTypeTransactionActionId={\n              selectedAction.transactionTypeTransactionActionId\n            }\n            onSubmitSuccess={handleSubmitSuccessfulWorkflowAction}\n            refreshGridData={refreshGridData}\n            additionalPageParms={pageSidesheetParams}\n          />\n        )}\n      </SideSheet>\n    </>\n  );\n};\n\nexport default WorkflowActions;\n"],"mappings":"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"}