@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm-investimentos/front-mfe-components",
3
- "version": "11.10.1",
3
+ "version": "11.10.3",
4
4
  "author": "farm investimentos",
5
5
  "private": false,
6
6
  "main": "./dist/front-mfe-components.common.js",
@@ -182,10 +182,6 @@ export const InitInvalid = () => ({
182
182
  `,
183
183
  });
184
184
 
185
-
186
-
187
-
188
-
189
185
  export const Grid = () => ({
190
186
  data() {
191
187
  return {};
@@ -71,7 +71,7 @@ export default Vue.extend({
71
71
  recursiveFormField(instance);
72
72
  validationFields.forEach(field => {
73
73
  watchInput(field);
74
- field.validate();
74
+ field.validate(field.value);
75
75
  });
76
76
  };
77
77
 
@@ -27,9 +27,9 @@ export const Primary = () => ({
27
27
  return {
28
28
  v: null,
29
29
  items: [
30
- { value: 1, text: ' value 1' },
31
- { value: 2, text: ' value 2' },
32
- { value: 3, text: ' value 3' },
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_' + item[itemText]"
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
- innerValue.value = props.value;
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
- innerValue.value = '';
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
  });