@uifabric/experiments
Version:
Experimental React components for building experiences for Microsoft 365.
61 lines • 5.67 kB
JavaScript
import * as React from 'react';
import { classNamesFunction, css } from '../../../Utilities';
import { FloatingSuggestionsItemMemo } from '../FloatingSuggestionsItem/FloatingSuggestionsItem';
import { getStyles } from './FloatingSuggestionsList.styles';
import { FloatingSuggestionsHeaderFooterItem } from '../FloatingSuggestionsHeaderFooterItem/FloatingSuggestionsHeaderFooterItem';
var getClassNames = classNamesFunction();
export var FloatingSuggestionsList = function (props) {
var classNames = getClassNames(getStyles);
var className = props.className, suggestionItems = props.suggestionItems, onRenderNoResultFound = props.onRenderNoResultFound, ariaLabel = props.ariaLabel, noResultsFoundText = props.noResultsFoundText;
var hasNoSuggestions = !suggestionItems || !suggestionItems.length;
var noResults = function () {
return noResultsFoundText ? React.createElement("div", { className: classNames.noSuggestions }, noResultsFoundText) : null;
};
var renderHeader = function () {
var onRenderHeader = props.onRenderHeader, suggestionsHeaderText = props.suggestionsHeaderText, headerItemsProps = props.headerItemsProps, selectedHeaderIndex = props.selectedHeaderIndex, suggestionsHeaderContainerAriaLabel = props.suggestionsHeaderContainerAriaLabel;
if (headerItemsProps) {
return (React.createElement("div", { className: css('ms-Suggestions-headerContainer', classNames.suggestionsContainer), id: "suggestionHeader-list", role: "list", "aria-label": suggestionsHeaderContainerAriaLabel }, headerItemsProps.map(function (headerItemProps, index) {
var isSelected = selectedHeaderIndex !== -1 && selectedHeaderIndex === index;
return headerItemProps.shouldShow() ? (React.createElement("div", { id: 'sug-header' + index, key: 'sug-header' + index, role: "listitem", "aria-label": headerItemProps.ariaLabel },
React.createElement(FloatingSuggestionsHeaderFooterItem, { id: 'sug-header-item' + index, isSelected: isSelected, renderItem: headerItemProps.renderItem, onExecute: headerItemProps.onExecute, className: headerItemProps.className }))) : null;
})));
}
if (onRenderHeader) {
return onRenderHeader(suggestionItems);
}
return suggestionsHeaderText ? React.createElement("div", { className: classNames.title }, suggestionsHeaderText) : null;
};
var renderFooter = function () {
var onRenderFooter = props.onRenderFooter, footerItemsProps = props.footerItemsProps, selectedFooterIndex = props.selectedFooterIndex, suggestionsFooterContainerAriaLabel = props.suggestionsFooterContainerAriaLabel;
if (footerItemsProps) {
return (React.createElement("div", { className: css('ms-Suggestions-footerContainer', classNames.suggestionsContainer), id: "suggestionFooter-list", role: "list", "aria-label": suggestionsFooterContainerAriaLabel }, footerItemsProps.map(function (footerItemProps, index) {
var isSelected = selectedFooterIndex !== -1 && selectedFooterIndex === index;
return footerItemProps.shouldShow() ? (React.createElement("div", { id: 'sug-footer' + index, key: 'sug-footer' + index, role: "listitem", "aria-label": footerItemProps.ariaLabel },
React.createElement(FloatingSuggestionsHeaderFooterItem, { id: 'sug-footer-item' + index, isSelected: isSelected, renderItem: footerItemProps.renderItem, onExecute: footerItemProps.onExecute, className: footerItemProps.className }))) : null;
})));
}
if (onRenderFooter) {
return onRenderFooter(suggestionItems);
}
return null;
};
var renderSuggestions = function () {
if (suggestionItems.length === 0) {
return null;
}
var onRenderItem = props.onRenderItem, suggestionsItemClassName = props.suggestionsItemClassName, removeItemAriaLabel = props.removeItemAriaLabel, showSuggestionRemoveButton = props.showSuggestionRemoveButton, suggestionsContainerAriaLabel = props.suggestionsContainerAriaLabel, onSuggestionRemove = props.onSuggestionRemove, onItemClick = props.onItemClick, selectedSuggestionIndex = props.selectedSuggestionIndex, pickerWidth = props.pickerWidth;
return (React.createElement("div", { className: classNames.suggestionsContainer, role: "list", "aria-label": suggestionsContainerAriaLabel }, suggestionItems.map(function (suggestionItem, index) { return (React.createElement("div", { key: "FloatingSuggestionsItemKey-" + index, id: "FloatingSuggestionsItemId-" + index, role: "listitem", "aria-label": suggestionItem.ariaLabel, style: {
width: pickerWidth ? pickerWidth : 'auto',
} },
React.createElement(FloatingSuggestionsItemMemo, { item: suggestionItem.item, onClick: onItemClick, isSelected: index === selectedSuggestionIndex, onRemoveItem: onSuggestionRemove, onRenderSuggestion: onRenderItem, className: suggestionsItemClassName, removeButtonAriaLabel: removeItemAriaLabel, showRemoveButton: suggestionItem.showRemoveButton || showSuggestionRemoveButton, displayText: suggestionItem.displayText, key: suggestionItem.key, id: suggestionItem.id }))); })));
};
return (React.createElement("div", { className: css(classNames.root, className ? className : ''), "aria-label": ariaLabel },
renderHeader(),
hasNoSuggestions
? onRenderNoResultFound
? onRenderNoResultFound(undefined, noResults)
: noResults()
: renderSuggestions(),
renderFooter()));
};
//# sourceMappingURL=FloatingSuggestionsList.js.map