toggle-components-library 1.33.0-beta.11 → 1.33.0-beta.12
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/toggle-components-library.common.js +38714 -12852
- 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 +38714 -12852
- 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-lock.json +20279 -0
- package/package.json +2 -1
- package/src/components/forms/ToggleDatePicker.vue +228 -138
- package/src/components/forms/ToggleInputSelect.vue +8 -27
- package/src/components/forms/ToggleInputText.vue +6 -29
- package/src/components/tables/ToggleTable.vue +49 -116
- package/src/index.js +1 -3
- package/src/sass/includes/_as_inputs.scss +833 -830
- package/src/sass/includes/_as_table.scss +176 -176
|
@@ -3,58 +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)"
|
|
24
|
-
type="text"
|
|
25
|
-
:ref="field.key+'-input'"
|
|
26
|
-
v-model="searchModels[field.key]"
|
|
27
|
-
@input="searchChange(field)"
|
|
28
|
-
@bail="closeSearch(field)"
|
|
29
|
-
:applyFocus="applyFocus"
|
|
30
|
-
/>
|
|
31
|
-
<ToggleInputSelect
|
|
32
|
-
style="margin-top:2px;"
|
|
33
|
-
:size="'small'"
|
|
34
|
-
v-if="field.type === 'select' && (searchModels[field.key] || editingInput === field.key)"
|
|
35
|
-
:applyFocus="applyFocus"
|
|
36
|
-
:options="field.select_options"
|
|
37
|
-
v-model="searchModels[field.key]"
|
|
38
|
-
@input="val=>searchChange(val, field)"
|
|
39
|
-
/>
|
|
40
|
-
<ToggleDateRangePicker
|
|
41
|
-
v-if="field.type === 'date_range' && (searchModels[field.key].start || searchModels[field.key].end || editingInput === field.key)"
|
|
42
|
-
name="date_range"
|
|
43
|
-
v-model="searchModels[field.key]"
|
|
44
|
-
@input="val=>searchChange(val, field)"
|
|
45
|
-
/>
|
|
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)" />
|
|
46
24
|
</div>
|
|
47
25
|
</th>
|
|
48
|
-
|
|
26
|
+
|
|
49
27
|
</tr>
|
|
50
28
|
</thead>
|
|
51
|
-
<tr class="empty-table" v-if="(items && items.length === 0) && !loading">
|
|
52
|
-
<td :colspan="headers.length">
|
|
53
|
-
<div class="full">
|
|
54
|
-
<div class="empty-area"><p>{{ emptyTableMessage }}</p></div>
|
|
55
|
-
</div>
|
|
56
|
-
</td>
|
|
57
|
-
</tr>
|
|
58
29
|
<tbody v-if="!$slots.default || !$slots.default.length">
|
|
59
30
|
<ToggleTableRow v-for="(item, index) in items" :key="index" >
|
|
60
31
|
<ToggleTableColumn v-for="(column, column_index) in item" :key="column_index">{{column}}</ToggleTableColumn>
|
|
@@ -91,34 +62,20 @@ export default {
|
|
|
91
62
|
type: [Array]
|
|
92
63
|
},
|
|
93
64
|
total:{
|
|
94
|
-
type: [Number]
|
|
65
|
+
type: [Number]
|
|
95
66
|
},
|
|
96
67
|
per_page:{
|
|
97
|
-
type: [Number]
|
|
68
|
+
type: [Number]
|
|
98
69
|
},
|
|
99
70
|
page:{
|
|
100
71
|
type: [Number],
|
|
101
72
|
default:1
|
|
102
|
-
},
|
|
103
|
-
loading: {
|
|
104
|
-
type: Boolean
|
|
105
|
-
},
|
|
106
|
-
emptyTableMessage: {
|
|
107
|
-
type: String,
|
|
108
|
-
default: "No rows returned."
|
|
109
|
-
},
|
|
110
|
-
searchDebounce: {
|
|
111
|
-
type: [Number],
|
|
112
|
-
default: 500
|
|
113
73
|
}
|
|
114
|
-
},
|
|
74
|
+
},
|
|
115
75
|
data : function(){
|
|
116
76
|
return {
|
|
117
77
|
editingInput:false,
|
|
118
|
-
searchModels:{}
|
|
119
|
-
anySearchActive: false,
|
|
120
|
-
applyFocus: false,
|
|
121
|
-
searchTimeout: null
|
|
78
|
+
searchModels:{}
|
|
122
79
|
};
|
|
123
80
|
},
|
|
124
81
|
computed: {
|
|
@@ -140,23 +97,36 @@ export default {
|
|
|
140
97
|
|
|
141
98
|
headers() {
|
|
142
99
|
if(!this.fields){
|
|
143
|
-
return Object.keys(this.items[0]);
|
|
100
|
+
return Object.keys(this.items[0]);
|
|
144
101
|
}
|
|
145
102
|
return this.fields;
|
|
146
103
|
},
|
|
147
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
|
+
|
|
148
121
|
},
|
|
149
122
|
created : function(){
|
|
150
123
|
|
|
151
124
|
if(this.fields){
|
|
152
|
-
|
|
153
125
|
for (let i = 0; i < this.fields.length; i++) {
|
|
154
|
-
let value = this.fields[i].type == '
|
|
155
|
-
|
|
126
|
+
let value = this.fields[i].type == 'date' ? this.setInitialDate(i) : this.fields[i].value;
|
|
156
127
|
let field_name = this.fields[i].key;
|
|
157
128
|
this.$set( this.searchModels, field_name, value )
|
|
158
129
|
if(value){
|
|
159
|
-
this.applyFocus = true;
|
|
160
130
|
// if date has an initial value set, show it.
|
|
161
131
|
if(typeof value.start !== 'undefined'){
|
|
162
132
|
if(value.start.length) this.activateSearch(this.fields[i]);
|
|
@@ -167,29 +137,20 @@ export default {
|
|
|
167
137
|
this.searchChange();
|
|
168
138
|
}
|
|
169
139
|
}
|
|
170
|
-
|
|
140
|
+
|
|
171
141
|
},
|
|
172
142
|
|
|
173
143
|
beforeDestroy: function () {
|
|
144
|
+
},
|
|
145
|
+
watch:{
|
|
146
|
+
|
|
174
147
|
},
|
|
175
148
|
mounted : function ()
|
|
176
149
|
{
|
|
177
150
|
|
|
178
151
|
},
|
|
179
|
-
|
|
152
|
+
|
|
180
153
|
methods:{
|
|
181
|
-
|
|
182
|
-
handleTransitionEnd(event){
|
|
183
|
-
if(event.propertyName === 'height'){
|
|
184
|
-
if(this.anySearchActive && !this.applyFocus){
|
|
185
|
-
this.applyFocus = true;
|
|
186
|
-
}
|
|
187
|
-
if(!this.anySearchActive && this.applyFocus){
|
|
188
|
-
this.applyFocus = false;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
|
|
193
154
|
// set initial date
|
|
194
155
|
setInitialDate(index){
|
|
195
156
|
let value = this.fields[index].value;
|
|
@@ -199,64 +160,36 @@ export default {
|
|
|
199
160
|
|
|
200
161
|
tableSearchActive(field)
|
|
201
162
|
{
|
|
202
|
-
if(field.type
|
|
203
|
-
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);
|
|
204
165
|
}
|
|
205
|
-
return (this.searchModels[field.key] || this.editingInput
|
|
166
|
+
return (this.searchModels[field.key] || this.editingInput == field.key);
|
|
206
167
|
|
|
207
168
|
},
|
|
208
169
|
|
|
209
|
-
|
|
210
|
-
getSearchModelTypeFromKey(key){
|
|
211
|
-
for(let i=0; i<this.fields.length; i++){
|
|
212
|
-
if(this.fields[i].key === key){
|
|
213
|
-
return this.fields[i].type;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return null;
|
|
217
|
-
},
|
|
218
|
-
|
|
219
170
|
closeSearch(field){
|
|
220
|
-
|
|
221
171
|
this.editingInput = false;
|
|
222
|
-
this.searchModels[field.key] = field.type
|
|
223
|
-
|
|
224
|
-
// check if any search is active; if not, close/shrink header
|
|
225
|
-
let is_active = false;
|
|
226
|
-
for(const key in this.searchModels){
|
|
227
|
-
|
|
228
|
-
if(this.getSearchModelTypeFromKey(key) === 'date_range'){
|
|
229
|
-
if (this.searchModels[key].start || this.searchModels[key].end){
|
|
230
|
-
is_active = true;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
}else if(this.searchModels[key] && this.searchModels[key] !== ''){
|
|
234
|
-
is_active = true;
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
this.anySearchActive = is_active;
|
|
172
|
+
this.searchModels[field.key] = field.type == 'date' ? { start: false, end: false} : '' ;
|
|
239
173
|
this.searchChange();
|
|
240
174
|
},
|
|
241
175
|
|
|
242
176
|
searchChange(){
|
|
243
|
-
|
|
244
|
-
this.searchTimeout = setTimeout(()=>{
|
|
245
|
-
this.$emit('search', this.fieldsWithSearch);
|
|
246
|
-
},this.searchDebounce);
|
|
247
|
-
|
|
177
|
+
this.$emit('search', this.fieldsWithSearch);
|
|
248
178
|
},
|
|
249
179
|
|
|
250
180
|
/* activateSearch
|
|
251
181
|
* When a user clicks a searchable column name, show it as active, and focus the child input field (unless it's already active)
|
|
252
182
|
*/
|
|
253
183
|
activateSearch(field){
|
|
254
|
-
if(!field.filterable
|
|
184
|
+
if(!field.filterable) return;
|
|
185
|
+
if(field.type === 'date'){
|
|
186
|
+
this.datePickerOpen = true;
|
|
187
|
+
}
|
|
255
188
|
this.editingInput = field.key;
|
|
256
|
-
this.
|
|
189
|
+
//this.$nextTick(() => this.$refs[this.editingInput + '-input'].focus())
|
|
257
190
|
},
|
|
258
191
|
|
|
259
|
-
|
|
192
|
+
|
|
260
193
|
|
|
261
194
|
}
|
|
262
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";
|
|
@@ -104,14 +103,13 @@ const Components = {
|
|
|
104
103
|
ToggleInputEditableText,
|
|
105
104
|
ToggleInputWebsite,
|
|
106
105
|
ToggleDatePicker,
|
|
107
|
-
ToggleDateRangePicker,
|
|
108
106
|
ToggleInputSelect,
|
|
109
107
|
ToggleInputPercentage,
|
|
110
108
|
ToggleInputCurrency,
|
|
111
109
|
ToggleInputRadioButtons,
|
|
112
110
|
ToggleInputTextArea,
|
|
113
111
|
ToggleInputCheckboxContainer,
|
|
114
|
-
ToggleInputCheckbox,
|
|
112
|
+
ToggleInputCheckbox,
|
|
115
113
|
ToggleInputCheckboxInline,
|
|
116
114
|
ToggleFillLoader,
|
|
117
115
|
ToggleProgressLoader,
|