UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

66 lines (65 loc) 3.81 kB
import { __assign } from "tslib"; import "../../CommonImports"; import "../../Core/core.css"; import "./Dropdown.css"; import * as React from "react"; import { ObservableLike } from '../../Core/Observable'; import { Button } from '../../Button'; import { FocusWithin } from '../../FocusWithin'; import { FocusZone, FocusZoneContext, FocusZoneDirection } from '../../FocusZone'; import { Observer } from '../../Observer'; import { css } from '../../Util'; import { DropdownCallout } from "./DropdownCallout"; export function WithPivots(props) { var renderCallout = function (calloutProps) { return (React.createElement(DropdownCallout, __assign({}, calloutProps, props.calloutProps, { onFilterTextChanged: function (e, value) { calloutProps.onFilterTextChanged && calloutProps.onFilterTextChanged(e, value); props.calloutProps && props.calloutProps.onFilterTextChanged && props.calloutProps.onFilterTextChanged(e, value); }, renderBeforeContent: function () { return renderPivots(props); } }))); }; return (React.createElement(Observer, { selectedPivot: props.selectedPivot }, function () { var selectedPivot = getSelectedPivot(props); return (React.createElement(Observer, { userFilteredItems: selectedPivot.userFilteredItems }, function () { var newProps = { actions: selectedPivot.actions, filterByText: selectedPivot.filterByText, userFilteredItems: selectedPivot.userFilteredItems || selectedPivot.items, filteredNoResultsText: selectedPivot.filteredNoResultsText, filterPlaceholderText: selectedPivot.filterPlaceholderText, noItemsText: selectedPivot.noItemsText, renderCallout: renderCallout, showFilterBox: selectedPivot.showFilterBox }; return props.children(newProps); })); })); } function onPivotClick(pivot, props) { if (props.onPivotClicked) { props.onPivotClicked(pivot); } } function getSelectedPivot(props) { var selectedPivot; if (props.selectedPivot) { var selectedPivotId_1 = ObservableLike.getValue(props.selectedPivot); selectedPivot = props.pivots.find(function (pivot) { return pivot.id === selectedPivotId_1; }); } return selectedPivot || props.pivots[0]; } function renderPivots(props) { if (props.pivots.length < 2) { return null; } return (React.createElement(FocusZoneContext.Consumer, null, function (verticalContext) { return (React.createElement(FocusZone, { direction: FocusZoneDirection.Horizontal }, React.createElement("div", { role: "tablist" }, React.createElement(FocusWithin, null, function (focusStatus) { return props.pivots.map(function (pivot, index) { var selected = props.selectedPivot !== undefined && pivot.id === ObservableLike.getValue(props.selectedPivot); return (React.createElement(Button, { ariaSelected: selected, ariaSetSize: props.pivots.length, ariaPosInSet: index + 1, className: "bolt-dropdown-pivot", key: pivot.id, subtle: true, onBlur: focusStatus.onBlur, onClick: function () { return onPivotClick(pivot, props); }, onFocus: focusStatus.onFocus, role: "tab", focusZoneId: index === 0 && !focusStatus.hasFocus ? verticalContext.focuszoneId : undefined }, React.createElement("span", { className: css(props.selectedPivot && pivot.id === ObservableLike.getValue(props.selectedPivot) && "bolt-dropdown-pivot-selected") }, pivot.name || pivot.id))); }); })))); })); }