@farm-investimentos/front-mfe-components 11.10.1 → 11.10.3
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/front-mfe-components.common.js +140 -121
- package/dist/front-mfe-components.common.js.map +1 -1
- package/dist/front-mfe-components.css +1 -1
- package/dist/front-mfe-components.umd.js +140 -121
- package/dist/front-mfe-components.umd.js.map +1 -1
- package/dist/front-mfe-components.umd.min.js +1 -1
- package/dist/front-mfe-components.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Form/Form.stories.js +0 -4
- package/src/components/Form/Form.vue +1 -1
- package/src/components/Select/Select.stories.js +28 -3
- package/src/components/Select/Select.vue +37 -18
- package/src/components/Select/__tests__/Select.spec.js +6 -0
package/package.json
CHANGED
|
@@ -27,9 +27,9 @@ export const Primary = () => ({
|
|
|
27
27
|
return {
|
|
28
28
|
v: null,
|
|
29
29
|
items: [
|
|
30
|
-
{ value: 1, text: '
|
|
31
|
-
{ value: 2, text: '
|
|
32
|
-
{ value: 3, text: '
|
|
30
|
+
{ value: 1, text: 'value 1' },
|
|
31
|
+
{ value: 2, text: 'value 2' },
|
|
32
|
+
{ value: 3, text: 'value 3' },
|
|
33
33
|
],
|
|
34
34
|
};
|
|
35
35
|
},
|
|
@@ -156,3 +156,28 @@ export const CustomKeys = () => ({
|
|
|
156
156
|
v-model: {{ v }}
|
|
157
157
|
</div>`,
|
|
158
158
|
});
|
|
159
|
+
|
|
160
|
+
export const OutsideChangeVmodel = () => ({
|
|
161
|
+
data() {
|
|
162
|
+
return {
|
|
163
|
+
v: null,
|
|
164
|
+
items: [
|
|
165
|
+
{ value: 1, text: 'value 1' },
|
|
166
|
+
{ value: 2, text: 'value 2' },
|
|
167
|
+
{ value: 3, text: 'value 3' },
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
methods: {
|
|
172
|
+
onClick() {
|
|
173
|
+
this.v = 2;
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
template: `<div style="width: 120px">
|
|
177
|
+
<farm-select v-model="v" :items="items" />
|
|
178
|
+
v-model: {{ v }}
|
|
179
|
+
<farm-btn @click="onClick">
|
|
180
|
+
change value
|
|
181
|
+
</farm-btn>
|
|
182
|
+
</div>`,
|
|
183
|
+
});
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
<farm-contextmenu bottom v-model="isVisible">
|
|
15
15
|
<farm-list v-if="!readonly">
|
|
16
16
|
<farm-listitem
|
|
17
|
-
v-for="item in items"
|
|
17
|
+
v-for="(item, index) in items"
|
|
18
18
|
clickable
|
|
19
19
|
hoverColorVariation="lighten"
|
|
20
20
|
hover-color="primary"
|
|
21
|
-
:key="'contextmenu_item_' +
|
|
21
|
+
:key="'contextmenu_item_' + index"
|
|
22
22
|
:class="{ 'farm-listitem--selected': item[itemValue] === innerValue }"
|
|
23
23
|
@click="selectItem(item)"
|
|
24
24
|
>
|
|
@@ -41,7 +41,6 @@
|
|
|
41
41
|
</div>
|
|
42
42
|
</template>
|
|
43
43
|
</farm-contextmenu>
|
|
44
|
-
|
|
45
44
|
<farm-caption v-if="showErrorText" color="error" variation="regular">
|
|
46
45
|
{{ errorBucket[0] }}
|
|
47
46
|
</farm-caption>
|
|
@@ -85,8 +84,6 @@ export default Vue.extend({
|
|
|
85
84
|
type: Boolean,
|
|
86
85
|
default: false,
|
|
87
86
|
},
|
|
88
|
-
|
|
89
|
-
errorMessage: String,
|
|
90
87
|
/**
|
|
91
88
|
* Array of rules used for validation
|
|
92
89
|
*/
|
|
@@ -118,7 +115,7 @@ export default Vue.extend({
|
|
|
118
115
|
},
|
|
119
116
|
},
|
|
120
117
|
setup(props, { emit }) {
|
|
121
|
-
const { rules, items, itemText, itemValue } = toRefs(props);
|
|
118
|
+
const { rules, items, itemText, itemValue, disabled } = toRefs(props);
|
|
122
119
|
const innerValue = ref(props.value);
|
|
123
120
|
const isTouched = ref(false);
|
|
124
121
|
const isBlured = ref(false);
|
|
@@ -128,6 +125,7 @@ export default Vue.extend({
|
|
|
128
125
|
const { errorBucket, valid, validatable } = validateFormStateBuilder();
|
|
129
126
|
|
|
130
127
|
let fieldValidator = validateFormFieldBuilder(rules.value);
|
|
128
|
+
let validate = validateFormMethodBuilder(errorBucket, valid, fieldValidator);
|
|
131
129
|
|
|
132
130
|
const hasError = computed(() => {
|
|
133
131
|
return errorBucket.value.length > 0;
|
|
@@ -137,9 +135,22 @@ export default Vue.extend({
|
|
|
137
135
|
|
|
138
136
|
watch(
|
|
139
137
|
() => props.value,
|
|
138
|
+
newValue => {
|
|
139
|
+
innerValue.value = newValue;
|
|
140
|
+
errorBucket.value = [];
|
|
141
|
+
validate(newValue);
|
|
142
|
+
updateSelectedTextValue();
|
|
143
|
+
emit('input', newValue);
|
|
144
|
+
emit('change', newValue);
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
watch(
|
|
149
|
+
() => props.items,
|
|
140
150
|
() => {
|
|
141
|
-
|
|
151
|
+
errorBucket.value = [];
|
|
142
152
|
validate(innerValue.value);
|
|
153
|
+
updateSelectedTextValue();
|
|
143
154
|
}
|
|
144
155
|
);
|
|
145
156
|
|
|
@@ -158,26 +169,20 @@ export default Vue.extend({
|
|
|
158
169
|
(newVal, oldVal) => {
|
|
159
170
|
if (deepEqual(newVal, oldVal)) return;
|
|
160
171
|
fieldValidator = validateFormFieldBuilder(rules.value);
|
|
161
|
-
validate = validateFormMethodBuilder(errorBucket, valid, fieldValidator);
|
|
162
172
|
validate(innerValue.value);
|
|
163
173
|
}
|
|
164
174
|
);
|
|
165
175
|
|
|
166
176
|
onBeforeMount(() => {
|
|
167
177
|
validate(innerValue.value);
|
|
168
|
-
|
|
169
|
-
const selectedItem = items.value.find(
|
|
170
|
-
item => item[itemValue.value] === innerValue.value
|
|
171
|
-
);
|
|
172
|
-
if (selectedItem) {
|
|
173
|
-
selectedText.value = selectedItem[itemText.value];
|
|
174
|
-
}
|
|
178
|
+
updateSelectedTextValue();
|
|
175
179
|
});
|
|
176
180
|
|
|
177
|
-
let validate = validateFormMethodBuilder(errorBucket, valid, fieldValidator);
|
|
178
|
-
|
|
179
181
|
const reset = () => {
|
|
180
|
-
|
|
182
|
+
if (disabled.value) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
innerValue.value = null;
|
|
181
186
|
selectedText.value = '';
|
|
182
187
|
isTouched.value = true;
|
|
183
188
|
emit('input', innerValue.value);
|
|
@@ -203,6 +208,19 @@ export default Vue.extend({
|
|
|
203
208
|
emit('click');
|
|
204
209
|
};
|
|
205
210
|
|
|
211
|
+
const updateSelectedTextValue = () => {
|
|
212
|
+
if (!items.value || items.value.length === 0) {
|
|
213
|
+
selectedText.value = '';
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const selectedItem = items.value.find(
|
|
217
|
+
item => item[itemValue.value] === innerValue.value
|
|
218
|
+
);
|
|
219
|
+
if (selectedItem) {
|
|
220
|
+
selectedText.value = selectedItem[itemText.value];
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
206
224
|
return {
|
|
207
225
|
items,
|
|
208
226
|
innerValue,
|
|
@@ -221,6 +239,7 @@ export default Vue.extend({
|
|
|
221
239
|
onKeyUp,
|
|
222
240
|
onBlur,
|
|
223
241
|
clickInput,
|
|
242
|
+
updateSelectedTextValue,
|
|
224
243
|
};
|
|
225
244
|
},
|
|
226
245
|
});
|
|
@@ -36,5 +36,11 @@ describe('Select component', () => {
|
|
|
36
36
|
component.clickInput();
|
|
37
37
|
expect(component.isTouched).toBeTruthy();
|
|
38
38
|
});
|
|
39
|
+
|
|
40
|
+
it('updateSelectedTextValue', () => {
|
|
41
|
+
component.updateSelectedTextValue();
|
|
42
|
+
expect(component.selectedText).toBeDefined();
|
|
43
|
+
});
|
|
44
|
+
|
|
39
45
|
});
|
|
40
46
|
});
|