@ndla/ui 24.2.2 → 25.0.0

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.
Files changed (91) hide show
  1. package/es/CompetenceGoals/CompetenceGoalsDialog.js +15 -23
  2. package/es/CompetenceGoals/index.js +1 -4
  3. package/es/Filter/FilterButtons.js +10 -11
  4. package/es/Filter/FilterList.js +82 -152
  5. package/es/Filter/FilterListPhone.js +180 -271
  6. package/es/Filter/ToggleItem.js +6 -25
  7. package/es/Frontpage/FrontpageAllSubjects.js +8 -9
  8. package/es/Frontpage/FrontpageSearch.js +3 -4
  9. package/es/Masthead/Masthead.js +65 -41
  10. package/es/Masthead/MastheadSearchModal.js +4 -5
  11. package/es/Masthead/SkipToMainContent.js +24 -0
  12. package/es/Masthead/index.js +2 -1
  13. package/es/SearchTypeResult/PopupFilter.js +8 -9
  14. package/es/SearchTypeResult/SearchFilterContent.js +3 -4
  15. package/es/SectionHeading/SectionHeading.js +24 -17
  16. package/es/Subject/index.js +0 -1
  17. package/es/all.css +1 -1
  18. package/es/index-javascript.js +1 -4
  19. package/es/index.js +5 -2
  20. package/lib/CompetenceGoals/CompetenceGoalsDialog.d.ts +19 -0
  21. package/lib/CompetenceGoals/CompetenceGoalsDialog.js +13 -24
  22. package/lib/CompetenceGoals/index.d.ts +1 -0
  23. package/lib/CompetenceGoals/index.js +1 -33
  24. package/lib/Filter/FilterButtons.js +9 -9
  25. package/lib/Filter/FilterList.d.ts +25 -0
  26. package/lib/Filter/FilterList.js +85 -155
  27. package/lib/Filter/FilterListPhone.d.ts +32 -0
  28. package/lib/Filter/FilterListPhone.js +176 -269
  29. package/lib/Filter/ToggleItem.d.ts +15 -0
  30. package/lib/Filter/ToggleItem.js +6 -32
  31. package/lib/Filter/filterClasses.d.ts +2 -0
  32. package/lib/Filter/index.d.ts +12 -0
  33. package/lib/Frontpage/FrontpageAllSubjects.js +7 -7
  34. package/lib/Frontpage/FrontpageSearch.js +2 -3
  35. package/lib/Masthead/Masthead.d.ts +4 -8
  36. package/lib/Masthead/Masthead.js +65 -49
  37. package/lib/Masthead/MastheadSearchModal.js +3 -4
  38. package/lib/Masthead/SkipToMainContent.d.ts +6 -0
  39. package/lib/Masthead/SkipToMainContent.js +38 -0
  40. package/lib/Masthead/index.d.ts +2 -1
  41. package/lib/Masthead/index.js +10 -0
  42. package/lib/SearchTypeResult/PopupFilter.js +7 -7
  43. package/lib/SearchTypeResult/SearchFilterContent.js +2 -2
  44. package/lib/SectionHeading/SectionHeading.d.ts +1 -13
  45. package/lib/SectionHeading/SectionHeading.js +23 -19
  46. package/lib/Subject/index.d.ts +0 -1
  47. package/lib/Subject/index.js +0 -8
  48. package/lib/all.css +1 -1
  49. package/lib/index-javascript.js +1 -63
  50. package/lib/index.d.ts +5 -2
  51. package/lib/index.js +48 -7
  52. package/package.json +11 -11
  53. package/src/CompetenceGoals/{CompetenceGoalsDialog.jsx → CompetenceGoalsDialog.tsx} +34 -26
  54. package/src/CompetenceGoals/index.ts +1 -0
  55. package/src/Filter/FilterButtons.tsx +0 -1
  56. package/src/Filter/FilterList.tsx +135 -0
  57. package/src/Filter/FilterListPhone.tsx +275 -0
  58. package/src/Filter/ToggleItem.tsx +58 -0
  59. package/src/Filter/{filterClasses.js → filterClasses.ts} +0 -0
  60. package/src/Filter/{index.js → index.ts} +0 -0
  61. package/src/Frontpage/FrontpageAllSubjects.tsx +0 -1
  62. package/src/Frontpage/FrontpageSearch.tsx +0 -1
  63. package/src/Masthead/Masthead.tsx +85 -45
  64. package/src/Masthead/MastheadSearchModal.tsx +0 -1
  65. package/src/Masthead/SkipToMainContent.tsx +48 -0
  66. package/src/Masthead/index.ts +2 -1
  67. package/src/SearchTypeResult/PopupFilter.tsx +0 -1
  68. package/src/SearchTypeResult/SearchFilterContent.tsx +0 -1
  69. package/src/SectionHeading/SectionHeading.tsx +29 -16
  70. package/src/Subject/index.ts +0 -1
  71. package/src/index-javascript.js +0 -10
  72. package/src/index.ts +7 -2
  73. package/src/main.scss +0 -3
  74. package/es/CompetenceGoals/CompetenceGoalList.js +0 -58
  75. package/es/CompetenceGoals/CompetenceGoals.js +0 -159
  76. package/es/Subject/SubjectFilter.js +0 -42
  77. package/lib/CompetenceGoals/CompetenceGoalList.js +0 -78
  78. package/lib/CompetenceGoals/CompetenceGoals.js +0 -184
  79. package/lib/Subject/SubjectFilter.d.ts +0 -27
  80. package/lib/Subject/SubjectFilter.js +0 -58
  81. package/src/.DS_Store +0 -0
  82. package/src/CompetenceGoals/CompetenceGoalList.jsx +0 -51
  83. package/src/CompetenceGoals/CompetenceGoals.jsx +0 -152
  84. package/src/CompetenceGoals/component.competence-goals.scss +0 -161
  85. package/src/CompetenceGoals/index.js +0 -6
  86. package/src/Filter/FilterList.jsx +0 -167
  87. package/src/Filter/FilterListPhone.jsx +0 -328
  88. package/src/Filter/ToggleItem.jsx +0 -71
  89. package/src/Masthead/component.masthead.scss +0 -146
  90. package/src/SectionHeading/component.section-heading.scss +0 -17
  91. package/src/Subject/SubjectFilter.tsx +0 -48
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -7,12 +9,8 @@ exports["default"] = void 0;
7
9
 
