This adds some new visualizations and styles and reports and cleans up some existing styles and class names. Daily activity rhythm <img width="1588" height="412" alt="image" src="https://github.com/user-attachments/assets/0c7980e4-7bb6-4e08-9957-24c3c5718572" /> Helping new members <img width="1456" height="310" alt="image" src="https://github.com/user-attachments/assets/096a13da-ab63-45d4-9b68-53a01df62a78" /> Chat activity <img width="1442" height="926" alt="image" src="https://github.com/user-attachments/assets/07ce2cab-1963-4918-a9ff-805c251a1377" /> Assigns <img width="1388" height="844" alt="image" src="https://github.com/user-attachments/assets/ee49c6ee-2da6-4bfa-b500-715ed7ceb13a" /> AI usage <img width="1442" height="1254" alt="image" src="https://github.com/user-attachments/assets/b382bffb-010d-4072-9144-cb7e6a8680e3" /> Invitations <img width="1486" height="1346" alt="image" src="https://github.com/user-attachments/assets/020f68a9-69d2-46ed-9f38-b0d5e98d02de" /> Writing analysis <img width="917" height="409" alt="image" src="https://github.com/user-attachments/assets/1147427c-513f-4737-8f28-99bfc6f4aff9" /> --------- Co-authored-by: awesomerobot <[email protected]> Co-authored-by: Martin Brennan <[email protected]>
82 lines
2.5 KiB
Plaintext
82 lines
2.5 KiB
Plaintext
import Component from "@glimmer/component";
|
|
import { concat } from "@ember/helper";
|
|
import { action } from "@ember/object";
|
|
import { htmlSafe } from "@ember/template";
|
|
import replaceEmoji from "discourse/helpers/replace-emoji";
|
|
import { i18n } from "discourse-i18n";
|
|
|
|
export default class Reactions extends Component {
|
|
get totalPostUsedReactions() {
|
|
return Object.values(
|
|
this.args.report.data.post_used_reactions ?? {}
|
|
).reduce((acc, count) => acc + count, 0);
|
|
}
|
|
|
|
get receivedReactions() {
|
|
return this.args.report.data.post_received_reactions ?? {};
|
|
}
|
|
|
|
@action
|
|
cleanEmoji(emojiName) {
|
|
return emojiName.replaceAll(/_/g, " ");
|
|
}
|
|
|
|
@action
|
|
computePercentage(count) {
|
|
return `${((count / this.totalPostUsedReactions) * 100).toFixed(2)}%`;
|
|
}
|
|
|
|
@action
|
|
computePercentageStyle(count) {
|
|
return htmlSafe(`width: ${this.computePercentage(count)}`);
|
|
}
|
|
|
|
<template>
|
|
<div class="rewind-report-page --post-received-reactions">
|
|
<h2 class="rewind-report-title">
|
|
{{i18n "discourse_rewind.reports.post_received_reactions.title"}}
|
|
</h2>
|
|
<div class="rewind-report-container">
|
|
{{#each-in this.receivedReactions as |emojiName count|}}
|
|
<div class="rewind-card scale">
|
|
<span class="rewind-card__emoji">
|
|
{{replaceEmoji (concat ":" emojiName ":")}}
|
|
</span>
|
|
<span class="rewind-card__data">{{count}}</span>
|
|
</div>
|
|
{{/each-in}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="rewind-report-page --post-used-reactions">
|
|
<h2 class="rewind-report-title">
|
|
{{i18n "discourse_rewind.reports.post_used_reactions.title"}}
|
|
</h2>
|
|
<div class="rewind-card">
|
|
<div class="rewind-reactions-chart">
|
|
{{#each-in @report.data.post_used_reactions as |emojiName count|}}
|
|
<div class="rewind-reactions-row">
|
|
<span class="emoji">
|
|
{{replaceEmoji (concat ":" emojiName ":")}}
|
|
</span>
|
|
<span class="percentage">{{this.computePercentage count}}</span>
|
|
<div
|
|
class="rewind-reactions-bar"
|
|
style={{this.computePercentageStyle count}}
|
|
title={{count}}
|
|
></div>
|
|
</div>
|
|
{{/each-in}}
|
|
|
|
<span class="rewind-total-reactions">
|
|
{{i18n
|
|
"discourse_rewind.reports.post_used_reactions.total_number"
|
|
count=this.totalPostUsedReactions
|
|
}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
}
|