Skip to content

Commit e108f11

Browse files
authored
Merge pull request #5840 from Countly/anna/next
[core Added scrolling to omitted segment list if list is too long. [views] UI for view omitting
2 parents 5864276 + d898c78 commit e108f11

File tree

6 files changed

+120
-8
lines changed

6 files changed

+120
-8
lines changed

frontend/express/public/javascripts/countly/vue/templates/selectx.html

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,15 @@
129129
@change="handleValueChange"
130130
v-model="innerValue">
131131
</cly-checklistbox>
132-
<div class="cly-vue-events-omitted-segments bu-ml-1" v-if="hasDisabledOptions && searchQuery == ''">
132+
<div class="cly-vue-events-omitted-segments bu-ml-1" style="height:150px;" v-if="hasDisabledOptions && searchQuery == ''">
133133
<div class="cly-vue-events-omitted-segments__title">
134134
{{disabledOptions.label}}
135135
</div>
136-
<div class="cly-vue-events-omitted-segments__item" v-for="item in disabledOptions.options">
137-
{{item.label}}
138-
</div>
136+
<vue-scroll :ops='{bar: {background: "#A7AEB8",size: "6px",specifyBorderRadius: "3px",keepShow: true}}'>
137+
<div class="cly-vue-events-omitted-segments__item" v-for="item in disabledOptions.options">
138+
{{item.label}}
139+
</div>
140+
</vue-scroll>
139141
</div>
140142
</el-tab-pane>
141143
</el-tabs>

plugins/views/api/api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1313,7 +1313,7 @@ const escapedViewSegments = { "name": true, "segment": true, "height": true, "wi
13131313
if (res1 && res1.omit) {
13141314
res.omit = res1.omit;
13151315
}
1316-
if (common.drillDb) {
1316+
if (common.drillDb && !params.qstring.skip_domains) {
13171317
var collectionName = "drill_events" + crypto.createHash('sha1').update("[CLY]_action" + params.qstring.app_id).digest('hex');
13181318
common.drillDb.collection(collectionName).findOne({"_id": "meta_v2"}, {_id: 0, "sg.domain": 1}, function(err3, meta1) {
13191319
if (meta1 && meta1.sg && meta1.sg.domain.values) {

plugins/views/frontend/public/javascripts/countly.models.js

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,36 @@
2424
CountlyHelpers.createMetricModel(countlyViews, {name: "views"}, jQuery);
2525

2626
countlyViews.service = {
27+
fetchMetaData: function() {
28+
return CV.$.ajax({
29+
type: "GET",
30+
url: countlyCommon.API_PARTS.data.r,
31+
data: {
32+
"app_id": countlyCommon.ACTIVE_APP_ID,
33+
"method": "get_view_segments",
34+
"skip_domains": true
35+
},
36+
dataType: "json",
37+
success: function(json) {
38+
if (json && json.segments) {
39+
for (var i = 0; i < json.segments.length; i++) {
40+
json.segments[i] = countlyCommon.decode(json.segments[i]);
41+
}
42+
_segments = json.segments;
43+
for (let segment in _segments) {
44+
_segments[segment].sort(Intl.Collator().compare);
45+
}
46+
}
47+
if (json && json.omit) {
48+
for (let index = 0; index < json.omit.length; index++) {
49+
json.omit[index] = countlyCommon.decode(json.omit[index]);
50+
}
51+
_omit = json.omit;
52+
_omit.sort(Intl.Collator().compare);
53+
}
54+
}
55+
});
56+
},
2757
fetchData: function(context) {
2858
_segment = context.state.selectedSegment;
2959
_segmentVal = context.state.selectedSegmentValue;
@@ -59,8 +89,6 @@
5989
data: data,
6090
dataType: "json",
6191
}, {"disableAutoCatch": true});
62-
63-
6492
},
6593
updateViews: function(statusObj) {
6694
return CV.$.ajax({
@@ -85,6 +113,18 @@
85113
},
86114
dataType: "json"
87115
}, {"disableAutoCatch": true});
116+
},
117+
omitSegments: function(segments) {
118+
return CV.$.ajax({
119+
type: "POST",
120+
url: countlyCommon.API_PARTS.data.w + "/views",
121+
data: {
122+
app_id: countlyCommon.ACTIVE_APP_ID,
123+
"method": "omit_segments",
124+
"omit_list": segments
125+
},
126+
dataType: "json"
127+
}, {"disableAutoCatch": true});
88128
}
89129
};
90130

@@ -461,8 +501,17 @@
461501
};
462502

463503
var ViewsActions = {
504+
fetchMetaData: function(context) {
505+
return countlyViews.service.fetchMetaData()
506+
.then(function() {
507+
context.commit('setSegments', _segments);
508+
context.commit('setOmittedSegments', _omit);
509+
context.dispatch('onFetchSuccess');
510+
}).catch(function(error) {
511+
context.dispatch('onFetchError', error);
512+
});
513+
},
464514
fetchTotals: function(context) {
465-
466515
return countlyViews.service.fetchTotals()
467516
.then(function(response) {
468517
context.commit('setTotals', response || {});
@@ -520,6 +569,14 @@
520569
context.dispatch('onUpdateError', error);
521570
});
522571
},
572+
omitSegments: function(context, data) {
573+
context.dispatch('onUpdateError', "");
574+
return countlyViews.service.omitSegments(data).then(function() {
575+
576+
}).catch(function(error) {
577+
context.dispatch('onUpdateError', error);
578+
});
579+
},
523580
onFetchInit: function(context) {
524581
context.commit('setFetchInit');
525582
},

plugins/views/frontend/public/javascripts/countly.views.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,24 @@
1919
deleteDialogText: "",
2020
deleteDialogConfirmText: CV.i18n('views.yes-delete-view'),
2121
showDeleteDialog: false,
22+
availableSegments: ["platform"],
23+
omitList: [],
24+
segmentsLoaded: false,
2225
};
2326
},
2427
mounted: function() {
28+
var self = this;
29+
this.$store.dispatch('countlyViews/fetchMetaData').then(function() {
30+
var segments = self.$store.state.countlyViews.segments || {};
31+
self.availableSegments = [];
32+
for (var key in segments) {
33+
self.availableSegments.push({value: key, label: key});
34+
}
35+
var omittedSegments = self.$store.getters['countlyViews/getOmittedSegments'];
36+
self.omitList = omittedSegments || [];
37+
self.segmentsLoaded = true;
38+
39+
});
2540
},
2641
methods: {
2742
handleSelectionChange: function(selectedRows) {
@@ -43,6 +58,22 @@
4358
}
4459
}
4560
},
61+
omitSegments: function() {
62+
var self = this;
63+
CountlyHelpers.confirm(CV.i18n('views.omit-segments-confirm'), "red", function(result) {
64+
if (!result) {
65+
return true;
66+
}
67+
self.$store.dispatch("countlyViews/omitSegments", JSON.stringify(self.omitList)).then(function() {
68+
if (self.$store.getters["countlyViews/updateError"]) {
69+
CountlyHelpers.notify({type: "error", title: jQuery.i18n.map["common.error"], message: self.$store.getters["countlyViews/updateError"], sticky: false, clearAll: true});
70+
}
71+
else {
72+
CountlyHelpers.notify({type: "ok", title: jQuery.i18n.map["common.success"], message: jQuery.i18n.map["events.general.changes-saved"], sticky: false, clearAll: true});
73+
}
74+
});
75+
});
76+
},
4677
deleteManyViews: function() {
4778
if (this.selectedViews.length > 0) {
4879
if (this.selectedViews.length === 1) {

plugins/views/frontend/public/localization/views.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ internal-events.[CLY]_action = Action
6666
systemlogs.action.view_deleted = View Deleted
6767
systemlogs.action.view_segments_ommit_complete = View segment ommiting complete
6868
systemlogs.action.view_segments_ommit = View segment ommiting start
69+
views.omit-segments-confirm = Do you want to omit selected segments for all views in this app?
6970
views.max-views-limit = Maximum limit of unique views ({0}) has been reached. Limit can be adjusted on the Views configurations page.
7071
views.drill-drawer.title = Drill views
7172
views.drill-drawer.save-button = Go to Drill

plugins/views/frontend/public/templates/manageViews.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,27 @@
1212
{{deleteDialogText}}
1313
</template>
1414
</cly-confirm-dialog>
15+
<cly-section>
16+
<div class="bu-p-4">
17+
<div class="text-smallish font-weight-bold bu-mb-2" data-test-id="manage-views-omit-title" >{{i18n('data-manager.omit-segments')}}
18+
<cly-tooltip-icon data-test-id="manage-views-omit-tooltip" class="bu-is-flex-grow-1 bu-ml-2" :tooltip="i18n('data-manager.omit-segments.tooltip')"></cly-tooltip-icon>
19+
</div>
20+
<cly-select-x
21+
data-test-id="manage-views-omit-select"
22+
mode="multi-check"
23+
value=omitList
24+
:collapseTags = "false"
25+
:options="availableSegments"
26+
:show-search="true"
27+
:searchable="true"
28+
width="100%"
29+
:placeholder="i18n('data-manager.omit-segments')"
30+
v-model="omitList"
31+
style="margin-top:2px; display:block;">
32+
</cly-select-x>
33+
<el-button class="bu-mt-2" v-if="canUserDelete" ref="omitSegmentsButton" type="success" @click="omitSegments" >{{i18n('common.save')}}</el-button>
34+
</div>
35+
</cly-section>
1536
<cly-section>
1637
<cly-datatable-n :default-sort="{prop: 'view', order: 'ascending'}" :trackedFields="['display']" :data-source="remoteTableDataSource" ref="editViewsTable" @selection-change="handleSelectionChange" >
1738
<template v-slot:header-left>

0 commit comments

Comments
 (0)