8
10
  var _react = _interopRequireWildcard(require("react"));
9
11
 
10
- var _propTypes = _interopRequireDefault(require("prop-types"));
11
-
12
12
  var _common = require("@ndla/icons/common");
13
13
 
14
- var _action = require("@ndla/icons/action");
15
-
16
14
  var _modal = _interopRequireWildcard(require("@ndla/modal"));
17
15
 
18
16
  var _button = _interopRequireDefault(require("@ndla/button"));
@@ -33,240 +31,166 @@ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return
33
31
 
34
32
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
33
 
36
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
37
-
38
34
  function _extends() { _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; }; return _extends.apply(this, arguments); }
39
35
 
40
36
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
41
37
 
42
38
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
43
39
 
44
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
45
-
46
40
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
47
41
 
48
42
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
49
43
 
50
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
51
-
52
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
53
-
54
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
55
-
56
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
57
-
58
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
44
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
59
45
 
60
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
46
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
61
47
 
62
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
48
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
63
49
 
64
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
50
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
65
51
 
66
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
52
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
67
53
 
68
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
54
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
69
55
 
70
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
56
+ var is2DArray = function is2DArray(options) {
57
+ return Array.isArray(options[0]);
58
+ };
71
59
 
72
- var FilterListPhone = /*#__PURE__*/function (_Component) {
73
- _inherits(FilterListPhone, _Component);
60
+ var FilterListPhone = function FilterListPhone(_ref) {
61
+ var preid = _ref.preid,
62
+ label = _ref.label,
63
+ labelNotVisible = _ref.labelNotVisible,
64
+ _ref$modifiers = _ref.modifiers,
65
+ modifiers = _ref$modifiers === void 0 ? '' : _ref$modifiers,
66
+ onChange = _ref.onChange,
67
+ options = _ref.options,
68
+ _ref$values = _ref.values,
69
+ values = _ref$values === void 0 ? [] : _ref$values,
70
+ defaultVisibleCount = _ref.defaultVisibleCount,
71
+ showLabel = _ref.showLabel,
72
+ hideLabel = _ref.hideLabel,
73
+ _ref$alignedGroup = _ref.alignedGroup,
74
+ alignedGroup = _ref$alignedGroup === void 0 ? false : _ref$alignedGroup,
75
+ _ref$collapseMobile = _ref.collapseMobile,
76
+ collapseMobile = _ref$collapseMobile === void 0 ? true : _ref$collapseMobile,
77
+ activeFiltersNarrow = _ref.activeFiltersNarrow,
78
+ messages = _ref.messages,
79
+ _ref$viewMode = _ref.viewMode,
80
+ viewMode = _ref$viewMode === void 0 ? 'inlineDesktop' : _ref$viewMode,
81
+ isGroupedOptions = _ref.isGroupedOptions,
82
+ showActiveFiltersOnSmallScreen = _ref.showActiveFiltersOnSmallScreen;
83
+
84
+ var _useState = (0, _react.useState)(false),
85
+ _useState2 = _slicedToArray(_useState, 2),
86
+ isNarrowScreen = _useState2[0],
87
+ setIsNarrowScreen = _useState2[1];
88
+
89
+ var _useState3 = (0, _react.useState)(defaultVisibleCount),
90
+ _useState4 = _slicedToArray(_useState3, 2),
91
+ visibleCount = _useState4[0],
92
+ setVisibleCount = _useState4[1];
93
+
94
+ (0, _react.useEffect)(function () {
95
+ setScreenSize(true);
96
+ var debounced = (0, _lodash.debounce)(function () {
97
+ return setScreenSize(false);
98
+ }, 50);
99
+ window.addEventListener('resize', debounced);
100
+ return function () {
101
+ debounced.cancel();
102
+ window.removeEventListener('resize', debounced);
103
+ };
104
+ }, []);
74
105
 
75
- var _super = _createSuper(FilterListPhone);
106
+ var setScreenSize = function setScreenSize() {
107
+ var initial = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
108
+ var newIsNarrowScreen = (window.innerWidth || document.documentElement.clientWidth) < 768;
109
+ /* eslint react/no-did-mount-set-state: 0 */
76
110
 
77
- function FilterListPhone(props) {
78
- var _this;
111
+ if (initial && newIsNarrowScreen || !initial) {
112
+ setIsNarrowScreen(newIsNarrowScreen);
113
+ }
114
+ /* eslint react/no-did-mount-set-state: 1 */
79
115
 
80
- _classCallCheck(this, FilterListPhone);
116
+ };
81
117
 
82
- _this = _super.call(this, props);
83
- _this.state = {
84
- isNarrowScreen: false,
85
- visibleCount: props.defaultVisibleCount
86
- };
87
- _this.setScreenSizeDebounced = (0, _lodash.debounce)(function () {
88
- return _this.setScreenSize(false);
89
- }, 50);
90
- _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));
91
- return _this;
92
- }
118
+ var handleChange = function handleChange(event, option) {
119
+ var newValues = null;
93
120
 
94
- _createClass(FilterListPhone, [{
95
- key: "componentDidMount",
96
- value: function componentDidMount() {
97
- this.setScreenSize(true);
98
- window.addEventListener('resize', this.setScreenSizeDebounced);
121
+ if (event.currentTarget.checked) {
122
+ newValues = [].concat(_toConsumableArray(values), [option.value]);
123
+ } else {
124
+ newValues = values.filter(function (value) {
125
+ return value !== option.value;
126
+ });
99
127
  }
100
- }, {
101
- key: "componentWillUnmount",
102
- value: function componentWillUnmount() {
103
- this.setScreenSizeDebounced.cancel();
104
- window.removeEventListener('resize', this.setScreenSizeDebounced);
105
- }
106
- }, {
107
- key: "setScreenSize",
108
- value: function setScreenSize() {
109
- var initial = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
110
- var isNarrowScreen = (window.innerWidth || document.documentElement.clientWidth) < 768;
111
- /* eslint react/no-did-mount-set-state: 0 */
112
-
113
- if (initial && isNarrowScreen || !initial) {
114
- this.setState({
115
- isNarrowScreen: isNarrowScreen
116
- });
117
- }
118
- /* eslint react/no-did-mount-set-state: 1 */
119
128
 
129
+ if (onChange) {
130
+ onChange(newValues, option.value);
120
131
  }
121
- }, {
122
- key: "handleChange",
123
- value: function handleChange(event, option) {
124
- var _this$props = this.props,
125
- onChange = _this$props.onChange,
126
- values = _this$props.values;
127
- var newValues = null;
128
-
129
- if (event.currentTarget.checked) {
130
- newValues = [].concat(_toConsumableArray(values), [option.value]);
131
- } else {
132
- newValues = values.filter(function (value) {
133
- return value !== option.value;
134
- });
135
- }
132
+ };
136
133
 
137
- if (onChange) {
138
- onChange(newValues, option.value);
139
- }
140
- }
141
- }, {
142
- key: "render",
143
- value: function render() {
144
- var _this2 = this;
145
-
146
- var _this$props2 = this.props,
147
- preid = _this$props2.preid,
148
- modifiers = _this$props2.modifiers,
149
- label = _this$props2.label,
150
- labelNotVisible = _this$props2.labelNotVisible,
151
- options = _this$props2.options,
152
- values = _this$props2.values,
153
- onChange = _this$props2.onChange,
154
- defaultVisibleCount = _this$props2.defaultVisibleCount,
155
- showLabel = _this$props2.showLabel,
156
- hideLabel = _this$props2.hideLabel,
157
- messages = _this$props2.messages,
158
- alignedGroup = _this$props2.alignedGroup,
159
- collapseMobile = _this$props2.collapseMobile,
160
- activeFiltersNarrow = _this$props2.activeFiltersNarrow,
161
- viewMode = _this$props2.viewMode,
162
- isGroupedOptions = _this$props2.isGroupedOptions,
163
- showActiveFiltersOnSmallScreen = _this$props2.showActiveFiltersOnSmallScreen;
164
- var showAll = defaultVisibleCount === null || options.length <= defaultVisibleCount;
165
- var labelModifiers = [];
166
-
167
- if (labelNotVisible) {
168
- labelModifiers.push('hidden');
169
- }
134
+ var showAll = defaultVisibleCount === undefined || options.length <= defaultVisibleCount;
135
+ var labelModifiers = [];
170
136
 
171
- var groupedOptions = options;
137
+ if (labelNotVisible) {
138
+ labelModifiers.push('hidden');
139
+ }
172
140
 
173
- if (!isGroupedOptions) {
174
- groupedOptions = [options];
175
- }
141
+ var groupedOptions = is2DArray(options) ? options : [options];
176
142
 
177
- if (this.state.isNarrowScreen || viewMode === 'allModal') {
178
- var currentlyActiveFilters = [];
179
- groupedOptions.forEach(function (options) {
180
- var activeFilters = options.filter(function (option) {
181
- return values.some(function (value) {
182
- return value === option.value;
183
- });
184
- });
185
- currentlyActiveFilters = [].concat(_toConsumableArray(currentlyActiveFilters), _toConsumableArray(activeFilters));
143
+ if (isNarrowScreen || viewMode === 'allModal') {
144
+ var currentlyActiveFilters = [];
145
+ groupedOptions.forEach(function (options) {
146
+ var activeFilters = options.filter(function (option) {
147
+ return values.some(function (value) {
148
+ return value === option.value;
186
149
  });
187
- var wrapperClassName = activeFiltersNarrow || viewMode === 'allModal' ? (0, _filterClasses.classes)('narrow-active-filters').className : '';
188
- return (0, _core.jsx)("div", {
189
- className: wrapperClassName
190
- }, currentlyActiveFilters.length > 0 && (0, _core.jsx)(_ActiveFilters["default"], {
191
- filters: currentlyActiveFilters,
192
- showOnSmallScreen: showActiveFiltersOnSmallScreen,
193
- onFilterRemove: function onFilterRemove(value) {
194
- onChange(values.filter(function (option) {
195
- return option !== value;
196
- }), value);
197
- }
198
- }), (0, _core.jsx)(_modal["default"], {
199
- size: "fullscreen",
200
- backgroundColor: "grey",
201
- activateButton: (0, _core.jsx)(_button["default"], _extends({
202
- outline: true
203
- }, (0, _filterClasses.classes)('modal-button')), messages.openFilter)
204
- }, function (onClose) {
205
- return (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)(_modal.ModalHeader, {
206
- modifier: ['left-align']
207
- }, (0, _core.jsx)("div", (0, _filterClasses.classes)('modal-header'), (0, _core.jsx)("div", (0, _filterClasses.classes)('modal-heading'), !_this2.state.isNarrowScreen && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label'), label), (0, _core.jsx)(_button["default"], {
208
- outline: true,
209
- onClick: onClose
210
- }, messages.useFilter)), (0, _core.jsx)(_modal.ModalCloseButton, {
211
- title: (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)(_action.Cross, null), " ", messages.closeFilter),
212
- onClick: onClose
213
- }))), (0, _core.jsx)(_modal.ModalBody, {
214
- modifier: "no-side-padding-mobile"
215
- }, _this2.state.isNarrowScreen && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label'), label), groupedOptions.map(function (options, index) {
216
- return (0, _core.jsx)("ul", _extends({
217
- key: index
218
- }, (0, _filterClasses.classes)('item-wrapper', {
219
- 'aligned-grouping': alignedGroup,
220
- 'collapse-mobile': collapseMobile,
221
- 'grouped-options': isGroupedOptions
222
- })), options.map(function (option) {
223
- var itemModifiers = [];
224
- var checked = values.some(function (value) {
225
- return value === option.value;
226
- });
227
-
228
- if (option.noResults) {
229
- itemModifiers.push('no-results');
230
- }
231
-
232
- if (option.disabled) {
233
- itemModifiers.push('disabled');
234
- }
235
-
236
- return (0, _core.jsx)(_ToggleItem["default"], {
237
- key: option.value,
238
- id: preid + option.value,
239
- value: option.value,
240
- checked: checked,
241
- onChange: function onChange(event) {
242
- _this2.handleChange(event, option);
243
- },
244
- icon: option.icon,
245
- label: option.title,
246
- disabled: option.disabled,
247
- modifiers: itemModifiers
248
- });
249
- }));
250
- }), (0, _core.jsx)("div", (0, _filterClasses.classes)('usefilter-wrapper'), (0, _core.jsx)(_button["default"], {
251
- outline: true,
252
- onClick: onClose
253
- }, messages.useFilter))));
254
- }));
150
+ });
151
+ currentlyActiveFilters = [].concat(_toConsumableArray(currentlyActiveFilters), _toConsumableArray(activeFilters));
152
+ });
153
+ var wrapperClassName = activeFiltersNarrow || viewMode === 'allModal' ? (0, _filterClasses.classes)('narrow-active-filters').className : '';
154
+ return (0, _core.jsx)("div", {
155
+ className: wrapperClassName
156
+ }, currentlyActiveFilters.length > 0 && (0, _core.jsx)(_ActiveFilters["default"], {
157
+ filters: currentlyActiveFilters,
158
+ showOnSmallScreen: showActiveFiltersOnSmallScreen,
159
+ onFilterRemove: function onFilterRemove(value) {
160
+ onChange(values.filter(function (option) {
161
+ return option !== value;
162
+ }), value);
255
163
  }
256
-
257
- return (0, _core.jsx)(_react["default"].Fragment, null, isGroupedOptions && label && (0, _core.jsx)("h2", (0, _filterClasses.classes)('label', labelModifiers), label), groupedOptions.map(function (options, index) {
258
- return (0, _core.jsx)("section", _extends({
164
+ }), (0, _core.jsx)(_modal["default"], {
165
+ size: "fullscreen",
166
+ backgroundColor: "grey",
167
+ activateButton: (0, _core.jsx)(_button["default"], _extends({
168
+ outline: true
169
+ }, (0, _filterClasses.classes)('modal-button')), messages.openFilter)
170
+ }, function (onClose) {
171
+ return (0, _core.jsx)(_react["default"].Fragment, null, (0, _core.jsx)(_modal.ModalHeader, {
172
+ modifier: ['left-align']
173
+ }, (0, _core.jsx)("div", (0, _filterClasses.classes)('modal-header'), (0, _core.jsx)("div", (0, _filterClasses.classes)('modal-heading'), !isNarrowScreen && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label'), label), (0, _core.jsx)(_button["default"], {
174
+ outline: true,
175
+ onClick: onClose
176
+ }, messages.useFilter)), (0, _core.jsx)(_modal.ModalCloseButton, {
177
+ title: messages.closeFilter,
178
+ onClick: onClose
179
+ }))), (0, _core.jsx)(_modal.ModalBody, {
180
+ modifier: "no-side-padding-mobile"
181
+ }, isNarrowScreen && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label'), label), groupedOptions.map(function (options, index) {
182
+ return (0, _core.jsx)("ul", _extends({
259
183
  key: index
260
- }, (0, _filterClasses.classes)('list', modifiers)), !isGroupedOptions && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label', labelModifiers), label), (0, _core.jsx)("ul", (0, _filterClasses.classes)('item-wrapper'), options.map(function (option, index) {
184
+ }, (0, _filterClasses.classes)('item-wrapper', {
185
+ 'aligned-grouping': !!alignedGroup,
186
+ 'collapse-mobile': !!collapseMobile,
187
+ 'grouped-options': !!isGroupedOptions
188
+ })), options.map(function (option) {
261
189
  var itemModifiers = [];
262
190
  var checked = values.some(function (value) {
263
191
  return value === option.value;
264
192
  });
265
193
 
266
- if (!showAll && !checked && index + 1 > _this2.state.visibleCount) {
267
- itemModifiers.push('hidden');
268
- }
269
-
270
194
  if (option.noResults) {
271
195
  itemModifiers.push('no-results');
272
196
  }
@@ -279,83 +203,66 @@ var FilterListPhone = /*#__PURE__*/function (_Component) {
279
203
  key: option.value,
280
204
  id: preid + option.value,
281
205
  value: option.value,
282
- tabIndex: option.noResults ? -1 : 0,
283
206
  checked: checked,
284
207
  onChange: function onChange(event) {
285
- _this2.handleChange(event, option);
208
+ return handleChange(event, option);
286
209
  },
287
- icon: option.icon,
288
210
  label: option.title,
289
- modifiers: itemModifiers,
290
- disabled: option.disabled
211
+ disabled: option.disabled,
212
+ modifiers: itemModifiers
291
213
  });
292
- })), !showAll && (0, _core.jsx)("button", _extends({}, (0, _filterClasses.classes)('expand'), {
293
- type: "button",
294
- onClick: function onClick() {
295
- _this2.setState(function (prevState) {
296
- if (prevState.visibleCount === defaultVisibleCount) {
297
- return {
298
- visibleCount: options.length
299
- };
300
- }
301
-
302
- return {
303
- visibleCount: defaultVisibleCount
304
- };
305
- });
306
- }
307
- }), _this2.state.visibleCount === defaultVisibleCount ? (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)("span", null, showLabel), " ", (0, _core.jsx)(_common.ChevronDown, null)) : (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)("span", null, hideLabel), " ", (0, _core.jsx)(_common.ChevronUp, null))));
308
- }));
309
- }
310
- }]);
214
+ }));
215
+ }), (0, _core.jsx)("div", (0, _filterClasses.classes)('usefilter-wrapper'), (0, _core.jsx)(_button["default"], {
216
+ outline: true,
217
+ onClick: onClose
218
+ }, messages.useFilter))));
219
+ }));
220
+ }
311
221
 
