UNPKG

ndla-ui

Version:

UI component library for NDLA.

207 lines (178 loc) 8.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _reactBemHelper = require('react-bem-helper'); var _reactBemHelper2 = _interopRequireDefault(_reactBemHelper); var _common = require('ndla-icons/common'); var _ndlaUi = require('ndla-ui'); var _ndlaI18n = require('ndla-i18n'); var _shapes = require('../shapes'); var _TopicIntroductionShortcuts = require('./TopicIntroductionShortcuts'); var _TopicIntroductionShortcuts2 = _interopRequireDefault(_TopicIntroductionShortcuts); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /** * Copyright (c) 2016-present, NDLA. * * This source code is licensed under the GPLv3 license found in the * LICENSE file in the root directory of this source tree. * */ var topicClasses = new _reactBemHelper2.default({ prefix: 'c-', name: 'topic-introduction', outputIsString: true }); var TopicIntroduction = function TopicIntroduction(_ref) { var toTopic = _ref.toTopic, topic = _ref.topic, subjectPage = _ref.subjectPage, shortcuts = _ref.shortcuts, messages = _ref.messages, shortcutAlwaysExpanded = _ref.shortcutAlwaysExpanded, additional = _ref.additional, showAdditionalCores = _ref.showAdditionalCores, id = _ref.id; var contentTypeDescription = additional ? messages.tooltipAdditionalTopic : messages.tooltipCoreTopic; return _react2.default.createElement( 'li', { className: topicClasses('item', { subjectPage: subjectPage, additional: additional, showAdditionalCores: showAdditionalCores }) }, _react2.default.createElement( 'article', { className: topicClasses('body') }, _react2.default.createElement( 'div', { className: topicClasses('heading-wrapper') }, _react2.default.createElement( 'h1', { className: topicClasses('header') }, _react2.default.createElement( _ndlaUi.SafeLink, { to: toTopic(topic.id), 'aria-describedby': id }, topic.name ) ), _react2.default.createElement( 'span', { id: id, hidden: true }, contentTypeDescription ), additional && _react2.default.createElement( _ndlaUi.Tooltip, { tooltip: messages.tooltipAdditionalTopic, align: 'left' }, _react2.default.createElement(_common.Additional, { className: 'c-icon--20 u-margin-left-tiny' }) ), !additional && showAdditionalCores && _react2.default.createElement( _ndlaUi.Tooltip, { tooltip: messages.tooltipCoreTopic, align: 'left' }, _react2.default.createElement(_common.Core, { className: 'c-icon--20 u-margin-left-tiny' }) ) ), _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: topic.introduction } }), shortcuts && _react2.default.createElement(_TopicIntroductionShortcuts2.default, { alwaysExpanded: shortcutAlwaysExpanded, id: topic.id + '_shortcuts', shortcuts: shortcuts, messages: { toggleButtonText: messages.shortcutButtonText } }) ) ); }; TopicIntroduction.propTypes = { additional: _propTypes2.default.bool, showAdditionalCores: _propTypes2.default.bool, messages: _propTypes2.default.shape({ shortcutButtonText: _propTypes2.default.string.isRequired, tooltipAdditionalTopic: _propTypes2.default.string, tooltipCoreTopic: _propTypes2.default.string }), topic: _shapes.TopicShape.isRequired, toTopic: _propTypes2.default.func.isRequired, subjectPage: _propTypes2.default.bool, shortcuts: _propTypes2.default.arrayOf(_shapes.ShortcutShape), twoColumns: _propTypes2.default.bool, shortcutAlwaysExpanded: _propTypes2.default.bool, id: _propTypes2.default.string.isRequired }; TopicIntroduction.defaultProps = { showAdditionalCores: false, additional: false }; var TopicIntroductionList = function TopicIntroductionList(_ref2) { var topics = _ref2.topics, twoColumns = _ref2.twoColumns, shortcutAlwaysExpanded = _ref2.shortcutAlwaysExpanded, showAdditionalCores = _ref2.showAdditionalCores, toggleAdditionalCores = _ref2.toggleAdditionalCores, rest = _objectWithoutProperties(_ref2, ['topics', 'twoColumns', 'shortcutAlwaysExpanded', 'showAdditionalCores', 'toggleAdditionalCores']); var renderAdditionalTopicsTrigger = !showAdditionalCores && topics.filter(function (topic) { return topic.additional; }).length > 0 && topics.filter(function (topic) { return !topic.additional; }).length === 0; return _react2.default.createElement( _ndlaI18n.Trans, null, function (_ref3) { var t = _ref3.t; return _react2.default.createElement( 'ul', { className: topicClasses('list', { twoColumns: twoColumns }) }, topics.map(function (topic, index) { var shortcuts = topic.shortcuts, additional = topic.additional; return _react2.default.createElement(TopicIntroduction, _extends({ key: topic.id }, rest, { topic: topic, shortcuts: shortcuts, additional: additional, showAdditionalCores: showAdditionalCores, shortcutAlwaysExpanded: shortcutAlwaysExpanded, messages: { shortcutButtonText: t('resource.label'), tooltipAdditionalTopic: t('resource.tooltipAdditionalTopic'), tooltipCoreTopic: t('resource.tooltipCoreTopic') }, id: topic.id + '_' + index })); }), renderAdditionalTopicsTrigger && _react2.default.createElement( 'li', null, _react2.default.createElement(_ndlaUi.NoContentBox, { onClick: toggleAdditionalCores, text: t('resource.noCoreResourcesAvailableUnspecific'), buttonText: t('resource.activateAdditionalResources') }) ) ); } ); }; TopicIntroductionList.propTypes = { toTopic: _propTypes2.default.func.isRequired, topics: _propTypes2.default.arrayOf(_shapes.TopicShape).isRequired, twoColumns: _propTypes2.default.bool, shortcutAlwaysExpanded: _propTypes2.default.bool, showAdditionalCores: _propTypes2.default.bool, toggleAdditionalCores: _propTypes2.default.func.isRequired }; TopicIntroductionList.defaultProps = { twoColumns: false, shortcutAlwaysExpanded: false, showAdditionalCores: false }; exports.default = TopicIntroductionList;