office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
124 lines • 7.27 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var Utilities_1 = require("../../../Utilities");
var Styling_1 = require("../../../Styling");
var index_1 = require("../PersonaPresence/index");
var Icon_1 = require("../../../Icon");
var Image_1 = require("../../../Image");
var Persona_types_1 = require("../Persona.types");
var PersonaInitialsColor_1 = require("../PersonaInitialsColor");
var getClassNames = Utilities_1.classNamesFunction();
var SIZE_TO_PIXELS = (_a = {},
_a[Persona_types_1.PersonaSize.tiny] = 20,
_a[Persona_types_1.PersonaSize.extraExtraSmall] = 24,
_a[Persona_types_1.PersonaSize.extraSmall] = 28,
_a[Persona_types_1.PersonaSize.small] = 40,
_a[Persona_types_1.PersonaSize.regular] = 48,
_a[Persona_types_1.PersonaSize.large] = 72,
_a[Persona_types_1.PersonaSize.extraLarge] = 100,
_a[Persona_types_1.PersonaSize.size24] = 24,
_a[Persona_types_1.PersonaSize.size28] = 28,
_a[Persona_types_1.PersonaSize.size10] = 20,
_a[Persona_types_1.PersonaSize.size32] = 32,
_a[Persona_types_1.PersonaSize.size40] = 40,
_a[Persona_types_1.PersonaSize.size48] = 48,
_a[Persona_types_1.PersonaSize.size72] = 72,
_a[Persona_types_1.PersonaSize.size100] = 100,
_a);
/**
* PersonaCoin with no default styles.
* [Use the `getStyles` API to add your own styles.](https://github.com/OfficeDev/office-ui-fabric-react/wiki/Styling)
*/
var PersonaCoinBase = /** @class */ (function (_super) {
tslib_1.__extends(PersonaCoinBase, _super);
function PersonaCoinBase(props) {
var _this = _super.call(this, props) || this;
_this._onRenderCoin = function (props) {
var _a = _this.props, coinSize = _a.coinSize, styles = _a.styles, imageUrl = _a.imageUrl, imageAlt = _a.imageAlt, imageShouldFadeIn = _a.imageShouldFadeIn, imageShouldStartVisible = _a.imageShouldStartVisible, theme = _a.theme, showUnknownPersonaCoin = _a.showUnknownPersonaCoin;
var size = _this.props.size;
var classNames = getClassNames(styles, {
theme: theme,
size: size,
showUnknownPersonaCoin: showUnknownPersonaCoin
});
return (React.createElement(Image_1.Image, { className: classNames.image, imageFit: Image_1.ImageFit.cover, src: imageUrl, width: coinSize || SIZE_TO_PIXELS[size], height: coinSize || SIZE_TO_PIXELS[size], alt: imageAlt, shouldFadeIn: imageShouldFadeIn, shouldStartVisible: imageShouldStartVisible, onLoadingStateChange: _this._onPhotoLoadingStateChange }));
};
_this._onRenderInitials = function (props) {
var imageInitials = props.imageInitials;
var allowPhoneInitials = props.allowPhoneInitials, showUnknownPersonaCoin = props.showUnknownPersonaCoin;
if (showUnknownPersonaCoin) {
return React.createElement(Icon_1.Icon, { iconName: 'Help' });
}
var isRTL = Utilities_1.getRTL();
imageInitials = imageInitials || Utilities_1.getInitials(_this._getText(), isRTL, allowPhoneInitials);
return (imageInitials !== ''
? React.createElement("span", null, imageInitials)
: React.createElement(Icon_1.Icon, { iconName: 'Contact' }));
};
_this._onPhotoLoadingStateChange = function (loadState) {
_this.setState({
isImageLoaded: loadState === Image_1.ImageLoadState.loaded,
isImageError: loadState === Image_1.ImageLoadState.error
});
_this.props.onPhotoLoadingStateChange && _this.props.onPhotoLoadingStateChange(loadState);
};
_this._warnDeprecations({ 'primaryText': 'text' });
_this.state = {
isImageLoaded: false,
isImageError: false
};
return _this;
}
PersonaCoinBase.prototype.render = function () {
var _a = this.props, className = _a.className, coinProps = _a.coinProps, showUnknownPersonaCoin = _a.showUnknownPersonaCoin, coinSize = _a.coinSize, styles = _a.styles, imageUrl = _a.imageUrl, _b = _a.onRenderCoin, onRenderCoin = _b === void 0 ? this._onRenderCoin : _b, _c = _a.onRenderInitials, onRenderInitials = _c === void 0 ? this._onRenderInitials : _c, presence = _a.presence, theme = _a.theme;
var size = this.props.size;
var divProps = Utilities_1.getNativeProps(this.props, Utilities_1.divProperties);
var coinSizeStyle = coinSize ? { width: coinSize, height: coinSize } : undefined;
var personaPresenceProps = {
coinSize: coinSize,
presence: presence,
size: size,
theme: theme,
};
// Use getStyles from props, or fall back to getStyles from styles file.
var classNames = getClassNames(styles, {
theme: theme,
className: (coinProps && coinProps.className) ? coinProps.className : className,
size: size,
showUnknownPersonaCoin: showUnknownPersonaCoin,
});
return (React.createElement("div", tslib_1.__assign({}, divProps, { className: classNames.coin }),
(size !== Persona_types_1.PersonaSize.size10 && size !== Persona_types_1.PersonaSize.tiny)
? (React.createElement("div", tslib_1.__assign({}, coinProps, { className: classNames.imageArea, style: coinSizeStyle }),
!this.state.isImageLoaded &&
(!imageUrl || this.state.isImageError) &&
(React.createElement("div", { className: Styling_1.mergeStyles(classNames.initials, !showUnknownPersonaCoin && { backgroundColor: PersonaInitialsColor_1.initialsColorPropToColorCode(this.props) }), style: coinSizeStyle, "aria-hidden": 'true' }, onRenderInitials(this.props, this._onRenderInitials))),
onRenderCoin(this.props, this._onRenderCoin),
React.createElement(index_1.PersonaPresence, tslib_1.__assign({}, personaPresenceProps)))) : ( // Otherwise, render just PersonaPresence.
this.props.presence
? React.createElement(index_1.PersonaPresence, tslib_1.__assign({}, personaPresenceProps))
: // Just render Contact Icon if there isn't a Presence prop.
React.createElement(Icon_1.Icon, { iconName: 'Contact', className: classNames.size10WithoutPresenceIcon })),
this.props.children));
};
/**
* Deprecation helper for getting text.
*/
PersonaCoinBase.prototype._getText = function () {
return this.props.text || this.props.primaryText || '';
};
PersonaCoinBase.defaultProps = {
size: Persona_types_1.PersonaSize.size48,
presence: Persona_types_1.PersonaPresence.none,
imageAlt: '',
};
PersonaCoinBase = tslib_1.__decorate([
Utilities_1.customizable('PersonaCoin', ['theme'])
], PersonaCoinBase);
return PersonaCoinBase;
}(Utilities_1.BaseComponent));
exports.PersonaCoinBase = PersonaCoinBase;
var _a;
//# sourceMappingURL=PersonaCoin.base.js.map