mirror of
https://github.com/discourse/discourse.git
synced 2026-08-06 03:07:17 -05:00
FEATURE: part 2 of dashboard improvements
- moderation tab - sorting/pagination - improved third party reports support - trending charts - better perf - many fixes - refactoring - new reports Co-Authored-By: Simon Cossar <scossar@users.noreply.github.com>
This commit is contained in:
co-authored by
Simon Cossar
parent
4e09206061
commit
1a78e12f4e
@@ -0,0 +1,3 @@
|
||||
<div class="chart-canvas-container">
|
||||
<canvas class="chart-canvas"></canvas>
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
<div class="table-container">
|
||||
{{#each model.data as |data|}}
|
||||
<a class="table-cell user-{{data.key}}" href="{{data.url}}">
|
||||
<span class="label">
|
||||
{{#if data.icon}}
|
||||
{{d-icon data.icon}}
|
||||
{{/if}}
|
||||
{{data.x}}
|
||||
</span>
|
||||
<span class="value">
|
||||
{{number data.y}}
|
||||
</span>
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
@@ -0,0 +1,5 @@
|
||||
{{#if showSortingUI}}
|
||||
{{d-button action=sortByLabel icon=sortIcon class="sort-button"}}
|
||||
{{/if}}
|
||||
|
||||
<span>{{label.title}}</span>
|
||||
@@ -0,0 +1,5 @@
|
||||
{{#each cells as |cell|}}
|
||||
<td class="{{cell.type}} {{cell.property}}" title="{{cell.tooltip}}">
|
||||
{{{cell.formatedValue}}}
|
||||
</td>
|
||||
{{/each}}
|
||||
@@ -0,0 +1,60 @@
|
||||
<table class="report-table">
|
||||
<thead>
|
||||
<tr>
|
||||
{{#if model.computedLabels}}
|
||||
{{#each model.computedLabels as |label index|}}
|
||||
{{admin-report-table-header
|
||||
showSortingUI=showSortingUI
|
||||
currentSortDirection=sortDirection
|
||||
currentSortLabel=sortLabel
|
||||
label=label
|
||||
sortByLabel=(action "sortByLabel" label)}}
|
||||
{{/each}}
|
||||
{{else}}
|
||||
{{#each model.data as |data|}}
|
||||
<th>{{data.x}}</th>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each paginatedData as |data|}}
|
||||
{{admin-report-table-row data=data labels=model.computedLabels}}
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{#if showTotalForSample}}
|
||||
<small>{{i18n 'admin.dashboard.reports.totals_for_sample'}}</small>
|
||||
<table class="totals-sample-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
{{#each totalsForSample as |total|}}
|
||||
<td>{{total.formatedValue}}</td>
|
||||
{{/each}}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{{/if}}
|
||||
|
||||
{{#if showTotal}}
|
||||
<small>{{i18n 'admin.dashboard.reports.total'}}</small>
|
||||
<table class="totals-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>{{number model.total}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{{/if}}
|
||||
|
||||
<div class="pagination">
|
||||
{{#each pages as |pageState|}}
|
||||
{{d-button
|
||||
translatedLabel=pageState.page
|
||||
action="changePage"
|
||||
actionParam=pageState.index
|
||||
class=pageState.class}}
|
||||
{{/each}}
|
||||
</div>
|
||||
@@ -0,0 +1,154 @@
|
||||
{{#if isEnabled}}
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
{{#if showTimeoutError}}
|
||||
<div class="alert alert-error">
|
||||
{{i18n "admin.dashboard.timeout_error"}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showHeader}}
|
||||
<div class="report-header">
|
||||
{{#if showTitle}}
|
||||
<div class="report-title">
|
||||
<h3 class="title">
|
||||
{{#if showAllReportsLink}}
|
||||
{{#link-to "adminReports" class="all-report-link"}}
|
||||
{{i18n "admin.dashboard.all_reports"}}
|
||||
{{/link-to}}
|
||||
<span class="separator">|</span>
|
||||
{{/if}}
|
||||
|
||||
<a href="{{model.reportUrl}}" class="report-link">
|
||||
{{model.title}}
|
||||
</a>
|
||||
</h3>
|
||||
|
||||
{{#if model.description}}
|
||||
<span class="info" data-tooltip="{{model.description}}">
|
||||
{{d-icon "question-circle"}}
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showTrend}}
|
||||
{{#if model.prev_period}}
|
||||
<div class="trend {{model.trend}}">
|
||||
<span class="trend-value" title="{{model.trendTitle}}">
|
||||
{{#if model.average}}
|
||||
{{number model.currentAverage}}{{#if model.percent}}%{{/if}}
|
||||
{{else}}
|
||||
{{number model.currentTotal noTitle="true"}}{{#if model.percent}}%{{/if}}
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if model.trendIcon}}
|
||||
{{d-icon model.trendIcon class="trend-icon"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if showModes}}
|
||||
<ul class="mode-switch">
|
||||
{{#each displayedModes as |displayedMode|}}
|
||||
<li class="mode">
|
||||
{{d-button
|
||||
action="changeMode"
|
||||
actionParam=displayedMode.mode
|
||||
class=displayedMode.cssClass
|
||||
icon=displayedMode.icon}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="report-body">
|
||||
{{#unless showTimeoutError}}
|
||||
{{#if currentMode}}
|
||||
{{component modeComponent model=model options=options}}
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
|
||||
{{#if showFilteringUI}}
|
||||
{{#if hasFilteringActions}}
|
||||
<div class="report-filters">
|
||||
{{#if showDatesOptions}}
|
||||
<div class="filtering-control">
|
||||
<span class="filtering-label">
|
||||
{{i18n 'admin.dashboard.reports.start_date'}}
|
||||
</span>
|
||||
|
||||
<div class="filtering-input">
|
||||
{{date-picker-past
|
||||
value=startDate
|
||||
defaultDate=startDate
|
||||
onSelect=onSelectStartDate}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="filtering-control">
|
||||
<span class="filtering-label">
|
||||
{{i18n 'admin.dashboard.reports.end_date'}}
|
||||
</span>
|
||||
|
||||
<div class="filtering-input">
|
||||
{{date-picker-past
|
||||
value=endDate
|
||||
defaultDate=endDate
|
||||
onSelect=onSelectEndDate}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showCategoryOptions}}
|
||||
<div class="filtering-control">
|
||||
<div class="filtering-input">
|
||||
{{combo-box
|
||||
onSelect=onSelectCategory
|
||||
filterable=true
|
||||
valueAttribute="value"
|
||||
content=categoryOptions
|
||||
castInteger=true
|
||||
value=categoryId}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showGroupOptions}}
|
||||
<div class="filtering-control">
|
||||
<div class="filtering-input">
|
||||
{{combo-box
|
||||
onSelect=onSelectGroup
|
||||
castInteger=true
|
||||
filterable=true
|
||||
valueAttribute="value"
|
||||
content=groupOptions
|
||||
value=groupId}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if showExport}}
|
||||
<div class="filtering-control">
|
||||
<div class="filtering-input">
|
||||
{{d-button class="export-btn" action="exportCsv" label="admin.export_csv.button_text" icon="download"}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if model.relatedReport}}
|
||||
{{admin-report dataSourceName=model.relatedReport.type}}
|
||||
{{/if}}
|
||||
{{/conditional-loading-section}}
|
||||
{{else}}
|
||||
<div class="alert alert-info">
|
||||
{{{i18n disabledLabel}}}
|
||||
</div>
|
||||
{{/if}}
|
||||
@@ -1,37 +0,0 @@
|
||||
{{#if model.sortedData}}
|
||||
<table class="table report {{model.type}}">
|
||||
<tr>
|
||||
<th>{{model.xaxis}}</th>
|
||||
<th>{{model.yaxis}}</th>
|
||||
</tr>
|
||||
|
||||
{{#each model.sortedData as |row|}}
|
||||
<tr>
|
||||
<td class="x-value">{{row.x}}</td>
|
||||
<td>
|
||||
{{row.y}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
|
||||
<tr class="total-for-period">
|
||||
<td class="x-value">
|
||||
{{i18n 'admin.dashboard.reports.total_for_period'}}
|
||||
</td>
|
||||
<td>
|
||||
{{totalForPeriod}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{{#if model.total}}
|
||||
<tr class="total">
|
||||
<td class="x-value">
|
||||
{{i18n 'admin.dashboard.reports.total'}}
|
||||
</td>
|
||||
<td>
|
||||
{{model.total}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
</table>
|
||||
{{/if}}
|
||||
@@ -1,27 +0,0 @@
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
<div class="table-title">
|
||||
<h3>{{title}}</h3>
|
||||
</div>
|
||||
|
||||
{{#each reportsForPeriod as |report|}}
|
||||
<div class="table-container">
|
||||
{{#unless hasBlock}}
|
||||
{{#each report.data as |data|}}
|
||||
<a class="table-cell user-{{data.key}}" href="{{data.url}}">
|
||||
<span class="label">
|
||||
{{#if data.icon}}
|
||||
{{d-icon data.icon}}
|
||||
{{/if}}
|
||||
{{data.x}}
|
||||
</span>
|
||||
<span class="value">
|
||||
{{number data.y}}
|
||||
</span>
|
||||
</a>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
{{yield (hash report=report)}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{/each}}
|
||||
{{/conditional-loading-section}}
|
||||
@@ -1,33 +0,0 @@
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
{{#each reportsForPeriod as |report|}}
|
||||
<div class="status">
|
||||
<h4 class="title">
|
||||
<a href="{{report.reportUrl}}">
|
||||
{{report.title}}
|
||||
</a>
|
||||
|
||||
<span class="info" data-tooltip="{{report.description}}">
|
||||
{{d-icon "question-circle"}}
|
||||
</span>
|
||||
</h4>
|
||||
|
||||
<div class="trend {{report.trend}}">
|
||||
<span class="trend-value" title="{{report.trendTitle}}">
|
||||
{{#if report.average}}
|
||||
{{number report.currentAverage}}{{#if report.percent}}%{{/if}}
|
||||
{{else}}
|
||||
{{number report.currentTotal noTitle="true"}}{{#if report.percent}}%{{/if}}
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if report.trendIcon}}
|
||||
{{d-icon report.trendIcon class="trend-icon"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="chart-canvas-container">
|
||||
<canvas class="chart-canvas"></canvas>
|
||||
</div>
|
||||
{{/conditional-loading-section}}
|
||||
@@ -1,36 +0,0 @@
|
||||
{{#conditional-loading-section isLoading=isLoading}}
|
||||
<div class="table-title">
|
||||
<h3>{{title}}</h3>
|
||||
</div>
|
||||
|
||||
{{#each reportsForPeriod as |report|}}
|
||||
<div class="table-container">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
{{#if report.labels}}
|
||||
{{#each report.labels as |label|}}
|
||||
<th>{{label}}</th>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
{{#each report.data as |data|}}
|
||||
<th>{{data.x}}</th>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#unless hasBlock}}
|
||||
{{#each report.data as |data|}}
|
||||
<tr>
|
||||
<td>{{number data.y}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
{{yield (hash report=report)}}
|
||||
{{/unless}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{/conditional-loading-section}}
|
||||
Reference in New Issue
Block a user