@wallarm-org/design-system 0.27.0 → 1.0.0-rc-feature-AS-877-fix-filter-code.1
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/components/FilterInput/index.d.ts +1 -1
- package/dist/components/FilterInput/lib/index.d.ts +1 -1
- package/dist/components/FilterInput/lib/statusCode/createStatusCodeSuggestions.d.ts +5 -4
- package/dist/components/FilterInput/lib/statusCode/createStatusCodeSuggestions.js +5 -6
- package/dist/components/FilterInput/lib/statusCode/createStatusCodeValidator.d.ts +1 -8
- package/dist/components/FilterInput/lib/statusCode/createStatusCodeValidator.js +3 -3
- package/dist/components/FilterInput/lib/statusCode/index.d.ts +0 -1
- package/dist/components/FilterInput/lib/statusCode/utils/canonicalize.d.ts +2 -2
- package/dist/components/FilterInput/lib/statusCode/utils/canonicalize.js +3 -3
- package/dist/components/FilterInput/lib/statusCode/utils/constants.d.ts +7 -3
- package/dist/components/FilterInput/lib/statusCode/utils/constants.js +3 -3
- package/dist/components/FilterInput/lib/statusCode/utils/index.d.ts +1 -3
- package/dist/components/FilterInput/lib/statusCode/utils/index.js +2 -3
- package/dist/metadata/components.json +2 -2
- package/package.json +1 -1
- package/dist/components/FilterInput/lib/statusCode/utils/maskRoots.d.ts +0 -4
- package/dist/components/FilterInput/lib/statusCode/utils/maskRoots.js +0 -3
- package/dist/components/FilterInput/lib/statusCode/utils/types.d.ts +0 -8
- package/dist/components/FilterInput/lib/statusCode/utils/types.js +0 -0
- package/dist/components/FilterInput/stories/mockStatusCodes.d.ts +0 -6
- package/dist/components/FilterInput/stories/mockStatusCodes.js +0 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { FilterInput, type FilterInputProps } from './FilterInput';
|
|
2
2
|
export { FilterInputChip, type FilterInputChipProps } from './FilterInputField';
|
|
3
3
|
export { FilterInputFieldMenu, type FilterInputFieldMenuProps, FilterInputOperatorMenu, type FilterInputOperatorMenuProps, FilterInputValueMenu, type FilterInputValueMenuProps, type ValueOption, } from './FilterInputMenu';
|
|
4
|
-
export { createStatusCodeInputFilter, createStatusCodeNormalizer, createStatusCodeSuggestions, createStatusCodeValidator, type FilterParseError, isFilterParseError, parseExpression,
|
|
4
|
+
export { createStatusCodeInputFilter, createStatusCodeNormalizer, createStatusCodeSuggestions, createStatusCodeValidator, type FilterParseError, isFilterParseError, parseExpression, serializeExpression, } from './lib';
|
|
5
5
|
export type { Condition, ExprNode, FieldMetadata, FieldType, FieldValueOption, FilterInputChipData, FilterInputChipVariant, FilterOperator, Group, } from './types';
|
|
@@ -10,4 +10,4 @@ export { getCurrentValueTokenText, getValueFilterText } from './menuFilterText';
|
|
|
10
10
|
export { getOperatorFromLabel, getOperatorLabel, isBetweenOperator, isMultiSelectOperator, isNoValueOperator, } from './operators';
|
|
11
11
|
export { type FilterParseError, isFilterParseError, parseExpression } from './parseExpression';
|
|
12
12
|
export { serializeExpression } from './serializeExpression';
|
|
13
|
-
export { createStatusCodeInputFilter, createStatusCodeNormalizer, createStatusCodeSuggestions, createStatusCodeValidator,
|
|
13
|
+
export { createStatusCodeInputFilter, createStatusCodeNormalizer, createStatusCodeSuggestions, createStatusCodeValidator, } from './statusCode';
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import type { FieldValueOption } from '../../types';
|
|
2
|
-
import { type StatusCodeSuggestionsOptions } from './utils';
|
|
3
2
|
/**
|
|
4
3
|
* Build the `getSuggestions` callback for an HTTP status code field. The
|
|
5
4
|
* returned function:
|
|
6
|
-
* -
|
|
7
|
-
* - on empty input, offers every available class mask
|
|
5
|
+
* - on empty input, offers every HTTP class mask (`1XX..5XX`)
|
|
8
6
|
* - on partial input (`"3"`, `"3X"`, `"30"`, …), expands it via
|
|
9
7
|
* `canonicalizeStatusCodeInput` and offers the single matching mask
|
|
10
8
|
* - merges any `context.selectedValues` (values already committed to the
|
|
11
9
|
* chip) in front of the input-driven output so they always appear with
|
|
12
10
|
* their canonical badge styling
|
|
11
|
+
*
|
|
12
|
+
* No backend config is required — the status-code class range is fixed to
|
|
13
|
+
* `[1..5]` per the HTTP spec.
|
|
13
14
|
*/
|
|
14
|
-
export declare const createStatusCodeSuggestions: (
|
|
15
|
+
export declare const createStatusCodeSuggestions: () => ((inputText: string, context?: {
|
|
15
16
|
selectedValues?: Array<string | number | boolean>;
|
|
16
17
|
}) => FieldValueOption[]);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const createStatusCodeSuggestions = (
|
|
3
|
-
const
|
|
4
|
-
const resolveSelected = (selectedValues)=>(selectedValues ?? []).map((v)=>String(v)).filter((s)=>/^\d[\dX]{0,2}$/.test(s) && maskRoots.includes(s.charAt(0))).map((s)=>makeMask(s));
|
|
1
|
+
import { MASK_ROOTS, canonicalizeStatusCodeInput, makeMask } from "./utils/index.js";
|
|
2
|
+
const createStatusCodeSuggestions = ()=>{
|
|
3
|
+
const resolveSelected = (selectedValues)=>(selectedValues ?? []).map((v)=>String(v)).filter((s)=>/^\d[\dX]{0,2}$/.test(s) && MASK_ROOTS.includes(s.charAt(0))).map((s)=>makeMask(s));
|
|
5
4
|
return (inputText, context)=>{
|
|
6
5
|
const norm = inputText.trim();
|
|
7
6
|
const selected = resolveSelected(context?.selectedValues);
|
|
@@ -10,8 +9,8 @@ const createStatusCodeSuggestions = (options)=>{
|
|
|
10
9
|
...selected,
|
|
11
10
|
...primary.filter((o)=>!seen.has(String(o.value)))
|
|
12
11
|
];
|
|
13
|
-
if (0 === norm.length) return merge(
|
|
14
|
-
const mask = canonicalizeStatusCodeInput(norm
|
|
12
|
+
if (0 === norm.length) return merge(MASK_ROOTS.map((d)=>makeMask(`${d}XX`)));
|
|
13
|
+
const mask = canonicalizeStatusCodeInput(norm);
|
|
15
14
|
if (!mask) return selected;
|
|
16
15
|
return merge([
|
|
17
16
|
makeMask(mask)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type StatusCodeSuggestionsOptions } from './utils';
|
|
2
1
|
/**
|
|
3
2
|
* Build a validator for the HTTP status code field. Accepts only 3-character
|
|
4
3
|
* values whose leading digit is a valid HTTP class (`[1..5]`) and whose
|
|
@@ -9,11 +8,5 @@ import { type StatusCodeSuggestionsOptions } from './utils';
|
|
|
9
8
|
*
|
|
10
9
|
* Returns `true` when the value is invalid, matching the
|
|
11
10
|
* `FieldMetadata.validate` contract.
|
|
12
|
-
*
|
|
13
|
-
* The `options` argument is accepted for API symmetry with
|
|
14
|
-
* `createStatusCodeSuggestions` (same wiring on the field), but validity is
|
|
15
|
-
* bound to the static `[1..5]` HTTP class range rather than `codes` — the
|
|
16
|
-
* backend's available-data list doesn't narrow what the user may legitimately
|
|
17
|
-
* type.
|
|
18
11
|
*/
|
|
19
|
-
export declare const createStatusCodeValidator: (
|
|
12
|
+
export declare const createStatusCodeValidator: () => ((value: string | number | boolean) => boolean);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const createStatusCodeValidator = (
|
|
1
|
+
import { MASK_ROOTS, STATUS_CODE_LENGTH } from "./utils/index.js";
|
|
2
|
+
const createStatusCodeValidator = ()=>(value)=>{
|
|
3
3
|
const s = String(value);
|
|
4
4
|
if (s.length !== STATUS_CODE_LENGTH) return true;
|
|
5
|
-
if (!
|
|
5
|
+
if (!MASK_ROOTS.includes(s.charAt(0))) return true;
|
|
6
6
|
return !/^(XX|\dX|\d\d)$/.test(s.slice(1));
|
|
7
7
|
};
|
|
8
8
|
export { createStatusCodeValidator };
|
|
@@ -2,4 +2,3 @@ export { createStatusCodeInputFilter } from './createStatusCodeInputFilter';
|
|
|
2
2
|
export { createStatusCodeNormalizer } from './createStatusCodeNormalizer';
|
|
3
3
|
export { createStatusCodeSuggestions } from './createStatusCodeSuggestions';
|
|
4
4
|
export { createStatusCodeValidator } from './createStatusCodeValidator';
|
|
5
|
-
export type { StatusCodeSuggestionsOptions } from './utils';
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* Rejected:
|
|
15
15
|
* "3X0" (digit after placeholder)
|
|
16
16
|
* "X30" (starts with placeholder)
|
|
17
|
-
* "6..." (leading digit
|
|
17
|
+
* "6..." (leading digit outside the `[1..5]` HTTP class range)
|
|
18
18
|
* "ab..." (non-digit, non-X)
|
|
19
19
|
*/
|
|
20
|
-
export declare const canonicalizeStatusCodeInput: (input: string
|
|
20
|
+
export declare const canonicalizeStatusCodeInput: (input: string) => string | null;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { MASK_PLACEHOLDER, STATUS_CODE_LENGTH } from "./constants.js";
|
|
2
|
-
const canonicalizeStatusCodeInput = (input
|
|
1
|
+
import { MASK_PLACEHOLDER, MASK_ROOTS, STATUS_CODE_LENGTH } from "./constants.js";
|
|
2
|
+
const canonicalizeStatusCodeInput = (input)=>{
|
|
3
3
|
const s = input.toUpperCase();
|
|
4
4
|
if (0 === s.length || s.length > STATUS_CODE_LENGTH) return null;
|
|
5
5
|
if (!/^[\dX]+$/.test(s)) return null;
|
|
6
6
|
const d1 = s.charAt(0);
|
|
7
|
-
if (d1 === MASK_PLACEHOLDER || !
|
|
7
|
+
if (d1 === MASK_PLACEHOLDER || !MASK_ROOTS.includes(d1)) return null;
|
|
8
8
|
if (1 === s.length) return `${d1}XX`;
|
|
9
9
|
const c2 = s.charAt(1);
|
|
10
10
|
if (c2 === MASK_PLACEHOLDER) {
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { BadgeColor } from '../../../../Badge';
|
|
2
2
|
/** The five valid HTTP status-code classes, used both for suggestion-building
|
|
3
|
-
* and validation. Backed by the standard HTTP spec
|
|
4
|
-
* backend
|
|
5
|
-
|
|
3
|
+
* and validation. Backed by the standard HTTP spec — entirely frontend-driven,
|
|
4
|
+
* independent of what the backend config carries.
|
|
5
|
+
*
|
|
6
|
+
* Typed as `readonly string[]` (not `as const`) so `.includes(someString)`
|
|
7
|
+
* stays callable without casting; declaration-file generation rejects the
|
|
8
|
+
* tuple-narrowed overload of `.includes`. */
|
|
9
|
+
export declare const MASK_ROOTS: readonly string[];
|
|
6
10
|
/** Badge color per HTTP class, keyed by the leading digit. Derived from the
|
|
7
11
|
* AS-877 Figma designs: informational greys, success greens, redirect blues,
|
|
8
12
|
* client-error ambers, server-error reds. */
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const
|
|
1
|
+
const MASK_ROOTS = [
|
|
2
2
|
'1',
|
|
3
3
|
'2',
|
|
4
4
|
'3',
|
|
5
5
|
'4',
|
|
6
6
|
'5'
|
|
7
|
-
]
|
|
7
|
+
];
|
|
8
8
|
const HTTP_CLASS_BADGE_COLOR = {
|
|
9
9
|
1: 'slate',
|
|
10
10
|
2: 'green',
|
|
@@ -14,4 +14,4 @@ const HTTP_CLASS_BADGE_COLOR = {
|
|
|
14
14
|
};
|
|
15
15
|
const STATUS_CODE_LENGTH = 3;
|
|
16
16
|
const MASK_PLACEHOLDER = 'X';
|
|
17
|
-
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER,
|
|
17
|
+
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER, MASK_ROOTS, STATUS_CODE_LENGTH };
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
export { canonicalizeStatusCodeInput } from './canonicalize';
|
|
2
|
-
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER,
|
|
2
|
+
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER, MASK_ROOTS, STATUS_CODE_LENGTH, } from './constants';
|
|
3
3
|
export { makeMask } from './makeMask';
|
|
4
|
-
export { getMaskRoots } from './maskRoots';
|
|
5
|
-
export type { StatusCodeSuggestionsOptions } from './types';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { canonicalizeStatusCodeInput } from "./canonicalize.js";
|
|
2
|
-
import { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER,
|
|
2
|
+
import { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER, MASK_ROOTS, STATUS_CODE_LENGTH } from "./constants.js";
|
|
3
3
|
import { makeMask } from "./makeMask.js";
|
|
4
|
-
|
|
5
|
-
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER, STATUS_CODE_LENGTH, VALID_MASK_ROOTS, canonicalizeStatusCodeInput, getMaskRoots, makeMask };
|
|
4
|
+
export { HTTP_CLASS_BADGE_COLOR, MASK_PLACEHOLDER, MASK_ROOTS, STATUS_CODE_LENGTH, canonicalizeStatusCodeInput, makeMask };
|
package/package.json
CHANGED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** Extract the HTTP class digits (`1`..`5`) that actually appear as single-
|
|
2
|
-
* character entries in the backend `codes` list. These become the "available"
|
|
3
|
-
* class masks the helper is willing to emit. */
|
|
4
|
-
export declare const getMaskRoots: (codes: string[] | undefined) => string[];
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface StatusCodeSuggestionsOptions {
|
|
2
|
-
/**
|
|
3
|
-
* Raw backend status-code list. The helper keeps only 1-char entries in
|
|
4
|
-
* `[1..5]` as mask roots; everything else is ignored. When omitted or
|
|
5
|
-
* empty, the helper returns `[]` for every input.
|
|
6
|
-
*/
|
|
7
|
-
codes?: string[];
|
|
8
|
-
}
|
|
File without changes
|