UNPKG

ndla-ui

Version:

UI component library for NDLA.

156 lines (142 loc) 5.06 kB
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; }; 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) 2017-present, NDLA. * * This source code is licensed under the GPLv3 license found in the * LICENSE file in the root directory of this source tree. * */ import React from 'react'; import PropTypes from 'prop-types'; import BEMHelper from 'react-bem-helper'; import { NoContentBox, Tooltip, SafeLink } from 'ndla-ui'; import { injectT } from 'ndla-i18n'; import { Additional, Core } from 'ndla-icons/common'; import { ResourceShape } from '../shapes'; var classes = new BEMHelper({ name: 'topic-resource', prefix: 'c-' }); var Resource = function Resource(_ref) { var resource = _ref.resource, icon = _ref.icon, resourceToLinkProps = _ref.resourceToLinkProps, showAdditionalResources = _ref.showAdditionalResources, id = _ref.id, contentTypeDescription = _ref.contentTypeDescription; var hidden = resource.additional ? !showAdditionalResources : false; return React.createElement( 'li', classes('item', { hidden: hidden, additional: resource.additional }), React.createElement( 'div', classes('body o-flag__body'), React.createElement( SafeLink, _extends({}, resourceToLinkProps(resource), classes('link o-flag o-flag--top'), { 'aria-describedby': id }), React.createElement( 'div', classes('icon o-flag__img'), icon ), React.createElement( 'h1', classes('title'), React.createElement( 'span', null, resource.name ) ) ), React.createElement( 'span', { id: id, hidden: true }, contentTypeDescription ), React.createElement( 'div', null, resource.additional && React.createElement( Tooltip, { tooltip: contentTypeDescription, align: 'left' }, React.createElement(Additional, { className: 'c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons' }) ), !resource.additional && showAdditionalResources && React.createElement( Tooltip, { tooltip: contentTypeDescription, align: 'left' }, React.createElement(Core, { className: 'c-icon--20 u-margin-left-tiny c-topic-resource__list__additional-icons' }) ) ) ) ); }; Resource.propTypes = { showAdditionalResources: PropTypes.bool, icon: PropTypes.node.isRequired, resource: ResourceShape.isRequired, resourceToLinkProps: PropTypes.func.isRequired, id: PropTypes.string.isRequired, contentTypeDescription: PropTypes.string.isRequired }; injectT(Resource); var ResourceList = function ResourceList(_ref2) { var resources = _ref2.resources, onClick = _ref2.onClick, type = _ref2.type, title = _ref2.title, showAdditionalResources = _ref2.showAdditionalResources, t = _ref2.t, rest = _objectWithoutProperties(_ref2, ['resources', 'onClick', 'type', 'title', 'showAdditionalResources', 't']); var renderAdditionalResourceTrigger = !showAdditionalResources && resources.filter(function (res) { return res.additional; }).length > 0 && resources.filter(function (res) { return !res.additional; }).length === 0; return React.createElement( 'div', null, React.createElement( 'ul', classes('list'), resources.map(function (resource, index) { return React.createElement(Resource, _extends({ key: resource.id, type: type, showAdditionalResources: showAdditionalResources }, rest, { resource: resource, contentTypeDescription: resource.additional ? t('resource.tooltipAdditionalTopic') : t('resource.tooltipCoreTopic'), id: resource.id + '_' + index })); }), renderAdditionalResourceTrigger && React.createElement( 'li', null, React.createElement(NoContentBox, { onClick: onClick, buttonText: t('resource.toggleFilterLabel'), text: t('resource.noCoreResourcesAvailable', { name: title.toLowerCase() }) }) ) ) ); }; ResourceList.propTypes = { resources: PropTypes.arrayOf(ResourceShape).isRequired, type: PropTypes.string, showAdditionalResources: PropTypes.bool, onChange: PropTypes.func, resourceToLinkProps: PropTypes.func.isRequired, onClick: PropTypes.func.isRequired, title: PropTypes.string.isRequired, t: PropTypes.func.isRequired }; export default injectT(ResourceList);