@sap-ux/ui-components 1.8.2 → 1.8.4
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/Icons.d.ts +140 -139
- package/dist/components/Icons.d.ts.map +1 -1
- package/dist/components/Icons.js +587 -582
- package/dist/components/Icons.js.map +1 -1
- package/dist/components/UIActionCallout/UIActionCallout.d.ts +61 -61
- package/dist/components/UIActionCallout/UIActionCallout.js +63 -63
- package/dist/components/UIActionCallout/UIActionCallout.scss +31 -31
- package/dist/components/UIActionCallout/index.d.ts +1 -1
- package/dist/components/UIActionCallout/index.js +17 -17
- package/dist/components/UIBreadcrumb/UIBreadcrumb.d.ts +23 -23
- package/dist/components/UIBreadcrumb/UIBreadcrumb.js +38 -38
- package/dist/components/UIBreadcrumb/index.d.ts +1 -1
- package/dist/components/UIBreadcrumb/index.js +17 -17
- package/dist/components/UIButton/UIActionButton.d.ts +23 -23
- package/dist/components/UIButton/UIActionButton.js +89 -89
- package/dist/components/UIButton/UIDefaultButton.d.ts +23 -23
- package/dist/components/UIButton/UIDefaultButton.js +229 -229
- package/dist/components/UIButton/UIIconButton.d.ts +37 -37
- package/dist/components/UIButton/UIIconButton.js +106 -106
- package/dist/components/UIButton/UISmallButton.d.ts +34 -34
- package/dist/components/UIButton/UISmallButton.js +115 -115
- package/dist/components/UIButton/UISplitButton.d.ts +36 -36
- package/dist/components/UIButton/UISplitButton.js +71 -71
- package/dist/components/UIButton/index.d.ts +7 -7
- package/dist/components/UIButton/index.js +21 -21
- package/dist/components/UICallout/UICallout.d.ts +37 -37
- package/dist/components/UICallout/UICallout.js +90 -90
- package/dist/components/UICallout/index.d.ts +1 -1
- package/dist/components/UICallout/index.js +17 -17
- package/dist/components/UICheckbox/UICheckbox.d.ts +34 -34
- package/dist/components/UICheckbox/UICheckbox.js +135 -135
- package/dist/components/UICheckbox/index.d.ts +1 -1
- package/dist/components/UICheckbox/index.js +17 -17
- package/dist/components/UIChoiceGroup/UIChoiceGroup.d.ts +28 -28
- package/dist/components/UIChoiceGroup/UIChoiceGroup.js +182 -182
- package/dist/components/UIChoiceGroup/index.d.ts +1 -1
- package/dist/components/UIChoiceGroup/index.js +17 -17
- package/dist/components/UIComboBox/Callout.scss +7 -7
- package/dist/components/UIComboBox/UIComboBox.d.ts +198 -198
- package/dist/components/UIComboBox/UIComboBox.js +516 -516
- package/dist/components/UIComboBox/UIComboBox.scss +268 -268
- package/dist/components/UIComboBox/_mixins.scss +32 -32
- package/dist/components/UIComboBox/index.d.ts +1 -1
- package/dist/components/UIComboBox/index.js +17 -17
- package/dist/components/UIContextualMenu/UIContextualMenu.d.ts +31 -31
- package/dist/components/UIContextualMenu/UIContextualMenu.js +123 -123
- package/dist/components/UIContextualMenu/UIContextualMenu.scss +211 -211
- package/dist/components/UIContextualMenu/UIHighlightMenuOption.d.ts +19 -19
- package/dist/components/UIContextualMenu/UIHighlightMenuOption.js +50 -50
- package/dist/components/UIContextualMenu/UIHighlightMenuOption.scss +23 -23
- package/dist/components/UIContextualMenu/_variables.scss +30 -30
- package/dist/components/UIContextualMenu/index.d.ts +2 -2
- package/dist/components/UIContextualMenu/index.js +18 -18
- package/dist/components/UIDatePicker/UIDatePicker.d.ts +49 -49
- package/dist/components/UIDatePicker/UIDatePicker.js +72 -72
- package/dist/components/UIDatePicker/UIDatePicker.scss +38 -38
- package/dist/components/UIDatePicker/index.d.ts +1 -1
- package/dist/components/UIDatePicker/index.js +17 -17
- package/dist/components/UIDialog/UIDialog.d.ts +116 -116
- package/dist/components/UIDialog/UIDialog.js +279 -279
- package/dist/components/UIDialog/index.d.ts +1 -1
- package/dist/components/UIDialog/index.js +17 -17
- package/dist/components/UIDropdown/UIDropdown.d.ts +90 -90
- package/dist/components/UIDropdown/UIDropdown.js +216 -216
- package/dist/components/UIDropdown/UIDropdown.scss +115 -115
- package/dist/components/UIDropdown/index.d.ts +2 -2
- package/dist/components/UIDropdown/index.js +18 -18
- package/dist/components/UIDropdown/utils.d.ts +8 -8
- package/dist/components/UIDropdown/utils.js +20 -20
- package/dist/components/UIFlexibleTable/RowActions.d.ts +16 -16
- package/dist/components/UIFlexibleTable/RowActions.js +73 -73
- package/dist/components/UIFlexibleTable/RowData.d.ts +16 -16
- package/dist/components/UIFlexibleTable/RowData.js +111 -111
- package/dist/components/UIFlexibleTable/UIFlexibleTable.d.ts +11 -11
- package/dist/components/UIFlexibleTable/UIFlexibleTable.js +280 -280
- package/dist/components/UIFlexibleTable/UIFlexibleTable.scss +433 -433
- package/dist/components/UIFlexibleTable/UIFlexibleTableActionButton.d.ts +20 -20
- package/dist/components/UIFlexibleTable/UIFlexibleTableActionButton.js +20 -20
- package/dist/components/UIFlexibleTable/UIFlexibleTableRow.d.ts +26 -26
- package/dist/components/UIFlexibleTable/UIFlexibleTableRow.js +165 -165
- package/dist/components/UIFlexibleTable/UIFlexibleTableRowActionButton.d.ts +20 -20
- package/dist/components/UIFlexibleTable/UIFlexibleTableRowActionButton.js +19 -19
- package/dist/components/UIFlexibleTable/UIFlexibleTableRowNoData.d.ts +15 -15
- package/dist/components/UIFlexibleTable/UIFlexibleTableRowNoData.js +28 -28
- package/dist/components/UIFlexibleTable/index.d.ts +5 -5
- package/dist/components/UIFlexibleTable/index.js +21 -21
- package/dist/components/UIFlexibleTable/types.d.ts +142 -142
- package/dist/components/UIFlexibleTable/types.js +14 -14
- package/dist/components/UIFlexibleTable/utils.d.ts +25 -25
- package/dist/components/UIFlexibleTable/utils.js +49 -49
- package/dist/components/UIFocusZone/UIFocusTrapZone.d.ts +22 -22
- package/dist/components/UIFocusZone/UIFocusTrapZone.js +33 -33
- package/dist/components/UIFocusZone/UIFocusZone.d.ts +23 -23
- package/dist/components/UIFocusZone/UIFocusZone.js +35 -35
- package/dist/components/UIFocusZone/index.d.ts +2 -2
- package/dist/components/UIFocusZone/index.js +18 -18
- package/dist/components/UIIcon/UIIcon.d.ts +24 -24
- package/dist/components/UIIcon/UIIcon.js +37 -37
- package/dist/components/UIIcon/UIIcon.scss +3 -3
- package/dist/components/UIIcon/index.d.ts +1 -1
- package/dist/components/UIIcon/index.js +17 -17
- package/dist/components/UIInput/UITextInput.d.ts +48 -48
- package/dist/components/UIInput/UITextInput.js +238 -238
- package/dist/components/UIInput/index.d.ts +1 -1
- package/dist/components/UIInput/index.js +17 -17
- package/dist/components/UILabel/UILabel.d.ts +30 -30
- package/dist/components/UILabel/UILabel.js +64 -64
- package/dist/components/UILabel/index.d.ts +1 -1
- package/dist/components/UILabel/index.js +17 -17
- package/dist/components/UILink/UILink.d.ts +25 -25
- package/dist/components/UILink/UILink.js +71 -71
- package/dist/components/UILink/index.d.ts +1 -1
- package/dist/components/UILink/index.js +17 -17
- package/dist/components/UIList/UIList.d.ts +31 -31
- package/dist/components/UIList/UIList.js +120 -120
- package/dist/components/UIList/UIList.scss +16 -16
- package/dist/components/UIList/index.d.ts +1 -1
- package/dist/components/UIList/index.js +17 -17
- package/dist/components/UILoader/UILoader.d.ts +27 -27
- package/dist/components/UILoader/UILoader.js +78 -78
- package/dist/components/UILoader/UILoader.scss +32 -32
- package/dist/components/UILoader/index.d.ts +1 -1
- package/dist/components/UILoader/index.js +17 -17
- package/dist/components/UIMessageBar/UIMessageBar.d.ts +25 -25
- package/dist/components/UIMessageBar/UIMessageBar.js +56 -56
- package/dist/components/UIMessageBar/index.d.ts +1 -1
- package/dist/components/UIMessageBar/index.js +17 -17
- package/dist/components/UIModal/UIModal.d.ts +23 -23
- package/dist/components/UIModal/UIModal.js +43 -43
- package/dist/components/UIModal/index.d.ts +1 -1
- package/dist/components/UIModal/index.js +17 -17
- package/dist/components/UIOverlay/UIOverlay.d.ts +22 -22
- package/dist/components/UIOverlay/UIOverlay.js +38 -38
- package/dist/components/UIOverlay/index.d.ts +1 -1
- package/dist/components/UIOverlay/index.js +17 -17
- package/dist/components/UIPersona/UIPersona.d.ts +27 -27
- package/dist/components/UIPersona/UIPersona.js +48 -48
- package/dist/components/UIPersona/index.d.ts +1 -1
- package/dist/components/UIPersona/index.js +17 -17
- package/dist/components/UISearchBox/UISearchBox.d.ts +22 -22
- package/dist/components/UISearchBox/UISearchBox.js +153 -153
- package/dist/components/UISearchBox/index.d.ts +3 -3
- package/dist/components/UISearchBox/index.js +17 -17
- package/dist/components/UISection/UISection.d.ts +34 -34
- package/dist/components/UISection/UISection.js +44 -44
- package/dist/components/UISection/UISection.scss +76 -76
- package/dist/components/UISection/UISections.d.ts +249 -249
- package/dist/components/UISection/UISections.js +707 -707
- package/dist/components/UISection/UISections.scss +62 -62
- package/dist/components/UISection/UISplitter.d.ts +96 -96
- package/dist/components/UISection/UISplitter.js +220 -220
- package/dist/components/UISection/UISplitter.scss +212 -212
- package/dist/components/UISection/_mixins.scss +14 -14
- package/dist/components/UISection/_variables.scss +1 -1
- package/dist/components/UISection/index.d.ts +3 -3
- package/dist/components/UISection/index.js +19 -19
- package/dist/components/UISeparator/UISeparator.d.ts +25 -25
- package/dist/components/UISeparator/UISeparator.js +65 -65
- package/dist/components/UISeparator/index.d.ts +1 -1
- package/dist/components/UISeparator/index.js +17 -17
- package/dist/components/UITable/UITable-helper.d.ts +79 -79
- package/dist/components/UITable/UITable-helper.js +259 -259
- package/dist/components/UITable/UITable.d.ts +212 -212
- package/dist/components/UITable/UITable.js +775 -775
- package/dist/components/UITable/UITable.scss +194 -194
- package/dist/components/UITable/index.d.ts +2 -2
- package/dist/components/UITable/index.js +18 -18
- package/dist/components/UITable/types.d.ts +77 -77
- package/dist/components/UITable/types.js +28 -28
- package/dist/components/UITabs/UITabs.d.ts +28 -28
- package/dist/components/UITabs/UITabs.js +70 -70
- package/dist/components/UITabs/index.d.ts +1 -1
- package/dist/components/UITabs/index.js +17 -17
- package/dist/components/UIToggle/UIToggle.d.ts +39 -39
- package/dist/components/UIToggle/UIToggle.js +181 -181
- package/dist/components/UIToggle/index.d.ts +1 -1
- package/dist/components/UIToggle/index.js +17 -17
- package/dist/components/UIToggleGroup/UIToggleGroup.d.ts +31 -31
- package/dist/components/UIToggleGroup/UIToggleGroup.js +136 -136
- package/dist/components/UIToggleGroup/UIToggleGroup.scss +13 -13
- package/dist/components/UIToggleGroup/UIToggleGroup.types.d.ts +22 -22
- package/dist/components/UIToggleGroup/UIToggleGroup.types.js +2 -2
- package/dist/components/UIToggleGroup/UIToggleGroupOption/UIToggleGroupOption.d.ts +25 -25
- package/dist/components/UIToggleGroup/UIToggleGroupOption/UIToggleGroupOption.js +77 -77
- package/dist/components/UIToggleGroup/UIToggleGroupOption/UIToggleGroupOption.scss +74 -74
- package/dist/components/UIToggleGroup/UIToggleGroupOption/UIToggleGroupOption.types.d.ts +10 -10
- package/dist/components/UIToggleGroup/UIToggleGroupOption/UIToggleGroupOption.types.js +2 -2
- package/dist/components/UIToggleGroup/UIToggleGroupOption/index.d.ts +2 -2
- package/dist/components/UIToggleGroup/UIToggleGroupOption/index.js +18 -18
- package/dist/components/UIToggleGroup/index.d.ts +2 -2
- package/dist/components/UIToggleGroup/index.js +18 -18
- package/dist/components/UIToolbar/UIToolbar.d.ts +36 -36
- package/dist/components/UIToolbar/UIToolbar.js +104 -104
- package/dist/components/UIToolbar/UIToolbar.scss +48 -48
- package/dist/components/UIToolbar/UIToolbarColumn.d.ts +7 -7
- package/dist/components/UIToolbar/UIToolbarColumn.js +33 -33
- package/dist/components/UIToolbar/UIToolbarDivider.d.ts +27 -27
- package/dist/components/UIToolbar/UIToolbarDivider.js +56 -56
- package/dist/components/UIToolbar/index.d.ts +3 -3
- package/dist/components/UIToolbar/index.js +19 -19
- package/dist/components/UITooltip/UITooltip.d.ts +29 -29
- package/dist/components/UITooltip/UITooltip.js +77 -77
- package/dist/components/UITooltip/UITooltipUtils.d.ts +17 -17
- package/dist/components/UITooltip/UITooltipUtils.js +45 -45
- package/dist/components/UITooltip/index.d.ts +2 -2
- package/dist/components/UITooltip/index.js +18 -18
- package/dist/components/UITranslationInput/UIFormattedText.d.ts +46 -46
- package/dist/components/UITranslationInput/UIFormattedText.js +121 -121
- package/dist/components/UITranslationInput/UILoadButton.d.ts +52 -52
- package/dist/components/UITranslationInput/UILoadButton.js +109 -109
- package/dist/components/UITranslationInput/UILoadButton.scss +14 -14
- package/dist/components/UITranslationInput/UITranslationButton.d.ts +14 -14
- package/dist/components/UITranslationInput/UITranslationButton.js +88 -88
- package/dist/components/UITranslationInput/UITranslationButton.types.d.ts +67 -67
- package/dist/components/UITranslationInput/UITranslationButton.types.js +21 -21
- package/dist/components/UITranslationInput/UITranslationInput.d.ts +25 -25
- package/dist/components/UITranslationInput/UITranslationInput.js +169 -169
- package/dist/components/UITranslationInput/UITranslationInput.scss +40 -40
- package/dist/components/UITranslationInput/UITranslationUtils.d.ts +64 -64
- package/dist/components/UITranslationInput/UITranslationUtils.js +168 -168
- package/dist/components/UITranslationInput/defaults.d.ts +2 -2
- package/dist/components/UITranslationInput/defaults.js +15 -15
- package/dist/components/UITranslationInput/index.d.ts +2 -2
- package/dist/components/UITranslationInput/index.js +18 -18
- package/dist/components/UITreeDropdown/UITreeDropdown.d.ts +265 -265
- package/dist/components/UITreeDropdown/UITreeDropdown.js +661 -661
- package/dist/components/UITreeDropdown/UITreeDropdown.scss +64 -64
- package/dist/components/UITreeDropdown/index.d.ts +1 -1
- package/dist/components/UITreeDropdown/index.js +17 -17
- package/dist/components/UIVerticalDivider/UIVerticalDivider.d.ts +23 -23
- package/dist/components/UIVerticalDivider/UIVerticalDivider.js +41 -41
- package/dist/components/UIVerticalDivider/index.d.ts +1 -1
- package/dist/components/UIVerticalDivider/index.js +17 -17
- package/dist/components/UIVirtualList/UIAutoSizer.d.ts +22 -22
- package/dist/components/UIVirtualList/UIAutoSizer.js +33 -33
- package/dist/components/UIVirtualList/UICellMeasurer.d.ts +23 -23
- package/dist/components/UIVirtualList/UICellMeasurer.js +33 -33
- package/dist/components/UIVirtualList/UIVirtualList.d.ts +43 -43
- package/dist/components/UIVirtualList/UIVirtualList.js +70 -70
- package/dist/components/UIVirtualList/index.d.ts +3 -3
- package/dist/components/UIVirtualList/index.js +19 -19
- package/dist/components/index.d.ts +37 -37
- package/dist/components/index.js +53 -53
- package/dist/helper/ValidationMessage/MessageWrapper.d.ts +17 -17
- package/dist/helper/ValidationMessage/MessageWrapper.js +34 -34
- package/dist/helper/ValidationMessage/MessageWrapper.scss +44 -44
- package/dist/helper/ValidationMessage/index.d.ts +2 -2
- package/dist/helper/ValidationMessage/index.js +18 -18
- package/dist/helper/ValidationMessage/utils.d.ts +31 -31
- package/dist/helper/ValidationMessage/utils.js +121 -121
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -18
- package/dist/styles/_mixins.scss +15 -15
- package/dist/styles/_typography.scss +72 -72
- package/dist/styles/_variables.scss +26 -26
- package/dist/styles/ui-components.scss +3 -3
- package/dist/utilities/DeepMerge.d.ts +10 -10
- package/dist/utilities/DeepMerge.js +48 -48
- package/dist/utilities/Focus.d.ts +4 -4
- package/dist/utilities/Focus.js +7 -7
- package/dist/utilities/Id.d.ts +2 -2
- package/dist/utilities/Id.js +5 -5
- package/dist/utilities/Keys.d.ts +2 -2
- package/dist/utilities/Keys.js +5 -5
- package/dist/utilities/index.d.ts +3 -3
- package/dist/utilities/index.js +19 -19
- package/package.json +11 -12
- package/storybook/183.d7ada8f4159c95c30527.manager.bundle.js +891 -0
- package/storybook/260.1c2260a4.iframe.bundle.js +292 -0
- package/storybook/275.02c0af0f1d3b6c70e72d.manager.bundle.js +10 -0
- package/storybook/453.6e0cb2b5c2ede7af85c5.manager.bundle.js +2 -0
- package/storybook/{458.a8cb7c68775e3858b342.manager.bundle.js → 458.05b97cebc6fa3809e87a.manager.bundle.js} +113 -113
- package/storybook/{594.4816ff3f4edb5b8b0949.manager.bundle.js → 594.4d8bf523158b8a4a1ca9.manager.bundle.js} +1 -1
- package/storybook/{637.173c8d06.iframe.bundle.js → 637.149b545a.iframe.bundle.js} +1 -1
- package/storybook/{966.bc8dd3d7eec539544b33.manager.bundle.js → 966.7154988e86ea89b1942c.manager.bundle.js} +3 -3
- package/storybook/{987.81102a5d201c9f5a1528.manager.bundle.js → 987.7aa55d838ce2874baae8.manager.bundle.js} +3 -3
- package/storybook/iframe.html +17 -17
- package/storybook/index.html +119 -119
- package/storybook/{main.73db1398c1704e93ba73.manager.bundle.js → main.bbce46728b43f51e7d37.manager.bundle.js} +1 -1
- package/storybook/main.fdca8543.iframe.bundle.js +99 -0
- package/storybook/project.json +1 -1
- package/storybook/{runtime~main.769376b3.iframe.bundle.js → runtime~main.a1df0937.iframe.bundle.js} +1 -1
- package/storybook/runtime~main.e938cbae9eda438313f6.manager.bundle.js +2 -0
- package/storybook/275.a8ff63b0ed4a5d620142.manager.bundle.js +0 -10
- package/storybook/453.af4e8cc44257a27c435f.manager.bundle.js +0 -2
- package/storybook/713.ec72f301.iframe.bundle.js +0 -292
- package/storybook/756.edf22bba3c06d7815c54.manager.bundle.js +0 -891
- package/storybook/main.4bf0e1ff.iframe.bundle.js +0 -99
- package/storybook/runtime~main.eabd5638d9f3e40b3501.manager.bundle.js +0 -2
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { IDropdownProps, ICalloutContentStyleProps, ICalloutContentStyles } from '@fluentui/react';
|
|
3
|
-
import { DropdownMenuItemType, IDropdownOption } from '@fluentui/react';
|
|
4
|
-
import type { UIMessagesExtendedProps } from '../../helper/ValidationMessage';
|
|
5
|
-
import './UIDropdown.scss';
|
|
6
|
-
export { IDropdownOption as UIDropdownOption };
|
|
7
|
-
export { DropdownMenuItemType as UIDropdownMenuItemType };
|
|
8
|
-
export interface UIDropdownProps extends IDropdownProps, UIMessagesExtendedProps {
|
|
9
|
-
onHandleChange?(option: IDropdownOption, index: number): void;
|
|
10
|
-
onHandleOpen?(): void;
|
|
11
|
-
onHandleRenderTitle?(items: IDropdownOption[] | undefined): JSX.Element;
|
|
12
|
-
useDropdownAsMenuMinWidth?: boolean;
|
|
13
|
-
readOnly?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface UIDropdownState {
|
|
16
|
-
options: IDropdownOption[];
|
|
17
|
-
isOpen: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* UIDropdown component
|
|
21
|
-
* based on https://developer.microsoft.com/en-us/fluentui#/controls/web/dropdown
|
|
22
|
-
*
|
|
23
|
-
* @exports
|
|
24
|
-
* @class UIDropdown
|
|
25
|
-
* @extends {React.Component<UIDropdownProps, UIDropdownState>}
|
|
26
|
-
*/
|
|
27
|
-
export declare class UIDropdown extends React.Component<UIDropdownProps, UIDropdownState> {
|
|
28
|
-
/**
|
|
29
|
-
* Initializes component properties.
|
|
30
|
-
*
|
|
31
|
-
* @param {UIDropdownProps} props
|
|
32
|
-
*/
|
|
33
|
-
constructor(props: UIDropdownProps);
|
|
34
|
-
onRenderCaretDown: () => JSX.Element;
|
|
35
|
-
onRenderTitle: (items: IDropdownOption[] | undefined) => JSX.Element;
|
|
36
|
-
onClick: () => void;
|
|
37
|
-
onChange: (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number) => void;
|
|
38
|
-
/**
|
|
39
|
-
* Method stops event propagation.
|
|
40
|
-
*
|
|
41
|
-
* @param {React.MouseEvent<HTMLDivElement>} event Mouse event.
|
|
42
|
-
*/
|
|
43
|
-
stopEventPropagation: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
44
|
-
/**
|
|
45
|
-
* Method used as workaround to separate focus and hover.
|
|
46
|
-
* Default behaviour of fluent ui is that focus follows hover, but we need separe them.
|
|
47
|
-
*
|
|
48
|
-
* @param {IDropdownOption} [props] Dropdown props.
|
|
49
|
-
* @param {(props?: IDropdownOption) => JSX.Element | null} [defaultRender] Default option renderer.
|
|
50
|
-
* @returns {JSX.Element | null} Returns dropdown option element.
|
|
51
|
-
*/
|
|
52
|
-
private readonly onRenderOption;
|
|
53
|
-
/**
|
|
54
|
-
* Method called on combobox item render.
|
|
55
|
-
* We should pass query to it and avoid rendering if it is hidden.
|
|
56
|
-
*
|
|
57
|
-
* @param {IComboBoxOption} props Combobox item props.
|
|
58
|
-
* @param {Function} defaultRender Combobox item default renderer.
|
|
59
|
-
* @returns {JSX.Element | null} Element to render.
|
|
60
|
-
*/
|
|
61
|
-
private onRenderItem;
|
|
62
|
-
/**
|
|
63
|
-
* Method returns styles for callout to support property 'useDropdownAsMenuMinWidth'.
|
|
64
|
-
* States:
|
|
65
|
-
* 1. Min width of callout is equals to width of droipdown input box;
|
|
66
|
-
* 2. Max width equals to windows size minus 10px;
|
|
67
|
-
* 3. Width is auto - it allows to make callout wider if menu option size exceeds size of dropdown input(min-width).
|
|
68
|
-
*
|
|
69
|
-
* @param {ICalloutContentStyleProps} calloutStyleProps Current callout styles.
|
|
70
|
-
* @returns {Partial<ICalloutContentStyles>} Styles for callout.
|
|
71
|
-
*/
|
|
72
|
-
getCalloutStylesForUseAsMinWidth(calloutStyleProps: ICalloutContentStyleProps): Partial<ICalloutContentStyles>;
|
|
73
|
-
/**
|
|
74
|
-
* Method returns class names string depending on props and component state.
|
|
75
|
-
*
|
|
76
|
-
* @param {InputValidationMessageInfo} messageInfo Error/warning message if applied
|
|
77
|
-
* @returns {string} Class names of root dropdown element.
|
|
78
|
-
*/
|
|
79
|
-
private getClassNames;
|
|
80
|
-
/**
|
|
81
|
-
* Method returns additional component properties for accessibility.
|
|
82
|
-
*
|
|
83
|
-
* @returns {AccessibilityProps} Additional properties.
|
|
84
|
-
*/
|
|
85
|
-
private getAccessibilityProps;
|
|
86
|
-
/**
|
|
87
|
-
* @returns {JSX.Element}
|
|
88
|
-
*/
|
|
89
|
-
render(): JSX.Element;
|
|
90
|
-
}
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { IDropdownProps, ICalloutContentStyleProps, ICalloutContentStyles } from '@fluentui/react';
|
|
3
|
+
import { DropdownMenuItemType, IDropdownOption } from '@fluentui/react';
|
|
4
|
+
import type { UIMessagesExtendedProps } from '../../helper/ValidationMessage';
|
|
5
|
+
import './UIDropdown.scss';
|
|
6
|
+
export { IDropdownOption as UIDropdownOption };
|
|
7
|
+
export { DropdownMenuItemType as UIDropdownMenuItemType };
|
|
8
|
+
export interface UIDropdownProps extends IDropdownProps, UIMessagesExtendedProps {
|
|
9
|
+
onHandleChange?(option: IDropdownOption, index: number): void;
|
|
10
|
+
onHandleOpen?(): void;
|
|
11
|
+
onHandleRenderTitle?(items: IDropdownOption[] | undefined): JSX.Element;
|
|
12
|
+
useDropdownAsMenuMinWidth?: boolean;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface UIDropdownState {
|
|
16
|
+
options: IDropdownOption[];
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* UIDropdown component
|
|
21
|
+
* based on https://developer.microsoft.com/en-us/fluentui#/controls/web/dropdown
|
|
22
|
+
*
|
|
23
|
+
* @exports
|
|
24
|
+
* @class UIDropdown
|
|
25
|
+
* @extends {React.Component<UIDropdownProps, UIDropdownState>}
|
|
26
|
+
*/
|
|
27
|
+
export declare class UIDropdown extends React.Component<UIDropdownProps, UIDropdownState> {
|
|
28
|
+
/**
|
|
29
|
+
* Initializes component properties.
|
|
30
|
+
*
|
|
31
|
+
* @param {UIDropdownProps} props
|
|
32
|
+
*/
|
|
33
|
+
constructor(props: UIDropdownProps);
|
|
34
|
+
onRenderCaretDown: () => JSX.Element;
|
|
35
|
+
onRenderTitle: (items: IDropdownOption[] | undefined) => JSX.Element;
|
|
36
|
+
onClick: () => void;
|
|
37
|
+
onChange: (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Method stops event propagation.
|
|
40
|
+
*
|
|
41
|
+
* @param {React.MouseEvent<HTMLDivElement>} event Mouse event.
|
|
42
|
+
*/
|
|
43
|
+
stopEventPropagation: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Method used as workaround to separate focus and hover.
|
|
46
|
+
* Default behaviour of fluent ui is that focus follows hover, but we need separe them.
|
|
47
|
+
*
|
|
48
|
+
* @param {IDropdownOption} [props] Dropdown props.
|
|
49
|
+
* @param {(props?: IDropdownOption) => JSX.Element | null} [defaultRender] Default option renderer.
|
|
50
|
+
* @returns {JSX.Element | null} Returns dropdown option element.
|
|
51
|
+
*/
|
|
52
|
+
private readonly onRenderOption;
|
|
53
|
+
/**
|
|
54
|
+
* Method called on combobox item render.
|
|
55
|
+
* We should pass query to it and avoid rendering if it is hidden.
|
|
56
|
+
*
|
|
57
|
+
* @param {IComboBoxOption} props Combobox item props.
|
|
58
|
+
* @param {Function} defaultRender Combobox item default renderer.
|
|
59
|
+
* @returns {JSX.Element | null} Element to render.
|
|
60
|
+
*/
|
|
61
|
+
private onRenderItem;
|
|
62
|
+
/**
|
|
63
|
+
* Method returns styles for callout to support property 'useDropdownAsMenuMinWidth'.
|
|
64
|
+
* States:
|
|
65
|
+
* 1. Min width of callout is equals to width of droipdown input box;
|
|
66
|
+
* 2. Max width equals to windows size minus 10px;
|
|
67
|
+
* 3. Width is auto - it allows to make callout wider if menu option size exceeds size of dropdown input(min-width).
|
|
68
|
+
*
|
|
69
|
+
* @param {ICalloutContentStyleProps} calloutStyleProps Current callout styles.
|
|
70
|
+
* @returns {Partial<ICalloutContentStyles>} Styles for callout.
|
|
71
|
+
*/
|
|
72
|
+
getCalloutStylesForUseAsMinWidth(calloutStyleProps: ICalloutContentStyleProps): Partial<ICalloutContentStyles>;
|
|
73
|
+
/**
|
|
74
|
+
* Method returns class names string depending on props and component state.
|
|
75
|
+
*
|
|
76
|
+
* @param {InputValidationMessageInfo} messageInfo Error/warning message if applied
|
|
77
|
+
* @returns {string} Class names of root dropdown element.
|
|
78
|
+
*/
|
|
79
|
+
private getClassNames;
|
|
80
|
+
/**
|
|
81
|
+
* Method returns additional component properties for accessibility.
|
|
82
|
+
*
|
|
83
|
+
* @returns {AccessibilityProps} Additional properties.
|
|
84
|
+
*/
|
|
85
|
+
private getAccessibilityProps;
|
|
86
|
+
/**
|
|
87
|
+
* @returns {JSX.Element}
|
|
88
|
+
*/
|
|
89
|
+
render(): JSX.Element;
|
|
90
|
+
}
|
|
91
91
|
//# sourceMappingURL=UIDropdown.d.ts.map
|
|
@@ -1,217 +1,217 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.UIDropdown = exports.UIDropdownMenuItemType = void 0;
|
|
7
|
-
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const react_2 = require("@fluentui/react");
|
|
9
|
-
Object.defineProperty(exports, "UIDropdownMenuItemType", { enumerable: true, get: function () { return react_2.DropdownMenuItemType; } });
|
|
10
|
-
const UIIcon_1 = require("../UIIcon");
|
|
11
|
-
const ValidationMessage_1 = require("../../helper/ValidationMessage");
|
|
12
|
-
const UILabel_1 = require("../UILabel");
|
|
13
|
-
const utils_1 = require("./utils");
|
|
14
|
-
require("./UIDropdown.scss");
|
|
15
|
-
const ERROR_BORDER_COLOR = 'var(--vscode-inputValidation-errorBorder)';
|
|
16
|
-
/**
|
|
17
|
-
* UIDropdown component
|
|
18
|
-
* based on https://developer.microsoft.com/en-us/fluentui#/controls/web/dropdown
|
|
19
|
-
*
|
|
20
|
-
* @exports
|
|
21
|
-
* @class UIDropdown
|
|
22
|
-
* @extends {React.Component<UIDropdownProps, UIDropdownState>}
|
|
23
|
-
*/
|
|
24
|
-
class UIDropdown extends react_1.default.Component {
|
|
25
|
-
/**
|
|
26
|
-
* Initializes component properties.
|
|
27
|
-
*
|
|
28
|
-
* @param {UIDropdownProps} props
|
|
29
|
-
*/
|
|
30
|
-
constructor(props) {
|
|
31
|
-
super(props);
|
|
32
|
-
this.onRenderCaretDown = () => {
|
|
33
|
-
return react_1.default.createElement(UIIcon_1.UIIcon, { iconName: "ArrowDown", style: { height: '100%' } });
|
|
34
|
-
};
|
|
35
|
-
this.onRenderTitle = (items) => {
|
|
36
|
-
if (this.props.multiSelect && this.props.onHandleRenderTitle) {
|
|
37
|
-
return this.props.onHandleRenderTitle(items);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
const { multiSelectDelimiter = ', ' } = this.props;
|
|
41
|
-
if (items) {
|
|
42
|
-
const title = items.map((i) => i.text).join(multiSelectDelimiter);
|
|
43
|
-
return react_1.default.createElement(react_1.default.Fragment, null, title);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
return react_1.default.createElement(react_1.default.Fragment, null, this.props.title);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
this.onClick = ( /* event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number */) => {
|
|
51
|
-
this.setState({ isOpen: !this.state.isOpen }, () => {
|
|
52
|
-
if (this.props.multiSelect && this.props.onHandleOpen) {
|
|
53
|
-
if (this.state.isOpen) {
|
|
54
|
-
this.setState({ isOpen: !this.state.isOpen });
|
|
55
|
-
this.props.onHandleOpen();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
this.onChange = (event, option, index) => {
|
|
61
|
-
if (this.props.multiSelect && this.props.onHandleChange) {
|
|
62
|
-
if (option && index) {
|
|
63
|
-
this.props.onHandleChange(option, index);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* Method stops event propagation.
|
|
69
|
-
*
|
|
70
|
-
* @param {React.MouseEvent<HTMLDivElement>} event Mouse event.
|
|
71
|
-
*/
|
|
72
|
-
this.stopEventPropagation = (event) => {
|
|
73
|
-
event.stopPropagation();
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Method used as workaround to separate focus and hover.
|
|
77
|
-
* Default behaviour of fluent ui is that focus follows hover, but we need separe them.
|
|
78
|
-
*
|
|
79
|
-
* @param {IDropdownOption} [props] Dropdown props.
|
|
80
|
-
* @param {(props?: IDropdownOption) => JSX.Element | null} [defaultRender] Default option renderer.
|
|
81
|
-
* @returns {JSX.Element | null} Returns dropdown option element.
|
|
82
|
-
*/
|
|
83
|
-
this.onRenderOption = (props, defaultRender) => {
|
|
84
|
-
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
85
|
-
defaultRender?.(props),
|
|
86
|
-
react_1.default.createElement("div", { onMouseEnter: this.stopEventPropagation.bind(this), onMouseLeave: this.stopEventPropagation.bind(this), onMouseMove: this.stopEventPropagation.bind(this), className: "ts-dropdown-item-blocker" })));
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Method called on combobox item render.
|
|
90
|
-
* We should pass query to it and avoid rendering if it is hidden.
|
|
91
|
-
*
|
|
92
|
-
* @param {IComboBoxOption} props Combobox item props.
|
|
93
|
-
* @param {Function} defaultRender Combobox item default renderer.
|
|
94
|
-
* @returns {JSX.Element | null} Element to render.
|
|
95
|
-
*/
|
|
96
|
-
this.onRenderItem = (props, defaultRender) => {
|
|
97
|
-
if (defaultRender && props) {
|
|
98
|
-
if (props.title === undefined) {
|
|
99
|
-
// Apply title by default if property not provided
|
|
100
|
-
// In older fluent-ui versions it was applied by default, but behavior changed in version '8.66.2'
|
|
101
|
-
props.title = props.text;
|
|
102
|
-
}
|
|
103
|
-
return defaultRender(props);
|
|
104
|
-
}
|
|
105
|
-
return null;
|
|
106
|
-
};
|
|
107
|
-
this.state = {
|
|
108
|
-
options: [],
|
|
109
|
-
isOpen: false
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Method returns styles for callout to support property 'useDropdownAsMenuMinWidth'.
|
|
114
|
-
* States:
|
|
115
|
-
* 1. Min width of callout is equals to width of droipdown input box;
|
|
116
|
-
* 2. Max width equals to windows size minus 10px;
|
|
117
|
-
* 3. Width is auto - it allows to make callout wider if menu option size exceeds size of dropdown input(min-width).
|
|
118
|
-
*
|
|
119
|
-
* @param {ICalloutContentStyleProps} calloutStyleProps Current callout styles.
|
|
120
|
-
* @returns {Partial<ICalloutContentStyles>} Styles for callout.
|
|
121
|
-
*/
|
|
122
|
-
getCalloutStylesForUseAsMinWidth(calloutStyleProps) {
|
|
123
|
-
return {
|
|
124
|
-
root: {
|
|
125
|
-
minWidth: calloutStyleProps.calloutWidth,
|
|
126
|
-
width: 'auto',
|
|
127
|
-
maxWidth: 'calc(100% - 10px)'
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Method returns class names string depending on props and component state.
|
|
133
|
-
*
|
|
134
|
-
* @param {InputValidationMessageInfo} messageInfo Error/warning message if applied
|
|
135
|
-
* @returns {string} Class names of root dropdown element.
|
|
136
|
-
*/
|
|
137
|
-
getClassNames(messageInfo) {
|
|
138
|
-
const { className, readOnly, disabled } = this.props;
|
|
139
|
-
const errorSuffix = messageInfo.message ? ValidationMessage_1.MESSAGE_TYPES_CLASSNAME_MAP.get(messageInfo.type) : undefined;
|
|
140
|
-
let classNames = `ts-SelectBox${messageInfo.message ? ' ts-SelectBox--' + errorSuffix : ''}`;
|
|
141
|
-
// Readonly
|
|
142
|
-
if (readOnly && !disabled) {
|
|
143
|
-
classNames += ' ts-SelectBox--readonly';
|
|
144
|
-
}
|
|
145
|
-
// Disabled
|
|
146
|
-
if (disabled) {
|
|
147
|
-
classNames += ' ts-SelectBox--disabled';
|
|
148
|
-
}
|
|
149
|
-
// Custom external classes
|
|
150
|
-
if (className) {
|
|
151
|
-
classNames += ` ${className}`;
|
|
152
|
-
}
|
|
153
|
-
// Empty value
|
|
154
|
-
if ((0, utils_1.isDropdownEmpty)(this.props)) {
|
|
155
|
-
classNames += ' ts-SelectBox--empty';
|
|
156
|
-
}
|
|
157
|
-
return classNames;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Method returns additional component properties for accessibility.
|
|
161
|
-
*
|
|
162
|
-
* @returns {AccessibilityProps} Additional properties.
|
|
163
|
-
*/
|
|
164
|
-
getAccessibilityProps() {
|
|
165
|
-
const { readOnly, disabled } = this.props;
|
|
166
|
-
const additionalProps = {};
|
|
167
|
-
if (readOnly && !disabled) {
|
|
168
|
-
// Make dropdown focusable
|
|
169
|
-
additionalProps.tabIndex = 0;
|
|
170
|
-
additionalProps['data-is-focusable'] = true;
|
|
171
|
-
// Adjust aria attributes for readonly
|
|
172
|
-
additionalProps['aria-disabled'] = undefined;
|
|
173
|
-
additionalProps['aria-readonly'] = true;
|
|
174
|
-
}
|
|
175
|
-
else if (disabled) {
|
|
176
|
-
additionalProps.tabIndex = 0;
|
|
177
|
-
additionalProps['data-is-focusable'] = true;
|
|
178
|
-
}
|
|
179
|
-
return additionalProps;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* @returns {JSX.Element}
|
|
183
|
-
*/
|
|
184
|
-
render() {
|
|
185
|
-
const messageInfo = (0, ValidationMessage_1.getMessageInfo)(this.props);
|
|
186
|
-
const additionalProps = this.getAccessibilityProps();
|
|
187
|
-
const dropdownStyles = () => ({
|
|
188
|
-
...{
|
|
189
|
-
label: {
|
|
190
|
-
...UILabel_1.labelGlobalStyle,
|
|
191
|
-
...(this.props.disabled && {
|
|
192
|
-
opacity: '0.4'
|
|
193
|
-
}),
|
|
194
|
-
...(this.props.required && {
|
|
195
|
-
selectors: {
|
|
196
|
-
'::after': {
|
|
197
|
-
content: `' *'`,
|
|
198
|
-
color: ERROR_BORDER_COLOR,
|
|
199
|
-
paddingRight: 12
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
})
|
|
203
|
-
},
|
|
204
|
-
errorMessage: [messageInfo.style]
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
return (react_1.default.createElement(react_2.Dropdown, { calloutProps: {
|
|
208
|
-
calloutMaxHeight: 200,
|
|
209
|
-
styles: this.props.useDropdownAsMenuMinWidth ? this.getCalloutStylesForUseAsMinWidth : undefined,
|
|
210
|
-
className: 'ts-Callout ts-Callout-Dropdown'
|
|
211
|
-
}, onRenderCaretDown: this.onRenderCaretDown, onClick: this.onClick, onChange: this.onChange, onRenderTitle: this.onRenderTitle, onRenderOption: this.onRenderOption.bind(this), onRenderItem: this.onRenderItem.bind(this),
|
|
212
|
-
// Use default responsiveMode as xxxLarge, which does not enter mobile mode.
|
|
213
|
-
responsiveMode: react_2.ResponsiveMode.xxxLarge, disabled: this.props.readOnly, ...additionalProps, ...this.props, styles: dropdownStyles, className: this.getClassNames(messageInfo), errorMessage: messageInfo.message }));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
exports.UIDropdown = UIDropdown;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.UIDropdown = exports.UIDropdownMenuItemType = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const react_2 = require("@fluentui/react");
|
|
9
|
+
Object.defineProperty(exports, "UIDropdownMenuItemType", { enumerable: true, get: function () { return react_2.DropdownMenuItemType; } });
|
|
10
|
+
const UIIcon_1 = require("../UIIcon");
|
|
11
|
+
const ValidationMessage_1 = require("../../helper/ValidationMessage");
|
|
12
|
+
const UILabel_1 = require("../UILabel");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
require("./UIDropdown.scss");
|
|
15
|
+
const ERROR_BORDER_COLOR = 'var(--vscode-inputValidation-errorBorder)';
|
|
16
|
+
/**
|
|
17
|
+
* UIDropdown component
|
|
18
|
+
* based on https://developer.microsoft.com/en-us/fluentui#/controls/web/dropdown
|
|
19
|
+
*
|
|
20
|
+
* @exports
|
|
21
|
+
* @class UIDropdown
|
|
22
|
+
* @extends {React.Component<UIDropdownProps, UIDropdownState>}
|
|
23
|
+
*/
|
|
24
|
+
class UIDropdown extends react_1.default.Component {
|
|
25
|
+
/**
|
|
26
|
+
* Initializes component properties.
|
|
27
|
+
*
|
|
28
|
+
* @param {UIDropdownProps} props
|
|
29
|
+
*/
|
|
30
|
+
constructor(props) {
|
|
31
|
+
super(props);
|
|
32
|
+
this.onRenderCaretDown = () => {
|
|
33
|
+
return react_1.default.createElement(UIIcon_1.UIIcon, { iconName: "ArrowDown", style: { height: '100%' } });
|
|
34
|
+
};
|
|
35
|
+
this.onRenderTitle = (items) => {
|
|
36
|
+
if (this.props.multiSelect && this.props.onHandleRenderTitle) {
|
|
37
|
+
return this.props.onHandleRenderTitle(items);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const { multiSelectDelimiter = ', ' } = this.props;
|
|
41
|
+
if (items) {
|
|
42
|
+
const title = items.map((i) => i.text).join(multiSelectDelimiter);
|
|
43
|
+
return react_1.default.createElement(react_1.default.Fragment, null, title);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return react_1.default.createElement(react_1.default.Fragment, null, this.props.title);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
this.onClick = ( /* event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number */) => {
|
|
51
|
+
this.setState({ isOpen: !this.state.isOpen }, () => {
|
|
52
|
+
if (this.props.multiSelect && this.props.onHandleOpen) {
|
|
53
|
+
if (this.state.isOpen) {
|
|
54
|
+
this.setState({ isOpen: !this.state.isOpen });
|
|
55
|
+
this.props.onHandleOpen();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
this.onChange = (event, option, index) => {
|
|
61
|
+
if (this.props.multiSelect && this.props.onHandleChange) {
|
|
62
|
+
if (option && index) {
|
|
63
|
+
this.props.onHandleChange(option, index);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Method stops event propagation.
|
|
69
|
+
*
|
|
70
|
+
* @param {React.MouseEvent<HTMLDivElement>} event Mouse event.
|
|
71
|
+
*/
|
|
72
|
+
this.stopEventPropagation = (event) => {
|
|
73
|
+
event.stopPropagation();
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Method used as workaround to separate focus and hover.
|
|
77
|
+
* Default behaviour of fluent ui is that focus follows hover, but we need separe them.
|
|
78
|
+
*
|
|
79
|
+
* @param {IDropdownOption} [props] Dropdown props.
|
|
80
|
+
* @param {(props?: IDropdownOption) => JSX.Element | null} [defaultRender] Default option renderer.
|
|
81
|
+
* @returns {JSX.Element | null} Returns dropdown option element.
|
|
82
|
+
*/
|
|
83
|
+
this.onRenderOption = (props, defaultRender) => {
|
|
84
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
85
|
+
defaultRender?.(props),
|
|
86
|
+
react_1.default.createElement("div", { onMouseEnter: this.stopEventPropagation.bind(this), onMouseLeave: this.stopEventPropagation.bind(this), onMouseMove: this.stopEventPropagation.bind(this), className: "ts-dropdown-item-blocker" })));
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Method called on combobox item render.
|
|
90
|
+
* We should pass query to it and avoid rendering if it is hidden.
|
|
91
|
+
*
|
|
92
|
+
* @param {IComboBoxOption} props Combobox item props.
|
|
93
|
+
* @param {Function} defaultRender Combobox item default renderer.
|
|
94
|
+
* @returns {JSX.Element | null} Element to render.
|
|
95
|
+
*/
|
|
96
|
+
this.onRenderItem = (props, defaultRender) => {
|
|
97
|
+
if (defaultRender && props) {
|
|
98
|
+
if (props.title === undefined) {
|
|
99
|
+
// Apply title by default if property not provided
|
|
100
|
+
// In older fluent-ui versions it was applied by default, but behavior changed in version '8.66.2'
|
|
101
|
+
props.title = props.text;
|
|
102
|
+
}
|
|
103
|
+
return defaultRender(props);
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
};
|
|
107
|
+
this.state = {
|
|
108
|
+
options: [],
|
|
109
|
+
isOpen: false
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Method returns styles for callout to support property 'useDropdownAsMenuMinWidth'.
|
|
114
|
+
* States:
|
|
115
|
+
* 1. Min width of callout is equals to width of droipdown input box;
|
|
116
|
+
* 2. Max width equals to windows size minus 10px;
|
|
117
|
+
* 3. Width is auto - it allows to make callout wider if menu option size exceeds size of dropdown input(min-width).
|
|
118
|
+
*
|
|
119
|
+
* @param {ICalloutContentStyleProps} calloutStyleProps Current callout styles.
|
|
120
|
+
* @returns {Partial<ICalloutContentStyles>} Styles for callout.
|
|
121
|
+
*/
|
|
122
|
+
getCalloutStylesForUseAsMinWidth(calloutStyleProps) {
|
|
123
|
+
return {
|
|
124
|
+
root: {
|
|
125
|
+
minWidth: calloutStyleProps.calloutWidth,
|
|
126
|
+
width: 'auto',
|
|
127
|
+
maxWidth: 'calc(100% - 10px)'
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Method returns class names string depending on props and component state.
|
|
133
|
+
*
|
|
134
|
+
* @param {InputValidationMessageInfo} messageInfo Error/warning message if applied
|
|
135
|
+
* @returns {string} Class names of root dropdown element.
|
|
136
|
+
*/
|
|
137
|
+
getClassNames(messageInfo) {
|
|
138
|
+
const { className, readOnly, disabled } = this.props;
|
|
139
|
+
const errorSuffix = messageInfo.message ? ValidationMessage_1.MESSAGE_TYPES_CLASSNAME_MAP.get(messageInfo.type) : undefined;
|
|
140
|
+
let classNames = `ts-SelectBox${messageInfo.message ? ' ts-SelectBox--' + errorSuffix : ''}`;
|
|
141
|
+
// Readonly
|
|
142
|
+
if (readOnly && !disabled) {
|
|
143
|
+
classNames += ' ts-SelectBox--readonly';
|
|
144
|
+
}
|
|
145
|
+
// Disabled
|
|
146
|
+
if (disabled) {
|
|
147
|
+
classNames += ' ts-SelectBox--disabled';
|
|
148
|
+
}
|
|
149
|
+
// Custom external classes
|
|
150
|
+
if (className) {
|
|
151
|
+
classNames += ` ${className}`;
|
|
152
|
+
}
|
|
153
|
+
// Empty value
|
|
154
|
+
if ((0, utils_1.isDropdownEmpty)(this.props)) {
|
|
155
|
+
classNames += ' ts-SelectBox--empty';
|
|
156
|
+
}
|
|
157
|
+
return classNames;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Method returns additional component properties for accessibility.
|
|
161
|
+
*
|
|
162
|
+
* @returns {AccessibilityProps} Additional properties.
|
|
163
|
+
*/
|
|
164
|
+
getAccessibilityProps() {
|
|
165
|
+
const { readOnly, disabled } = this.props;
|
|
166
|
+
const additionalProps = {};
|
|
167
|
+
if (readOnly && !disabled) {
|
|
168
|
+
// Make dropdown focusable
|
|
169
|
+
additionalProps.tabIndex = 0;
|
|
170
|
+
additionalProps['data-is-focusable'] = true;
|
|
171
|
+
// Adjust aria attributes for readonly
|
|
172
|
+
additionalProps['aria-disabled'] = undefined;
|
|
173
|
+
additionalProps['aria-readonly'] = true;
|
|
174
|
+
}
|
|
175
|
+
else if (disabled) {
|
|
176
|
+
additionalProps.tabIndex = 0;
|
|
177
|
+
additionalProps['data-is-focusable'] = true;
|
|
178
|
+
}
|
|
179
|
+
return additionalProps;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* @returns {JSX.Element}
|
|
183
|
+
*/
|
|
184
|
+
render() {
|
|
185
|
+
const messageInfo = (0, ValidationMessage_1.getMessageInfo)(this.props);
|
|
186
|
+
const additionalProps = this.getAccessibilityProps();
|
|
187
|
+
const dropdownStyles = () => ({
|
|
188
|
+
...{
|
|
189
|
+
label: {
|
|
190
|
+
...UILabel_1.labelGlobalStyle,
|
|
191
|
+
...(this.props.disabled && {
|
|
192
|
+
opacity: '0.4'
|
|
193
|
+
}),
|
|
194
|
+
...(this.props.required && {
|
|
195
|
+
selectors: {
|
|
196
|
+
'::after': {
|
|
197
|
+
content: `' *'`,
|
|
198
|
+
color: ERROR_BORDER_COLOR,
|
|
199
|
+
paddingRight: 12
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
},
|
|
204
|
+
errorMessage: [messageInfo.style]
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return (react_1.default.createElement(react_2.Dropdown, { calloutProps: {
|
|
208
|
+
calloutMaxHeight: 200,
|
|
209
|
+
styles: this.props.useDropdownAsMenuMinWidth ? this.getCalloutStylesForUseAsMinWidth : undefined,
|
|
210
|
+
className: 'ts-Callout ts-Callout-Dropdown'
|
|
211
|
+
}, onRenderCaretDown: this.onRenderCaretDown, onClick: this.onClick, onChange: this.onChange, onRenderTitle: this.onRenderTitle, onRenderOption: this.onRenderOption.bind(this), onRenderItem: this.onRenderItem.bind(this),
|
|
212
|
+
// Use default responsiveMode as xxxLarge, which does not enter mobile mode.
|
|
213
|
+
responsiveMode: react_2.ResponsiveMode.xxxLarge, disabled: this.props.readOnly, ...additionalProps, ...this.props, styles: dropdownStyles, className: this.getClassNames(messageInfo), errorMessage: messageInfo.message }));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.UIDropdown = UIDropdown;
|
|
217
217
|
//# sourceMappingURL=UIDropdown.js.map
|