When trying to add some additional types i ran into the following.
I tried adding a typedef to the defaultProps in the following snippet. I ran into the problem that the createGenericItem does not use the same signature as the one expected by the BasePickerProps
/**
* Standard People Picker.
*/
export class NormalPeoplePicker extends BasePeoplePicker {
public static defaultProps = {
onRenderItem: (props: IPeoplePickerItemProps) => <SelectedItemDefault {...props} />,
onRenderSuggestionsItem: (props: IPersonaProps, itemProps?: IBasePickerSuggestionsProps) => SuggestionItemNormal({ ...props }, { ...itemProps }),
createGenericItem: createGenericItem
};
}
The expected signature for the createGenericItem is the following.
/**
* Function that specifies how arbitrary text entered into the well is handled.
*/
createGenericItem?: (input: string, ValidationState: ValidationState) => ISuggestionModel<T>;
The returned object should be an ISuggestionModel which has the following interface.
export interface ISuggestionModel<T> {
item: T;
selected: boolean;
ariaLabel?: string;
}
However the function createGenericItem returns something wildly different, that does not have any properties in common with the expected ISuggestionModel.
export function createGenericItem(name: string, currentValidationState: ValidationState) {
const personaToConvert = {
key: name,
primaryText: name,
imageInitials: '!',
ValidationState: currentValidationState
};
if (currentValidationState !== ValidationState.warning) {
personaToConvert.imageInitials = getInitials(name, getRTL());
}
return personaToConvert;
}
It seems we do some juggling to make sure that the item use in the end is of the correct interface, but it seems we could do this somewhat cleaner.
@autobind
private _ensureSuggestionModel(
suggestion: ISuggestionModel<T> | T
): ISuggestionModel<T> {
if (this._isSuggestionModel(suggestion)) {
return suggestion as ISuggestionModel<T>;
} else {
return {
item: suggestion,
selected: false,
ariaLabel: (<any>suggestion).name || (<any>suggestion).primaryText
} as ISuggestionModel<T>;
}
}
When trying to add some additional types i ran into the following.
I tried adding a typedef to the
defaultPropsin the following snippet. I ran into the problem that thecreateGenericItemdoes not use the same signature as the one expected by theBasePickerPropsThe expected signature for the createGenericItem is the following.
The returned object should be an
ISuggestionModelwhich has the following interface.However the function
createGenericItemreturns something wildly different, that does not have any properties in common with the expectedISuggestionModel.It seems we do some juggling to make sure that the item use in the end is of the correct interface, but it seems we could do this somewhat cleaner.