react-type-snob
Version:
Encourages good typographic details in your React app
33 lines (28 loc) • 3.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getDisplayName;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function getDisplayName(type, props) {
var displayName = 'Unknown Element';
if (type.displayName) {
// if the component has a React `displayName`, let's use it
displayName = type.displayName;
} else if (typeof type === 'string') {
// if it's a string, we'll use it straight up, then append some identifying stuff
displayName = type;
if (props) {
if (typeof props.id === 'string') {
displayName = displayName + '#' + props.id;
} else if (typeof props.className === 'string') {
displayName = [displayName].concat(_toConsumableArray(props.className.split(' '))).join('.');
}
}
} else if (typeof type === 'function' && type.name) {
// if it's a function, let's use the name if it's not blank!
displayName = type.name;
}
return displayName;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9nZXQtZGlzcGxheS1uYW1lLmpzIl0sIm5hbWVzIjpbImdldERpc3BsYXlOYW1lIiwidHlwZSIsInByb3BzIiwiZGlzcGxheU5hbWUiLCJpZCIsImNsYXNzTmFtZSIsInNwbGl0Iiwiam9pbiIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7O2tCQUF3QkEsYzs7OztBQUFULFNBQVNBLGNBQVQsQ0FBd0JDLElBQXhCLEVBQThCQyxLQUE5QixFQUFxQztBQUNsRCxNQUFJQyxjQUFjLGlCQUFsQjs7QUFFQSxNQUFJRixLQUFLRSxXQUFULEVBQXNCO0FBQ3BCO0FBQ0FBLGtCQUFjRixLQUFLRSxXQUFuQjtBQUNELEdBSEQsTUFHTyxJQUFJLE9BQU9GLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDbkM7QUFDQUUsa0JBQWNGLElBQWQ7QUFDQSxRQUFJQyxLQUFKLEVBQVc7QUFDVCxVQUFJLE9BQU9BLE1BQU1FLEVBQWIsS0FBb0IsUUFBeEIsRUFBa0M7QUFDaENELHNCQUFpQkEsV0FBakIsU0FBZ0NELE1BQU1FLEVBQXRDO0FBQ0QsT0FGRCxNQUVPLElBQUksT0FBT0YsTUFBTUcsU0FBYixLQUEyQixRQUEvQixFQUF5QztBQUM5Q0Ysc0JBQWMsQ0FBQ0EsV0FBRCw0QkFBaUJELE1BQU1HLFNBQU4sQ0FBZ0JDLEtBQWhCLENBQXNCLEdBQXRCLENBQWpCLEdBQTZDQyxJQUE3QyxDQUFrRCxHQUFsRCxDQUFkO0FBQ0Q7QUFDRjtBQUNGLEdBVk0sTUFVQSxJQUFJLE9BQU9OLElBQVAsS0FBZ0IsVUFBaEIsSUFBOEJBLEtBQUtPLElBQXZDLEVBQTZDO0FBQ2xEO0FBQ0FMLGtCQUFjRixLQUFLTyxJQUFuQjtBQUNEOztBQUVELFNBQU9MLFdBQVA7QUFDRCIsImZpbGUiOiJnZXQtZGlzcGxheS1uYW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUodHlwZSwgcHJvcHMpIHtcbiAgbGV0IGRpc3BsYXlOYW1lID0gJ1Vua25vd24gRWxlbWVudCc7XG5cbiAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBhIFJlYWN0IGBkaXNwbGF5TmFtZWAsIGxldCdzIHVzZSBpdFxuICAgIGRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBpZiBpdCdzIGEgc3RyaW5nLCB3ZSdsbCB1c2UgaXQgc3RyYWlnaHQgdXAsIHRoZW4gYXBwZW5kIHNvbWUgaWRlbnRpZnlpbmcgc3R1ZmZcbiAgICBkaXNwbGF5TmFtZSA9IHR5cGU7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfSMke3Byb3BzLmlkfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRpc3BsYXlOYW1lID0gW2Rpc3BsYXlOYW1lLCAuLi5wcm9wcy5jbGFzc05hbWUuc3BsaXQoJyAnKV0uam9pbignLicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlLm5hbWUpIHtcbiAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24sIGxldCdzIHVzZSB0aGUgbmFtZSBpZiBpdCdzIG5vdCBibGFuayFcbiAgICBkaXNwbGF5TmFtZSA9IHR5cGUubmFtZTtcbiAgfVxuXG4gIHJldHVybiBkaXNwbGF5TmFtZTtcbn1cbiJdfQ==