Skip to content

Commit 531c93f

Browse files
committed
Implementation of #464
1 parent d9932f8 commit 531c93f

File tree

5 files changed

+73
-29
lines changed

5 files changed

+73
-29
lines changed

docs/documentation/docs/controls/TaxonomyPicker.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ The TaxonomyPicker control can be configured with the following properties:
117117
| termActions | ITermActions | no | Allows to execute custom action on the term like e.g. get other term labelsITermActions. |
118118
| hideTagsNotAvailableForTagging | boolean | no | Specifies if the tags marked with 'Available for tagging' = false should be hidden |
119119
| hideDeprecatedTags | boolean | no | Specifies if deprecated tags should be hidden |
120+
| placeholder | string | no | Short text hint to display in empty picker |
120121

121122
Interface `IPickerTerm`
122123

src/controls/taxonomyPicker/ITaxonomyPicker.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ export interface ITaxonomyPickerProps {
7474
*/
7575
hideDeprecatedTags?: boolean;
7676

77+
/**
78+
* Placeholder to be displayed in an empty term picker
79+
*/
80+
placeholder?: string;
81+
7782
/**
7883
* The method is used to get the validation error message and determine whether the input value is valid or not.
7984
*

src/controls/taxonomyPicker/TaxonomyPicker.tsx

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -260,37 +260,58 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
260260
* Renders the SPListpicker controls with Office UI Fabric
261261
*/
262262
public render(): JSX.Element {
263+
const {
264+
label,
265+
context,
266+
disabled,
267+
isTermSetSelectable,
268+
allowMultipleSelections,
269+
disabledTermIds,disableChildrenOfDisabledParents,
270+
placeholder,
271+
panelTitle,
272+
anchorId,
273+
termActions
274+
} = this.props;
275+
276+
const {
277+
activeNodes,
278+
errorMessage,
279+
openPanel,
280+
loaded,
281+
termSetAndTerms
282+
} = this.state;
263283

264284
return (
265285
<div>
266-
{this.props.label && <Label>{this.props.label}</Label>}
286+
{label && <Label>{label}</Label>}
267287
<div className={styles.termField}>
268288
<div className={styles.termFieldInput}>
269289
<TermPicker
270-
context={this.props.context}
290+
context={context}
271291
termPickerHostProps={this.props}
272-
disabled={this.props.disabled}
273-
value={this.state.activeNodes}
274-
isTermSetSelectable={this.props.isTermSetSelectable}
292+
disabled={disabled}
293+
value={activeNodes}
294+
isTermSetSelectable={isTermSetSelectable}
275295
onChanged={this.termsFromPickerChanged}
276-
allowMultipleSelections={this.props.allowMultipleSelections}
277-
disabledTermIds={this.props.disabledTermIds}
278-
disableChildrenOfDisabledParents={this.props.disableChildrenOfDisabledParents} />
296+
allowMultipleSelections={allowMultipleSelections}
297+
disabledTermIds={disabledTermIds}
298+
disableChildrenOfDisabledParents={disableChildrenOfDisabledParents}
299+
placeholder={placeholder} />
279300
</div>
280301
<div className={styles.termFieldButton}>
281-
<IconButton disabled={this.props.disabled} iconProps={{ iconName: 'Tag' }} onClick={this.onOpenPanel} />
302+
<IconButton disabled={disabled} iconProps={{ iconName: 'Tag' }} onClick={this.onOpenPanel} />
282303
</div>
283304
</div>
284305

285-
<FieldErrorMessage errorMessage={this.state.errorMessage} />
306+
<FieldErrorMessage errorMessage={errorMessage} />
286307

287308
<Panel
288-
isOpen={this.state.openPanel}
309+
isOpen={openPanel}
289310
hasCloseButton={true}
290311
onDismiss={this.onClosePanel}
291312
isLightDismiss={true}
292313
type={PanelType.medium}
293-
headerText={this.props.panelTitle}
314+
headerText={panelTitle}
294315
onRenderFooterContent={() => {
295316
return (
296317
<div className={styles.actions}>
@@ -302,26 +323,26 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
302323

303324
{
304325
/* Show spinner in the panel while retrieving terms */
305-
this.state.loaded === false ? <Spinner type={SpinnerType.normal} /> : ''
326+
loaded === false ? <Spinner type={SpinnerType.normal} /> : ''
306327
}
307328
{
308-
this.state.loaded === true && this.state.termSetAndTerms && (
309-
<div key={this.state.termSetAndTerms.Id} >
310-
<h3>{this.state.termSetAndTerms.Name}</h3>
311-
<TermParent anchorId={this.props.anchorId}
329+
loaded === true && termSetAndTerms && (
330+
<div key={termSetAndTerms.Id} >
331+
<h3>{termSetAndTerms.Name}</h3>
332+
<TermParent anchorId={anchorId}
312333
autoExpand={null}
313-
termset={this.state.termSetAndTerms}
314-
isTermSetSelectable={this.props.isTermSetSelectable}
334+
termset={termSetAndTerms}
335+
isTermSetSelectable={isTermSetSelectable}
315336
termSetSelectedChange={this.termSetSelectedChange}
316-
activeNodes={this.state.activeNodes}
317-
disabledTermIds={this.props.disabledTermIds}
318-
disableChildrenOfDisabledParents={this.props.disableChildrenOfDisabledParents}
337+
activeNodes={activeNodes}
338+
disabledTermIds={disabledTermIds}
339+
disableChildrenOfDisabledParents={disableChildrenOfDisabledParents}
319340
changedCallback={this.termsChanged}
320-
multiSelection={this.props.allowMultipleSelections}
341+
multiSelection={allowMultipleSelections}
321342
spTermService={this.termsService}
322343

323344
updateTaxonomyTree={this.updateTaxonomyTree}
324-
termActions={this.props.termActions}
345+
termActions={termActions}
325346
/>
326347
</div>
327348
)

src/controls/taxonomyPicker/TermPicker.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface ITermPickerProps {
2828
isTermSetSelectable?: boolean;
2929
disabledTermIds?: string[];
3030
disableChildrenOfDisabledParents?: boolean;
31+
placeholder?: string;
3132

3233
onChanged: (items: IPickerTerm[]) => void;
3334
}
@@ -188,19 +189,34 @@ export default class TermPicker extends React.Component<ITermPickerProps, ITermP
188189
* Render method
189190
*/
190191
public render(): JSX.Element {
192+
const {
193+
disabled,
194+
value,
195+
onChanged,
196+
allowMultipleSelections,
197+
placeholder
198+
} = this.props;
199+
200+
const {
201+
terms
202+
} = this.state;
203+
191204
return (
192205
<div>
193206
<TermBasePicker
194-
disabled={this.props.disabled}
207+
disabled={disabled}
195208
onResolveSuggestions={this.onFilterChanged}
196209
onRenderSuggestionsItem={this.onRenderSuggestionsItem}
197210
getTextFromItem={this.onGetTextFromItem}
198211
onRenderItem={this.onRenderItem}
199-
defaultSelectedItems={this.props.value}
200-
selectedItems={this.state.terms}
201-
onChange={this.props.onChanged}
202-
itemLimit={!this.props.allowMultipleSelections ? 1 : undefined}
212+
defaultSelectedItems={value}
213+
selectedItems={terms}
214+
onChange={onChanged}
215+
itemLimit={!allowMultipleSelections ? 1 : undefined}
203216
className={styles.termBasePicker}
217+
inputProps={{
218+
placeholder: placeholder
219+
}}
204220
/>
205221
</div>
206222
);

src/webparts/controlsTest/components/ControlsTest.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
753753
context={this.props.context}
754754
onChange={this.onServicePickerChange}
755755
isTermSetSelectable={false}
756+
placeholder="Select service"
756757
/>
757758

758759
<TaxonomyPicker

0 commit comments

Comments
 (0)