{"version":3,"file":"OutlookIntegrationSideSheet.mjs","names":["React","useCallback","useEffect","useMemo","useState","Box","Divider","TextField","Typography","useTheme","OutlookLogoIcon","useTranslation","SideSheet","AmbientAlert","AmbientCard","FluentButton","getOutlookStatus","refreshOutlookStatus","subscribeOutlookStatus","disconnect","getAuthorizeUrl","getOutlookRedirectUri","sendMail","OutlookIntegrationSideSheet","open","onClose","closeOnConnect","appName","connectDescription","disclaimerText","footerNote","whyConnectTitle","whyConnectDescription","whyConnectItems","showTestEmail","testEmailDefaults","testEmailCopy","t","theme","resolvedAppName","defaultValue","status","setStatus","initializing","setInitializing","loaded","action","setAction","feedback","setFeedback","testTo","setTestTo","to","testSubject","setTestSubject","testBody","setTestBody","unsubscribe","catch","err","severity","message","extractErrorMessage","finally","connected","mailboxPrincipal","prev","handler","event","window","origin","location","payload","data","type","then","addEventListener","removeEventListener","openPopup","url","width","height","left","screen","top","features","handleConnect","redirectUri","authorizeUrl","popup","Error","handleDisconnect","handleSendTest","trim","missingRecipient","fallbackSubject","subject","fallbackBody","body","success","error","expiresLabel","formatExpiresAt","expiresAt","connectionDescription","mailbox","connectButtonLabel","connectButtonDisabled","disconnectDisabled","sendTestDisabled","resolvedDisclaimer","resolvedWhyConnectTitle","resolvedWhyConnectDescription","resolvedFooterNote","fontSize","color","palette","info","dark","date","margin","title","toLabel","target","value","subjectLabel","bodyLabel","sending","cta","Array","isArray","length","map","item","index","String","Date","Number","isNaN","getTime","toLocaleString","fallback","responseMessage","response","statusText"],"sources":["../../../src/integrations/outlook/OutlookIntegrationSideSheet.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n  Box,\n  Divider,\n  TextField,\n  Typography,\n  useTheme,\n} from '@material-ui/core';\nimport { OutlookLogoIcon } from '@fluentui/react-icons';\nimport { useTranslation } from 'react-i18next';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { AmbientAlert } from '../../UI/feedback/AmbientAlert';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\nimport {\n  getOutlookStatus,\n  refreshOutlookStatus,\n  subscribeOutlookStatus,\n} from './outlookIntegrationStatus';\nimport {\n  disconnect,\n  getAuthorizeUrl,\n  getOutlookRedirectUri,\n  sendMail,\n} from './outlookIntegrationClient';\n\nexport const OutlookIntegrationSideSheet = ({\n  open,\n  onClose,\n  closeOnConnect = false,\n  appName,\n  connectDescription,\n  disclaimerText,\n  footerNote,\n  whyConnectTitle,\n  whyConnectDescription,\n  whyConnectItems,\n  showTestEmail = false,\n  testEmailDefaults,\n  testEmailCopy,\n}) => {\n  const { t } = useTranslation();\n  const theme = useTheme();\n\n  const resolvedAppName =\n    appName || t('outlook.appName', { defaultValue: 'this app' });\n  const [status, setStatus] = useState(() => getOutlookStatus());\n  const [initializing, setInitializing] = useState(!status.loaded);\n  const [action, setAction] = useState(null);\n  const [feedback, setFeedback] = useState(null);\n  const [testTo, setTestTo] = useState(testEmailDefaults?.to ?? '');\n  const [testSubject, setTestSubject] = useState('');\n  const [testBody, setTestBody] = useState('');\n\n  useEffect(() => {\n    const unsubscribe = subscribeOutlookStatus(setStatus);\n    return () => unsubscribe();\n  }, []);\n\n  useEffect(() => {\n    if (!open) return;\n    setInitializing(true);\n    refreshOutlookStatus()\n      .catch(err => {\n        setFeedback({\n          severity: 'error',\n          message: extractErrorMessage(\n            err,\n            t('outlook.errors.status', {\n              defaultValue: 'Unable to load Outlook status.'\n            })\n          ),\n        });\n      })\n      .finally(() => setInitializing(false));\n  }, [open, t]);\n\n  useEffect(() => {\n    if (!showTestEmail || !status.connected || !status.mailboxPrincipal) {\n      return;\n    }\n    setTestTo(prev => (prev ? prev : status.mailboxPrincipal));\n  }, [showTestEmail, status.connected, status.mailboxPrincipal]);\n\n  useEffect(() => {\n    const handler = event => {\n      if (!event || !window || event.origin !== window.location.origin) {\n        return;\n      }\n      const payload =\n        typeof event.data === 'string'\n          ? { type: event.data }\n          : event.data || {};\n      if (payload.type === 'outlookConnectSuccess') {\n        refreshOutlookStatus().then(() => {\n          setFeedback({\n            severity: 'success',\n            message: t('outlook.connectSuccess', {\n              defaultValue: 'Outlook connected successfully.'\n            }),\n          });\n          if (closeOnConnect) {\n            onClose?.();\n          }\n        });\n      } else if (payload.type === 'outlookConnectFailure') {\n        setFeedback({\n          severity: 'error',\n          message:\n            payload.message ||\n            t('outlook.connectFailed', {\n              defaultValue: 'Outlook connection failed. Please try again.'\n            }),\n        });\n      }\n    };\n    window.addEventListener('message', handler);\n    return () => window.removeEventListener('message', handler);\n  }, [closeOnConnect, onClose, t]);\n\n  const openPopup = useCallback(url => {\n    if (typeof window === 'undefined') return null;\n    const width = 600;\n    const height = 600;\n    const left = (window.screen.width - width) / 2;\n    const top = (window.screen.height - height) / 2;\n    const features = `width=${width},height=${height},top=${top},left=${left},status=no,toolbar=no,menubar=no,location=no`;\n    return window.open(url, 'OutlookConnectPopup', features);\n  }, []);\n\n  const handleConnect = useCallback(async () => {\n    setAction('authorize');\n    try {\n      const redirectUri = getOutlookRedirectUri();\n      const { authorizeUrl } = await getAuthorizeUrl({ redirectUri });\n      const popup = openPopup(authorizeUrl);\n      if (!popup) {\n        throw new Error(\n          t('outlook.errors.popupBlocked', {\n            defaultValue: 'Popup blocked. Please allow popups and try again.'\n          })\n        );\n      }\n    } catch (err) {\n      setFeedback({\n        severity: 'error',\n        message: extractErrorMessage(\n          err,\n          t('outlook.errors.connect', {\n            defaultValue: 'Unable to start the Outlook connection.'\n          })\n        ),\n      });\n    } finally {\n      setAction(null);\n    }\n  }, [openPopup, t]);\n\n  const handleDisconnect = useCallback(async () => {\n    setAction('disconnect');\n    try {\n      await disconnect();\n      await refreshOutlookStatus();\n      setFeedback({\n        severity: 'success',\n        message: t('outlook.disconnectSuccess', {\n          defaultValue: 'Outlook disconnected.'\n        }),\n      });\n    } catch (err) {\n      setFeedback({\n        severity: 'error',\n        message: extractErrorMessage(\n          err,\n          t('outlook.errors.disconnect', {\n            defaultValue: 'Unable to disconnect from Outlook.'\n          })\n        ),\n      });\n    } finally {\n      setAction(null);\n    }\n  }, [t]);\n\n  const handleSendTest = useCallback(async () => {\n    const to = testTo.trim();\n    if (!to) {\n      setFeedback({\n        severity: 'error',\n        message:\n          testEmailCopy?.missingRecipient ||\n          t('outlook.errors.testTo', {\n            defaultValue: 'Please enter a recipient email.'\n          }),\n      });\n      return;\n    }\n\n    const fallbackSubject =\n      testEmailDefaults?.subject ||\n      t('outlook.sendTest.defaultSubject', {\n        defaultValue: '{{appName}} test email',\n        appName: resolvedAppName\n      });\n    const fallbackBody =\n      testEmailDefaults?.body ||\n      t('outlook.sendTest.defaultBody', {\n        defaultValue: 'This is a test email sent from {{appName}} via Outlook.',\n        appName: resolvedAppName\n      });\n\n    setAction('send-mail');\n    try {\n      await sendMail({\n        to,\n        subject: testSubject.trim() || fallbackSubject,\n        body: testBody.trim() || fallbackBody,\n      });\n      setFeedback({\n        severity: 'success',\n        message:\n          testEmailCopy?.success ||\n          t('outlook.sendTest.success', { defaultValue: 'Test email sent.' }),\n      });\n    } catch (err) {\n      setFeedback({\n        severity: 'error',\n        message: extractErrorMessage(\n          err,\n          testEmailCopy?.error ||\n            t('outlook.errors.sendTest', {\n              defaultValue: 'Unable to send test email.'\n            })\n        ),\n      });\n    } finally {\n      setAction(null);\n    }\n  }, [\n    resolvedAppName,\n    t,\n    testBody,\n    testEmailCopy?.error,\n    testEmailCopy?.missingRecipient,\n    testEmailCopy?.success,\n    testEmailDefaults?.body,\n    testEmailDefaults?.subject,\n    testSubject,\n    testTo,\n  ]);\n\n  const expiresLabel = useMemo(\n    () => formatExpiresAt(status.expiresAt),\n    [status.expiresAt]\n  );\n  const connectionDescription = useMemo(() => {\n    if (status.connected && status.mailboxPrincipal) {\n      return t('outlook.status.connectedAs', {\n        defaultValue: 'Connected as {{mailbox}}',\n        mailbox: status.mailboxPrincipal,\n      });\n    }\n    if (status.connected) {\n      return t('outlook.status.connectedNoMailbox', {\n        defaultValue: 'Outlook is connected.'\n      });\n    }\n    return (\n      connectDescription ||\n      t('outlook.connectDescription', {\n        defaultValue:\n          'Link your account to Outlook to manage your emails directly from our app.',\n        appName: resolvedAppName\n      })\n    );\n  }, [connectDescription, resolvedAppName, status.connected, status.mailboxPrincipal, t]);\n\n  const connectButtonLabel = useMemo(\n    () =>\n      status.connected\n        ? t('outlook.status.connected', { defaultValue: 'Connected' })\n        : t('outlook.connectCta', { defaultValue: 'Connect To Outlook' }),\n    [status.connected, t]\n  );\n\n  const connectButtonDisabled = useMemo(\n    () => status.connected || action === 'authorize',\n    [status.connected, action]\n  );\n\n  const disconnectDisabled = useMemo(() => action === 'disconnect', [action]);\n  const sendTestDisabled = useMemo(\n    () => !status.connected || action === 'send-mail',\n    [status.connected, action]\n  );\n\n  const resolvedDisclaimer =\n    disclaimerText ||\n    t('outlook.sidesheetDisclaimer', {\n      defaultValue:\n        'By signing in you are giving {{appName}} access to send emails on your behalf using your Outlook Mailbox.',\n      appName: resolvedAppName\n    });\n  const resolvedWhyConnectTitle =\n    whyConnectTitle ||\n    t('outlook.whyConnect.title', { defaultValue: 'Why connect to Outlook?' });\n  const resolvedWhyConnectDescription =\n    whyConnectDescription ||\n    t('outlook.whyConnect.description', {\n      defaultValue:\n        'Certain actions within {{appName}} that require emailing will be enabled, such as:',\n      appName: resolvedAppName\n    });\n  const resolvedFooterNote =\n    footerNote ||\n    t('outlook.todoNotes', {\n      defaultValue:\n        'The {{appName}} backend securely stores your Mail.Send token and updates this status automatically.',\n      appName: resolvedAppName\n    });\n\n  return (\n    <SideSheet\n      title={t('outlook.title', { defaultValue: 'Outlook Integration' })}\n      open={open}\n      onClose={onClose}\n      width={560}\n    >\n      <AmbientAlert\n        alertSeverity=\"info\"\n        showAlert={true}\n        alertMessage={resolvedDisclaimer}\n      />\n\n      {feedback && (\n        <AmbientAlert\n          alertSeverity={feedback.severity}\n          showAlert={true}\n          alertMessage={feedback.message}\n          closeAlert={() => setFeedback(null)}\n        />\n      )}\n\n      {status.error && (\n        <AmbientAlert\n          alertSeverity=\"warning\"\n          showAlert={true}\n          alertMessage={status.error}\n        />\n      )}\n\n      <Box\n        display=\"flex\"\n        flexDirection=\"column\"\n        alignItems=\"center\"\n        mt={2}\n        mb={2}\n        textAlign=\"center\"\n      >\n        <OutlookLogoIcon\n          style={{\n            fontSize: 128,\n            width: 128,\n            height: 128,\n            color: theme.palette.info.dark,\n          }}\n        />\n        <Typography variant=\"h6\" gutterBottom>\n          {status.connected\n            ? t('outlook.status.header.connected', {\n                defaultValue: 'Connected to Outlook'\n              })\n            : t('outlook.connectHeader', {\n                defaultValue: 'Connect to Outlook'\n              })}\n        </Typography>\n        <Typography variant=\"body2\" color=\"textSecondary\">\n          {connectionDescription}\n        </Typography>\n        {expiresLabel && (\n          <Typography variant=\"caption\" color=\"textSecondary\">\n            {t('outlook.status.expiresAt', {\n              defaultValue: 'Token expires {{date}}',\n              date: expiresLabel,\n            })}\n          </Typography>\n        )}\n      </Box>\n\n      {initializing && (\n        <Box mb={2}>\n          <Typography variant=\"body2\" color=\"textSecondary\">\n            {t('outlook.status.loading', {\n              defaultValue: 'Checking current Outlook connection...'\n            })}\n          </Typography>\n        </Box>\n      )}\n\n      <Box mb={status.connected ? 2 : 4}>\n        <FluentButton\n          variant=\"contained\"\n          color=\"primary\"\n          fullWidth\n          onClick={handleConnect}\n          disabled={connectButtonDisabled}\n        >\n          {connectButtonLabel}\n        </FluentButton>\n      </Box>\n\n      {status.connected && (\n        <>\n          <FluentButton\n            variant=\"outlined\"\n            color=\"primary\"\n            fullWidth\n            onClick={handleDisconnect}\n            disabled={disconnectDisabled}\n          >\n            {t('outlook.disconnect', { defaultValue: 'Disconnect Outlook' })}\n          </FluentButton>\n\n          {showTestEmail && (\n            <>\n              <Divider style={{ margin: '24px 0' }} />\n              <Typography variant=\"subtitle1\" gutterBottom>\n                {testEmailCopy?.title ||\n                  t('outlook.sendTest.title', {\n                    defaultValue: 'Send a Test Email'\n                  })}\n              </Typography>\n              <Box display=\"flex\" flexDirection=\"column\" gridGap={12} mb={2}>\n                <TextField\n                  label={\n                    testEmailCopy?.toLabel ||\n                    t('outlook.sendTest.to', { defaultValue: 'To' })\n                  }\n                  variant=\"outlined\"\n                  size=\"small\"\n                  fullWidth\n                  value={testTo}\n                  onChange={event => setTestTo(event.target.value)}\n                />\n                <TextField\n                  label={\n                    testEmailCopy?.subjectLabel ||\n                    t('outlook.sendTest.subject', { defaultValue: 'Subject' })\n                  }\n                  variant=\"outlined\"\n                  size=\"small\"\n                  fullWidth\n                  value={testSubject}\n                  onChange={event => setTestSubject(event.target.value)}\n                />\n                <TextField\n                  label={\n                    testEmailCopy?.bodyLabel ||\n                    t('outlook.sendTest.body', { defaultValue: 'Body' })\n                  }\n                  variant=\"outlined\"\n                  size=\"small\"\n                  multiline\n                  minRows={3}\n                  fullWidth\n                  value={testBody}\n                  onChange={event => setTestBody(event.target.value)}\n                />\n              </Box>\n              <FluentButton\n                variant=\"contained\"\n                color=\"primary\"\n                fullWidth\n                onClick={handleSendTest}\n                disabled={sendTestDisabled}\n              >\n                {action === 'send-mail'\n                  ? testEmailCopy?.sending ||\n                    t('outlook.sendTest.sending', { defaultValue: 'Sending...' })\n                  : testEmailCopy?.cta ||\n                    t('outlook.sendTest.cta', {\n                      defaultValue: 'Send Test Email'\n                    })}\n              </FluentButton>\n            </>\n          )}\n\n          <Divider style={{ margin: '24px 0' }} />\n        </>\n      )}\n\n      <AmbientCard title={resolvedWhyConnectTitle} fullWidth>\n        <Box ml={2}>\n          <Typography variant=\"body2\">{resolvedWhyConnectDescription}</Typography>\n          {Array.isArray(whyConnectItems) && whyConnectItems.length > 0 && (\n            <ul>\n              {whyConnectItems.map((item, index) => (\n                <li key={`${index}-${String(item)}`}>\n                  <Typography variant=\"body2\">{item}</Typography>\n                </li>\n              ))}\n            </ul>\n          )}\n        </Box>\n      </AmbientCard>\n\n      <Box mt={3}>\n        <Typography variant=\"caption\" color=\"textSecondary\">\n          {resolvedFooterNote}\n        </Typography>\n      </Box>\n    </SideSheet>\n  );\n};\n\nfunction formatExpiresAt(expiresAt) {\n  if (!expiresAt) return null;\n  const date = new Date(expiresAt);\n  return Number.isNaN(date.getTime()) ? null : date.toLocaleString();\n}\n\nfunction extractErrorMessage(error, fallback) {\n  if (!error) return fallback;\n  if (typeof error === 'string') return error;\n  if (typeof error.message === 'string' && error.message.trim()) {\n    return error.message;\n  }\n  const responseMessage =\n    error?.response?.data || error?.response?.statusText || error?.message;\n  if (typeof responseMessage === 'string' && responseMessage.trim()) {\n    return responseMessage;\n  }\n  return fallback;\n}\n\nexport default OutlookIntegrationSideSheet;\n"],"mappings":"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"}