{"version":3,"file":"UdpTransactionCalendar.mjs","names":["React","useCallback","useEffect","useMemo","useState","useTranslation","UdpCalendar","useTransactionEngine","useAxiosMutate","ConfigService","AmbientCard","UdpSearchEnums","UdpFlexbox","UdpBadge","UdpPrimaryActionHeader","CALENDAR_VIEW_OPTIONS","normalizeCalendarView","value","normalized","toString","toLowerCase","includes","buildDomainSearchField","domainName","propertyName","UdpBusinessDomainPrefix","format12HourTime","date","hours","getHours","minutes","getMinutes","ampm","hour12","padStart","formatDate","d","toISOString","split","STATUS_BG_COLORS","warning","success","info","gray","DEFAULT_STATUS_BG","UdpTransactionCalendar","props","transactionTypeId","searchMethodObject","calendarViewConfiguration","openWorkflowActionTransaction","handleCalendarApiCallback","openAddTransaction","gridTitle","hideCreateTransaction","onShowGridView","domainStartDateProperty","domainEndDateProperty","t","getTransactionTypeLabel","transactionTypeStatusColorsMap","transactionTypePageConfiguration","headerConfig","title","hideCreate","primaryAction","undefined","label","createTransactionButtonLabel","defaultValue","iconName","onClick","secondaryActions","iconOnly","initialCalendarView","defaultCalendarViewType","calendarRange","setCalendarRange","calendarEvents","setCalendarEvents","handleCalendarDatesSet","rangeInfo","start","Date","end","hasDomainDateConfig","Boolean","searchObject","baseFilters","searchField","searchOperator","searchValue","dateRangeFilters","startField","endField","rangeStartFormatted","rangeEndFormatted","push","extraFilters","filterElements","eagerLoad","getAll","concat","loading","executeSearch","productV1ApiUrl","method","legendItems","Object","entries","map","colorKey","color","applyCalendarResponse","response","status","pageList","data","formatted","transaction","ebo","entityBusinessObject","startValue","endValue","eventStart","statusName","udpTransactionUdpTransactionTypeStatus","name","statusColorKey","statusBg","entityBusinessKey","backgroundColor","borderColor","extendedProps","filter","refreshCalendarEvents","cancelled","then","catch","length","marginBottom","display","width","height","marginRight","borderRadius","event","now","startMs","getTime","endMs","isPast","bg","opacity","startDate","endDate","startDay","toDateString","endDay","segmentSpansMultipleDays","isStart","isEnd","timeRowHtml","html","domainPropertyToDisplay"],"sources":["../../../../src/udp/pages/UdpTransactionsPage/UdpTransactionCalendar.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { UdpCalendar } from '../../../UI/templates/calendar/UdpCalendar';\nimport { useTransactionEngine } from '../../../utilities/transactions/useTransactionEngine';\nimport { useAxiosMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { AmbientCard } from '../../../UI/surfaces/cards/AmbientCard';\nimport { UdpSearchEnums } from '../../../enums';\nimport { UdpFlexbox } from '../../../UI/fluent-web-components/UdpFlexbox';\nimport { UdpBadge } from '../../../UI/fluent-web-components/UdpBadge';\nimport { UdpPrimaryActionHeader } from '../../../UI/fluent-web-components/UdpPrimaryActionHeader';\n\nconst CALENDAR_VIEW_OPTIONS = ['day', 'week', 'month'];\n\nconst normalizeCalendarView = (value) => {\n  const normalized = (value || '').toString().toLowerCase();\n  return CALENDAR_VIEW_OPTIONS.includes(normalized) ? normalized : 'week';\n};\n\nconst buildDomainSearchField = (domainName, propertyName) =>\n  `${UdpSearchEnums.UdpBusinessDomainPrefix}.${domainName}.${propertyName}`;\n\nfunction format12HourTime(date) {\n  if (!date) {\n    return '';\n  }\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const ampm = hours >= 12 ? 'PM' : 'AM';\n  const hour12 = hours % 12 || 12; // Convert hours to 12-hour format\n\n  return `${hour12}:${minutes.toString().padStart(2, '0')} ${ampm}`;\n}\n\nconst formatDate = d => d.toISOString().split('T')[0];\n\nconst STATUS_BG_COLORS = {\n  warning: '#fff4ce',\n  success: '#bdedbd',\n  info: '#a9d3f2',\n  gray: '#f5f5f5'\n};\nconst DEFAULT_STATUS_BG = '#f5f5f5';\n\nconst UdpTransactionCalendar = (props) => {\n  const {\n    transactionTypeId,\n    domainName,\n    searchMethodObject,\n    calendarViewConfiguration,\n    openWorkflowActionTransaction,\n    handleCalendarApiCallback,\n    openAddTransaction,\n    gridTitle,\n    hideCreateTransaction = false,\n    onShowGridView\n  } = props;\n  const domainStartDateProperty = calendarViewConfiguration?.domainStartDateProperty ?? '';\n  const domainEndDateProperty = calendarViewConfiguration?.domainEndDateProperty ?? '';\n\n  const { t } = useTranslation();\n  const {\n    getTransactionTypeLabel,\n    transactionTypeStatusColorsMap,\n    transactionTypePageConfiguration\n  } = useTransactionEngine(transactionTypeId);\n\n  const headerConfig = useMemo(() => {\n    const title =\n      gridTitle || transactionTypePageConfiguration?.gridTitle || domainName;\n    const hideCreate =\n      hideCreateTransaction ||\n      transactionTypePageConfiguration?.hideCreateTransaction;\n    return {\n      title,\n      primaryAction: hideCreate\n        ? undefined\n        : {\n            label:\n              transactionTypePageConfiguration?.createTransactionButtonLabel ||\n              t('transactions.grid.domainEntry', {\n                defaultValue: '{{domainName}} Entry',\n                domainName\n              }),\n            iconName: 'add',\n            onClick: () => openAddTransaction?.()\n          },\n      secondaryActions: [\n        {\n          iconOnly: true,\n          iconName: 'table',\n          label: t('transactions.calendar.gridView', {\n            defaultValue: 'Grid View'\n          }),\n          onClick: () => onShowGridView?.()\n        }\n      ]\n    };\n  }, [\n    gridTitle,\n    domainName,\n    hideCreateTransaction,\n    transactionTypePageConfiguration,\n    openAddTransaction,\n    onShowGridView,\n    t\n  ]);\n\n  const [initialCalendarView] = useState(\n    normalizeCalendarView(calendarViewConfiguration?.defaultCalendarViewType)\n  );\n  const [calendarRange, setCalendarRange] = useState(null);\n  const [calendarEvents, setCalendarEvents] = useState([]);\n\n  const handleCalendarDatesSet = useCallback((rangeInfo) => {\n    setCalendarRange({\n      start: new Date(rangeInfo.start),\n      end: new Date(rangeInfo.end),\n    });\n  }, []);\n\n  const hasDomainDateConfig = Boolean(\n    domainName && domainStartDateProperty && domainEndDateProperty\n  );\n\n  const searchObject = useMemo(() => {\n    const baseFilters = [\n      {\n        searchField: 'transactionTypeId',\n        searchOperator: '=',\n        searchValue: transactionTypeId\n      },\n      {\n        searchField: 'isDeleted',\n        searchOperator: '=',\n        searchValue: false\n      }\n    ];\n\n    const dateRangeFilters = [];\n    if (\n      domainName &&\n      domainStartDateProperty &&\n      domainEndDateProperty &&\n      calendarRange?.start &&\n      calendarRange?.end\n    ) {\n      const startField = buildDomainSearchField(domainName, domainStartDateProperty);\n      const endField = buildDomainSearchField(domainName, domainEndDateProperty);\n      const rangeStartFormatted = formatDate(calendarRange.start);\n      const rangeEndFormatted = formatDate(calendarRange.end);\n\n      dateRangeFilters.push(\n        {\n          searchField: startField,\n          searchOperator: '<=',\n          searchValue: rangeEndFormatted\n        },\n        {\n          searchField: endField,\n          searchOperator: '>=',\n          searchValue: rangeStartFormatted\n        }\n      );\n    }\n    const extraFilters = searchMethodObject?.filterElements || [];\n\n    return {\n      eagerLoad: true,\n      getAll: true,\n      ...(searchMethodObject || {}),\n      filterElements: baseFilters.concat(dateRangeFilters, extraFilters)\n    };\n  }, [\n    transactionTypeId,\n    searchMethodObject,\n    domainName,\n    domainStartDateProperty,\n    domainEndDateProperty,\n    calendarRange\n  ]);\n\n  const [{ loading }, executeSearch] = useAxiosMutate(\n    ConfigService.productV1ApiUrl,\n    'UdpTransaction/search',\n    { method: 'post' }\n  );\n\n  const legendItems = useMemo(\n    () =>\n      Object.entries(transactionTypeStatusColorsMap ?? {}).map(\n        ([label, colorKey]) => ({\n          label,\n          color: STATUS_BG_COLORS[colorKey] ?? DEFAULT_STATUS_BG\n        })\n      ),\n    [transactionTypeStatusColorsMap]\n  );\n\n  const applyCalendarResponse = useCallback((response) => {\n    if (response?.status !== 200) {\n      setCalendarEvents([]);\n      return;\n    }\n    const pageList = response.data?.pageList ?? [];\n    const formatted = pageList\n      .map((transaction) => {\n        const ebo = transaction?.entityBusinessObject ?? {};\n        const startValue = ebo[domainStartDateProperty];\n        const endValue = ebo[domainEndDateProperty];\n        const eventStart = startValue ?? endValue;\n        if (!eventStart) return null;\n        const statusName =\n          transaction?.udpTransactionUdpTransactionTypeStatus?.name;\n        const statusColorKey = transactionTypeStatusColorsMap?.[statusName];\n        const statusBg =\n          STATUS_BG_COLORS[statusColorKey] ?? DEFAULT_STATUS_BG;\n        return {\n          title:\n            getTransactionTypeLabel(transaction) ??\n            transaction?.entityBusinessKey ??\n            domainName,\n          start: eventStart,\n          ...(startValue && endValue ? { end: endValue } : {}),\n          backgroundColor: 'transparent', // Necessary to override FullCalendar's default coloring for multi-day events\n          borderColor: 'transparent', // Necessary to override FullCalendar's default coloring for multi-day events\n          extendedProps: { ...transaction, statusBg }\n        };\n      })\n      .filter(Boolean);\n    setCalendarEvents(formatted);\n  }, [\n    domainStartDateProperty,\n    domainEndDateProperty,\n    domainName,\n    getTransactionTypeLabel,\n    transactionTypeStatusColorsMap\n  ]);\n\n  const refreshCalendarEvents = useCallback(async () => {\n    if (!hasDomainDateConfig) return;\n    if (!calendarRange?.start || !calendarRange?.end) return;\n    try {\n      const response = await executeSearch({ data: searchObject });\n      applyCalendarResponse(response);\n    } catch {\n      setCalendarEvents([]);\n    }\n    // executeSearch intentionally excluded — axios-hooks returns a new identity each render.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [hasDomainDateConfig, calendarRange, searchObject, applyCalendarResponse]);\n\n  useEffect(() => {\n    if (!hasDomainDateConfig) return;\n    if (!calendarRange?.start || !calendarRange?.end) return;\n\n    let cancelled = false;\n    executeSearch({ data: searchObject })\n      .then((response) => {\n        if (cancelled) return;\n        applyCalendarResponse(response);\n      })\n      .catch(() => {\n        if (!cancelled) setCalendarEvents([]);\n      });\n\n    return () => { cancelled = true; };\n    // executeSearch intentionally excluded — axios-hooks returns a new identity each render.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [searchObject, hasDomainDateConfig, calendarRange, applyCalendarResponse]);\n\n  useEffect(() => {\n    if (!handleCalendarApiCallback) return;\n    handleCalendarApiCallback(refreshCalendarEvents);\n    return () => handleCalendarApiCallback(null);\n  }, [handleCalendarApiCallback, refreshCalendarEvents]);\n\n  return (\n    <div>\n      <UdpPrimaryActionHeader\n        title={headerConfig.title}\n        primaryAction={headerConfig.primaryAction}\n        secondaryActions={headerConfig.secondaryActions}\n      />\n      {legendItems.length > 0 && (\n        <div style={{ marginBottom: '4px' }}>\n          <UdpFlexbox direction=\"row\" wrap=\"wrap\" justify=\"flex-end\">\n            {legendItems.map(({ label, color }) => (\n              <UdpBadge key={label} appearance=\"ghost\">\n                <span\n                  slot=\"start\"\n                  style={{\n                    display: 'inline-block',\n                    width: 'var(--udp-spacing-md, 8px)',\n                    height: 'var(--udp-spacing-md, 8px)',\n                    marginRight: 'var(--udp-spacing-sm, 4px)',\n                    borderRadius: '50%',\n                    backgroundColor: color\n                  }}\n                />\n                {label}\n              </UdpBadge>\n            ))}\n          </UdpFlexbox>\n        </div>\n      )}\n      <AmbientCard fullWidth>\n        <UdpCalendar\n          initialView={initialCalendarView}\n          toggleViewOptions=\"dayGridDay,dayGridWeek,dayGridMonth\"\n          events={calendarEvents}\n          eventOnclick={(info) => { openWorkflowActionTransaction(info.event.extendedProps); }}\n          eventContent={info => {\n            const now = Date.now();\n            const startMs = info.event.start?.getTime() ?? 0;\n            const endMs = info.event.end?.getTime() ?? startMs;\n            const isPast = endMs < now;\n            const bg = info.event.extendedProps?.statusBg ?? '#f5f5f5';\n            const opacity = 1; //isPast ? 0.65 : 1; // Keeping past events at full opacity as per UX feedback, but can be adjusted if needed.\n            const startDate = info.event.start;\n            const endDate = info.event.end;\n            const startDay = startDate ? startDate.toDateString() : null;\n            const endDay = endDate ? endDate.toDateString() : null;\n            const segmentSpansMultipleDays =\n              info.isStart && info.isEnd && endDay && startDay !== endDay;\n            let timeRowHtml = '';\n            if (segmentSpansMultipleDays) {\n              timeRowHtml = `<div style=\"display:flex; justify-content:space-between; gap:8px; word-wrap: break-word; white-space: normal;\"><b>${format12HourTime(startDate)}</b><b>${format12HourTime(endDate)}</b></div>`;\n            } else if (info.isStart && info.isEnd) {\n              timeRowHtml = `<div style=\"word-wrap: break-word; white-space: normal;\"><b>${format12HourTime(startDate)}${endDate ? ' - ' + format12HourTime(endDate) : ''}</b></div>`;\n            } else if (info.isStart) {\n              timeRowHtml = `<div style=\"word-wrap: break-word; white-space: normal;\"><b>${format12HourTime(startDate)}</b></div>`;\n            } else if (info.isEnd) {\n              timeRowHtml = `<div style=\"word-wrap: break-word; white-space: normal; text-align:right;\"><b>${format12HourTime(endDate)}</b></div>`;\n            }\n            return {\n              html: `\n              <div style=\"width:100%; cursor:pointer; padding:5px; background-color: ${bg}; color: #242424; opacity: ${opacity};\">\n                ${timeRowHtml}\n                <div style=\"word-wrap: break-word; white-space: normal;\">\n                  ${info.event.title+' - '+info.event.extendedProps.entityBusinessObject[calendarViewConfiguration?.domainPropertyToDisplay]}\n                </div>\n              </div>\n            `,\n            };\n          }}\n          width={'auto'}\n          height={700}\n          dayHeaders={true}\n          datesSet={handleCalendarDatesSet}\n        />\n      </AmbientCard>\n    </div>\n  );\n};\n\nexport default UdpTransactionCalendar;\n"],"mappings":"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"}