{"version":3,"file":"XChart.mjs","sources":["../../../../src/shapes/canvasx/XChart.ts"],"sourcesContent":["import { ObjectProps } from '../Object/types/ObjectProps';\nimport { FabricObject } from '../Object/FabricObject';\nimport { Chart, ChartConfiguration, registerables } from 'chart.js';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport { WidgetChartInterface, EntityKeys } from './type/widget.entity.chart';\nimport { WidgetType } from './type/widget.type';\n\nChart.register(...registerables);\n\ninterface ChartObjectOptions extends ObjectProps {\n  chartConfig: ChartConfiguration;\n  width: number;\n  height: number;\n}\n\nclass XChart extends FabricObject implements WidgetChartInterface {\n  private chartConfig: ChartConfiguration;\n  private chartInstance: Chart | null = null;\n  private canvasElement: HTMLCanvasElement | null = null;\n  private needsUpdate: boolean = true; // Flag to track if update is needed\n\n  static type: WidgetType = 'XChart';\n  static objType: WidgetType = 'XChart';\n\n  constructor(options: any) {\n\n    super(options);\n    this.chartConfig = options.chartConfig!;\n    this.width = options.width!;\n    this.height = options.height!;\n    this.createCanvasElement();\n    this.addDoubleClickEventListener();\n    Object.assign(this, options);\n    this.objType = 'XChart';\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  chartOptions: any;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  private createCanvasElement() {\n    if (!this.canvasElement) {\n      this.canvasElement = createCanvasElement();\n      this.canvasElement.width = this.width!;\n      this.canvasElement.height = this.height!;\n      this.canvasElement.style.width = `${this.width}px`;\n      this.canvasElement.style.height = `${this.height}px`;\n      this.canvasElement.style.position = 'absolute';\n      this.canvasElement.style.top = `${-1000000}px`;\n      this.canvasElement.style.left = `${-1000000}px`;\n\n      document.body.appendChild(this.canvasElement); // Ensure canvas is in the DOM\n    }\n  }\n\n  private async createOrUpdateChart() {\n    if (!this.canvasElement) {\n      this.createCanvasElement();\n    }\n\n    // Ensure the canvas element is part of the DOM\n    if (!document.body.contains(this.canvasElement!)) {\n      document.body.appendChild(this.canvasElement!);\n    }\n\n    if (this.chartInstance) {\n      this.chartInstance.destroy();\n    }\n\n    return new Promise<void>((resolve) => {\n      this.canvasElement!.width = this.width!;\n      this.canvasElement!.height = this.height!;\n      this.canvasElement!.style.width = `${this.width}px`;\n      this.canvasElement!.style.height = `${this.height}px`;\n\n      this.chartInstance = new Chart(\n        this.canvasElement!.getContext('2d')!,\n        this.chartConfig\n      );\n\n      // Wait for the next animation frame to ensure the chart has rendered\n      requestAnimationFrame(() => {\n        this.chartInstance!.resize(); // Force a resize to ensure proper rendering\n        resolve();\n      });\n    });\n  }\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  async _render(ctx: CanvasRenderingContext2D) {\n    if (this.needsUpdate) {\n      await this.createOrUpdateChart();\n      this.needsUpdate = false; // Reset the flag after updating\n    }\n\n    if (\n      this.canvasElement &&\n      this.canvasElement.width > 0 &&\n      this.canvasElement.height > 0\n    ) {\n      ctx.drawImage(\n        this.canvasElement,\n        -this.width! / 2,\n        -this.height! / 2,\n        this.width!,\n        this.height!\n      );\n    }\n  }\n\n  updateChart(newConfig: ChartConfiguration) {\n    this.chartConfig = newConfig;\n    this.needsUpdate = true; // Set the flag to indicate an update is needed\n    this.dirty = true;\n    this.canvas?.requestRenderAll();\n  }\n\n  private addDoubleClickEventListener() {\n    this.on('mousedblclick', () => {\n      this.openEditModal();\n    });\n  }\n\n  private openEditModal() {\n    // Implement modal opening logic here\n    const modal = document.createElement('div');\n    modal.style.position = 'fixed';\n    modal.style.top = '50%';\n    modal.style.left = '50%';\n    modal.style.width = '400px';\n    modal.style.transform = 'translate(-50%, -50%)';\n    modal.style.padding = '20px';\n    modal.style.backgroundColor = 'white';\n    modal.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)';\n    modal.innerHTML = `\n      <h2>Edit Chart Data</h2>\n      <textarea id=\"chartDataInput\" rows=\"10\" cols=\"40\">${JSON.stringify(\n      this.chartConfig.data,\n      null,\n      2\n    )}</textarea>\n      <br />\n      <button id=\"saveChartData\">Save</button>\n      <button id=\"cancelEdit\">Cancel</button>\n    `;\n    document.body.appendChild(modal);\n\n    const saveButton = modal.querySelector('#saveChartData')!;\n    const cancelButton = modal.querySelector('#cancelEdit')!;\n    const chartDataInput = modal.querySelector(\n      '#chartDataInput'\n    ) as HTMLTextAreaElement;\n\n    saveButton.addEventListener('click', () => {\n      const newChartData = JSON.parse(chartDataInput.value);\n      this.chartConfig.data = newChartData;\n      this.updateChart(this.chartConfig);\n      document.body.removeChild(modal);\n    });\n\n    cancelButton.addEventListener('click', () => {\n      document.body.removeChild(modal);\n    });\n  }\n}\n\nexport { XChart };\n\nclassRegistry.setClass(XChart);\n"],"names":["Chart","register","registerables","XChart","FabricObject","constructor","options","_defineProperty","chartConfig","width","height","createCanvasElement","addDoubleClickEventListener","Object","assign","objType","canvasElement","style","concat","position","top","left","document","body","appendChild","createOrUpdateChart","contains","chartInstance","destroy","Promise","resolve","getContext","requestAnimationFrame","resize","getObject","entityKeys","EntityKeys","result","forEach","key","_render","ctx","needsUpdate","drawImage","updateChart","newConfig","_this$canvas","dirty","canvas","requestRenderAll","on","openEditModal","modal","createElement","transform","padding","backgroundColor","boxShadow","innerHTML","JSON","stringify","data","saveButton","querySelector","cancelButton","chartDataInput","addEventListener","newChartData","parse","value","removeChild","classRegistry","setClass"],"mappings":"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"}