312
- return FilterListPhone;
313
- }(_react.Component);
222
+ return (0, _core.jsx)(_react["default"].Fragment, null, isGroupedOptions && label && (0, _core.jsx)("h2", (0, _filterClasses.classes)('label', labelModifiers), label), groupedOptions.map(function (options, index) {
223
+ return (0, _core.jsx)("section", _extends({
224
+ key: index
225
+ }, (0, _filterClasses.classes)('list', modifiers)), !isGroupedOptions && label && (0, _core.jsx)("h1", (0, _filterClasses.classes)('label', labelModifiers), label), (0, _core.jsx)("ul", (0, _filterClasses.classes)('item-wrapper'), options.map(function (option, index) {
226
+ var itemModifiers = [];
227
+ var checked = values.some(function (value) {
228
+ return value === option.value;
229
+ });
230
+
231
+ if (!showAll && !checked && !!visibleCount && index + 1 > visibleCount) {
232
+ itemModifiers.push('hidden');
233
+ }
314
234
 
315
- var valueShape = _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]);
235
+ if (option.noResults) {
236
+ itemModifiers.push('no-results');
237
+ }
316
238
 
317
- var optionsShape = _propTypes["default"].shape({
318
- title: _propTypes["default"].string.isRequired,
319
- value: valueShape.isRequired,
320
- icon: _propTypes["default"].func,
321
- noResults: _propTypes["default"].bool,
322
- disabled: _propTypes["default"].bool
323
- });
239
+ if (option.disabled) {
240
+ itemModifiers.push('disabled');
241
+ }
324
242
 
325
- FilterListPhone.propTypes = {
326
- preid: _propTypes["default"].string.isRequired,
327
- children: _propTypes["default"].node,
328
- label: _propTypes["default"].string,
329
- labelNotVisible: _propTypes["default"].bool,
330
- modifiers: _propTypes["default"].string,
331
- onChange: _propTypes["default"].func,
332
- // isRequired
333
- options: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(optionsShape), _propTypes["default"].arrayOf(_propTypes["default"].arrayOf(optionsShape))]).isRequired,
334
- values: _propTypes["default"].arrayOf(valueShape),
335
- defaultVisibleCount: _propTypes["default"].number,
336
- showLabel: _propTypes["default"].string,
337
- hideLabel: _propTypes["default"].string,
338
- onToggle: _propTypes["default"].func,
339
- alignedGroup: _propTypes["default"].bool,
340
- collapseMobile: _propTypes["default"].bool,
341
- activeFiltersNarrow: _propTypes["default"].bool,
342
- messages: _propTypes["default"].shape({
343
- useFilter: _propTypes["default"].string.isRequired,
344
- openFilter: _propTypes["default"].string.isRequired,
345
- closeFilter: _propTypes["default"].string.isRequired
346
- }).isRequired,
347
- viewMode: _propTypes["default"].oneOf(['inlineDesktop', 'allModal']),
348
- isGroupedOptions: _propTypes["default"].bool,
349
- showActiveFiltersOnSmallScreen: _propTypes["default"].bool
350
- };
351
- FilterListPhone.defaultProps = {
352
- modifiers: '',
353
- values: [],
354
- defaultVisibleCount: null,
355
- onToggle: null,
356
- alignedGroup: false,
357
- collapseMobile: true,
358
- viewMode: 'inlineDesktop'
243
+ return (0, _core.jsx)(_ToggleItem["default"], {
244
+ key: option.value,
245
+ id: preid + option.value,
246
+ value: option.value,
247
+ tabIndex: option.noResults ? -1 : 0,
248
+ checked: checked,
249
+ onChange: function onChange(event) {
250
+ return handleChange(event, option);
251
+ },
252
+ label: option.title,
253
+ modifiers: itemModifiers,
254
+ disabled: option.disabled
255
+ });
256
+ })), !showAll && (0, _core.jsx)("button", _extends({}, (0, _filterClasses.classes)('expand'), {
257
+ type: "button",
258
+ onClick: function onClick() {
259
+ setVisibleCount(function (prev) {
260
+ return prev === defaultVisibleCount ? options.length : defaultVisibleCount;
261
+ });
262
+ }
263
+ }), visibleCount === defaultVisibleCount ? (0, _core.jsx)(_react["default"].Fragment, null, (0, _core.jsx)("span", null, showLabel), " ", (0, _core.jsx)(_common.ChevronDown, null)) : (0, _core.jsx)(_react["default"].Fragment, null, (0, _core.jsx)("span", null, hideLabel), " ", (0, _core.jsx)(_common.ChevronUp, null))));
264
+ }));
359
265
  };
