Compare commits

...

8 Commits

3 changed files with 92 additions and 124 deletions

View File

@ -1,7 +1,7 @@
{
"name": "strolch-wc-reports",
"description": "Strolch WebComponent Reports",
"version": "0.4.0",
"version": "0.5.6",
"authors": [
"Robert von Burg"
],
@ -19,13 +19,13 @@
"homepage": "https://github.com/strolch-li/strolch-wc-reports",
"ignore": [],
"dependencies": {
"strolchjs": "strolch-li/strolchjs#^0.5.1",
"strolch-wc-styles": "strolch-li/strolch-wc-styles#^0.3.1",
"strolch-wc-badge": "strolch-li/strolch-wc-badge#^0.1.1",
"strolch-wc-debounced-input": "strolch-li/strolch-wc-debounced-input#^0.1.1",
"strolch-wc-localize-behavior": "strolch-li/strolch-wc-localize-behavior#^1.1.14",
"strolchjs": "strolch-li/strolchjs#^0.5.3",
"strolch-wc-styles": "strolch-li/strolch-wc-styles#^0.4.7",
"strolch-wc-badge": "strolch-li/strolch-wc-badge#^0.1.4",
"strolch-wc-debounced-input": "strolch-li/strolch-wc-debounced-input#^0.1.6",
"strolch-wc-localize-behavior": "strolch-li/strolch-wc-localize-behavior#^1.1.17",
"polymer": "Polymer/polymer#^1.11.3",
"polymer": "Polymer/polymer#^1.12.0",
"iron-ajax": "PolymerElements/iron-ajax#^1.4.4",
"iron-pages": "PolymerElements/iron-pages#^1.0.9",

View File

@ -235,6 +235,9 @@
value: [],
notify: true
},
facetLimit: {
type: Number
},
facetLoading: {
type: Boolean,
value: false,
@ -252,7 +255,7 @@
if (newValue != null && oldValue != null) {
this.$.ajaxGetFields.params = {
query: newValue,
limit: 10
limit: this.facetLimit
};
this.$.ajaxGetFields.generateRequest();
}

View File

@ -146,7 +146,7 @@
justify-content: space-between;
}
.footer p {
.footer p, .duration {
color: #b5b5b5;
}
@ -230,11 +230,8 @@
font-weight: bold;
}
paper-card {
background-color: white;
margin-right: 20px;
padding-left: 10px;
padding-right: 10px;
.facetInfo {
margin: 0 auto 16px;
}
paper-input {
@ -245,38 +242,14 @@
</style>
<!-- Requests -->
<iron-ajax id="ajaxGetReports"
url="[[baseRestPath]]/strolch/reports"
content-type="application/json"
handle-as="json"
method="GET"
on-response="onGetReportResponse"
on-error="onAjaxError"
loading="{{loadingGetReports}}"></iron-ajax>
<iron-ajax id="ajaxGetFacets"
url="[[baseRestPath]]/strolch/reports/[[reportId]]/facets"
content-type="application/json"
handle-as="json"
method="GET"
on-response="onGetFacetResponse"
on-error="onAjaxError"
loading="{{loadingGetFacets}}"></iron-ajax>
<iron-ajax id="ajaxPostCsv"
url="[[baseRestPath]]/strolch/reports/[[reportId]]/csv"
content-type="application/json"
handle-as="text"
method="POST"
on-response="onPostCsvResponse"
on-error="onAjaxError"
loading="{{loadingPostCsv}}"></iron-ajax>
<iron-ajax id="ajaxPostReport"
url="[[baseRestPath]]/strolch/reports/[[reportId]]"
content-type="application/json"
handle-as="json"
method="POST"
on-response="onPostReportResponse"
on-error="onAjaxError"
loading="{{loadingPostReport}}"></iron-ajax>
<iron-ajax id="ajaxGetReports" url="[[baseRestPath]]/strolch/reports" content-type="application/json" handle-as="json" method="GET"
on-response="onGetReportResponse" on-error="onAjaxError" loading="{{loadingGetReports}}"></iron-ajax>
<iron-ajax id="ajaxGetFacets" url="[[baseRestPath]]/strolch/reports/[[reportId]]/facets" content-type="application/json" handle-as="json" method="GET"
on-response="onGetFacetResponse" on-error="onAjaxError" loading="{{loadingGetFacets}}"></iron-ajax>
<iron-ajax id="ajaxPostCsv" url="[[baseRestPath]]/strolch/reports/[[reportId]]/csv" content-type="application/json" handle-as="text" method="POST"
on-response="onPostCsvResponse" on-error="onAjaxError" loading="{{loadingPostCsv}}"></iron-ajax>
<iron-ajax id="ajaxPostReport" url="[[baseRestPath]]/strolch/reports/[[reportId]]" content-type="application/json" handle-as="json" method="POST"
on-response="onPostReportResponse" on-error="onAjaxError" loading="{{loadingPostReport}}"></iron-ajax>
<!-- Content -->
<div class="overlay-loading" hidden$="[[hideOverlay]]">
@ -288,9 +261,7 @@
<paper-material id="actionBar">
<paper-dropdown-menu label="[[localize('reportType')]]">
<paper-listbox class="dropdown-content"
selected="{{selectedReportIndex}}"
on-iron-select="onReportSelected">
<paper-listbox class="dropdown-content" selected="{{selectedReportIndex}}" on-iron-select="onReportSelected">
<template is="dom-repeat" items="[[reports]]" as="report">
<paper-item class="dropdown-item">[[localize(report.name)]]</paper-item>
</template>
@ -299,15 +270,8 @@
<template is="dom-if" if="[[reportId]]">
<div id="dateContainer">
<vaadin-date-picker label="[[localize('From')]]"
value="{{fromDate}}"
i18n="{{vaadinI18n}}"></vaadin-date-picker>
<vaadin-date-picker label="[[localize('To')]]"
value="{{toDate}}"
i18n="{{vaadinI18n}}"></vaadin-date-picker>
<vaadin-date-picker label="[[localize('From')]]" value="{{fromDate}}" i18n="{{vaadinI18n}}"></vaadin-date-picker>
<vaadin-date-picker label="[[localize('To')]]" value="{{toDate}}" i18n="{{vaadinI18n}}"></vaadin-date-picker>
</div>
</template>
@ -320,17 +284,10 @@
<iron-icon icon="print"></iron-icon>
{{localize('buttonPrintLabel')}}
</paper-button>
<paper-icon-button id="refreshButton"
on-tap="onRefreshTapped"
icon="refresh"
disabled$="[[!reportId]]"></paper-icon-button>
<paper-icon-button id="refreshButton" on-tap="onRefreshTapped" icon="refresh" disabled$="[[!reportId]]"></paper-icon-button>
</div>
<paper-tooltip for="exportButton" position="top" offset="4">
{{localize('buttonExportDesc')}}
</paper-tooltip>
<paper-tooltip for="refreshButton" position="top" offset="4">
{{localize('refreshView')}}
</paper-tooltip>
<paper-tooltip for="exportButton" position="top" offset="4">{{localize('buttonExportDesc')}}</paper-tooltip>
<paper-tooltip for="refreshButton" position="top" offset="4">{{localize('refreshView')}}</paper-tooltip>
</paper-material>
</div>
@ -346,13 +303,22 @@
</div>
</template>
<div id="facetContainer"
class="light-border noprint"
on-iron-select="onSelectionChanged"
on-iron-deselect="onSelectionChanged"
hidden$="[[!showFacets]]"
restamp>
<div id="facetContainer" class="light-border noprint" on-iron-select="onSelectionChanged" on-iron-deselect="onSelectionChanged"
hidden$="[[!showFacets]]" restamp>
<paper-icon-button icon="chevron-left" on-tap="onToggleShowFacets"></paper-icon-button>
<template is="dom-if" if="[[arrayEmpty(facets)]]">
<p class="facetInfo"><i>[[localize('noFacetsAvailable')]]</i></p>
</template>
<template is="dom-if" if="[[arrayFilled(facets)]]">
<template is="dom-if" if="[[areRowFacetsLimited]]">
<p class="facetInfo"><i>[[localize('facetsAreBeingTrimmed')]]</i></p>
</template>
<template is="dom-if" if="[[!areRowFacetsLimited]]">
<p class="facetInfo"><i>[[localize('showingMaxNrOfFacets', 'facets', maxFacetValues)]]</i></p>
</template>
</template>
<template is="dom-repeat" items="[[facets]]" as="facet">
<strolch-wc-reports-facet base-path="[[basePath]]"
base-rest-path="[[baseRestPath]]"
@ -361,32 +327,11 @@
facet-id="[[facet.type]]"
fields="[[facet.values]]"
filter="[[allFilters]]"
facet-limit="[[facetLimit]]"
facet-limit="[[maxFacetValues]]"
on-facet-loading="onFacetLoading"></strolch-wc-reports-facet>
</template>
<paper-card raised>
<template is="dom-if" if="[[arrayEmpty(facets)]]">
<p><i>[[localize('noFacetsAvailable')]]</i></p>
</template>
<template is="dom-if" if="[[arrayFilled(facets)]]">
<template is="dom-if" if="[[trimFacetValues]]">
<p><i>[[localize('facetsAreBeingTrimmed')]]</i></p>
</template>
<template is="dom-if" if="[[!trimFacetValues]]">
<paper-input required
label="[[localize('facetLimit')]]"
type="number"
auto-validate
min="1"
max="100"
value="{{facetLimit}}">
</paper-input>
<paper-icon-button icon="refresh" on-tap="reloadFacets"></paper-icon-button>
</template>
</template>
</paper-card>
<p class="facetInfo duration"><i>[[localize('duration')]] [[facetLoadDuration]]</i></p>
</div>
<div id="tableContainer">
@ -394,25 +339,19 @@
locales-path="[[localesPath]]"
data="[[data]]"></strolch-wc-reports-table>
<template is="dom-if" if="[[data]]">
<div class="footer noprint">
<div>
<paper-button class$="[[getLimitBtnClass(25, data.limit)]]" on-tap="setLimit">25
</paper-button>
<paper-button class$="[[getLimitBtnClass(50, data.limit)]]" on-tap="setLimit">50
</paper-button>
<paper-button class$="[[getLimitBtnClass(100, data.limit)]]" on-tap="setLimit">100
</paper-button>
<paper-button class$="[[getLimitBtnClass(25, data.limit)]]" on-tap="setLimit">25</paper-button>
<paper-button class$="[[getLimitBtnClass(50, data.limit)]]" on-tap="setLimit">50</paper-button>
<paper-button class$="[[getLimitBtnClass(100, data.limit)]]" on-tap="setLimit">100</paper-button>
</div>
<div>
<div class="g-center">
<paper-icon-button icon="first-page" on-tap="_toFirstPage"></paper-icon-button>
<paper-icon-button icon="chevron-left"
on-tap="_toPreviousPage"></paper-icon-button>
<paper-icon-button icon="chevron-left" on-tap="_toPreviousPage"></paper-icon-button>
<span>[[data.offset]] [[localize('to')]] [[_getEnd(data)]] [[localize('of')]] [[_getSize(data)]]</span>
<paper-icon-button icon="chevron-right"
on-tap="_toNextPage"></paper-icon-button>
<paper-icon-button icon="chevron-right" on-tap="_toNextPage"></paper-icon-button>
<paper-icon-button icon="last-page" on-tap="_toLastPage"></paper-icon-button>
</div>
</div>
@ -464,10 +403,20 @@
value: true,
observer: 'showFacetsChanged'
},
trimFacetValues: {
type: Boolean,
facetLimit: {
type: Number
},
maxFacetValues: {
type: Number
},
maxRowsForFacetGeneration: {
type: Number,
value: false
},
areRowFacetsLimited: {
type: Boolean,
computed: "computeAreRowFacetsLimited(maxRowsForFacetGeneration)"
},
facets: {
type: Array,
value: []
@ -538,6 +487,9 @@
},
/* Computations */
computeAreRowFacetsLimited: function (maxRowsForFacetGeneration) {
return maxRowsForFacetGeneration > 0;
},
getLimitBtnClass: function (expected, actual) {
return expected !== actual ? "limitBtn" : "limitBtn bold";
},
@ -550,6 +502,9 @@
arrayFilled: function (arr) {
return !this.arrayEmpty(arr);
},
greater: function (v1, v2) {
return v1 > v2;
},
/* Observers */
observers: [
@ -633,10 +588,16 @@
if (this.reportToLoad != null) {
for (var i = 0; i < this.reports.length; i++) {
if (this.reports[i].id === this.reportToLoad) {
this.selectedReportIndex = i;
if (this.selectedReportIndex === i)
this.onReportSelected();
else {
this.selectedReportIndex = i;
}
break;
}
}
this.reportToLoad = null;
}
this.hideLoadingOverlay();
@ -653,9 +614,11 @@
// remove all filters
this.allFilters = [];
this.facetLoadDuration = response.data.duration;
// directly set this as the available facets
this.facets = response.data;
if (response.data.length === 0) {
this.facets = response.data.facets;
if (this.facets.length === 0) {
this.showFacets = false;
}
@ -774,17 +737,15 @@
// set the new report id
var report = this.reports[this.selectedReportIndex];
this.reportId = report.id;
this.trimFacetValues = report.trimFacetValues === true;
this.$.ajaxGetFacets.params.limit = this.facetLimit;
this.$.ajaxGetFacets.generateRequest();
Strolch.setQueryParamValue("reportId", this.reportId);
},
reloadFacets: function () {
if (Strolch.isInteger(this.facetLimit)) {
this.$.ajaxGetFacets.params.limit = this.facetLimit;
this.maxRowsForFacetGeneration = report.maxRowsForFacetGeneration ? report.maxRowsForFacetGeneration : -1;
this.maxFacetValues = report.maxFacetValues ? report.maxFacetValues : this.facetLimit;
this.$.ajaxGetFacets.params.limit = this.maxFacetValues;
Strolch.setQueryParamValue("reportId", this.reportId);
this.async(function () {
this.$.ajaxGetFacets.generateRequest();
}
}, 10);
},
onSelectionChanged: function (event) {
@ -811,7 +772,11 @@
},
onRefreshTapped: function (event) {
this.$.ajaxPostReport.generateRequest();
var reportId = Strolch.getQueryParamValue("reportId");
if (reportId != null && reportId !== "") {
this.reportToLoad = reportId;
}
this.$.ajaxGetReports.generateRequest();
},
onPrintTapped: function (elem) {
@ -820,7 +785,7 @@
},
reload: function () {
this.$.ajaxGetReports.generateRequest();
this.onRefreshTapped();
},
/* Private */