@ndla/ui 3.3.13 → 3.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/Figure/Figure.js +3 -1
- package/es/NDLAFilm/AboutNdlaFilm.js +6 -17
- package/es/NDLAFilm/AllMoviesAlphabetically.js +11 -11
- package/es/NDLAFilm/CategorySelect.js +17 -18
- package/es/NDLAFilm/FilmContentCard.js +8 -22
- package/es/NDLAFilm/FilmContentCardTags.js +4 -8
- package/es/NDLAFilm/FilmMovieList.js +6 -21
- package/es/NDLAFilm/FilmMovieSearch.js +18 -26
- package/es/NDLAFilm/MovieGrid.js +10 -19
- package/es/NDLAFilm/VisualElement.js +22 -29
- package/es/TopicIntroductionList/TopicIntroduction.js +14 -33
- package/es/TopicIntroductionList/TopicIntroductionList.js +6 -23
- package/es/TopicIntroductionList/TopicIntroductionShortcuts.js +71 -110
- package/es/TopicIntroductionList/TopicShortcutItem.js +0 -9
- package/es/all.css +1 -4
- package/es/index-javascript.js +1 -5
- package/es/index.js +4 -0
- package/es/shapes.js +0 -6
- package/lib/Figure/Figure.js +3 -1
- package/lib/NDLAFilm/AboutNdlaFilm.d.ts +15 -0
- package/lib/NDLAFilm/AboutNdlaFilm.js +6 -18
- package/lib/NDLAFilm/AllMoviesAlphabetically.d.ts +2 -2
- package/lib/NDLAFilm/AllMoviesAlphabetically.js +11 -11
- package/lib/NDLAFilm/CategorySelect.d.ts +11 -0
- package/lib/NDLAFilm/CategorySelect.js +20 -19
- package/lib/NDLAFilm/FilmContentCard.d.ts +11 -0
- package/lib/NDLAFilm/FilmContentCard.js +8 -23
- package/lib/NDLAFilm/FilmContentCardTags.d.ts +7 -0
- package/lib/NDLAFilm/FilmContentCardTags.js +4 -9
- package/lib/NDLAFilm/FilmMovieList.d.ts +19 -0
- package/lib/NDLAFilm/FilmMovieList.js +5 -21
- package/lib/NDLAFilm/FilmMovieSearch.d.ts +21 -0
- package/lib/NDLAFilm/FilmMovieSearch.js +25 -30
- package/lib/NDLAFilm/FilmSlideshow.d.ts +5 -5
- package/lib/NDLAFilm/MovieGrid.d.ts +13 -0
- package/lib/NDLAFilm/MovieGrid.js +9 -21
- package/lib/NDLAFilm/SlideshowIndicator.d.ts +2 -2
- package/lib/NDLAFilm/VisualElement.d.ts +16 -0
- package/lib/NDLAFilm/VisualElement.js +22 -30
- package/lib/NDLAFilm/index.d.ts +14 -0
- package/lib/NDLAFilm/types.d.ts +6 -4
- package/lib/TopicIntroductionList/TopicIntroduction.d.ts +21 -0
- package/lib/TopicIntroductionList/TopicIntroduction.js +16 -36
- package/lib/TopicIntroductionList/TopicIntroductionList.d.ts +35 -0
- package/lib/TopicIntroductionList/TopicIntroductionList.js +6 -25
- package/lib/TopicIntroductionList/TopicIntroductionShortcuts.d.ts +8 -0
- package/lib/TopicIntroductionList/TopicIntroductionShortcuts.js +72 -110
- package/lib/TopicIntroductionList/TopicShortcutItem.d.ts +6 -0
- package/lib/TopicIntroductionList/TopicShortcutItem.js +0 -11
- package/lib/TopicIntroductionList/index.d.ts +9 -0
- package/lib/all.css +1 -4
- package/lib/index-javascript.js +3 -137
- package/lib/index.d.ts +4 -0
- package/lib/index.js +155 -0
- package/lib/shapes.js +1 -10
- package/package.json +10 -10
- package/src/Figure/Figure.tsx +2 -1
- package/src/Figure/component.figure.scss +37 -3
- package/src/NDLAFilm/{AboutNdlaFilm.jsx → AboutNdlaFilm.tsx} +19 -18
- package/src/NDLAFilm/AllMoviesAlphabetically.tsx +3 -3
- package/src/NDLAFilm/{CategorySelect.jsx → CategorySelect.tsx} +23 -20
- package/src/NDLAFilm/{FilmContentCard.jsx → FilmContentCard.tsx} +21 -21
- package/src/NDLAFilm/{FilmContentCardTags.jsx → FilmContentCardTags.tsx} +7 -7
- package/src/NDLAFilm/{FilmMovieList.jsx → FilmMovieList.tsx} +17 -27
- package/src/NDLAFilm/FilmMovieSearch.tsx +71 -0
- package/src/NDLAFilm/FilmSlideshow.tsx +6 -6
- package/src/NDLAFilm/MovieGrid.tsx +76 -0
- package/src/NDLAFilm/SlideshowIndicator.tsx +2 -2
- package/src/NDLAFilm/VisualElement.tsx +40 -0
- package/src/NDLAFilm/{index.js → index.ts} +0 -0
- package/src/NDLAFilm/types.ts +7 -4
- package/src/TopicIntroductionList/{TopicIntroduction.jsx → TopicIntroduction.tsx} +22 -35
- package/src/TopicIntroductionList/{TopicIntroductionList.jsx → TopicIntroductionList.tsx} +32 -26
- package/src/TopicIntroductionList/TopicIntroductionShortcuts.tsx +71 -0
- package/src/TopicIntroductionList/{TopicShortcutItem.jsx → TopicShortcutItem.tsx} +5 -13
- package/src/TopicIntroductionList/{index.js → index.ts} +0 -0
- package/src/index-javascript.js +0 -30
- package/src/index.ts +31 -0
- package/src/shapes.js +0 -7
- package/es/NDLAFilm/interfaces.js +0 -0
- package/es/NDLAFilm/shapes.js +0 -15
- package/lib/NDLAFilm/interfaces.d.ts +0 -10
- package/lib/NDLAFilm/interfaces.js +0 -1
- package/lib/NDLAFilm/shapes.d.ts +0 -15
- package/lib/NDLAFilm/shapes.js +0 -30
- package/src/NDLAFilm/FilmMovieSearch.jsx +0 -66
- package/src/NDLAFilm/MovieGrid.jsx +0 -75
- package/src/NDLAFilm/VisualElement.jsx +0 -48
- package/src/NDLAFilm/interfaces.ts +0 -10
- package/src/NDLAFilm/shapes.ts +0 -17
- package/src/TopicIntroductionList/TopicIntroductionShortcuts.jsx +0 -92
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import BEMHelper from 'react-bem-helper';
|
|
4
|
+
import { Forward } from '@ndla/icons/common';
|
|
5
|
+
|
|
6
|
+
import ShortcutItem from './TopicShortcutItem';
|
|
7
|
+
|
|
8
|
+
import { Shortcut } from './TopicIntroductionList';
|
|
9
|
+
|
|
10
|
+
const classes = new BEMHelper({
|
|
11
|
+
name: 'topic-shortcuts',
|
|
12
|
+
prefix: 'c-',
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
interface Props {
|
|
16
|
+
id: string;
|
|
17
|
+
alwaysExpanded?: boolean;
|
|
18
|
+
shortcuts: Shortcut[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const TopicIntroductionShortcuts = ({ id, alwaysExpanded = false, shortcuts }: Props) => {
|
|
22
|
+
const { t } = useTranslation();
|
|
23
|
+
const [open, setOpen] = useState(alwaysExpanded);
|
|
24
|
+
const [returned, setReturned] = useState(false);
|
|
25
|
+
const [showButtonText, setShowButtonText] = useState(true);
|
|
26
|
+
|
|
27
|
+
const handleOnToggle = (newOpen: boolean) => {
|
|
28
|
+
setOpen(newOpen);
|
|
29
|
+
setShowButtonText(!newOpen);
|
|
30
|
+
setReturned(!newOpen);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
let onMouseEnter = undefined;
|
|
34
|
+
let onMouseLeave = undefined;
|
|
35
|
+
|
|
36
|
+
let buttonView = null;
|
|
37
|
+
|
|
38
|
+
if (!alwaysExpanded) {
|
|
39
|
+
onMouseEnter = () => handleOnToggle(true);
|
|
40
|
+
onMouseLeave = () => handleOnToggle(false);
|
|
41
|
+
|
|
42
|
+
buttonView = (
|
|
43
|
+
<button
|
|
44
|
+
type="button"
|
|
45
|
+
aria-expanded={open}
|
|
46
|
+
aria-label={t('resource.label')}
|
|
47
|
+
aria-controls={id}
|
|
48
|
+
{...classes('button', returned ? 're-enter' : '')}
|
|
49
|
+
onClick={() => handleOnToggle(!open)}>
|
|
50
|
+
<Forward />
|
|
51
|
+
{showButtonText && <span {...classes('label')}>{t('resource.label')}</span>}
|
|
52
|
+
</button>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
return (
|
|
56
|
+
<div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} {...classes()}>
|
|
57
|
+
{buttonView}
|
|
58
|
+
{open && (
|
|
59
|
+
<ul className={classes('list', open ? 'visible' : '').className}>
|
|
60
|
+
{shortcuts.map((shortcut) => (
|
|
61
|
+
<li {...classes('item')} key={shortcut.id}>
|
|
62
|
+
<ShortcutItem shortcut={shortcut} />
|
|
63
|
+
</li>
|
|
64
|
+
))}
|
|
65
|
+
</ul>
|
|
66
|
+
)}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export default TopicIntroductionShortcuts;
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import BEMHelper from 'react-bem-helper';
|
|
4
3
|
import Tooltip from '@ndla/tooltip';
|
|
5
4
|
import SafeLink from '@ndla/safelink';
|
|
6
5
|
import { useTranslation } from 'react-i18next';
|
|
7
6
|
import ContentTypeBadge from '../ContentTypeBadge';
|
|
8
|
-
|
|
9
|
-
import { ShortcutShape } from '../shapes';
|
|
7
|
+
import { Shortcut } from './TopicIntroductionList';
|
|
10
8
|
|
|
11
9
|
const classes = new BEMHelper({
|
|
12
10
|
name: 'topic-shortcuts',
|
|
13
11
|
prefix: 'c-',
|
|
14
12
|
});
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
interface Props {
|
|
15
|
+
shortcut: Shortcut;
|
|
16
|
+
}
|
|
17
|
+
const ShortcutItem = ({ shortcut: { id, tooltip, contentType, url, count } }: Props) => {
|
|
17
18
|
const { t } = useTranslation();
|
|
18
19
|
return (
|
|
19
20
|
<Tooltip
|
|
@@ -29,13 +30,4 @@ const ShortcutItem = ({ shortcut: { id, tooltip, contentType, url, count } }) =>
|
|
|
29
30
|
);
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
ShortcutItem.propTypes = {
|
|
33
|
-
shortcut: ShortcutShape.isRequired,
|
|
34
|
-
disableToolTip: PropTypes.bool,
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
ShortcutItem.defaultProps = {
|
|
38
|
-
disableToolTip: false,
|
|
39
|
-
};
|
|
40
|
-
|
|
41
33
|
export default ShortcutItem;
|
|
File without changes
|
package/src/index-javascript.js
CHANGED
|
@@ -23,16 +23,6 @@ export {
|
|
|
23
23
|
ToggleSearchButton,
|
|
24
24
|
} from './Search';
|
|
25
25
|
|
|
26
|
-
export {
|
|
27
|
-
default as ContentTypeBadge,
|
|
28
|
-
SubjectMaterialBadge,
|
|
29
|
-
TasksAndActivitiesBadge,
|
|
30
|
-
AssessmentResourcesBadge,
|
|
31
|
-
LearningPathBadge,
|
|
32
|
-
SubjectBadge,
|
|
33
|
-
ExternalLearningResourcesBadge,
|
|
34
|
-
SourceMaterialBadge,
|
|
35
|
-
} from './ContentTypeBadge';
|
|
36
26
|
export { default as TopicIntroductionList } from './TopicIntroductionList';
|
|
37
27
|
export { default as TopicMenu, TopicMenuButton } from './TopicMenu';
|
|
38
28
|
export {
|
|
@@ -43,24 +33,4 @@ export {
|
|
|
43
33
|
CompetenceGoalsDialog,
|
|
44
34
|
} from './CompetenceGoals';
|
|
45
35
|
|
|
46
|
-
export {
|
|
47
|
-
MediaList,
|
|
48
|
-
MediaListItem,
|
|
49
|
-
MediaListItemBody,
|
|
50
|
-
MediaListItemActions,
|
|
51
|
-
MediaListItemImage,
|
|
52
|
-
MediaListItemMeta,
|
|
53
|
-
} from './MediaList';
|
|
54
|
-
|
|
55
36
|
export { EmbeddedTwitter, EmbeddedFacebook, EmbeddedFacebookPage } from './Embedded';
|
|
56
|
-
|
|
57
|
-
export { DisplayOnPageYOffset } from './Animation';
|
|
58
|
-
|
|
59
|
-
export {
|
|
60
|
-
FilmSlideshow,
|
|
61
|
-
MovieGrid,
|
|
62
|
-
AboutNdlaFilm,
|
|
63
|
-
FilmMovieSearch,
|
|
64
|
-
FilmMovieList,
|
|
65
|
-
AllMoviesAlphabetically,
|
|
66
|
-
} from './NDLAFilm';
|
package/src/index.ts
CHANGED
|
@@ -158,6 +158,37 @@ export { default as ResourceGroup } from './ResourceGroup';
|
|
|
158
158
|
|
|
159
159
|
export { default as LayoutItem, OneColumn, PageContainer, Content } from './Layout';
|
|
160
160
|
|
|
161
|
+
export {
|
|
162
|
+
FilmSlideshow,
|
|
163
|
+
MovieGrid,
|
|
164
|
+
AboutNdlaFilm,
|
|
165
|
+
FilmMovieSearch,
|
|
166
|
+
FilmMovieList,
|
|
167
|
+
AllMoviesAlphabetically,
|
|
168
|
+
} from './NDLAFilm';
|
|
169
|
+
|
|
170
|
+
export { DisplayOnPageYOffset } from './Animation';
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
MediaList,
|
|
174
|
+
MediaListItem,
|
|
175
|
+
MediaListItemBody,
|
|
176
|
+
MediaListItemActions,
|
|
177
|
+
MediaListItemImage,
|
|
178
|
+
MediaListItemMeta,
|
|
179
|
+
} from './MediaList';
|
|
180
|
+
|
|
181
|
+
export {
|
|
182
|
+
default as ContentTypeBadge,
|
|
183
|
+
SubjectMaterialBadge,
|
|
184
|
+
TasksAndActivitiesBadge,
|
|
185
|
+
AssessmentResourcesBadge,
|
|
186
|
+
LearningPathBadge,
|
|
187
|
+
SubjectBadge,
|
|
188
|
+
ExternalLearningResourcesBadge,
|
|
189
|
+
SourceMaterialBadge,
|
|
190
|
+
} from './ContentTypeBadge';
|
|
191
|
+
|
|
161
192
|
export {
|
|
162
193
|
SubjectAbout,
|
|
163
194
|
SubjectArchive,
|
package/src/shapes.js
CHANGED
|
@@ -69,13 +69,6 @@ export const ResourceShape = PropTypes.shape({
|
|
|
69
69
|
type: PropTypes.string,
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
export const ShortcutShape = PropTypes.shape({
|
|
73
|
-
tooltip: PropTypes.string.isRequired,
|
|
74
|
-
contentType: PropTypes.string.isRequired,
|
|
75
|
-
url: PropTypes.string.isRequired,
|
|
76
|
-
count: PropTypes.number.isRequired,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
72
|
export const ContentTypeShape = PropTypes.oneOf([
|
|
80
73
|
contentTypes.SUBJECT_MATERIAL,
|
|
81
74
|
contentTypes.TASKS_AND_ACTIVITIES,
|
|
File without changes
|
package/es/NDLAFilm/shapes.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
export var movieShape = PropTypes.shape({
|
|
3
|
-
id: PropTypes.string.isRequired,
|
|
4
|
-
metaDescription: PropTypes.string.isRequired,
|
|
5
|
-
title: PropTypes.string.isRequired,
|
|
6
|
-
metaImage: PropTypes.shape({
|
|
7
|
-
url: PropTypes.string.isRequired,
|
|
8
|
-
alt: PropTypes.string.isRequired
|
|
9
|
-
}),
|
|
10
|
-
path: PropTypes.string.isRequired
|
|
11
|
-
});
|
|
12
|
-
export var topicShape = PropTypes.shape({
|
|
13
|
-
id: PropTypes.string,
|
|
14
|
-
name: PropTypes.string
|
|
15
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/lib/NDLAFilm/shapes.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
export declare const movieShape: PropTypes.Requireable<PropTypes.InferProps<{
|
|
3
|
-
id: PropTypes.Validator<string>;
|
|
4
|
-
metaDescription: PropTypes.Validator<string>;
|
|
5
|
-
title: PropTypes.Validator<string>;
|
|
6
|
-
metaImage: PropTypes.Requireable<PropTypes.InferProps<{
|
|
7
|
-
url: PropTypes.Validator<string>;
|
|
8
|
-
alt: PropTypes.Validator<string>;
|
|
9
|
-
}>>;
|
|
10
|
-
path: PropTypes.Validator<string>;
|
|
11
|
-
}>>;
|
|
12
|
-
export declare const topicShape: PropTypes.Requireable<PropTypes.InferProps<{
|
|
13
|
-
id: PropTypes.Requireable<string>;
|
|
14
|
-
name: PropTypes.Requireable<string>;
|
|
15
|
-
}>>;
|
package/lib/NDLAFilm/shapes.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.topicShape = exports.movieShape = void 0;
|
|
7
|
-
|
|
8
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
-
|
|
12
|
-
var movieShape = _propTypes["default"].shape({
|
|
13
|
-
id: _propTypes["default"].string.isRequired,
|
|
14
|
-
metaDescription: _propTypes["default"].string.isRequired,
|
|
15
|
-
title: _propTypes["default"].string.isRequired,
|
|
16
|
-
metaImage: _propTypes["default"].shape({
|
|
17
|
-
url: _propTypes["default"].string.isRequired,
|
|
18
|
-
alt: _propTypes["default"].string.isRequired
|
|
19
|
-
}),
|
|
20
|
-
path: _propTypes["default"].string.isRequired
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
exports.movieShape = movieShape;
|
|
24
|
-
|
|
25
|
-
var topicShape = _propTypes["default"].shape({
|
|
26
|
-
id: _propTypes["default"].string,
|
|
27
|
-
name: _propTypes["default"].string
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
exports.topicShape = topicShape;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2016-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import React from 'react';
|
|
10
|
-
import PropTypes from 'prop-types';
|
|
11
|
-
import BEMHelper from 'react-bem-helper';
|
|
12
|
-
import { OneColumn } from '@ndla/ui';
|
|
13
|
-
import SafeLink from '@ndla/safelink';
|
|
14
|
-
import { withTranslation } from 'react-i18next';
|
|
15
|
-
import CategorySelect from './CategorySelect';
|
|
16
|
-
|
|
17
|
-
import { topicShape } from './shapes';
|
|
18
|
-
|
|
19
|
-
const classes = new BEMHelper({
|
|
20
|
-
name: 'film-moviesearch',
|
|
21
|
-
prefix: 'c-',
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
const classesMovieList = new BEMHelper({
|
|
25
|
-
name: 'film-movielist',
|
|
26
|
-
prefix: 'c-',
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
const FilmMovieSearch = ({ topics, t, ...props }) => (
|
|
30
|
-
<div {...classes('')}>
|
|
31
|
-
<OneColumn>
|
|
32
|
-
<div {...classes('topic-navigation')}>
|
|
33
|
-
<h2 {...classesMovieList('heading', '', 'u-12/12 u-4/12@tablet')}>{t('ndlaFilm.subjectsInMovies')}:</h2>
|
|
34
|
-
<nav className="u-12/12 u-8/12@tablet">
|
|
35
|
-
<ul>
|
|
36
|
-
{topics.map((topic) => (
|
|
37
|
-
<li key={topic.id}>
|
|
38
|
-
<SafeLink to={topic.path} key={topic.id}>
|
|
39
|
-
<span>{topic.name}</span>
|
|
40
|
-
</SafeLink>
|
|
41
|
-
</li>
|
|
42
|
-
))}
|
|
43
|
-
</ul>
|
|
44
|
-
</nav>
|
|
45
|
-
</div>
|
|
46
|
-
<CategorySelect {...props} />
|
|
47
|
-
</OneColumn>
|
|
48
|
-
</div>
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
FilmMovieSearch.propTypes = {
|
|
52
|
-
topics: PropTypes.arrayOf(topicShape),
|
|
53
|
-
onChangeResourceType: PropTypes.func.isRequired,
|
|
54
|
-
resourceTypeSelected: PropTypes.shape({
|
|
55
|
-
name: PropTypes.string,
|
|
56
|
-
id: PropTypes.string,
|
|
57
|
-
}),
|
|
58
|
-
ariaControlId: PropTypes.string.isRequired,
|
|
59
|
-
t: PropTypes.func.isRequired,
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
FilmMovieSearch.defaultProps = {
|
|
63
|
-
topics: [],
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
export default withTranslation()(FilmMovieSearch);
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import BEMHelper from 'react-bem-helper';
|
|
4
|
-
import { css } from '@emotion/core';
|
|
5
|
-
import { withTranslation } from 'react-i18next';
|
|
6
|
-
import FilmContentCard from './FilmContentCard';
|
|
7
|
-
|
|
8
|
-
const movieListClasses = new BEMHelper({
|
|
9
|
-
name: 'film-movielist',
|
|
10
|
-
prefix: 'c-',
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
const MovieGrid = ({
|
|
14
|
-
resourceTypeName,
|
|
15
|
-
fetchingMoviesByType,
|
|
16
|
-
moviesByType,
|
|
17
|
-
resourceTypes,
|
|
18
|
-
loadingPlaceholderHeight,
|
|
19
|
-
autoSizedProps,
|
|
20
|
-
resizeThumbnailImages,
|
|
21
|
-
t,
|
|
22
|
-
}) => (
|
|
23
|
-
<section>
|
|
24
|
-
<h1
|
|
25
|
-
{...movieListClasses('heading')}
|
|
26
|
-
css={css`
|
|
27
|
-
margin-left: ${autoSizedProps.margin}px;
|
|
28
|
-
`}>
|
|
29
|
-
{resourceTypeName && resourceTypeName.name}
|
|
30
|
-
<small>
|
|
31
|
-
{fetchingMoviesByType
|
|
32
|
-
? t('ndlaFilm.loadingMovies')
|
|
33
|
-
: `${moviesByType.length} ${t('ndlaFilm.movieMatchInCategory')}`}
|
|
34
|
-
</small>
|
|
35
|
-
</h1>
|
|
36
|
-
<div
|
|
37
|
-
{...movieListClasses('movie-listing')}
|
|
38
|
-
css={css`
|
|
39
|
-
margin-left: ${autoSizedProps.margin}px;
|
|
40
|
-
`}>
|
|
41
|
-
{fetchingMoviesByType && (
|
|
42
|
-
<div
|
|
43
|
-
css={css`
|
|
44
|
-
height: ${loadingPlaceholderHeight};
|
|
45
|
-
`}
|
|
46
|
-
/>
|
|
47
|
-
)}
|
|
48
|
-
{!fetchingMoviesByType &&
|
|
49
|
-
moviesByType.map((movie) => (
|
|
50
|
-
<FilmContentCard
|
|
51
|
-
hideTags
|
|
52
|
-
movie={movie}
|
|
53
|
-
columnWidth={autoSizedProps.columnWidth}
|
|
54
|
-
distanceBetweenItems={autoSizedProps.distanceBetweenItems}
|
|
55
|
-
resourceTypes={resourceTypes}
|
|
56
|
-
resizeThumbnailImages={resizeThumbnailImages}
|
|
57
|
-
/>
|
|
58
|
-
))}
|
|
59
|
-
</div>
|
|
60
|
-
</section>
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
MovieGrid.propTypes = {
|
|
64
|
-
autoSizedProps: PropTypes.shape({}),
|
|
65
|
-
resourceTypeName: PropTypes.shape({
|
|
66
|
-
name: PropTypes.string,
|
|
67
|
-
}),
|
|
68
|
-
fetchingMoviesByType: PropTypes.bool,
|
|
69
|
-
moviesByType: PropTypes.array,
|
|
70
|
-
classes: PropTypes.func,
|
|
71
|
-
resourceTypes: PropTypes.array,
|
|
72
|
-
loadingPlaceholderHeight: PropTypes.string,
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export default withTranslation()(MovieGrid);
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import React from 'react';
|
|
10
|
-
import PropTypes from 'prop-types';
|
|
11
|
-
import { Image } from '@ndla/ui';
|
|
12
|
-
import styled from '@emotion/styled';
|
|
13
|
-
|
|
14
|
-
const StylediFrame = styled.iframe`
|
|
15
|
-
height: 100%;
|
|
16
|
-
width: 100%;
|
|
17
|
-
border: 0;
|
|
18
|
-
margin: 0;
|
|
19
|
-
padding: 0;
|
|
20
|
-
`;
|
|
21
|
-
|
|
22
|
-
const VisualElement = ({ visualElement }) => {
|
|
23
|
-
switch (visualElement.type) {
|
|
24
|
-
case 'image':
|
|
25
|
-
return <Image src={visualElement.url} alt={visualElement.alt} />;
|
|
26
|
-
case 'brightcove':
|
|
27
|
-
return (
|
|
28
|
-
<StylediFrame
|
|
29
|
-
allowfullscreen="true"
|
|
30
|
-
webkitallowfullscreen="true"
|
|
31
|
-
mozallowfullscreen="true"
|
|
32
|
-
src={visualElement.url}
|
|
33
|
-
/>
|
|
34
|
-
);
|
|
35
|
-
default:
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
VisualElement.propTypes = {
|
|
41
|
-
visualElement: PropTypes.shape({
|
|
42
|
-
url: PropTypes.string,
|
|
43
|
-
alt: PropTypes.string,
|
|
44
|
-
type: PropTypes.string,
|
|
45
|
-
}).isRequired,
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export default VisualElement;
|
package/src/NDLAFilm/shapes.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
|
|
3
|
-
export const movieShape = PropTypes.shape({
|
|
4
|
-
id: PropTypes.string.isRequired,
|
|
5
|
-
metaDescription: PropTypes.string.isRequired,
|
|
6
|
-
title: PropTypes.string.isRequired,
|
|
7
|
-
metaImage: PropTypes.shape({
|
|
8
|
-
url: PropTypes.string.isRequired,
|
|
9
|
-
alt: PropTypes.string.isRequired,
|
|
10
|
-
}),
|
|
11
|
-
path: PropTypes.string.isRequired,
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
export const topicShape = PropTypes.shape({
|
|
15
|
-
id: PropTypes.string,
|
|
16
|
-
name: PropTypes.string,
|
|
17
|
-
});
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import React, { Component } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import BEMHelper from 'react-bem-helper';
|
|
4
|
-
import { Forward } from '@ndla/icons/common';
|
|
5
|
-
|
|
6
|
-
import ShortcutItem from './TopicShortcutItem';
|
|
7
|
-
|
|
8
|
-
import { ShortcutShape } from '../shapes';
|
|
9
|
-
|
|
10
|
-
const classes = new BEMHelper({
|
|
11
|
-
name: 'topic-shortcuts',
|
|
12
|
-
prefix: 'c-',
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
class TopicIntroductionShortcuts extends Component {
|
|
16
|
-
constructor(props) {
|
|
17
|
-
super(props);
|
|
18
|
-
this.state = {
|
|
19
|
-
open: props.alwaysExpanded,
|
|
20
|
-
returned: false,
|
|
21
|
-
showButtonText: true,
|
|
22
|
-
};
|
|
23
|
-
this.handleOnToggle = this.handleOnToggle.bind(this);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
handleOnToggle(open) {
|
|
27
|
-
this.setState({
|
|
28
|
-
open,
|
|
29
|
-
showButtonText: !open,
|
|
30
|
-
returned: !open,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
render() {
|
|
35
|
-
const { shortcuts, messages, id, alwaysExpanded } = this.props;
|
|
36
|
-
const { open, returned, showButtonText } = this.state;
|
|
37
|
-
|
|
38
|
-
let onMouseEnter = null;
|
|
39
|
-
let onMouseLeave = null;
|
|
40
|
-
|
|
41
|
-
let buttonView = null;
|
|
42
|
-
|
|
43
|
-
if (!alwaysExpanded) {
|
|
44
|
-
onMouseEnter = () => this.handleOnToggle(true);
|
|
45
|
-
onMouseLeave = () => this.handleOnToggle(false);
|
|
46
|
-
|
|
47
|
-
buttonView = (
|
|
48
|
-
<button
|
|
49
|
-
type="button"
|
|
50
|
-
aria-expanded={this.state.open}
|
|
51
|
-
aria-label={messages.toggleButtonText}
|
|
52
|
-
aria-controls={id}
|
|
53
|
-
{...classes('button', returned ? 're-enter' : '')}
|
|
54
|
-
onClick={() => {
|
|
55
|
-
this.handleOnToggle(!open);
|
|
56
|
-
}}>
|
|
57
|
-
<Forward />
|
|
58
|
-
{showButtonText && <span {...classes('label')}>{messages.toggleButtonText}</span>}
|
|
59
|
-
</button>
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
return (
|
|
63
|
-
<div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} {...classes()}>
|
|
64
|
-
{buttonView}
|
|
65
|
-
{open && (
|
|
66
|
-
<ul className={classes('list', open ? 'visible' : '').className}>
|
|
67
|
-
{shortcuts.map((shortcut) => (
|
|
68
|
-
<li {...classes('item')} key={shortcut.id}>
|
|
69
|
-
<ShortcutItem shortcut={shortcut} />
|
|
70
|
-
</li>
|
|
71
|
-
))}
|
|
72
|
-
</ul>
|
|
73
|
-
)}
|
|
74
|
-
</div>
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
TopicIntroductionShortcuts.propTypes = {
|
|
80
|
-
id: PropTypes.string.isRequired,
|
|
81
|
-
alwaysExpanded: PropTypes.bool,
|
|
82
|
-
messages: PropTypes.shape({
|
|
83
|
-
toggleButtonText: PropTypes.string.isRequired,
|
|
84
|
-
}),
|
|
85
|
-
shortcuts: PropTypes.arrayOf(ShortcutShape).isRequired,
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
TopicIntroductionShortcuts.defaultProps = {
|
|
89
|
-
alwaysExpanded: false,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
export default TopicIntroductionShortcuts;
|