toggle-components-library 1.36.1 → 1.36.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/img/airship-feedback-hover.a207c947.svg +10 -0
- package/dist/img/airship-feedback.1f7c858c.svg +10 -0
- package/dist/toggle-components-library.common.js +39486 -13335
- package/dist/toggle-components-library.common.js.map +1 -1
- package/dist/toggle-components-library.css +1 -1
- package/dist/toggle-components-library.umd.js +39486 -13335
- package/dist/toggle-components-library.umd.js.map +1 -1
- package/dist/toggle-components-library.umd.min.js +285 -8
- package/dist/toggle-components-library.umd.min.js.map +1 -1
- package/package.json +2 -1
- package/src/assets/icons/airship-feedback-hover.svg +10 -0
- package/src/assets/icons/airship-feedback.svg +10 -0
- package/src/components/buttons/ToggleMetricsButton.vue +22 -3
- package/src/components/cards/ToggleCommentCard.vue +55 -0
- package/src/components/carousel/ToggleCarousel.vue +29 -16
- package/src/components/carousel/ToggleCarouselSlide.vue +1 -1
- package/src/components/forms/ToggleDatePicker.vue +229 -138
- package/src/components/forms/ToggleInputCurrency.vue +10 -3
- package/src/components/forms/ToggleInputPercentage.vue +7 -1
- package/src/components/forms/ToggleInputSelect.vue +7 -13
- package/src/components/forms/ToggleInputText.vue +0 -11
- package/src/components/metrics/ToggleMetricSingleMetric.vue +12 -7
- package/src/components/metrics/ToggleMetricSparkLine.vue +7 -3
- package/src/components/mixins/mixins.js +2 -2
- package/src/components/statusbar/ToggleStatusBar.vue +74 -0
- package/src/components/tables/ToggleTable.vue +49 -114
- package/src/index.js +7 -4
- package/src/sass/includes/_as_buttons.scss +47 -4
- package/src/sass/includes/_as_cards.scss +33 -0
- package/src/sass/includes/_as_carousels.scss +12 -0
- package/src/sass/includes/_as_inputs.scss +830 -825
- package/src/sass/includes/_as_metrics.scss +5 -0
- package/src/sass/includes/_as_navs.scss +18 -2
- package/src/sass/includes/_as_statusbar.scss +183 -0
- package/src/sass/includes/_as_table.scss +163 -163
- package/src/sass/main.scss +1 -0
- package/dist/img/contacts-greyblue.ef6f8a9a.svg +0 -1
- package/dist/img/contacts-white.95d07c7a.svg +0 -1
- package/package-lock.json +0 -20285
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
|
|
3
3
|
<div class="toggle-input-container" :class="{'toggle-input-is-invalid':isInvalid, 'toggle-input-is-disabled':disabled}" v-on:click="focusClosestInput">
|
|
4
|
-
<label
|
|
4
|
+
<label
|
|
5
5
|
v-if="label"
|
|
6
|
-
:for="name ? name : 'ToggleInputSelect' "
|
|
6
|
+
:for="name ? name : 'ToggleInputSelect' "
|
|
7
7
|
class="toggle-input-label"
|
|
8
|
-
> {{ label }}
|
|
8
|
+
> {{ label }}
|
|
9
9
|
</label>
|
|
10
10
|
|
|
11
11
|
<div class="toggle-input-select-container">
|
|
12
|
-
<select
|
|
13
|
-
:name="name ? name : 'ToggleInputSelect' "
|
|
12
|
+
<select
|
|
13
|
+
:name="name ? name : 'ToggleInputSelect' "
|
|
14
14
|
:class="[ 'toggle-input-select', size]"
|
|
15
|
-
v-model="inputVal"
|
|
15
|
+
v-model="inputVal"
|
|
16
16
|
:autocomplete="autocomplete ? 'on' : 'off' "
|
|
17
17
|
:required="required"
|
|
18
18
|
:disabled="disabled"
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
<label
|
|
27
|
-
class="toggle-input-label-error"
|
|
27
|
+
class="toggle-input-label-error"
|
|
28
28
|
v-if="isInvalid"
|
|
29
29
|
:for="name ? name : 'ToggleInputText' "
|
|
30
30
|
>
|
|
@@ -39,11 +39,6 @@ import { mixins } from '../mixins/mixins'
|
|
|
39
39
|
|
|
40
40
|
export default {
|
|
41
41
|
mixins:[mixins],
|
|
42
|
-
data() {
|
|
43
|
-
return {
|
|
44
|
-
show: false
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
42
|
props: {
|
|
48
43
|
value: {},
|
|
49
44
|
name: {
|
|
@@ -92,7 +87,6 @@ export default {
|
|
|
92
87
|
},
|
|
93
88
|
|
|
94
89
|
created : function(){
|
|
95
|
-
|
|
96
90
|
},
|
|
97
91
|
computed: {
|
|
98
92
|
inputVal: {
|
|
@@ -19,8 +19,6 @@
|
|
|
19
19
|
:maxlength="maxLength"
|
|
20
20
|
:disabled="disabled"
|
|
21
21
|
:readonly="readonly"
|
|
22
|
-
:ref="'input_ele'"
|
|
23
|
-
@keyup.esc="handleEscPress"
|
|
24
22
|
/>
|
|
25
23
|
<label
|
|
26
24
|
class="toggle-input-label-error"
|
|
@@ -105,10 +103,6 @@ export default {
|
|
|
105
103
|
}
|
|
106
104
|
},
|
|
107
105
|
|
|
108
|
-
created : function()
|
|
109
|
-
{
|
|
110
|
-
this.$nextTick(() => this.$refs['input_ele'].focus());
|
|
111
|
-
},
|
|
112
106
|
computed: {
|
|
113
107
|
inputVal: {
|
|
114
108
|
get: function (){
|
|
@@ -122,11 +116,6 @@ export default {
|
|
|
122
116
|
},
|
|
123
117
|
methods: {
|
|
124
118
|
|
|
125
|
-
handleEscPress()
|
|
126
|
-
{
|
|
127
|
-
this.$emit('bail');
|
|
128
|
-
},
|
|
129
|
-
|
|
130
119
|
/*
|
|
131
120
|
* Concat message for count characters
|
|
132
121
|
* @return string
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
<div>
|
|
3
3
|
<h3 class="toggle-metric metric-label">{{label}}</h3>
|
|
4
4
|
<div class="single-metric-icon" v-if="metricPending && label.length == 0"></div>
|
|
5
|
-
<h1 class="toggle-metric metric-value" v-else>{{metricValue}}
|
|
5
|
+
<h1 class="toggle-metric metric-value" v-else>{{metricValue}}
|
|
6
|
+
<span v-if="score && value.maxScore" class="toggle-metric-score-rating">/{{value.maxScore}}</span>
|
|
7
|
+
</h1>
|
|
6
8
|
</div>
|
|
7
9
|
</template>
|
|
8
10
|
|
|
@@ -21,20 +23,20 @@ export default {
|
|
|
21
23
|
type: String,
|
|
22
24
|
default: "ToggleMetricSingleMetric"
|
|
23
25
|
},
|
|
24
|
-
|
|
26
|
+
/**
|
|
25
27
|
* Type of the value, this will affect on the format shown
|
|
26
28
|
*/
|
|
27
29
|
type : {
|
|
28
30
|
type: String,
|
|
29
31
|
validator: function (value) {
|
|
30
|
-
return ['text', 'number', 'percentage', 'currency'].indexOf(value) !== -1
|
|
32
|
+
return ['text', 'number', 'percentage', 'currency', 'score'].indexOf(value) !== -1
|
|
31
33
|
}
|
|
32
34
|
},
|
|
33
35
|
/**
|
|
34
36
|
* Component's value
|
|
35
37
|
*/
|
|
36
38
|
value: {
|
|
37
|
-
type: [String, Number],
|
|
39
|
+
type: [String, Number, Object],
|
|
38
40
|
required: true
|
|
39
41
|
},
|
|
40
42
|
/**
|
|
@@ -87,14 +89,17 @@ export default {
|
|
|
87
89
|
case 'currency':
|
|
88
90
|
return (this.value/this.currencyDenomination).toLocaleString(this.currencyLocale, {style: 'currency', currency: this.currencyCode});
|
|
89
91
|
case'percentage':
|
|
90
|
-
return `${this.value}
|
|
92
|
+
return `${this.value} %`;
|
|
93
|
+
case 'score':
|
|
94
|
+
return this.value.score;
|
|
91
95
|
default:
|
|
92
96
|
return this.value.toLocaleString();
|
|
93
97
|
|
|
94
98
|
}
|
|
99
|
+
},
|
|
100
|
+
score() {
|
|
101
|
+
return this.type === 'score';
|
|
95
102
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
103
|
}
|
|
99
104
|
}
|
|
100
105
|
|
|
@@ -54,14 +54,14 @@ export default {
|
|
|
54
54
|
type : {
|
|
55
55
|
type: String,
|
|
56
56
|
validator: function (value) {
|
|
57
|
-
return ['text', 'number', 'percentage', 'currency'].indexOf(value) !== -1
|
|
57
|
+
return ['text', 'number', 'percentage', 'currency', 'score'].indexOf(value) !== -1
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
60
|
/**
|
|
61
61
|
* single metric component value
|
|
62
62
|
*/
|
|
63
63
|
singleMetricVal: {
|
|
64
|
-
type: [String, Number],
|
|
64
|
+
type: [String, Number, Object],
|
|
65
65
|
required: true
|
|
66
66
|
},
|
|
67
67
|
/**
|
|
@@ -112,6 +112,10 @@ export default {
|
|
|
112
112
|
inverse_trend_impact: {
|
|
113
113
|
type: Boolean,
|
|
114
114
|
default: false
|
|
115
|
+
},
|
|
116
|
+
showTrendForAllZeros: {
|
|
117
|
+
type: Boolean,
|
|
118
|
+
default: false
|
|
115
119
|
}
|
|
116
120
|
},
|
|
117
121
|
|
|
@@ -195,7 +199,7 @@ export default {
|
|
|
195
199
|
|
|
196
200
|
const trendImpactVals = this.sparkLineVal[0].data[0].y || this.sparkLineVal[0].data[0].y === 0 ? this.sparkLineVal[0].data.map(data => data.y) : this.sparkLineVal[0].data;
|
|
197
201
|
|
|
198
|
-
let result = this.calcTrendImpact(trendImpactVals, this.trend_impact_base);
|
|
202
|
+
let result = this.calcTrendImpact(trendImpactVals, this.trend_impact_base, this.showTrendForAllZeros);
|
|
199
203
|
|
|
200
204
|
if (this.inverse_trend_impact === true && result != false)
|
|
201
205
|
return result *-1;
|
|
@@ -139,10 +139,10 @@ export const charts = {
|
|
|
139
139
|
*
|
|
140
140
|
* @return { {Integer} 1, 0,-1 }
|
|
141
141
|
*/
|
|
142
|
-
calcTrendImpact(values, trend_impact_base){
|
|
142
|
+
calcTrendImpact(values, trend_impact_base, show_trend_for_all_zeros){
|
|
143
143
|
|
|
144
144
|
// If all values in the values array are 0 return 0;
|
|
145
|
-
if (values.every((val) => val === 0)){
|
|
145
|
+
if (!show_trend_for_all_zeros && values.every((val) => val === 0)){
|
|
146
146
|
return false;
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="['toggle-status-bar-container', statusColours, statusSize]">
|
|
3
|
+
<span class="toggle-status-bar-dot blinking toggle-status-bar-label" v-if="showDot">●</span>
|
|
4
|
+
<label class="toggle-status-bar-label">
|
|
5
|
+
{{ statusName }}
|
|
6
|
+
</label>
|
|
7
|
+
|
|
8
|
+
<div class="toggle-status-bar-tooltip-container" v-if="showToolTip && toolTipText.length">
|
|
9
|
+
<div class="toggle-status-bar-tooltip">
|
|
10
|
+
?
|
|
11
|
+
<span class="toggle-status-bar-tooltip-text">{{ toolTipText }}</span>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
export default {
|
|
19
|
+
name: 'StatusBar',
|
|
20
|
+
props: {
|
|
21
|
+
status: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: true,
|
|
24
|
+
validator: function (value) {
|
|
25
|
+
return ['draft', 'processing', 'complete', 'inactive', 'active', 'submitted', 'failed'].indexOf(value) !== -1;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
size: {
|
|
29
|
+
type: String,
|
|
30
|
+
required: false,
|
|
31
|
+
default: 'regular',
|
|
32
|
+
validator: function (value) {
|
|
33
|
+
return ['small', 'regular'].indexOf(value) !== -1;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
toolTipOptions: {
|
|
37
|
+
type: Object,
|
|
38
|
+
required: false
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
computed: {
|
|
42
|
+
// Capitalise the first letter of the status
|
|
43
|
+
statusName() {
|
|
44
|
+
return this.status.charAt(0).toUpperCase() + this.status.slice(1);
|
|
45
|
+
},
|
|
46
|
+
// Add the status to the class name
|
|
47
|
+
statusColours() {
|
|
48
|
+
return 'toggle-status-bar-' + this.status;
|
|
49
|
+
},
|
|
50
|
+
// Add the size to the class name
|
|
51
|
+
statusSize() {
|
|
52
|
+
return 'toggle-status-bar-' + this.size;
|
|
53
|
+
},
|
|
54
|
+
// Show the dot if the status is active or processing
|
|
55
|
+
showDot() {
|
|
56
|
+
return this.status === 'active' || this.status === 'processing' || this.status === 'submitted';
|
|
57
|
+
},
|
|
58
|
+
showToolTip() {
|
|
59
|
+
return this.size == 'regular';
|
|
60
|
+
},
|
|
61
|
+
toolTipText() {
|
|
62
|
+
if (!this.toolTipOptions) {
|
|
63
|
+
return '';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (this.toolTipOptions[this.status]) {
|
|
67
|
+
return this.toolTipOptions[this.status];
|
|
68
|
+
} else {
|
|
69
|
+
return '';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
</script>
|
|
@@ -3,56 +3,29 @@
|
|
|
3
3
|
<div>
|
|
4
4
|
|
|
5
5
|
<table class="toggle-table">
|
|
6
|
-
<thead :class="{'toggle-table-any-search-active':
|
|
6
|
+
<thead :class="{'toggle-table-any-search-active': searchActive}">
|
|
7
7
|
<tr class="toggle-tablee-tr">
|
|
8
|
-
<th
|
|
9
|
-
scope="col"
|
|
10
|
-
:class="['toggle-table-th', {'toggle-table-search-active': tableSearchActive(field), 'toggle-table-searchable':field.filterable}]"
|
|
11
|
-
v-for="(field, index) in headers"
|
|
12
|
-
:colspan="field.colspan"
|
|
8
|
+
<th
|
|
9
|
+
scope="col"
|
|
10
|
+
:class="['toggle-table-th', {'toggle-table-search-active': tableSearchActive(field), 'toggle-table-searchable':field.filterable}]"
|
|
11
|
+
v-for="(field, index) in headers"
|
|
13
12
|
:key="index"
|
|
14
13
|
:style="'width:'+field.width"
|
|
15
14
|
@click="activateSearch(field)"
|
|
16
15
|
>
|
|
17
|
-
<div class="toggle-table-th-inner"
|
|
18
|
-
|
|
16
|
+
<div class="toggle-table-th-inner">
|
|
19
17
|
<span class="toggle-table-th-title">{{field.label}}</span>
|
|
20
18
|
<span class="toggle-table-close-search" v-on:click.stop @click="closeSearch(field)"></span>
|
|
19
|
+
<ToggleInputText type="text" :ref="field.key+'-input'" v-model="searchModels[field.key]" @input="searchChange(field)"
|
|
20
|
+
v-if="field.type == 'text' && (searchModels[field.key] || editingInput == field.key)" />
|
|
21
|
+
<ToggleInputSelect style="margin-top:2px;" size="small" v-if="field.type == 'select' && (searchModels[field.key] || editingInput == field.key)" :options="field.select_options" v-model="searchModels[field.key]" @input="val=>searchChange(val, field)"/>
|
|
21
22
|
|
|
22
|
-
<
|
|
23
|
-
v-if="field.type === 'text' && (searchModels[field.key] || editingInput === field.key) && applyFocus"
|
|
24
|
-
type="text"
|
|
25
|
-
:ref="field.key+'-input'"
|
|
26
|
-
v-model="searchModels[field.key]"
|
|
27
|
-
@input="searchChange()"
|
|
28
|
-
@bail="closeSearch(field)"
|
|
29
|
-
/>
|
|
30
|
-
<ToggleInputSelect
|
|
31
|
-
style="margin-top:2px;"
|
|
32
|
-
:size="'small'"
|
|
33
|
-
v-if="field.type === 'select' && (searchModels[field.key] || editingInput === field.key) && applyFocus"
|
|
34
|
-
:options="field.select_options"
|
|
35
|
-
v-model="searchModels[field.key]"
|
|
36
|
-
@input="searchChange()"
|
|
37
|
-
/>
|
|
38
|
-
<ToggleDateRangePicker
|
|
39
|
-
v-if="field.type === 'date_range' && (searchModels[field.key].start || searchModels[field.key].end || editingInput === field.key)"
|
|
40
|
-
name="date_range"
|
|
41
|
-
v-model="searchModels[field.key]"
|
|
42
|
-
@input="searchChange()"
|
|
43
|
-
/>
|
|
23
|
+
<ToggleDateRangePicker v-if="field.type == 'date' && (searchModels[field.key].start || searchModels[field.key].end || editingInput == field.key)" name="date" v-model="searchModels[field.key]" @input="val=>searchChange(val, field)" />
|
|
44
24
|
</div>
|
|
45
25
|
</th>
|
|
46
|
-
|
|
26
|
+
|
|
47
27
|
</tr>
|
|
48
28
|
</thead>
|
|
49
|
-
<tr class="empty-table" v-if="(items && items.length === 0) && !loading">
|
|
50
|
-
<td :colspan="headers.length">
|
|
51
|
-
<div class="full">
|
|
52
|
-
<div class="empty-area"><p>{{ emptyTableMessage }}</p></div>
|
|
53
|
-
</div>
|
|
54
|
-
</td>
|
|
55
|
-
</tr>
|
|
56
29
|
<tbody v-if="!$slots.default || !$slots.default.length">
|
|
57
30
|
<ToggleTableRow v-for="(item, index) in items" :key="index" >
|
|
58
31
|
<ToggleTableColumn v-for="(column, column_index) in item" :key="column_index">{{column}}</ToggleTableColumn>
|
|
@@ -89,34 +62,20 @@ export default {
|
|
|
89
62
|
type: [Array]
|
|
90
63
|
},
|
|
91
64
|
total:{
|
|
92
|
-
type: [Number]
|
|
65
|
+
type: [Number]
|
|
93
66
|
},
|
|
94
67
|
per_page:{
|
|
95
|
-
type: [Number]
|
|
68
|
+
type: [Number]
|
|
96
69
|
},
|
|
97
70
|
page:{
|
|
98
71
|
type: [Number],
|
|
99
72
|
default:1
|
|
100
|
-
},
|
|
101
|
-
loading: {
|
|
102
|
-
type: Boolean
|
|
103
|
-
},
|
|
104
|
-
emptyTableMessage: {
|
|
105
|
-
type: String,
|
|
106
|
-
default: "No rows returned."
|
|
107
|
-
},
|
|
108
|
-
searchDebounce: {
|
|
109
|
-
type: [Number],
|
|
110
|
-
default: 500
|
|
111
73
|
}
|
|
112
|
-
},
|
|
74
|
+
},
|
|
113
75
|
data : function(){
|
|
114
76
|
return {
|
|
115
77
|
editingInput:false,
|
|
116
|
-
searchModels:{}
|
|
117
|
-
anySearchActive: false,
|
|
118
|
-
applyFocus: false,
|
|
119
|
-
searchTimeout: null
|
|
78
|
+
searchModels:{}
|
|
120
79
|
};
|
|
121
80
|
},
|
|
122
81
|
computed: {
|
|
@@ -138,23 +97,36 @@ export default {
|
|
|
138
97
|
|
|
139
98
|
headers() {
|
|
140
99
|
if(!this.fields){
|
|
141
|
-
return Object.keys(this.items[0]);
|
|
100
|
+
return Object.keys(this.items[0]);
|
|
142
101
|
}
|
|
143
102
|
return this.fields;
|
|
144
103
|
},
|
|
145
104
|
|
|
105
|
+
searchActive() {
|
|
106
|
+
if(this.editingInput) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
for(let col in this.searchModels){
|
|
110
|
+
if(!this.searchModels[col])
|
|
111
|
+
return false;
|
|
112
|
+
if (this.searchModels[col].start !== undefined) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
else if(this.searchModels[col]) return true;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
|
|
146
121
|
},
|
|
147
122
|
created : function(){
|
|
148
123
|
|
|
149
124
|
if(this.fields){
|
|
150
|
-
|
|
151
125
|
for (let i = 0; i < this.fields.length; i++) {
|
|
152
|
-
let value = this.fields[i].type == '
|
|
153
|
-
|
|
126
|
+
let value = this.fields[i].type == 'date' ? this.setInitialDate(i) : this.fields[i].value;
|
|
154
127
|
let field_name = this.fields[i].key;
|
|
155
128
|
this.$set( this.searchModels, field_name, value )
|
|
156
129
|
if(value){
|
|
157
|
-
this.applyFocus = true;
|
|
158
130
|
// if date has an initial value set, show it.
|
|
159
131
|
if(typeof value.start !== 'undefined'){
|
|
160
132
|
if(value.start.length) this.activateSearch(this.fields[i]);
|
|
@@ -165,29 +137,20 @@ export default {
|
|
|
165
137
|
this.searchChange();
|
|
166
138
|
}
|
|
167
139
|
}
|
|
168
|
-
|
|
140
|
+
|
|
169
141
|
},
|
|
170
142
|
|
|
171
143
|
beforeDestroy: function () {
|
|
144
|
+
},
|
|
145
|
+
watch:{
|
|
146
|
+
|
|
172
147
|
},
|
|
173
148
|
mounted : function ()
|
|
174
149
|
{
|
|
175
150
|
|
|
176
151
|
},
|
|
177
|
-
|
|
152
|
+
|
|
178
153
|
methods:{
|
|
179
|
-
|
|
180
|
-
handleTransitionEnd(event){
|
|
181
|
-
if(event.propertyName === 'height'){
|
|
182
|
-
if(this.anySearchActive && !this.applyFocus){
|
|
183
|
-
this.applyFocus = true;
|
|
184
|
-
}
|
|
185
|
-
if(!this.anySearchActive && this.applyFocus){
|
|
186
|
-
this.applyFocus = false;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
|
|
191
154
|
// set initial date
|
|
192
155
|
setInitialDate(index){
|
|
193
156
|
let value = this.fields[index].value;
|
|
@@ -197,64 +160,36 @@ export default {
|
|
|
197
160
|
|
|
198
161
|
tableSearchActive(field)
|
|
199
162
|
{
|
|
200
|
-
if(field.type
|
|
201
|
-
return (this.searchModels[field.key].start || this.searchModels[field.key].end || this.editingInput
|
|
163
|
+
if(field.type == 'date'){
|
|
164
|
+
return (this.searchModels[field.key].start || this.searchModels[field.key].end || this.editingInput == field.key);
|
|
202
165
|
}
|
|
203
|
-
return (this.searchModels[field.key] || this.editingInput
|
|
166
|
+
return (this.searchModels[field.key] || this.editingInput == field.key);
|
|
204
167
|
|
|
205
168
|
},
|
|
206
169
|
|
|
207
|
-
|
|
208
|
-
getSearchModelTypeFromKey(key){
|
|
209
|
-
for(let i=0; i<this.fields.length; i++){
|
|
210
|
-
if(this.fields[i].key === key){
|
|
211
|
-
return this.fields[i].type;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return null;
|
|
215
|
-
},
|
|
216
|
-
|
|
217
170
|
closeSearch(field){
|
|
218
|
-
|
|
219
171
|
this.editingInput = false;
|
|
220
|
-
this.searchModels[field.key] = field.type
|
|
221
|
-
|
|
222
|
-
// check if any search is active; if not, close/shrink header
|
|
223
|
-
let is_active = false;
|
|
224
|
-
for(const key in this.searchModels){
|
|
225
|
-
|
|
226
|
-
if(this.getSearchModelTypeFromKey(key) === 'date_range'){
|
|
227
|
-
if (this.searchModels[key].start || this.searchModels[key].end){
|
|
228
|
-
is_active = true;
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
}else if(this.searchModels[key] && this.searchModels[key] !== ''){
|
|
232
|
-
is_active = true;
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
this.anySearchActive = is_active;
|
|
172
|
+
this.searchModels[field.key] = field.type == 'date' ? { start: false, end: false} : '' ;
|
|
237
173
|
this.searchChange();
|
|
238
174
|
},
|
|
239
175
|
|
|
240
176
|
searchChange(){
|
|
241
|
-
|
|
242
|
-
this.searchTimeout = setTimeout(()=>{
|
|
243
|
-
this.$emit('search', this.fieldsWithSearch);
|
|
244
|
-
},this.searchDebounce);
|
|
245
|
-
|
|
177
|
+
this.$emit('search', this.fieldsWithSearch);
|
|
246
178
|
},
|
|
247
179
|
|
|
248
180
|
/* activateSearch
|
|
249
181
|
* When a user clicks a searchable column name, show it as active, and focus the child input field (unless it's already active)
|
|
250
182
|
*/
|
|
251
183
|
activateSearch(field){
|
|
252
|
-
if(!field.filterable
|
|
184
|
+
if(!field.filterable) return;
|
|
185
|
+
if(field.type === 'date'){
|
|
186
|
+
this.datePickerOpen = true;
|
|
187
|
+
}
|
|
253
188
|
this.editingInput = field.key;
|
|
254
|
-
this.
|
|
189
|
+
//this.$nextTick(() => this.$refs[this.editingInput + '-input'].focus())
|
|
255
190
|
},
|
|
256
191
|
|
|
257
|
-
|
|
192
|
+
|
|
258
193
|
|
|
259
194
|
}
|
|
260
195
|
}
|
package/src/index.js
CHANGED
|
@@ -4,7 +4,6 @@ import ToggleInputText from "./components/forms/ToggleInputText.vue";
|
|
|
4
4
|
import ToggleInputEditableText from "./components/forms/ToggleInputEditableText.vue";
|
|
5
5
|
import ToggleInputWebsite from "./components/forms/ToggleInputWebsite.vue";
|
|
6
6
|
import ToggleDatePicker from "./components/forms/ToggleDatePicker.vue";
|
|
7
|
-
import ToggleDateRangePicker from "./components/forms/ToggleDateRangePicker.vue";
|
|
8
7
|
import ToggleInputSelect from "./components/forms/ToggleInputSelect.vue";
|
|
9
8
|
import ToggleInputPercentage from "./components/forms/ToggleInputPercentage.vue";
|
|
10
9
|
import ToggleInputCurrency from "./components/forms/ToggleInputCurrency.vue";
|
|
@@ -83,11 +82,14 @@ import ToggleMetricFunnelChart from "./components/metrics/ToggleMetricFunnelChar
|
|
|
83
82
|
import ToggleThreeDots from "./components/threedots/ToggleThreeDots.vue";
|
|
84
83
|
import ToggleThreeDotsButton from "./components/threedots/ToggleThreeDotsButton.vue";
|
|
85
84
|
|
|
85
|
+
import ToggleStatusBar from "./components/statusbar/ToggleStatusBar.vue";
|
|
86
|
+
|
|
86
87
|
import ToggleCarousel from "./components/carousel/ToggleCarousel.vue";
|
|
87
88
|
import ToggleCarouselSlide from "./components/carousel/ToggleCarouselSlide.vue";
|
|
88
89
|
|
|
89
90
|
import ToggleEmailCard from "./components/cards/ToggleEmailCard.vue";
|
|
90
91
|
import ToggleRewardsCard from "./components/cards/ToggleRewardsCard.vue";
|
|
92
|
+
import ToggleCommentCard from "./components/cards/ToggleCommentCard.vue";
|
|
91
93
|
|
|
92
94
|
|
|
93
95
|
import './sass/main.scss';
|
|
@@ -104,14 +106,13 @@ const Components = {
|
|
|
104
106
|
ToggleInputEditableText,
|
|
105
107
|
ToggleInputWebsite,
|
|
106
108
|
ToggleDatePicker,
|
|
107
|
-
ToggleDateRangePicker,
|
|
108
109
|
ToggleInputSelect,
|
|
109
110
|
ToggleInputPercentage,
|
|
110
111
|
ToggleInputCurrency,
|
|
111
112
|
ToggleInputRadioButtons,
|
|
112
113
|
ToggleInputTextArea,
|
|
113
114
|
ToggleInputCheckboxContainer,
|
|
114
|
-
ToggleInputCheckbox,
|
|
115
|
+
ToggleInputCheckbox,
|
|
115
116
|
ToggleInputCheckboxInline,
|
|
116
117
|
ToggleFillLoader,
|
|
117
118
|
ToggleProgressLoader,
|
|
@@ -158,10 +159,12 @@ const Components = {
|
|
|
158
159
|
ToggleBoosterBasicButton,
|
|
159
160
|
ToggleBoosterModal,
|
|
160
161
|
ToggleContactSearch,
|
|
162
|
+
ToggleStatusBar,
|
|
161
163
|
ToggleCarousel,
|
|
162
164
|
ToggleCarouselSlide,
|
|
163
165
|
ToggleEmailCard,
|
|
164
|
-
ToggleRewardsCard
|
|
166
|
+
ToggleRewardsCard,
|
|
167
|
+
ToggleCommentCard
|
|
165
168
|
}
|
|
166
169
|
|
|
167
170
|
Object.keys(Components).forEach(name => {
|
|
@@ -395,7 +395,7 @@
|
|
|
395
395
|
}
|
|
396
396
|
|
|
397
397
|
&:hover .contacts-icon {
|
|
398
|
-
background-
|
|
398
|
+
background-color: white;
|
|
399
399
|
}
|
|
400
400
|
}
|
|
401
401
|
//icons
|
|
@@ -418,9 +418,11 @@
|
|
|
418
418
|
}
|
|
419
419
|
|
|
420
420
|
.contacts-icon {
|
|
421
|
-
|
|
422
|
-
background-
|
|
423
|
-
|
|
421
|
+
--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='.9em' viewBox='0 0 448 512'%3E%3C!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --%3E%3Cstyle%3Esvg%7Bfill:%23fff%7D%3C/style%3E%3Cpath d='M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z'/%3E%3C/svg%3E");
|
|
422
|
+
background-color: #6d90b4;
|
|
423
|
+
-webkit-mask: var(--svg);
|
|
424
|
+
mask: var(--svg);
|
|
425
|
+
mask-repeat: no-repeat;
|
|
424
426
|
margin-right: 6px;
|
|
425
427
|
width: 14px;
|
|
426
428
|
height: 14px;
|
|
@@ -428,6 +430,47 @@
|
|
|
428
430
|
}
|
|
429
431
|
}
|
|
430
432
|
|
|
433
|
+
.toggle-metrics-button-small {
|
|
434
|
+
padding: 0px 13px;
|
|
435
|
+
font-size: 12px;
|
|
436
|
+
&.mini-contacts {
|
|
437
|
+
font-size: 0.65rem;
|
|
438
|
+
padding: 5px 12px;
|
|
439
|
+
}
|
|
440
|
+
.heatmap-icon {
|
|
441
|
+
width: 21px;
|
|
442
|
+
height: 21px;
|
|
443
|
+
}
|
|
444
|
+
.email-icon {
|
|
445
|
+
width: 25px;
|
|
446
|
+
height: 25px;
|
|
447
|
+
}
|
|
448
|
+
.contacts-icon {
|
|
449
|
+
--svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='.8em' viewBox='0 0 448 512'%3E%3C!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --%3E%3Cstyle%3Esvg%7Bfill:%23fff%7D%3C/style%3E%3Cpath d='M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z'/%3E%3C/svg%3E");
|
|
450
|
+
-webkit-mask: var(--svg);
|
|
451
|
+
mask: var(--svg);
|
|
452
|
+
mask-repeat: no-repeat;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.toggle-metrics-button-large {
|
|
457
|
+
padding: 23px 27px;
|
|
458
|
+
font-size: 17px;
|
|
459
|
+
&.mini-contacts {
|
|
460
|
+
font-size: .92rem;
|
|
461
|
+
padding: 10px 25px;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.toggle-metrics-button-disabled {
|
|
466
|
+
opacity: 0.3;
|
|
467
|
+
cursor: default;
|
|
468
|
+
|
|
469
|
+
.heatmap-icon, .email-icon, .contacts-icon {
|
|
470
|
+
transform: none !important;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
431
474
|
.toggle-button-booster-badge {
|
|
432
475
|
display: flex;
|
|
433
476
|
align-items: center;
|