266
+
360
267
  var _default = FilterListPhone;
361
268
  exports["default"] = _default;
@@ -0,0 +1,15 @@
1
+ import { ChangeEvent, ElementType } from 'react';
2
+ interface Props {
3
+ id: string;
4
+ label: string;
5
+ onChange: (event: ChangeEvent<HTMLInputElement>) => void;
6
+ checked?: boolean;
7
+ disabled?: boolean;
8
+ tabIndex?: number;
9
+ modifiers?: string[] | string;
10
+ value?: string;
11
+ component?: ElementType;
12
+ hits?: number;
13
+ }
14
+ declare const ToggleItem: ({ id, checked, modifiers, label, component: Component, onChange, tabIndex, value, disabled, hits, }: Props) => JSX.Element;
15
+ export default ToggleItem;
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports["default"] = void 0;
9
7
 
10
- var _react = _interopRequireWildcard(require("react"));
11
-
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _react = _interopRequireDefault(require("react"));
13
9
 
14
10
  var _filterClasses = require("./filterClasses");
15
11
 
@@ -17,19 +13,16 @@ var _core = require("@emotion/core");
17
13
 
18
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
15
 
20
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
21
-
22
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
-
24
16
  function _extends() { _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; }; return _extends.apply(this, arguments); }
25
17
 
