@antify/ui 3.1.9 → 3.1.11

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.
@@ -78,6 +78,8 @@ const isOpen = ref(false);
78
78
  const _modelValue = computed<string[]>(() => [
79
79
  ...props.modelValue || [],
80
80
  ]);
81
+ let actuallyValueLength = ref<number>(0);
82
+
81
83
  const hasInputState = computed(() => props.skeleton || props.readonly || props.disabled);
82
84
  const inputClasses = computed(() => {
83
85
  const variants: Record<InputState, string> = {
@@ -148,15 +150,15 @@ const valueLabel = computed(() => {
148
150
  return;
149
151
  }
150
152
 
151
- if (_modelValue.value.length === 0) {
153
+ if (actuallyValueLength.value === 0) {
152
154
  return props.label || props.placeholder;
153
155
  }
154
156
 
155
- if (_modelValue.value.length === 1) {
156
- return `${_modelValue.value.length} ${props.singularValueLabel}`;
157
+ if (actuallyValueLength.value === 1) {
158
+ return `${actuallyValueLength.value} ${props.singularValueLabel}`;
157
159
  }
158
160
 
159
- return `${_modelValue.value.length} ${props.pluralValueLabel}`;
161
+ return `${actuallyValueLength.value} ${props.pluralValueLabel}`;
160
162
  });
161
163
  const iconSize = computed(() => {
162
164
  if (props.size === Size.lg || props.size === Size.md || props.size === Size.sm) {
@@ -165,21 +167,11 @@ const iconSize = computed(() => {
165
167
 
166
168
  return IconSize.xs;
167
169
  });
168
- const selectedCheckboxes = ref<string[]>( [
170
+ const selectedCheckboxes = ref<string[]>([
169
171
  ..._modelValue.value,
170
172
  ]);
171
173
  const inputRef = ref<HTMLElement | null>(null);
172
174
 
173
- onMounted(() => {
174
- handleEnumValidation(props.size, Size, 'size');
175
- handleEnumValidation(props.state, InputState, 'state');
176
- handleEnumValidation(props.grouped, Grouped, 'grouped');
177
-
178
- if (!props.skeleton && props.modelValue !== null) {
179
- emit('validate', props.modelValue);
180
- }
181
- });
182
-
183
175
  watch(isOpen, (val) => {
184
176
  if (!val) {
185
177
  emit('update:modelValue', selectedCheckboxes.value);
@@ -199,6 +191,8 @@ watch(() => props.skeleton, (val) => {
199
191
  }
200
192
  });
201
193
  watch(_modelValue, () => {
194
+ getActuallySelectedItems();
195
+
202
196
  if (props.messages.length > 0) {
203
197
  emit('validate', props.modelValue);
204
198
  }
@@ -222,6 +216,36 @@ function onClickSelectInput(e: MouseEvent) {
222
216
 
223
217
  isOpen.value = !isOpen.value;
224
218
  }
219
+
220
+ function onClickClear() {
221
+ const optionValues = props.options.map(option => option.value);
222
+ const clearedValue = _modelValue.value.filter((value) => !optionValues.includes(value));
223
+
224
+ emit('update:modelValue', clearedValue);
225
+ }
226
+
227
+ function getActuallySelectedItems() {
228
+ actuallyValueLength.value = 0;
229
+
230
+ _modelValue.value.forEach((value) => {
231
+ props.options.forEach((option) => {
232
+ if (value === option.value) {
233
+ actuallyValueLength.value++;
234
+ }
235
+ });
236
+ });
237
+ }
238
+
239
+ onMounted(() => {
240
+ getActuallySelectedItems();
241
+ handleEnumValidation(props.size, Size, 'size');
242
+ handleEnumValidation(props.state, InputState, 'state');
243
+ handleEnumValidation(props.grouped, Grouped, 'grouped');
244
+
245
+ if (!props.skeleton && props.modelValue !== null) {
246
+ emit('validate', props.modelValue);
247
+ }
248
+ });
225
249
  </script>
226
250
 
227
251
  <template>
@@ -263,14 +287,14 @@ function onClickSelectInput(e: MouseEvent) {
263
287
  <slot name="icon" />
264
288
 
265
289
  <div
266
- v-if="(_modelValue === null || _modelValue.length === 0) && placeholder !== undefined"
290
+ v-if="(_modelValue === null || actuallyValueLength === 0) && placeholder !== undefined"
267
291
  :class="placeholderClasses"
268
292
  >
269
293
  {{ placeholder }}
270
294
  </div>
271
295
 
272
296
  <div
273
- v-else-if="(_modelValue === null || _modelValue.length === 0) && label !== undefined"
297
+ v-else-if="(_modelValue === null || actuallyValueLength === 0) && label !== undefined"
274
298
  :class="placeholderClasses"
275
299
  >
276
300
  {{ label }}
@@ -307,10 +331,11 @@ function onClickSelectInput(e: MouseEvent) {
307
331
 
308
332
  <AntButton
309
333
  v-if="props.nullable && props.modelValue && props.modelValue.length > 0"
334
+ data-e2e="clear-button"
310
335
  :icon-left="faMultiply"
311
336
  :grouped="Grouped.right"
312
337
  :size="size"
313
- @click="emit('update:modelValue', [])"
338
+ @click="onClickClear"
314
339
  />
315
340
  </div>
316
341
  </AntSkeleton>
@@ -367,6 +367,7 @@ function onClickRemoveButton() {
367
367
 
368
368
  <AntButton
369
369
  v-if="nullable && _modelValue !== null"
370
+ data-e2e="clear-button"
370
371
  :icon-left="faMultiply"
371
372
  :state="state as unknown as State"
372
373
  :grouped="[Grouped.left, Grouped.center].some(item => item === grouped) ? Grouped.center : Grouped.right"
@@ -158,7 +158,7 @@ const Docs = exports.Docs = {
158
158
  AntMultiSelect: _AntMultiSelect.default
159
159
  },
160
160
  setup() {
161
- const value = (0, _vue.ref)(null);
161
+ const value = (0, _vue.ref)(["26", "2"]);
162
162
  return {
163
163
  args,
164
164
  value
@@ -184,7 +184,10 @@ export const Docs = {
184
184
  AntMultiSelect
185
185
  },
186
186
  setup() {
187
- const value = ref(null);
187
+ const value = ref([
188
+ "26",
189
+ "2"
190
+ ]);
188
191
  return {
189
192
  args,
190
193
  value
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antify/ui",
3
- "version": "3.1.9",
3
+ "version": "3.1.11",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {