Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BREAKING CHANGE] feat(Popper): mv to stable #6185

Merged
merged 2 commits into from
Dec 4, 2023

Conversation

inomdzhon
Copy link
Contributor


  • Unit-тесты
  • Документация фичи

Описание

Описание нижу будет в migration_v6.md (см. #6182)

<Popper
- arrowClassName=""
+ arrowProps={{ iconClassName: "" }}
- offsetDistance={0}
+ offsetByMainAxis={0}
- offsetSkidding={0}
+ offsetByCrossAxis={0}
- onPlacementChange={({ placement }) => {}}
+ onPlacementChange={(placement) => {}}
- renderContent
/>
  • onPlacementChange теперь вызывается только в случае, если Popper подобрал оптимальный
    placement вместо пользовательского.
  • renderContent удалён в пользу children. Раньше из renderContent можно было получить
    className, который задаёт Popper, сейчас этот className пустой.
  • targetRef теперь умеет принимать VirtualElement.
  • arrowProps принимает атрибуты HTMLDivElement, а также iconStyle и iconClassName.

Изменения

  • Установку visibility: hidden вынес в convertFloatingDataToReactCSSProperties
  • Задело нестабильные компоненты TextTooltip и RichTooltip, но они так и так будут пошатаны в рамках перевода в стабильные компоненты.

@inomdzhon inomdzhon requested a review from a team as a code owner December 1, 2023 14:40
Copy link
Contributor

github-actions bot commented Dec 1, 2023

size-limit report 📦

Path Size
JS 343.47 KB (-0.03% 🔽)
JS (gzip) 105.31 KB (-0.1% 🔽)
JS (brotli) 86.73 KB (+0.18% 🔺)
JS import Div (tree shaking) 1.43 KB (0%)
CSS 261.01 KB (0%)
CSS (gzip) 33.97 KB (0%)
CSS (brotli) 27.58 KB (0%)

Copy link

codesandbox-ci bot commented Dec 1, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 6c6dbad:

Sandbox Source
VKUI TypeScript Configuration

Copy link
Contributor

github-actions bot commented Dec 1, 2023

e2e tests

Playwright Report

Copy link
Contributor

github-actions bot commented Dec 1, 2023

👀 Docs deployed

Commit 6c6dbad

Copy link

codecov bot commented Dec 1, 2023

Codecov Report

Attention: 1 lines in your changes are missing coverage. Please review.

Comparison is base (f6ccfb9) 80.89% compared to head (6c6dbad) 80.89%.

Files Patch % Lines
...ents/CustomSelectDropdown/CustomSelectDropdown.tsx 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6185      +/-   ##
==========================================
- Coverage   80.89%   80.89%   -0.01%     
==========================================
  Files         317      317              
  Lines        9863     9846      -17     
  Branches     3308     3301       -7     
==========================================
- Hits         7979     7965      -14     
+ Misses       1884     1881       -3     
Flag Coverage Δ
unittests 80.89% <93.75%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

SevereCloud
SevereCloud previously approved these changes Dec 4, 2023
migration_v6.md

h2. Popper

```diff
<Popper
- arrowClassName=""
+ arrowProps={{ iconClassName: "" }}
- offsetDistance={0}
+ offsetByMainAxis={0}
- offsetSkidding={0}
+ offsetByCrossAxis={0}
- onPlacementChange={({ placement }) => {}}
+ onPlacementChange={(placement) => {}}
- renderContent
/>
```

- `onPlacementChange` теперь вызывается только в случае, если `Popper` подобрал оптимальный
  `placement` вместо пользовательского.
- `renderContent` удалён в пользу `children`. Раньше из `renderContent` можно было получить
  `className`, который задаёт `Popper`, сейчас этот `className` пустой.
- `targetRef` теперь умеет принимать `VirtualElement`.
- `arrowProps` принимает атрибуты `HTMLDivElement`, а также `iconStyle` и `iconClassName`.
Copy link
Contributor

@mendrew mendrew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 💅

@inomdzhon inomdzhon merged commit b8a0b37 into master Dec 4, 2023
24 of 25 checks passed
@inomdzhon inomdzhon deleted the imirdzhamolov/issue6179/feat/Popper-to-stable branch December 4, 2023 11:16
inomdzhon added a commit that referenced this pull request Dec 6, 2023
h2. Описание

Немного отрефакторил.

- `Chip` перенеёс в `ChipInputBase`.
- Хук `useChipsInput` в `ChipsInput`.
- Хук `useChipsSelect` в `ChipsSelect`.
- Вынес шаренные типы в файлы `types`.
- Вынес шаренные константы типы в файлы `constants`.
- Теперь `ChipsInput` и `ChipsSelect` могут быть неконтролируемыми.
- В `ChipsSelect` параметры `creatable` и `emptyText` унёс в хук `useChipsSelect`.

<details><summary>Под катом изменения по `ChipsSelect`</summary>
<p>

h2. ChipsSelect

```diff
<ChipsSelect
-  value={[]}
+  defaultValue={[]}

-  value={[]}
+  value={[]}
+  onChange={[]}

-  inputValue=""
+  defaultInputValue=""

-  popupDirection="bottom"
+  placement="bottom"

-  options={[]}
+  presets={[]}

-  showSelected={true}
+  selectedBehavior="highlight"

-  showSelected={false}
+  selectedBehavior="hide"

-  creatableText="Lorem Ipsum"
+  creatable="Lorem Ipsum"
/>
```

- Компонент теперь может быть контролируемым и неконтролируемым.
- `creatable` – может быть всё ещё `boolean`, при этом теперь можно передать и текст, чтобы
  переопределить текст по умолчанию.
- `getOptionValue`, `getOptionLabel`, `getNewOptionData` – все аргументы функции теперь обязательны.
- `renderChip` – вторым аргументов приходит `option`.

</p>
</details> 

h3. Доступность

Обговорили с нашим специалистом по цифровой доступности следующие правила и поведение:

- Контейнеры `ChipsInput` и `ChipsSelect` имеют роль `listbox` и `aria-orientation="horizontal"`, а выбранные опции имеют роль `option`, а также атрибуты:
  - `aria-selected` со значением true;
  - `aria-posinset` со значением текущего места в списке;
  - `aria-setsize` со значением общего количества выбранных опций.
- В `ChipsSelect`:
  - поле ввода имеет роль `combobox` и ссылаться на всплывающее окно через `aria-haspopup`, `aria-controls` и `aria-expanded`
  - Всплывающее окно имеет роль `listbox`, а его опции роль `option`.
- Навигация с клавиатуры:
  - **Tab** фокусирует на поле ввода.
  - Если поле пустое, то стрелка **ArrowUp**/**ArrowLeft** выставит фокус на опцию с конца. Далее с помощью стрелок **ArrowUp**/**ArrowLeft** и **ArrowDown**/**ArrowRIght** можно перемещаться между опциями.
  - Нажатие **Tab** переведёт обратно на поле ввода, а **Shift + Tab** на другой фокусируемый элемент до `ChipsInput`/`ChipsSelect`. Другими словами опции не реагируют на **Tab**, на них можно сфокусироваться только кнопками-стрелками.

h2. Изменения

- `hooks/useEnsureControl` удалил `undefined` из возвращаемого типа. `value` не может быть `undefined`, потому что `useCustomEnsuredControl` возвращает `defaultValue`.
- `lib/select` немного отрефакторил, удалил легаси код связанный с флагом `u` у **RegExp**.
- `lib/appearance`
  - Добавил `Keys.BACKSPACE`.
  - Новая ф-я `getHorizontalFocusGoTo`.
- `lib/react/simulateReactInput` – так как теперь для `input` используется `useEnsureControl`, то нужна возможность очистить поле через событие. Т.к. у в DOM API нет события `clear`, вызываем событие через API в React (см. facebook/react#11488 (comment)).
- `components/Popper` – поправил проверку для вызова `onPlacementChange`  из #6185.
  - в `ChipsSelect` задаём значение по умолчанию для `placement`.
  - в `CustomSelectDropdown` задаём значение по умолчанию для `placement`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants