Skip to content

Commit 76ded80

Browse files
Changed to termPickerProps to allow more styling
1 parent 57794c4 commit 76ded80

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

docs/documentation/docs/controls/ModernTaxonomyPicker.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ The ModernTaxonomyPicker control can be configured with the following properties
6868
| placeHolder | string | no | Short text hint to display in picker. |
6969
| required | boolean | no | Specifies if to display an asterisk near the label. Default value is false. |
7070
| customPanelWidth | number | no | Custom panel width in pixels. |
71-
| onRenderItem | function | no | Modify the display of the items in the picker. |
72-
| onRenderSuggestionsItem | function | no | Modify the display of the items in the pickers suggestions list. |
71+
| termPickerProps | IModernTermPickerProps | no | Custom properties for the term picker (More info: [IBasePickerProps interface](https://developer.microsoft.com/en-us/fluentui#/controls/web/pickers#IBasePickerProps)). |
7372
| themeVariant | IReadonlyTheme | no | The current loaded SharePoint theme/section background (More info: [Supporting section backgrounds](https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/guidance/supporting-section-backgrounds)). |
7473

7574
![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/TaxonomyPicker)

src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,12 @@ import { ITermInfo,
3333
} from '@pnp/sp/taxonomy';
3434
import { TermItemSuggestion } from './termItem/TermItemSuggestion';
3535
import { ModernTermPicker } from './modernTermPicker/ModernTermPicker';
36-
import { ITermItemProps } from './modernTermPicker/ModernTermPicker.types';
36+
import { IModernTermPickerProps, ITermItemProps } from './modernTermPicker/ModernTermPicker.types';
3737
import { TermItem } from './termItem/TermItem';
3838
import { IReadonlyTheme } from "@microsoft/sp-component-base";
39+
import { isUndefined } from 'lodash';
40+
41+
export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
3942

4043
export interface IModernTaxonomyPickerProps {
4144
allowMultipleSelections?: boolean;
@@ -53,6 +56,7 @@ export interface IModernTaxonomyPickerProps {
5356
placeHolder?: string;
5457
customPanelWidth?: number;
5558
themeVariant?: IReadonlyTheme;
59+
termPickerProps?: Optional<IModernTermPickerProps, 'onResolveSuggestions'>;
5660
}
5761

5862
export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
@@ -181,27 +185,28 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
181185
const tooltipId = useId('tooltip');
182186
const hostStyles: Partial<ITooltipHostStyles> = { root: { display: 'inline-block' } };
183187
const addTermButtonStyles: IButtonStyles = {rootHovered: {backgroundColor: "inherit"}, rootPressed: {backgroundColor: "inherit"}};
184-
const tagPickerStyles: IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles> = { input: {minheight: 34}, text: {minheight: 34} };
188+
const termPickerStyles: IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles> = { input: {minheight: 34}, text: {minheight: 34} };
185189

186190
return (
187191
<div className={styles.modernTaxonomyPicker}>
188192
{props.label && <Label required={props.required}>{props.label}</Label>}
189193
<div className={styles.termField}>
190194
<div className={styles.termFieldInput}>
191195
<ModernTermPicker
196+
{...props.termPickerProps}
192197
removeButtonAriaLabel={strings.ModernTaxonomyPickerRemoveButtonText}
193-
onResolveSuggestions={onResolveSuggestions}
198+
onResolveSuggestions={props.termPickerProps?.onResolveSuggestions ?? onResolveSuggestions}
194199
itemLimit={props.allowMultipleSelections ? undefined : 1}
195200
selectedItems={selectedOptions}
196201
disabled={props.disabled}
197-
styles={tagPickerStyles}
202+
styles={props.termPickerProps?.styles ?? termPickerStyles}
198203
onChange={(itms?: ITermInfo[]) => {
199204
setSelectedOptions(itms || []);
200205
setSelectedPanelOptions(itms || []);
201206
}}
202207
getTextFromItem={getTextFromItem}
203-
pickerSuggestionsProps={{noResultsFoundText: strings.ModernTaxonomyPickerNoResultsFound}}
204-
inputProps={{
208+
pickerSuggestionsProps={props.termPickerProps?.pickerSuggestionsProps ?? {noResultsFoundText: strings.ModernTaxonomyPickerNoResultsFound}}
209+
inputProps={props.termPickerProps?.inputProps ?? {
205210
'aria-label': props.placeHolder || strings.ModernTaxonomyPickerDefaultPlaceHolder,
206211
placeholder: props.placeHolder || strings.ModernTaxonomyPickerDefaultPlaceHolder
207212
}}
@@ -248,7 +253,7 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
248253
<div key={props.termSetId} >
249254
<TaxonomyPanelContents
250255
allowMultipleSelections={props.allowMultipleSelections}
251-
onResolveSuggestions={onResolveSuggestions}
256+
onResolveSuggestions={props.termPickerProps?.onResolveSuggestions ?? onResolveSuggestions}
252257
onLoadMoreData={taxonomyService.getTerms}
253258
anchorTermInfo={currentAnchorTermInfo}
254259
termSetInfo={currentTermSetInfo}
@@ -264,6 +269,7 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
264269
getTextFromItem={getTextFromItem}
265270
languageTag={currentLanguageTag}
266271
themeVariant={props.themeVariant}
272+
termPickerProps={props.termPickerProps}
267273
/>
268274
</div>
269275
)

src/controls/modernTaxonomyPicker/taxonomyPanelContents/TaxonomyPanelContents.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ import * as strings from 'ControlStrings';
4747
import { useForceUpdate } from '@uifabric/react-hooks';
4848
import { ModernTermPicker } from '../modernTermPicker/ModernTermPicker';
4949
import { IReadonlyTheme } from "@microsoft/sp-component-base";
50+
import { IModernTermPickerProps } from '../modernTermPicker/ModernTermPicker.types';
51+
import { Optional } from '../ModernTaxonomyPicker';
5052

5153
export interface ITaxonomyPanelContentsProps {
5254
context: BaseComponentContext;
@@ -66,6 +68,7 @@ export interface ITaxonomyPanelContentsProps {
6668
getTextFromItem: (item: ITermInfo, currentValue?: string) => string;
6769
languageTag: string;
6870
themeVariant?: IReadonlyTheme;
71+
termPickerProps?: Optional<IModernTermPickerProps, 'onResolveSuggestions'>;
6972
}
7073

7174
export function TaxonomyPanelContents(props: ITaxonomyPanelContentsProps): React.ReactElement<ITaxonomyPanelContentsProps> {
@@ -423,27 +426,28 @@ export function TaxonomyPanelContents(props: ITaxonomyPanelContentsProps): React
423426
}
424427
};
425428

426-
const tagPickerStyles: IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles> = { root: {paddingTop: 4, paddingBottom: 4, paddingRight: 4, minheight: 34}, input: {minheight: 34}, text: { minheight: 34, borderStyle: 'none', borderWidth: '0px' } };
429+
const termPickerStyles: IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles> = { root: {paddingTop: 4, paddingBottom: 4, paddingRight: 4, minheight: 34}, input: {minheight: 34}, text: { minheight: 34, borderStyle: 'none', borderWidth: '0px' } };
427430

428431
return (
429432
<div className={styles.taxonomyPanelContents}>
430433
<div className={styles.taxonomyTreeSelector}>
431434
<div>
432435
<ModernTermPicker
436+
{...props.termPickerProps}
433437
removeButtonAriaLabel={strings.ModernTaxonomyPickerRemoveButtonText}
434-
onResolveSuggestions={props.onResolveSuggestions}
438+
onResolveSuggestions={props.termPickerProps?.onResolveSuggestions ?? props.onResolveSuggestions}
435439
itemLimit={props.allowMultipleSelections ? undefined : 1}
436440
selectedItems={props.selectedPanelOptions}
437-
styles={tagPickerStyles}
441+
styles={props.termPickerProps?.styles ?? termPickerStyles}
438442
onChange={onPickerChange}
439443
getTextFromItem={props.getTextFromItem}
440-
pickerSuggestionsProps={{noResultsFoundText: strings.ModernTaxonomyPickerNoResultsFound}}
441-
inputProps={{
444+
pickerSuggestionsProps={props.termPickerProps?.pickerSuggestionsProps ?? {noResultsFoundText: strings.ModernTaxonomyPickerNoResultsFound}}
445+
inputProps={props.termPickerProps?.inputProps ?? {
442446
'aria-label': props.placeHolder || strings.ModernTaxonomyPickerDefaultPlaceHolder,
443447
placeholder: props.placeHolder || strings.ModernTaxonomyPickerDefaultPlaceHolder
444448
}}
445-
onRenderSuggestionsItem={props.onRenderSuggestionsItem}
446-
onRenderItem={props.onRenderItem}
449+
onRenderSuggestionsItem={props.termPickerProps?.onRenderSuggestionsItem ?? props.onRenderSuggestionsItem}
450+
onRenderItem={props.onRenderItem ?? props.onRenderItem}
447451
themeVariant={props.themeVariant}
448452
/>
449453
</div>

0 commit comments

Comments
 (0)