Выпадающий список React Fluent UI отключил всплывающую подсказку при наведении

У меня есть требование добавить всплывающую подсказку при наведении на отключенные параметры в раскрывающемся списке в пользовательском интерфейсе React Fluent.

Я могу добавить всплывающую подсказку к отдельному компоненту, используя https://www.npmjs.com/package/@fluentui/react-tooltip

<Tooltipcontent = "Example tooltip">
  <Button/>
</Tooltip>

но как добавить подобное поведение к выпадающим опциям и только для disabled опций например: "Отключена причина недоступности" пример свободного пользовательского интерфейса с выпадающим меню

const options: IDropdownOption[] = [
  { key: 'fruitsHeader', text: 'Fruits', itemType: DropdownMenuItemType.Header },
  { key: 'apple', text: 'Apple' },
  { key: 'banana', text: 'Banana' },
  { key: 'orange', text: 'Orange', disabled: true },
];

export const DropdownBasicExample: React.FunctionComponent = () => {
  return (
    <Stack tokens = {stackTokens}>
      <Dropdown
        placeholder = "Select an option"
        label = "Basic uncontrolled example"
        options = {options}
        styles = {dropdownStyles}
      />

    </Stack>
  );
};

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пользовательский интерфейс Fluent отображает каждую отключенную опцию как элемент button с атрибутом disabled, что по умолчанию делает его неинтерактивным.

Вот способ решить эту проблему, который, я считаю, также довольно доступен:

Сначала определите свой массив элементов IDropdownOption, чтобы они условно задавали свойства disabled и title:

const options: IDropdownOption[] = [
  { key: 'apple', text: 'Apple' },
  { key: 'orange',
    text: 'Orange',
    disabled: isOrangeDisabled,
    title: isOrangeDisabled ? "This is a disabled tooltip" : ""
  },
];

Вам также потребуется определить пользовательскую функцию рендеринга для элементов, чтобы применить красивую всплывающую подсказку:

<Dropdown onRenderOption = {onRenderOption} />

а затем определите такую ​​​​функцию в своем компоненте:

const onRenderOption = (option: IDropdownOption): JSX.Element => {
  return (
    <>
      {option?.disabled && (
        <div className = "interactive">
          <TooltipHost content = {option.title}>
            <span>{option.text}</span>
          </TooltipHost>
        </div>
      )}
      {!option?.disabled && (
        <span>{option.text}</span>
      )}
    </>
  );
};

Наконец, этот interactive класс CSS должен быть определен в вашем файле CSS. Это переопределит поведение браузера по умолчанию, делающее элементы disabled неинтерактивными:

.interactive {
  pointer-events: auto;
}

Некоторые вещи, которые следует отметить:

  • Причина, по которой title устанавливается в пустую строку, когда параметр не отключен, заключается в том, что он не имеет строкового значения при отображении интерактивного элемента. Без этого браузер будет отображать всплывающую подсказку при наведении курсора на выбираемый элемент, что выглядит некрасиво.
  • Использование атрибута title должно сделать компонент удобным для чтения с экрана и других вспомогательных технологий (хотя я далеко не эксперт).
  • Шаблон отображает класс TooltipHost и interactive только тогда, когда объект отключен, поэтому всплывающая подсказка и это поведение срабатывают только при отключении параметра. Поскольку базовый параметр по-прежнему отключен, вы все равно не сможете его выбрать.

Другие вопросы по теме