From c72989cb8b8b5128ba3a7aaf64f9e86c8ef194c2 Mon Sep 17 00:00:00 2001 From: Julia Gru <56249914+julczka@users.noreply.github.com> Date: Thu, 23 Feb 2023 11:18:07 +0100 Subject: [PATCH] add pretty detail box --- .../workspace/donut-chart/donut-chart.ts | 75 +++++++++++++++---- .../workspace/donut-chart/donut-slice.ts | 4 +- .../logviewer-root-workspace.element.ts | 3 +- 3 files changed, 66 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-chart.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-chart.ts index 5bd216e8a8..e8e7d11b3c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-chart.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-chart.ts @@ -25,6 +25,9 @@ export class UmbDonutChartElement extends LitElement { UUITextStyles, css` path { + pointer-events: visibleFill; + } + .circle { filter: url(#erode); } @@ -44,13 +47,18 @@ export class UmbDonutChartElement extends LitElement { } #details-box { - background: #f00; - width: 20px; - height: 20px; + background: #ffffffe6; + border: 1px solid var(--uui-color-border-standalone); + border-radius: var(--uui-border-radius); + box-sizing: border-box; top: 0; left: 0; position: absolute; opacity: 0; + padding: 0.5em; + line-height: 1.5; + font-size: var(--uui-type-small-size); + box-shadow: var(--uui-shadow-depth-1); transform: translate3d(var(--pos-x), var(--pos-y), 0); transition: transform 0.2s cubic-bezier(0.02, 1.23, 0.79, 1.08); transition: opacity 150ms linear; @@ -59,6 +67,18 @@ export class UmbDonutChartElement extends LitElement { #details-box.show { opacity: 1; } + + #details-box uui-icon { + /* optically correct alignment */ + color: var(--umb-donut-detail-color); + margin-right: 0.2em; + } + + #details-title { + font-weight: bold; + display: flex; + align-items: center; + } `, ]; @@ -98,6 +118,18 @@ export class UmbDonutChartElement extends LitElement { @state() posX = 0; + @state() + detailName = ''; + + @state() + detailAmount = 0; + + @state() + detailPercent = 0; + + @state() + detailColor = 'red'; + #printCircles(event: Event) { event.stopPropagation(); this.circles = this.#addCommands( @@ -150,11 +182,22 @@ export class UmbDonutChartElement extends LitElement { const rect = this.container.getBoundingClientRect(); const x = event.clientX - rect.left; const y = event.clientY - rect.top; - this.posX = x; - this.posY = y - 30; + this.posX = x - 10; + this.posY = y - 70; + } + + #setDetailsBoxData(event: MouseEvent) { + const target = event.target as SVGPathElement; + const index = target.dataset.index as unknown as number; + const circle = this.circles[index]; + this.detailName = circle.name; + this.detailAmount = circle.percent; + this.detailPercent = circle.percent; + this.detailColor = circle.color; } #showDetailsBox(event: MouseEvent) { + this.#setDetailsBoxData(event); this.detailsBox.classList.add('show'); } @@ -164,7 +207,6 @@ export class UmbDonutChartElement extends LitElement { #renderCircles() { return svg` - @@ -187,15 +229,18 @@ export class UmbDonutChartElement extends LitElement { In chosen date range you have this number of log message of type: ${this.circles.map( - (circle) => svg` + (circle, i) => svg` - ${circle.tooltipText} - - ${circle.tooltipText} ` )} - + `; } render() { return html`
- ${this.#renderCircles()} -
+ ${this.#renderCircles()} +
+
${this.detailName}
+ ${this.detailAmount} messages +
`; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-slice.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-slice.ts index 5446391c60..3c42632bfa 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-slice.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/donut-chart/donut-slice.ts @@ -9,8 +9,8 @@ export class UmbDonutSliceElement extends LitElement { @property({ type: Number }) percent = 0; - @property() - tooltipText = ''; + @property({ type: Number }) + amount = 0; @property() color = 'red'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts index 2754da5ee3..05121dd409 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts @@ -374,7 +374,8 @@ export class UmbLogViewerRootWorkspaceElement extends UmbLitElement { ? this.logLevelCount.map( ([level, number]) => html` ` )