diff --git a/apps/web/core/components/analytics/insight-card.tsx b/apps/web/core/components/analytics/insight-card.tsx
index 739de6645c6..abfbdf8b950 100644
--- a/apps/web/core/components/analytics/insight-card.tsx
+++ b/apps/web/core/components/analytics/insight-card.tsx
@@ -1,28 +1,17 @@
// plane package imports
-import React, { useMemo } from "react";
+import React from "react";
import { IAnalyticsResponseFields } from "@plane/types";
import { Loader } from "@plane/ui";
-// components
-import TrendPiece from "./trend-piece";
export type InsightCardProps = {
data?: IAnalyticsResponseFields;
label: string;
isLoading?: boolean;
- versus?: string | null;
};
const InsightCard = (props: InsightCardProps) => {
- const { data, label, isLoading, versus } = props;
- const { count, filter_count } = data || {};
- const percentage = useMemo(() => {
- if (count != null && filter_count != null) {
- const result = ((count - filter_count) / count) * 100;
- const isFiniteAndNotNaNOrZero = Number.isFinite(result) && !Number.isNaN(result) && result !== 0;
- return isFiniteAndNotNaNOrZero ? result : null;
- }
- return null;
- }, [count, filter_count]);
+ const { data, label, isLoading = false } = props;
+ const count = data?.count ?? 0;
return (
@@ -30,12 +19,6 @@ const InsightCard = (props: InsightCardProps) => {
{!isLoading ? (
{count}
- {/* {percentage && (
-
-
- {versus &&
vs {versus}
}
-
- )} */}
) : (
diff --git a/apps/web/core/components/analytics/total-insights.tsx b/apps/web/core/components/analytics/total-insights.tsx
index 258ac11e1eb..0ac1f4f8736 100644
--- a/apps/web/core/components/analytics/total-insights.tsx
+++ b/apps/web/core/components/analytics/total-insights.tsx
@@ -92,7 +92,6 @@ const TotalInsights: React.FC<{
isLoading={isLoading}
data={totalInsightsData?.[item.key]}
label={getInsightLabel(analyticsType, item, isEpic, t)}
- versus={selectedDurationLabel}
/>
))}
diff --git a/packages/i18n/src/locales/cs/translations.json b/packages/i18n/src/locales/cs/translations.json
index 9881f5e6db4..aa25abc5df1 100644
--- a/packages/i18n/src/locales/cs/translations.json
+++ b/packages/i18n/src/locales/cs/translations.json
@@ -882,7 +882,8 @@
"in_progress": "Probíhá",
"planned": "Plánováno",
"paused": "Pozastaveno",
- "no_of": "Počet {entity}"
+ "no_of": "Počet {entity}",
+ "resolved": "Vyřešeno"
},
"chart": {
"x_axis": "Osa X",
@@ -2490,7 +2491,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane se nespustil. To může být způsobeno tím, že se jeden nebo více služeb Plane nepodařilo spustit.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Vyberte View Logs z setup.sh a Docker logů, abyste si byli jisti."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/de/translations.json b/packages/i18n/src/locales/de/translations.json
index bcce9268f7b..fc404e6369d 100644
--- a/packages/i18n/src/locales/de/translations.json
+++ b/packages/i18n/src/locales/de/translations.json
@@ -882,7 +882,8 @@
"in_progress": "In Bearbeitung",
"planned": "Geplant",
"paused": "Pausiert",
- "no_of": "Anzahl {entity}"
+ "no_of": "Anzahl {entity}",
+ "resolved": "Gelöst"
},
"chart": {
"x_axis": "X-Achse",
@@ -2489,7 +2490,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane ist nicht gestartet. Dies könnte daran liegen, dass einer oder mehrere Plane-Services nicht starten konnten.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Wählen Sie View Logs aus setup.sh und Docker-Logs, um sicherzugehen."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json
index 026fc90c1be..39087d43a0a 100644
--- a/packages/i18n/src/locales/en/translations.json
+++ b/packages/i18n/src/locales/en/translations.json
@@ -725,7 +725,8 @@
"apply": "Apply",
"applying": "Applying",
"overview": "Overview",
- "no_of": "No. of {entity}"
+ "no_of": "No. of {entity}",
+ "resolved": "Resolved"
},
"chart": {
"x_axis": "X-axis",
@@ -2366,7 +2367,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane didn't start up. This could be because one or more Plane services failed to start.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Choose View Logs from setup.sh and Docker logs to be sure."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json
index 823d427b473..1621a1c8e99 100644
--- a/packages/i18n/src/locales/es/translations.json
+++ b/packages/i18n/src/locales/es/translations.json
@@ -885,7 +885,8 @@
"in_progress": "En progreso",
"planned": "Planificado",
"paused": "Pausado",
- "no_of": "N.º de {entity}"
+ "no_of": "N.º de {entity}",
+ "resolved": "Resuelto"
},
"chart": {
"x_axis": "Eje X",
@@ -2492,7 +2493,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane no se inició. Esto podría deberse a que uno o más servicios de Plane fallaron al iniciar.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Selecciona View Logs desde setup.sh y los logs de Docker para estar seguro."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json
index 5a24044cbe8..cf6fdd87a37 100644
--- a/packages/i18n/src/locales/fr/translations.json
+++ b/packages/i18n/src/locales/fr/translations.json
@@ -883,7 +883,8 @@
"in_progress": "En cours",
"planned": "Planifié",
"paused": "En pause",
- "no_of": "Nº de {entity}"
+ "no_of": "Nº de {entity}",
+ "resolved": "Résolu"
},
"chart": {
"x_axis": "Axe X",
@@ -2490,7 +2491,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane n'a pas démarré. Cela pourrait être dû au fait qu'un ou plusieurs services Plane ont échoué à démarrer.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Choisissez View Logs depuis setup.sh et les logs Docker pour en être sûr."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/id/translations.json b/packages/i18n/src/locales/id/translations.json
index caa973bd08b..9fd407bdeb9 100644
--- a/packages/i18n/src/locales/id/translations.json
+++ b/packages/i18n/src/locales/id/translations.json
@@ -882,7 +882,8 @@
"in_progress": "Sedang berlangsung",
"planned": "Direncanakan",
"paused": "Dijedaikan",
- "no_of": "Jumlah {entity}"
+ "no_of": "Jumlah {entity}",
+ "resolved": "Terselesaikan"
},
"chart": {
"x_axis": "Sumbu-X",
@@ -2485,7 +2486,6 @@
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Pilih View Logs dari setup.sh dan log Docker untuk memastikan."
},
"no_of": "Jumlah {entity}",
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/it/translations.json b/packages/i18n/src/locales/it/translations.json
index 11b5f93c936..a29e0295d37 100644
--- a/packages/i18n/src/locales/it/translations.json
+++ b/packages/i18n/src/locales/it/translations.json
@@ -881,7 +881,8 @@
"in_progress": "In corso",
"planned": "Pianificato",
"paused": "In pausa",
- "no_of": "N. di {entity}"
+ "no_of": "N. di {entity}",
+ "resolved": "Risolto"
},
"chart": {
"x_axis": "Asse X",
@@ -2489,7 +2490,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane non si è avviato. Questo potrebbe essere dovuto al fatto che uno o più servizi Plane non sono riusciti ad avviarsi.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Scegli View Logs da setup.sh e dai log Docker per essere sicuro."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json
index b7a43808aab..bff522b3728 100644
--- a/packages/i18n/src/locales/ja/translations.json
+++ b/packages/i18n/src/locales/ja/translations.json
@@ -883,7 +883,8 @@
"in_progress": "進行中",
"planned": "計画済み",
"paused": "一時停止",
- "no_of": "{entity} の数"
+ "no_of": "{entity} の数",
+ "resolved": "解決済み"
},
"chart": {
"x_axis": "エックス アクシス",
@@ -2490,7 +2491,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Planeが起動しませんでした。これは1つまたは複数のPlaneサービスの起動に失敗したことが原因である可能性があります。",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "setup.shとDockerログからView Logsを選択して確認してください。"
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/ko/translations.json b/packages/i18n/src/locales/ko/translations.json
index bc23bc6e104..9a86dab6121 100644
--- a/packages/i18n/src/locales/ko/translations.json
+++ b/packages/i18n/src/locales/ko/translations.json
@@ -884,7 +884,8 @@
"in_progress": "진행 중",
"planned": "계획된",
"paused": "일시 중지됨",
- "no_of": "{entity} 수"
+ "no_of": "{entity} 수",
+ "resolved": "해결됨"
},
"chart": {
"x_axis": "X축",
@@ -2492,7 +2493,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane이 시작되지 않았습니다. 이는 하나 이상의 Plane 서비스가 시작에 실패했기 때문일 수 있습니다.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "확실히 하려면 setup.sh와 Docker 로그에서 View Logs를 선택하세요."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/pl/translations.json b/packages/i18n/src/locales/pl/translations.json
index 56dbf089b23..a9f5190f6f0 100644
--- a/packages/i18n/src/locales/pl/translations.json
+++ b/packages/i18n/src/locales/pl/translations.json
@@ -884,7 +884,8 @@
"in_progress": "W trakcie",
"planned": "Zaplanowane",
"paused": "Wstrzymane",
- "no_of": "Liczba {entity}"
+ "no_of": "Liczba {entity}",
+ "resolved": "Rozwiązane"
},
"chart": {
"x_axis": "Oś X",
@@ -2491,7 +2492,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane nie uruchomił się. Może to być spowodowane tym, że jedna lub więcej usług Plane nie mogła się uruchomić.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Wybierz View Logs z setup.sh i logów Docker, aby mieć pewność."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/pt-BR/translations.json b/packages/i18n/src/locales/pt-BR/translations.json
index 831b3515e15..f52a220fc4c 100644
--- a/packages/i18n/src/locales/pt-BR/translations.json
+++ b/packages/i18n/src/locales/pt-BR/translations.json
@@ -884,7 +884,8 @@
"in_progress": "Em andamento",
"planned": "Planejado",
"paused": "Pausado",
- "no_of": "Nº de {entity}"
+ "no_of": "Nº de {entity}",
+ "resolved": "Resolvido"
},
"chart": {
"x_axis": "Eixo X",
@@ -2486,7 +2487,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "O Plane não inicializou. Isso pode ser porque um ou mais serviços do Plane falharam ao iniciar.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Escolha View Logs do setup.sh e logs do Docker para ter certeza."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/ro/translations.json b/packages/i18n/src/locales/ro/translations.json
index 82cf21bfc6c..46c42f683a8 100644
--- a/packages/i18n/src/locales/ro/translations.json
+++ b/packages/i18n/src/locales/ro/translations.json
@@ -882,7 +882,8 @@
"in_progress": "În desfășurare",
"planned": "Planificat",
"paused": "Pauzat",
- "no_of": "Nr. de {entity}"
+ "no_of": "Nr. de {entity}",
+ "resolved": "Rezolvat"
},
"chart": {
"x_axis": "axa-X",
@@ -2484,7 +2485,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane nu a pornit. Aceasta ar putea fi din cauza că unul sau mai multe servicii Plane au eșuat să pornească.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Alegeți View Logs din setup.sh și logurile Docker pentru a fi siguri."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/ru/translations.json b/packages/i18n/src/locales/ru/translations.json
index 7d11338b726..c6c84ed8ee2 100644
--- a/packages/i18n/src/locales/ru/translations.json
+++ b/packages/i18n/src/locales/ru/translations.json
@@ -884,7 +884,8 @@
"in_progress": "В процессе",
"planned": "Запланировано",
"paused": "На паузе",
- "no_of": "Количество {entity}"
+ "no_of": "Количество {entity}",
+ "resolved": "Решено"
},
"chart": {
"x_axis": "Ось X",
@@ -2492,8 +2493,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane не запустился. Это может быть из-за того, что один или несколько сервисов Plane не смогли запуститься.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Выберите View Logs из setup.sh и логов Docker, чтобы убедиться."
},
- "no_of": "Количество {entity}",
-
"page_navigation_pane": {
"tabs": {
"outline": {
@@ -2533,4 +2532,4 @@
"close_button": "Закрыть панель навигации",
"outline_floating_button": "Открыть структуру"
}
-}
+}
\ No newline at end of file
diff --git a/packages/i18n/src/locales/sk/translations.json b/packages/i18n/src/locales/sk/translations.json
index f04165391ec..08da7e2dd39 100644
--- a/packages/i18n/src/locales/sk/translations.json
+++ b/packages/i18n/src/locales/sk/translations.json
@@ -884,7 +884,8 @@
"in_progress": "Prebieha",
"planned": "Plánované",
"paused": "Pozastavené",
- "no_of": "Počet {entity}"
+ "no_of": "Počet {entity}",
+ "resolved": "Vyriešené"
},
"chart": {
"x_axis": "Os X",
@@ -2491,7 +2492,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane sa nespustil. Toto môže byť spôsobené tým, že sa jedna alebo viac služieb Plane nepodarilo spustiť.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Vyberte View Logs z setup.sh a Docker logov, aby ste si boli istí."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/tr-TR/translations.json b/packages/i18n/src/locales/tr-TR/translations.json
index 8da90adc82f..8088ff21359 100644
--- a/packages/i18n/src/locales/tr-TR/translations.json
+++ b/packages/i18n/src/locales/tr-TR/translations.json
@@ -886,7 +886,8 @@
"in_progress": "Devam ediyor",
"planned": "Planlandı",
"paused": "Durduruldu",
- "no_of": "{entity} sayısı"
+ "no_of": "{entity} sayısı",
+ "resolved": "Çözüldü"
},
"chart": {
"x_axis": "X ekseni",
@@ -2471,7 +2472,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane başlatılamadı. Bu, bir veya daha fazla Plane servisinin başlatılamaması nedeniyle olabilir.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Emin olmak için setup.sh ve Docker loglarından View Logs'u seçin."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/ua/translations.json b/packages/i18n/src/locales/ua/translations.json
index bd2158d96f4..6f9cccd4e19 100644
--- a/packages/i18n/src/locales/ua/translations.json
+++ b/packages/i18n/src/locales/ua/translations.json
@@ -884,7 +884,8 @@
"in_progress": "В процесі",
"planned": "Заплановано",
"paused": "Призупинено",
- "no_of": "Кількість {entity}"
+ "no_of": "Кількість {entity}",
+ "resolved": "Вирішено"
},
"chart": {
"x_axis": "Вісь X",
@@ -2491,7 +2492,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane не запустився. Це може бути через те, що один або декілька сервісів Plane не змогли запуститися.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Виберіть View Logs з setup.sh та логів Docker, щоб переконатися."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/vi-VN/translations.json b/packages/i18n/src/locales/vi-VN/translations.json
index b8610c2e048..12139dd6c0f 100644
--- a/packages/i18n/src/locales/vi-VN/translations.json
+++ b/packages/i18n/src/locales/vi-VN/translations.json
@@ -883,7 +883,8 @@
"in_progress": "Đang tiến hành",
"planned": "Đã lên kế hoạch",
"paused": "Tạm dừng",
- "no_of": "Số lượng {entity}"
+ "no_of": "Số lượng {entity}",
+ "resolved": "Đã giải quyết"
},
"chart": {
"x_axis": "Trục X",
@@ -2489,7 +2490,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane không khởi động được. Điều này có thể do một hoặc nhiều dịch vụ Plane không khởi động được.",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Chọn View Logs từ setup.sh và log Docker để chắc chắn."
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json
index 55ace9a6662..03b35d9f691 100644
--- a/packages/i18n/src/locales/zh-CN/translations.json
+++ b/packages/i18n/src/locales/zh-CN/translations.json
@@ -883,7 +883,8 @@
"in_progress": "进行中",
"planned": "已计划",
"paused": "暂停",
- "no_of": "{entity} 的数量"
+ "no_of": "{entity} 的数量",
+ "resolved": "已解决"
},
"chart": {
"x_axis": "X轴",
@@ -2471,7 +2472,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane 未能启动。这可能是因为一个或多个 Plane 服务启动失败。",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "请选择“查看日志”来查看 setup.sh 和 Docker 日志,以确认问题。"
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/i18n/src/locales/zh-TW/translations.json b/packages/i18n/src/locales/zh-TW/translations.json
index 6c6a85f2028..0b7273b326a 100644
--- a/packages/i18n/src/locales/zh-TW/translations.json
+++ b/packages/i18n/src/locales/zh-TW/translations.json
@@ -884,7 +884,8 @@
"planned": "已計劃",
"paused": "暫停",
"at_risk": "有風險",
- "no_of": "{entity} 的數量"
+ "no_of": "{entity} 的數量",
+ "resolved": "已解決"
},
"chart": {
"x_axis": "X 軸",
@@ -2492,7 +2493,6 @@
"plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane 未能啟動。這可能是因為一個或多個 Plane 服務啟動失敗。",
"choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "從 setup.sh 和 Docker 日誌中選擇 View Logs 來確認。"
},
-
"page_navigation_pane": {
"tabs": {
"outline": {
diff --git a/packages/propel/src/charts/area-chart/root.tsx b/packages/propel/src/charts/area-chart/root.tsx
index 11a1db2efa4..db602fedb12 100644
--- a/packages/propel/src/charts/area-chart/root.tsx
+++ b/packages/propel/src/charts/area-chart/root.tsx
@@ -23,6 +23,7 @@ export const AreaChart = React.memo((props:
x: undefined,
y: 10,
},
+ customTicks,
showTooltip = true,
comparisonLine,
} = props;
@@ -114,7 +115,10 @@ export const AreaChart = React.memo((props:
}
+ tick={(props) => {
+ const TickComponent = customTicks?.x || CustomXAxisTick;
+ return ;
+ }}
tickLine={false}
axisLine={false}
label={
@@ -140,7 +144,10 @@ export const AreaChart = React.memo((props:
className: AXIS_LABEL_CLASSNAME,
}
}
- tick={(props) => }
+ tick={(props) => {
+ const TickComponent = customTicks?.y || CustomYAxisTick;
+ return ;
+ }}
tickCount={tickCount.y}
allowDecimals={!!yAxis.allowDecimals}
/>
diff --git a/packages/propel/src/charts/bar-chart/root.tsx b/packages/propel/src/charts/bar-chart/root.tsx
index 96efff32c78..0d34b27836e 100644
--- a/packages/propel/src/charts/bar-chart/root.tsx
+++ b/packages/propel/src/charts/bar-chart/root.tsx
@@ -35,6 +35,7 @@ export const BarChart = React.memo((props: T
x: undefined,
y: 10,
},
+ customTicks,
showTooltip = true,
customTooltipContent,
} = props;
@@ -52,7 +53,7 @@ export const BarChart = React.memo((props: T
keys.push(bar.key);
labels[bar.key] = bar.label;
// For tooltip, we need a string color. If fill is a function, use a default color
- colors[bar.key] = typeof bar.fill === "function" ? "#000000" : bar.fill;
+ colors[bar.key] = typeof bar.fill === "function" ? bar.fill({}) : bar.fill;
}
return { stackKeys: keys, stackLabels: labels, stackDotColors: colors };
@@ -65,6 +66,7 @@ export const BarChart = React.memo((props: T
key={bar.key}
dataKey={bar.key}
stackId={bar.stackId}
+ fill={typeof bar.fill === "function" ? bar.fill({}) : bar.fill}
opacity={!!activeLegend && activeLegend !== bar.key ? 0.1 : 1}
shape={(shapeProps: any) => {
const shapeVariant = barShapeVariants[bar.shapeVariant ?? "bar"];
@@ -96,7 +98,10 @@ export const BarChart = React.memo((props: T
}
+ tick={(props) => {
+ const TickComponent = customTicks?.x || CustomXAxisTick;
+ return ;
+ }}
tickLine={false}
axisLine={false}
label={{
@@ -118,7 +123,10 @@ export const BarChart = React.memo((props: T
dx: yAxis.dx ?? -16,
className: AXIS_LABEL_CLASSNAME,
}}
- tick={(props) => }
+ tick={(props) => {
+ const TickComponent = customTicks?.y || CustomYAxisTick;
+ return ;
+ }}
tickCount={tickCount.y}
allowDecimals={!!yAxis.allowDecimals}
/>
diff --git a/packages/propel/src/charts/line-chart/root.tsx b/packages/propel/src/charts/line-chart/root.tsx
index 28a02fc30ef..e5997869214 100644
--- a/packages/propel/src/charts/line-chart/root.tsx
+++ b/packages/propel/src/charts/line-chart/root.tsx
@@ -32,8 +32,10 @@ export const LineChart = React.memo((props:
x: undefined,
y: 10,
},
+ customTicks,
legend,
showTooltip = true,
+ customTooltipContent,
} = props;
// states
const [activeLine, setActiveLine] = useState(null);
@@ -100,7 +102,10 @@ export const LineChart = React.memo((props:
}
+ tick={(props) => {
+ const TickComponent = customTicks?.x || CustomXAxisTick;
+ return ;
+ }}
tickLine={false}
axisLine={false}
label={
@@ -126,7 +131,10 @@ export const LineChart = React.memo((props:
className: AXIS_LABEL_CLASSNAME,
}
}
- tick={(props) => }
+ tick={(props) => {
+ const TickComponent = customTicks?.y || CustomYAxisTick;
+ return ;
+ }}
tickCount={tickCount.y}
allowDecimals={!!yAxis.allowDecimals}
/>
@@ -148,17 +156,20 @@ export const LineChart = React.memo((props:
wrapperStyle={{
pointerEvents: "auto",
}}
- content={({ active, label, payload }) => (
-
- )}
+ content={({ active, label, payload }) => {
+ if (customTooltipContent) return customTooltipContent({ active, label, payload });
+ return (
+
+ );
+ }}
/>
)}
{renderLines}
diff --git a/packages/propel/src/charts/scatter-chart/root.tsx b/packages/propel/src/charts/scatter-chart/root.tsx
index 25d7b84b476..4ed4eecc11c 100644
--- a/packages/propel/src/charts/scatter-chart/root.tsx
+++ b/packages/propel/src/charts/scatter-chart/root.tsx
@@ -28,6 +28,7 @@ export const ScatterChart = React.memo((prop
xAxis,
yAxis,
className,
+ customTicks,
tickCount = {
x: undefined,
y: 10,
@@ -85,7 +86,10 @@ export const ScatterChart = React.memo((prop
}
+ tick={(props) => {
+ const TickComponent = customTicks?.x || CustomXAxisTick;
+ return ;
+ }}
tickLine={false}
axisLine={false}
label={
@@ -111,7 +115,10 @@ export const ScatterChart = React.memo((prop
className: AXIS_LABEL_CLASSNAME,
}
}
- tick={(props) => }
+ tick={(props) => {
+ const TickComponent = customTicks?.y || CustomYAxisTick;
+ return ;
+ }}
tickCount={tickCount.y}
allowDecimals={!!yAxis.allowDecimals}
/>
diff --git a/packages/types/src/charts/index.ts b/packages/types/src/charts/index.ts
index fb49c717291..8ee4739b267 100644
--- a/packages/types/src/charts/index.ts
+++ b/packages/types/src/charts/index.ts
@@ -21,8 +21,17 @@ export type TChartData = {
[key in K]: string | number;
} & Record;
-export type TChartProps = {
+export type TBaseChartProps = {
data: TChartData[];
+ className?: string;
+ legend?: TChartLegend;
+ margin?: TChartMargin;
+ showTooltip?: boolean;
+ customTooltipContent?: (props: { active?: boolean; label: string; payload: any }) => React.ReactNode;
+};
+
+// Props specific to charts with X and Y axes
+export type TAxisChartProps = TBaseChartProps & {
xAxis: {
key: keyof TChartData;
label?: string;
@@ -38,15 +47,14 @@ export type TChartProps = {
offset?: number;
dx?: number;
};
- className?: string;
- legend?: TChartLegend;
- margin?: TChartMargin;
tickCount?: {
x?: number;
y?: number;
};
- showTooltip?: boolean;
- customTooltipContent?: (props: { active?: boolean; label: string; payload: any }) => React.ReactNode;
+ customTicks?: {
+ x?: React.ComponentType;
+ y?: React.ComponentType;
+ };
};
// ============================================================
@@ -67,7 +75,7 @@ export type TBarItem = {
shapeVariant?: TBarChartShapeVariant;
};
-export type TBarChartProps = TChartProps & {
+export type TBarChartProps = TAxisChartProps & {
bars: TBarItem[];
barSize?: number;
};
@@ -87,7 +95,7 @@ export type TLineItem = {
style?: Record;
};
-export type TLineChartProps = TChartProps & {
+export type TLineChartProps = TAxisChartProps & {
lines: TLineItem[];
};
@@ -102,7 +110,7 @@ export type TScatterPointItem = {
stroke: string;
};
-export type TScatterChartProps = TChartProps & {
+export type TScatterChartProps = TAxisChartProps & {
scatterPoints: TScatterPointItem[];
};
@@ -123,7 +131,7 @@ export type TAreaItem = {
style?: Record;
};
-export type TAreaChartProps = TChartProps & {
+export type TAreaChartProps = TAxisChartProps & {
areas: TAreaItem[];
comparisonLine?: {
dashedLine: boolean;
@@ -141,7 +149,7 @@ export type TCellItem = {
};
export type TPieChartProps = Pick<
- TChartProps,
+ TBaseChartProps,
"className" | "data" | "showTooltip" | "legend" | "margin"
> & {
dataKey: T;
@@ -223,7 +231,7 @@ export type TRadarItem = {
};
export type TRadarChartProps = Pick<
- TChartProps,
+ TBaseChartProps,
"className" | "showTooltip" | "margin" | "data" | "legend"
> & {
dataKey: T;