Help ! Affichage kWh au centre d'un Donut

Bonjour à tous,

Alors voilà je bloque sur l’ajout du total énergétique en kWh au centre de mon donut créer via le plugin « Business Chart ».
image

Vous trouverez ci-dessous le code du setOption() où j’ai volontairement retiré mes essais de calculs pour le remplacer par le champ texte ‹ Total\n 0 kWh › afin de vous aider à le situer.

Si quelqu’un maitrise je suis preneur.
En gros il suffit de faire la somme du dataset.source mais je n’y arrive pas.

voici le code du setOption() dans Function :

return {
  dataset: {
    source: context.editor.dataset.source,
  },
  tooltip: {
    trigger: 'item'
  },







  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: [70, '80%'],
      percentPrecision: 0,

      label: {
        show: true,
        position: 'outside',
        formatter: '{b} : {d} %',
        fontSize: 12,
        color: '#fff'
      },
      labelLine: {
        show: true
      },

      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ],


  graphic: {
    elements: [
      {
        type: 'text',
        left: 'center',
        top: 'middle',
        style: {
          text: 'Total\n 0 kWh',
          fill: '#fff',
          fontSize: 16,
          fontWeight: 'bold',
          textAlign: 'center'
        }
      }
    ]
  }



}

Je me répond à moi-même mais si cela peut aider certain.

En fait ce qui m’a débloqué c’est d’afficher les données du « dataset » en texte formaté en JSON pour être certain de la structure de celui-ci. J’ai ensuite simplement demandé à ChatGPT d’adapter la fonction reduce() à mon dataset.

Voici le résultat visuel :

Voici le code fonctionnel :

return {
  dataset: {
    source: context.editor.dataset.source,
  },
  tooltip: {
    trigger: 'item'
  },

  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: [45, '50%'],
      percentPrecision: 0,

      label: {
        show: true,
        position: 'outside',
        formatter: '{b} : {d} %',
        fontSize: 12,
        color: '#fff'
      },
      labelLine: {
        show: true
      },

      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ],

  graphic: {
    elements: [
      {
        type: 'text',
        left: 'center',
        top: 'middle',
        style: {
          text: (() => {
            const src = context.editor.dataset.source || [];
            const total = (src.length > 1
              ? src.slice(1).reduce((s, r) => {
                const v = parseFloat(Array.isArray(r) ? r[0] : r?.value);
                return s + (isNaN(v) ? 0 : v);
              }, 0)
              : 0
            );
            const totalStr = total.toLocaleString('fr-FR', {
              minimumFractionDigits: 0,
              maximumFractionDigits: 0
            });
            return `{title|Total}\n{value|${totalStr} kWh}`;
          })(),
          rich: {
            title: {
              fill: '#fff',
              fontSize: 12,         // plus petit (comme l’exemple)
              fontWeight: 'normal',
              lineHeight: 20
            },
            value: {
              fill: '#fff',
              fontSize: 14,         // plus grand (comme l’exemple)
              fontWeight: 'bold',
              lineHeight: 20
            }
          },
          textAlign: 'center'
        }
      }
    ]
  }
}

Bonsoir @Neuvidor
Voudrais tu partager le code de la carte au complet s’il te plaît ?
C’est une belle réussite ce que tu as fait et ça m’intéresse pour remplacer les miennes qui ne sont pas terrible :innocent: