From 1aa0493eb546f1828f27ec076d54fab0ae1114ef Mon Sep 17 00:00:00 2001 From: Victoria Zhizhonkova Date: Wed, 28 Feb 2024 09:49:47 +0700 Subject: [PATCH] fix(ChipsSelect): add disabled prop (#6640) --- packages/vkui/src/components/Chip/Chip.tsx | 1 + .../ChipsSelect/ChipsSelect.stories.tsx | 2 +- .../components/ChipsSelect/ChipsSelect.tsx | 46 +++++++++++++++++-- .../vkui/src/components/ChipsSelect/Readme.md | 2 +- .../CustomSelectOption/CustomSelectOption.tsx | 4 +- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/packages/vkui/src/components/Chip/Chip.tsx b/packages/vkui/src/components/Chip/Chip.tsx index df800eb372..42864e334b 100644 --- a/packages/vkui/src/components/Chip/Chip.tsx +++ b/packages/vkui/src/components/Chip/Chip.tsx @@ -19,6 +19,7 @@ export type ChipValue = string | number; export interface ChipOption { value?: ChipValue; label?: string; + disabled?: boolean; [otherProp: string]: any; } diff --git a/packages/vkui/src/components/ChipsSelect/ChipsSelect.stories.tsx b/packages/vkui/src/components/ChipsSelect/ChipsSelect.stories.tsx index 1afb589dc4..1729d55cd0 100644 --- a/packages/vkui/src/components/ChipsSelect/ChipsSelect.stories.tsx +++ b/packages/vkui/src/components/ChipsSelect/ChipsSelect.stories.tsx @@ -21,7 +21,7 @@ const groups = [ value: '1', label: 'Arctic Monkeys', }, - { value: '2', label: 'Звери' }, + { value: '2', label: 'Звери', disabled: true }, { value: '4', label: 'FACE' }, { value: '3', diff --git a/packages/vkui/src/components/ChipsSelect/ChipsSelect.tsx b/packages/vkui/src/components/ChipsSelect/ChipsSelect.tsx index 33f7aed894..ee7c0bdfa3 100644 --- a/packages/vkui/src/components/ChipsSelect/ChipsSelect.tsx +++ b/packages/vkui/src/components/ChipsSelect/ChipsSelect.tsx @@ -20,6 +20,32 @@ import { IconButton } from '../IconButton/IconButton'; import { Footnote } from '../Typography/Footnote/Footnote'; import styles from './ChipsSelect.module.css'; +const findIndexAfter = (options: O[] = [], startIndex = -1) => { + if (startIndex >= options.length - 1) { + return -1; + } + return options.findIndex((option, i) => i > startIndex && !option.disabled); +}; + +const findIndexBefore = ( + options: O[] = [], + endIndex: number = options.length, +) => { + let result = -1; + if (endIndex <= 0) { + return result; + } + for (let i = endIndex - 1; i >= 0; i--) { + let option = options[i]; + + if (!option.disabled) { + result = i; + break; + } + } + return result; +}; + export interface ChipsSelectProps