{"version":3,"file":"mttFunctions.mjs","names":["plotY","item","data","nodeWidth","plotDate","dates","map","push","date","unique","Set","mappedToObjects","value","plots","i","length","mergePlots","o","res","filter","includes","order","plot","plotX","timeline","subThread","threadHeight","xLine","toString","rowIndex","reduce","s","a","thread","concatIndex","result","v","index","results","entry","xplot","formatDate","Date","toLocaleDateString","getChildObject","childObj","details","id","eventTypeID","primaryContextID","secondaryContextID","transactionType","description","shortDescription","data2","data1","data3","serializeFields","mttEventsNewEventType","threadId","timelineCategory","color","icon","getEventsObjects","object","obj","formatDataWithTimelineCategoryName","tempObject","forEach","events","event","threadEvents","mttThreadMttThreadEvents","udpMttThreadUdpMttThreadEvents","foundThreadEvent","find","threadEvent","undefined","iconID","existsTimelineFlag","mttThreadMttConfig","udpMttThreadUdpMttConfig","tmpObj","sequence","timelineCategoryName","name","cleanObjects","subThreadCount","dateObj","existsSubThreadFlag","foundIndex","findIndex","searchObj","foundIndex2","plotCategoryBar","timelineNumber","orderByDate","b","orderByDateTimeline","orderByDateSubThread","formatDataWithTimelineCategoryNameOrderedByDate","inputData","sort","maxElement","objArr","Array","e","val","objArr2","maxElements","objs","objArr3","ob","j","k","flat"],"sources":["../../../../src/componentSystems/multiThreadTimeline/functions/mttFunctions.js"],"sourcesContent":["// Plot Y\nexport const plotY = (item, data, nodeWidth) => {\n  const plotDate = [item];\n\n  //let demoDates = [\"5/6/2022\",\"5/6/2022\",\"5/7/2022\",\"5/8/2022\",]\n  let dates = [];\n  data &&\n    data.map((item) => {\n      dates.push(item.date);\n    });\n\n  let unique = [...new Set(dates)];\n\n  const mappedToObjects = unique.map(function (value) {\n    return { date: value };\n  });\n\n  const plots = [];\n  for (let i = 1; i <= unique.length; i++) {\n    plots.push(i);\n  }\n\n  let mergePlots = mappedToObjects.map((o, i) => ({\n    ...o,\n    plots: plots[i] || null\n  }));\n\n  const res = mergePlots\n    .filter(({ date }) => plotDate.includes(date))\n    .map(({ plots }) => plots);\n\n  //console.log('res', mergePlots.slice(-1).pop().plots);\n  //const width = mergePlots.slice(-1).pop().plots;\n\n  const order = res.map((item) => {\n    return item;\n  });\n  const plot = order * nodeWidth - nodeWidth;\n\n  return plot;\n};\n\n// Plot X\nexport const plotX = (timeline, subThread, data, threadHeight) => {\n  const xLine =\n    data &&\n    data.map((item) => {\n      return item.timeline.toString() + '.' + item.subThread.toString();\n    });\n\n  let unique = [...new Set(xLine)];\n\n  const rowIndex = unique.reduce(function (s, a) {\n    s.push({ thread: a });\n    return s;\n  }, []);\n\n  const concatIndex = timeline + '.' + subThread;\n  const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index }));\n  const results = result.filter(function (entry) {\n    return entry.thread === concatIndex;\n  });\n  const xplot = results[0] && results[0].rowIndex * threadHeight;\n  return xplot;\n};\n\nfunction formatDate(date) {\n  return new Date(date).toLocaleDateString('en-US');\n}\n\n// function getChildObject(childObj) {\n//   const date = formatDate(childObj.date);\n//   return {\n//     date: date,\n//     details: {\n//       id: childObj.id,\n//       eventTypeID: childObj.eventTypeID,\n//       contextKey: childObj.contextKey,\n//       secondaryContextID: childObj.secondaryContextID,\n//       date: date,\n//       transactionType: childObj.transactionType,\n//       description: childObj.description,\n//       shortDescription: childObj.shortDescription,\n//       status: childObj.status,\n//       data: childObj.data,\n//       user: childObj.user,\n//       serializeFields: childObj.serializeFields,\n//       mttEventsNewEventType: childObj.mttEventsNewEventType,\n//       threadId: childObj.threadId,\n//       timelineCategory: childObj.timelineCategory,\n//     },\n//   };\n// }\n\nfunction getChildObject(childObj) {\n  const date = formatDate(childObj.date);\n  return {\n    date: date,\n    details: {\n      id: childObj.id,\n      eventTypeID: childObj.eventTypeID,\n      primaryContextID: childObj.primaryContextID,\n      secondaryContextID: childObj.secondaryContextID,\n      date: date,\n      transactionType: childObj.transactionType,\n      description: childObj.description,\n      shortDescription: childObj.shortDescription,\n      data2: childObj.data2,\n      data1: childObj.data1,\n      data3: childObj.data3,\n      serializeFields: childObj.serializeFields,\n      mttEventsNewEventType: childObj.mttEventsNewEventType,\n      threadId: childObj.threadId,\n      timelineCategory: childObj.timelineCategory,\n      color: childObj.color,\n      icon: childObj.icon\n    }\n  };\n}\n\n// function getEventsObjects(object, timeline) {\n//   return object.map(obj => {\n//     const date = formatDate(obj.date);\n//     return {\n//       date: date,\n//       details: {\n//         id: obj.id,\n//         eventTypeID: obj.eventTypeID,\n//         contextKey: obj.contextKey,\n//         secondaryContextID: obj.secondaryContextID,\n//         date: date,\n//         transactionType: obj.transactionType,\n//         description: obj.description,\n//         shortDescription: obj.shortDescription,\n//         status: obj.status,\n//         data: obj.data,\n//         user: obj.user,\n//         serializeFields: obj.serializeFields,\n//         mttEventsNewEventType: obj.mttEventsNewEventType,\n//         threadId: obj.threadId,\n//         timelineCategory: obj.timelineCategory,\n//         timeline: timeline,\n//       },\n//     };\n//   });\n// }\n\nfunction getEventsObjects(object, timeline) {\n  return object.map((obj) => {\n    const date = formatDate(obj.date);\n    return {\n      date: date,\n      details: {\n        id: obj.id,\n        eventTypeID: obj.eventTypeID,\n        primaryContextID: obj.primaryContextID,\n        secondaryContextID: obj.secondaryContextID,\n        date: date,\n        transactionType: obj.transactionType,\n        description: obj.description,\n        shortDescription: obj.shortDescription,\n        data2: obj.data2,\n        data1: obj.data1,\n        data3: obj.data3,\n        serializeFields: obj.serializeFields,\n        mttEventsNewEventType: obj.mttEventsNewEventType,\n        threadId: obj.threadId,\n        timelineCategory: obj.timelineCategory,\n        timeline: timeline,\n        color: obj.color,\n        icon: obj.icon\n      }\n    };\n  });\n}\n\nexport const formatDataWithTimelineCategoryName = (object) => {\n  let tempObject = [];\n\n  object.forEach((obj) => {\n    obj.events.forEach((event) => {\n      const threadEvents =\n        obj.mttThreadMttThreadEvents ||\n        obj.udpMttThreadUdpMttThreadEvents ||\n        [];\n      const foundThreadEvent = threadEvents.find(\n        (threadEvent) =>\n          event.transactionType?.toString() ===\n          threadEvent.transactionType?.toString()\n      );\n      if (foundThreadEvent) {\n        event.color =\n          foundThreadEvent.color === null ||\n          foundThreadEvent.color === undefined ||\n          foundThreadEvent.color === '' ||\n          foundThreadEvent.color === ' '\n            ? obj.color\n            : foundThreadEvent.color;\n        event.icon = foundThreadEvent.icon;\n      } else {\n        event.color = obj.color;\n        event.icon = obj.iconID;\n      }\n    });\n  });\n\n  object.forEach((obj) => {\n    let existsTimelineFlag = false;\n    const mttThreadMttConfig =\n      obj.mttThreadMttConfig || obj.udpMttThreadUdpMttConfig;\n    tempObject.forEach((tmpObj) => {\n      if (mttThreadMttConfig?.sequence === tmpObj.timeline) {\n        tmpObj.dates.push(\n          ...getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n        );\n        existsTimelineFlag = true;\n      }\n    });\n    if (!existsTimelineFlag) {\n      tempObject.push({\n        timeline: mttThreadMttConfig?.sequence,\n        timelineCategoryName: mttThreadMttConfig?.name,\n        color: obj.color,\n        iconID: obj.iconID,\n        dates: getEventsObjects(obj.events, mttThreadMttConfig?.sequence)\n      });\n    }\n  });\n\n  let cleanObjects = [];\n  tempObject.forEach((obj) => {\n    let subThreadCount = 1;\n    obj.dates.forEach((dateObj) => {\n      let existsSubThreadFlag = false;\n      const foundIndex = cleanObjects.findIndex((searchObj) => {\n        return (\n          searchObj.timeline === dateObj.details.timeline &&\n          searchObj.dates[0].details.secondaryContextID ===\n            dateObj.details.secondaryContextID &&\n          formatDate(searchObj.date) === formatDate(dateObj.details.date)\n        );\n      });\n      if (foundIndex > -1) {\n        cleanObjects[foundIndex].dates.push(getChildObject(dateObj.details));\n        existsSubThreadFlag = true;\n      } else {\n        const foundIndex2 = cleanObjects.findIndex(\n          (searchObj) =>\n            searchObj.timeline === dateObj.details.timeline &&\n            searchObj.dates[0].details.secondaryContextID ===\n              dateObj.details.secondaryContextID &&\n            formatDate(searchObj.date) !== formatDate(dateObj.details.date)\n        );\n        if (foundIndex2 > -1) {\n          cleanObjects.push({\n            timeline: cleanObjects[foundIndex2].timeline,\n            subThread: cleanObjects[foundIndex2].subThread,\n            timelineCategoryName:\n              cleanObjects[foundIndex2].timelineCategoryName,\n            color: dateObj?.details?.color\n              ? dateObj.details.color\n              : cleanObjects[foundIndex2].color,\n            iconID: dateObj?.details?.icon\n              ? dateObj.details.icon\n              : cleanObjects[foundIndex2].iconID,\n            date: formatDate(dateObj.details.date),\n            dates: [getChildObject(dateObj.details)]\n          });\n          existsSubThreadFlag = true;\n        }\n      }\n      if (!existsSubThreadFlag) {\n        cleanObjects.push({\n          timeline: obj.timeline,\n          subThread: subThreadCount++,\n          timelineCategoryName: obj.timelineCategoryName,\n          color: dateObj?.details?.color ? dateObj.details.color : obj.color,\n          iconID: dateObj?.details?.icon ? dateObj.details.icon : obj.iconID,\n          date: formatDate(dateObj.details.date),\n          dates: [getChildObject(dateObj.details)]\n        });\n      }\n    });\n  });\n  return cleanObjects;\n};\n\n// Plot category bar\nexport const plotCategoryBar = (\n  timelineNumber,\n  subThread,\n  data,\n  timeline,\n  threadHeight\n) => {\n  const xLine =\n    data &&\n    formatDataWithTimelineCategoryName(timeline).map((item) => {\n      return item.timeline.toString() + '.' + item.subThread.toString();\n    });\n\n  let unique = [...new Set(xLine)];\n\n  const rowIndex = unique.reduce(function (s, a) {\n    s.push({ thread: a });\n    return s;\n  }, []);\n\n  const concatIndex = timelineNumber + '.' + subThread;\n  const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index + 1 }));\n  const results = result.filter(function (entry) {\n    return entry.thread === concatIndex;\n  });\n  const xplot =\n    (results[0] && results[0].rowIndex * threadHeight) - threadHeight;\n  return xplot;\n};\n\nfunction orderByDate(a, b) {\n  if (new Date(a.date) < new Date(b.date)) {\n    return -1;\n  }\n  if (new Date(a.date) > new Date(b.date)) {\n    return 1;\n  }\n  return 0;\n}\n\nfunction orderByDateTimeline(a, b) {\n  if (!a?.length || !b?.length) {\n    return 0;\n  }\n  if (new Date(a[0].date) < new Date(b[0].date)) {\n    return -1;\n  }\n  if (new Date(a[0].date) > new Date(b[0].date)) {\n    return 1;\n  }\n  return 0;\n}\n\nfunction orderByDateSubThread(a, b) {\n  if (!a?.length || !b?.length) {\n    return 0;\n  }\n  if (new Date(a[0].date) < new Date(b[0].date)) {\n    return -1;\n  }\n  if (new Date(a[0].date) > new Date(b[0].date)) {\n    return 1;\n  }\n  return 0;\n}\n\nexport const formatDataWithTimelineCategoryNameOrderedByDate = (inputData) => {\n  let data = formatDataWithTimelineCategoryName(inputData).sort(orderByDate);\n  let maxElement = 1;\n  data.forEach((obj) => {\n    if (maxElement < obj.timeline) maxElement = obj.timeline;\n  });\n  let objArr = [...Array(maxElement)].map((e) => (e = []));\n  data.forEach((obj) => {\n    objArr.forEach((val, index) => {\n      if (obj.timeline === index + 1) {\n        objArr[index].push(obj);\n      }\n    });\n  });\n\n  objArr.sort(orderByDateTimeline);\n  let objArr2 = [...Array(maxElement)].map((e) => (e = []));\n  let maxElements;\n  objArr.forEach((objs, i) => {\n    maxElements = 1;\n    objs.forEach((obj) => {\n      if (maxElements < obj.subThread) maxElements = obj.subThread;\n    });\n    objArr2[i] = maxElements;\n  });\n  let objArr3 = [...Array(maxElement)].map((e) => (e = []));\n  objArr2.forEach(\n    (obj, index) => (objArr3[index] = [...Array(obj)].map((e) => (e = [])))\n  );\n  objArr.forEach((ob) => {\n    ob.forEach((o) => {\n      objArr3.forEach((objs, j) => {\n        objs.forEach((obj, k) => {\n          if (o.timeline === j + 1 && o.subThread === k + 1) {\n            obj.push(o);\n          }\n        });\n      });\n    });\n  });\n  objArr3.forEach((objs) => {\n    objs\n      .sort(orderByDateSubThread)\n      .forEach((obj, index) =>\n        obj.forEach((obj) => (obj.subThread = index + 1))\n      );\n  });\n  return objArr3.flat(2);\n};\n"],"mappings":"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"}