design-system-next 2.8.0 → 2.8.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.
@@ -1,5 +1,5 @@
1
- import { ref, computed, watch } from 'vue';
2
- import { useDebounceFn, onClickOutside } from '@vueuse/core';
1
+ import { ref, toRefs, computed, watch } from 'vue';
2
+ import { useVModel, useDebounceFn, onClickOutside } from '@vueuse/core';
3
3
 
4
4
  import type { SelectLadderizedPropTypes } from './select-ladderized';
5
5
 
@@ -9,6 +9,8 @@ export const useSelectLadderized = (
9
9
  props: SelectLadderizedPropTypes,
10
10
  emit: (event: string, ...args: unknown[]) => void,
11
11
  ) => {
12
+ const { options, disabled } = toRefs(props);
13
+
12
14
  const ladderizedClasses = computed(() => ({
13
15
  baseClasses: 'spr-flex spr-flex-col spr-gap-size-spacing-4xs',
14
16
  labelClasses: 'spr-body-sm-regular spr-text-color-strong spr-block',
@@ -17,14 +19,11 @@ export const useSelectLadderized = (
17
19
  // Popper Variables
18
20
  const ladderizedSelectPopperState = ref(false);
19
21
  const ladderizedSelectRef = ref(null);
20
- const isLadderizedSelectPopperDisabled = computed(() => props.disabled);
22
+ const isLadderizedSelectPopperDisabled = computed(() => disabled.value);
21
23
 
22
24
  // Ladderized Select Model
23
- const ladderizedSelectModel = computed({
24
- get: () => props.modelValue,
25
- set: (val) => emit('update:modelValue', val),
26
- });
27
- const ladderizedSelectMenuList = computed(() => props.menuList);
25
+ const ladderizedSelectModel = useVModel(props, 'modelValue', emit);
26
+ const ladderizedSelectOptions = computed(() => options.value);
28
27
 
29
28
  // Input Variables
30
29
  const inputText = ref<string>('');
@@ -76,11 +75,11 @@ export const useSelectLadderized = (
76
75
  return undefined;
77
76
  };
78
77
 
79
- itemToCheck = findItemByValue(ladderizedSelectMenuList.value, selectedItems[selectedItems.length - 1]);
78
+ itemToCheck = findItemByValue(ladderizedSelectOptions.value, selectedItems[selectedItems.length - 1]);
80
79
  }
81
80
 
82
81
  if (itemToCheck) {
83
- const path = findPathToValue(ladderizedSelectMenuList.value, itemToCheck.value);
82
+ const path = findPathToValue(ladderizedSelectOptions.value, itemToCheck.value);
84
83
 
85
84
  inputText.value = path ? path.join(' > ') : itemToCheck.text || '';
86
85
 
@@ -110,7 +109,7 @@ export const useSelectLadderized = (
110
109
  emit('update:modelValue', []);
111
110
  };
112
111
 
113
- const handleMenuToggle = () => {
112
+ const handleOptionsToggle = () => {
114
113
  ladderizedSelectPopperState.value = true;
115
114
 
116
115
  isSearching.value = false;
@@ -128,7 +127,7 @@ export const useSelectLadderized = (
128
127
 
129
128
  if (Array.isArray(newVal) && newVal.length > 0) {
130
129
  // Treat the array as a single path for ladderized select
131
- let currentLevel = ladderizedSelectMenuList.value;
130
+ let currentLevel = ladderizedSelectOptions.value;
132
131
 
133
132
  const pathTexts: string[] = [];
134
133
 
@@ -153,13 +152,13 @@ export const useSelectLadderized = (
153
152
  ladderizedClasses,
154
153
  ladderizedSelectPopperState,
155
154
  ladderizedSelectRef,
156
- ladderizedSelectMenuList,
155
+ ladderizedSelectOptions,
157
156
  isLadderizedSelectPopperDisabled,
158
157
  ladderizedSelectModel,
159
158
  inputText,
160
159
  handleSelectedLadderizedItem,
161
160
  handleSearch,
162
161
  handleClear,
163
- handleMenuToggle,
162
+ handleOptionsToggle,
164
163
  };
165
164
  };
@@ -36,7 +36,7 @@ export const multiSelectPropTypes = {
36
36
  >,
37
37
  default: () => [],
38
38
  },
39
- menuList: {
39
+ options: {
40
40
  type: Array as PropType<MenuListType[] | string[] | Record<string, unknown>[]>,
41
41
  required: true,
42
42
  default: [],
@@ -110,25 +110,11 @@ export const multiSelectPropTypes = {
110
110
  type: Boolean,
111
111
  default: false,
112
112
  },
113
- searchable: {
114
- type: Boolean,
115
- default: false,
116
- },
117
- disabledLocalSearch: {
118
- type: Boolean,
119
- default: false,
120
- },
121
113
  };
122
114
 
123
115
  export const multiSelectEmitTypes = {
124
116
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
125
117
  'update:modelValue': (_value: unknown) => true,
126
-
127
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
128
- 'infinite-scroll-trigger': (_triggered: boolean) => true,
129
-
130
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
131
- 'search-string': (_search: string | number) => true,
132
118
  };
133
119
 
134
120
  export type MultiSelectPropTypes = ExtractPropTypes<typeof multiSelectPropTypes>;
@@ -23,20 +23,19 @@
23
23
  width: props.width,
24
24
  }"
25
25
  >
26
- <div @click="handleMenuToggle">
26
+ <div @click="handleOptionsToggle">
27
27
  <spr-input
28
28
  v-model="inputText"
29
29
  :class="{
30
- 'spr-cursor-pointer': !props.searchable,
30
+ 'spr-cursor-pointer': true,
31
31
  }"
32
32
  :placeholder="props.placeholder"
33
- :readonly="!props.searchable"
33
+ :readonly="true"
34
34
  :disabled="props.disabled"
35
35
  autocomplete="off"
36
36
  :helper-text="props.helperText"
37
37
  :helper-icon="props.helperIcon"
38
38
  :display-helper="props.displayHelper"
39
- @keyup="handleSearch"
40
39
  >
41
40
  <template #icon>
42
41
  <div class="spr-flex spr-items-center spr-gap-1">
@@ -59,76 +58,25 @@
59
58
  }"
60
59
  ></div>
61
60
 
62
- <select
63
- :id="`${props.id}-multiple-select`"
64
- tabindex="-1"
65
- aria-hidden="true"
66
- data-qa="multi-select-hidden"
67
- multiple
68
- hidden
69
- >
70
- <option v-for="item in multiSelectedListItems" :key="item.value" :value="item.value" selected>
71
- {{ item.text }}
72
- </option>
73
- </select>
74
-
75
61
  <template #popper>
76
62
  <div
77
63
  ref="multiSelectRef"
78
64
  class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
79
65
  >
80
- <template v-if="isSearching">
81
- <template v-if="!props.disabledLocalSearch">
82
- <template v-if="filteredMultiSelectMenuList.length > 0">
83
- <spr-list
84
- v-model="multiSelectedListItems"
85
- :menu-list="filteredMultiSelectMenuList"
86
- :group-items-by="props.groupItemsBy"
87
- :pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
88
- multi-select
89
- @update:model-value="handleMultiSelectedItem"
90
- />
91
- </template>
92
- <template v-else>
93
- <div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
94
- <span class="spr-body-sm-regular spr-m-0">No results found</span>
95
- </div>
96
- </template>
97
- </template>
98
- <template v-else>
99
- <template v-if="multiSelectMenuList.length > 0">
100
- <spr-list
101
- v-model="multiSelectedListItems"
102
- :menu-list="multiSelectMenuList"
103
- :group-items-by="props.groupItemsBy"
104
- :pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
105
- multi-select
106
- @update:model-value="handleMultiSelectedItem"
107
- />
108
- </template>
109
- <template v-else>
110
- <div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
111
- <span class="spr-body-sm-regular spr-m-0">No results found</span>
112
- </div>
113
- </template>
114
- </template>
66
+ <template v-if="multiSelectOptions.length > 0">
67
+ <spr-list
68
+ v-model="multiSelectedListItems"
69
+ :menu-list="multiSelectOptions"
70
+ :group-items-by="props.groupItemsBy"
71
+ :pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
72
+ multi-select
73
+ @update:model-value="handleMultiSelectedItem"
74
+ />
115
75
  </template>
116
76
  <template v-else>
117
- <template v-if="multiSelectMenuList.length > 0">
118
- <spr-list
119
- v-model="multiSelectedListItems"
120
- :menu-list="multiSelectMenuList"
121
- :group-items-by="props.groupItemsBy"
122
- :pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
123
- multi-select
124
- @update:model-value="handleMultiSelectedItem"
125
- />
126
- </template>
127
- <template v-else>
128
- <div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
129
- <span class="spr-body-sm-regular spr-m-0">No results found</span>
130
- </div>
131
- </template>
77
+ <div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
78
+ <span class="spr-body-sm-regular spr-m-0">No results found</span>
79
+ </div>
132
80
  </template>
133
81
  </div>
134
82
  </template>
@@ -157,15 +105,12 @@ const {
157
105
  multiSelectPopperState,
158
106
  multiSelectRef,
159
107
  multiSelectModel,
160
- multiSelectMenuList,
161
- filteredMultiSelectMenuList,
108
+ multiSelectOptions,
162
109
  multiSelectedListItems,
163
110
  inputText,
164
111
  isMultiSelectPopperDisabled,
165
- isSearching,
166
112
  handleMultiSelectedItem,
167
- handleSearch,
168
113
  handleClear,
169
- handleMenuToggle,
114
+ handleOptionsToggle,
170
115
  } = useMultiSelect(props, emit);
171
116
  </script>