26
18
  var ToggleItem = function ToggleItem(_ref) {
27
19
  var id = _ref.id,
28
- checked = _ref.checked,
20
+ _ref$checked = _ref.checked,
21
+ checked = _ref$checked === void 0 ? false : _ref$checked,
29
22
  modifiers = _ref.modifiers,
30
23
  label = _ref.label,
31
- Component = _ref.component,
32
- icon = _ref.icon,
24
+ _ref$component = _ref.component,
25
+ Component = _ref$component === void 0 ? 'li' : _ref$component,
33
26
  onChange = _ref.onChange,
34
27
  tabIndex = _ref.tabIndex,
35
28
  value = _ref.value,
@@ -45,27 +38,8 @@ var ToggleItem = function ToggleItem(_ref) {
45
38
  onChange: onChange
46
39
  })), (0, _core.jsx)("label", {
47
40
  htmlFor: id
48
- }, (0, _core.jsx)("span", (0, _filterClasses.classes)('item-checkbox')), (0, _core.jsx)("span", (0, _filterClasses.classes)('text'), label, hits !== undefined && " (".concat(hits, ")")), icon ? /*#__PURE__*/(0, _react.createElement)(icon, {
49
- className: "c-icon--22 ".concat((0, _filterClasses.classes)('icon').className)
50
- }) : null));
41
+ }, (0, _core.jsx)("span", (0, _filterClasses.classes)('item-checkbox')), (0, _core.jsx)("span", (0, _filterClasses.classes)('text'), label, hits !== undefined && " (".concat(hits, ")"))));
51
42
  };
