@uniai-fe/uds-primitives 0.3.47 → 0.3.49

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.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Selected Values Utils; value 기반 선택 비교/정규화 유틸
3
+ */
4
+
5
+ /**
6
+ * Select/Dropdown value 원시 타입
7
+ */
8
+ export type SelectedValue = string | number;
9
+
10
+ /**
11
+ * value를 비교 키 문자열로 정규화
12
+ * @param {SelectedValue | undefined} value 비교 대상 value
13
+ * @returns {string} 정규화된 키 문자열
14
+ */
15
+ export const toSelectedValueKey = (value?: SelectedValue): string =>
16
+ value === undefined ? "" : String(value);
17
+
18
+ /**
19
+ * 단일 value 동등성 비교
20
+ * @param {SelectedValue | undefined} previousValue 이전 value
21
+ * @param {SelectedValue | undefined} nextValue 다음 value
22
+ * @returns {boolean} 동등 여부
23
+ */
24
+ export const isSameSelectedValue = (
25
+ previousValue?: SelectedValue,
26
+ nextValue?: SelectedValue,
27
+ ): boolean =>
28
+ toSelectedValueKey(previousValue) === toSelectedValueKey(nextValue);
29
+
30
+ /**
31
+ * value 배열 동등성 비교
32
+ * @param {SelectedValue[]} previousValues 이전 value 배열
33
+ * @param {SelectedValue[]} nextValues 다음 value 배열
34
+ * @returns {boolean} 동등 여부
35
+ */
36
+ export const isSameSelectedValueList = (
37
+ previousValues: SelectedValue[],
38
+ nextValues: SelectedValue[],
39
+ ): boolean =>
40
+ previousValues.length === nextValues.length &&
41
+ previousValues.every((selectedValue, index) =>
42
+ isSameSelectedValue(selectedValue, nextValues[index]),
43
+ );
44
+
45
+ /**
46
+ * 단일 선택 value 정규화
47
+ * @param {SelectedValue[]} selectedValues 선택 value 배열
48
+ * @returns {SelectedValue | undefined} 단일 선택 결과
49
+ */
50
+ export const normalizeSingleSelectedValue = (
51
+ selectedValues: SelectedValue[],
52
+ ): SelectedValue | undefined => selectedValues[0];
53
+
54
+ /**
55
+ * 모드 기반 value 배열 정규화
56
+ * @param {SelectedValue[]} selectedValues 선택 value 배열
57
+ * @param {boolean} multiple 다중 선택 모드 여부
58
+ * @returns {SelectedValue[]} 모드 규칙 적용 결과
59
+ */
60
+ export const normalizeSelectedValuesByMode = (
61
+ selectedValues: SelectedValue[],
62
+ multiple: boolean,
63
+ ): SelectedValue[] => {
64
+ if (multiple) {
65
+ return selectedValues;
66
+ }
67
+
68
+ const firstValue = normalizeSingleSelectedValue(selectedValues);
69
+ return firstValue === undefined ? [] : [firstValue];
70
+ };