52
43
 
53
- ToggleItem.propTypes = {
54
- id: _propTypes["default"].string.isRequired,
55
- label: _propTypes["default"].string.isRequired,
56
- onChange: _propTypes["default"].func.isRequired,
57
- checked: _propTypes["default"].bool,
58
- disabled: _propTypes["default"].bool,
59
- tabIndex: _propTypes["default"].number,
60
- modifiers: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].arrayOf(_propTypes["default"].string)]),
61
- value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
62
- component: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func, _propTypes["default"].object]),
63
- hits: _propTypes["default"].number,
64
- icon: _propTypes["default"].func
65
- };
66
- ToggleItem.defaultProps = {
67
- component: 'li',
68
- checked: false
69
- };
70
44
  var _default = ToggleItem;
71
45
  exports["default"] = _default;
@@ -0,0 +1,2 @@
1
+ import BEMHelper from 'react-bem-helper';
2
+ export declare const classes: BEMHelper<BEMHelper.ReturnObject>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2018-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
+ export { default as FilterList } from './FilterList';
9
+ export { default as FilterListPhone } from './FilterListPhone';
10
+ export { default as ToggleItem } from './ToggleItem';
11
+ export { classes as filterClasses } from './filterClasses';
12
+ export { default as FilterButtons } from './FilterButtons';