@ndla/video-search 4.1.47 → 5.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.
@@ -3,16 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
7
- var _propTypes = _interopRequireDefault(require("prop-types"));
6
+ exports.VideoSearch = void 0;
7
+ var _base = _interopRequireDefault(require("@emotion/styled/base"));
8
8
  var _react = require("react");
9
- var _reactBemHelper = _interopRequireDefault(require("react-bem-helper"));
10
- var _pager = _interopRequireDefault(require("@ndla/pager"));
11
- var _videoHelpers = require("./videoHelpers");
12
- var _VideoLoadMoreButton = _interopRequireDefault(require("./VideoLoadMoreButton"));
13
- var _VideoSearchForm = _interopRequireDefault(require("./VideoSearchForm"));
14
- var _VideoSearchList = _interopRequireDefault(require("./VideoSearchList"));
15
- var _VideoTabs = _interopRequireDefault(require("./VideoTabs"));
9
+ var _button = require("@ndla/button");
10
+ var _core = require("@ndla/core");
11
+ var _forms = require("@ndla/forms");
12
+ var _icons = require("@ndla/icons");
13
+ var _util = require("@ndla/util");
14
+ var _VideoResultList = require("./VideoResultList");
16
15
  var _jsxRuntime = require("@emotion/react/jsx-runtime");
17
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
17
  /**
@@ -23,242 +22,89 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
23
22
  *
24
23
  */
25
24
 
26
- const classes = new _reactBemHelper.default({
27
- name: 'video-search',
28
- prefix: 'c-'
29
- });
30
- class VideoSearch extends _react.Component {
31
- constructor() {
32
- super();
33
- this.state = {
34
- queryObject: {
35
- query: '',
36
- offset: 0,
25
+ const VideoSearchWrapper = /*#__PURE__*/(0, _base.default)("div", {
26
+ target: "eyp4xih1",
27
+ label: "VideoSearchWrapper"
28
+ })("display:flex;flex-direction:column;align-items:center;gap:", _core.spacing.normal, ";border:1px solid ", _core.colors.brand.light, ";border-radius:", _core.misc.borderRadius, ";padding:", _core.spacing.normal, ";>form{width:100%;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZGVvU2VhcmNoLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQ3FDIiwiZmlsZSI6IlZpZGVvU2VhcmNoLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEZvcm1FdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBCdXR0b25WMiB9IGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgeyBjb2xvcnMsIG1pc2MsIHNwYWNpbmcgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBJbnB1dFYzLCBMYWJlbCB9IGZyb20gJ0BuZGxhL2Zvcm1zJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdAbmRsYS9pY29ucyc7XG5pbXBvcnQgeyBCcmlnaHRjb3ZlQXBpVHlwZSB9IGZyb20gJ0BuZGxhL3R5cGVzLWVtYmVkJztcbmltcG9ydCB7IHVzZVByZXZpb3VzIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgeyBWaWRlb1Jlc3VsdExpc3QgfSBmcm9tICcuL1ZpZGVvUmVzdWx0TGlzdCc7XG5cbmV4cG9ydCB0eXBlIFRyYW5zbGF0aW9ucyA9IHtcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2VhcmNoQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgbG9hZE1vcmVWaWRlb3M6IHN0cmluZztcbiAgbm9SZXN1bHRzOiBzdHJpbmc7XG4gIGlzMzYwVmlkZW86IHN0cmluZztcbiAgcHJldmlld1ZpZGVvOiBzdHJpbmc7XG4gIGFkZFZpZGVvOiBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBvblZpZGVvU2VsZWN0OiAodmlkZW86IEJyaWdodGNvdmVBcGlUeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hWaWRlb3M6IChxdWVyeTogVmlkZW9RdWVyeVR5cGUpID0+IFByb21pc2U8QnJpZ2h0Y292ZUFwaVR5cGVbXT47XG4gIG9uRXJyb3I6IChlOiB1bmtub3duKSA9PiB2b2lkO1xuICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucztcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9RdWVyeVR5cGUge1xuICBxdWVyeTogc3RyaW5nO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbn1cblxuY29uc3QgVmlkZW9TZWFyY2hXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAke3NwYWNpbmcubm9ybWFsfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHtjb2xvcnMuYnJhbmQubGlnaHR9O1xuICBib3JkZXItcmFkaXVzOiAke21pc2MuYm9yZGVyUmFkaXVzfTtcbiAgcGFkZGluZzogJHtzcGFjaW5nLm5vcm1hbH07XG4gID4gZm9ybSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEZvcm1Db250cm9sID0gc3R5bGVkKEZvcm1Db250cm9sKWBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAke3NwYWNpbmcuc21hbGx9O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBidXR0b24ge1xuICAgIG1pbi13aWR0aDogJHtzcGFjaW5nLnh4bGFyZ2V9O1xuICAgIGhlaWdodDogJHtzcGFjaW5nLmxhcmdlfTtcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFZpZGVvU2VhcmNoID0gKHsgb25WaWRlb1NlbGVjdCwgc2VhcmNoVmlkZW9zLCBvbkVycm9yLCB0cmFuc2xhdGlvbnMsIGxvY2FsZSB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbdmlkZW9zLCBzZXRWaWRlb3NdID0gdXNlU3RhdGU8QnJpZ2h0Y292ZUFwaVR5cGVbXT4oW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBwcmV2aW91c1F1ZXJ5ID0gdXNlUHJldmlvdXMocXVlcnkpO1xuXG4gIGNvbnN0IGZldGNoVmlkZW9zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHF1ZXJ5OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0FwcGVuZGluZyA9IHF1ZXJ5ID09PSBwcmV2aW91c1F1ZXJ5O1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgc2VhcmNoVmlkZW9zKHsgcXVlcnksIG9mZnNldDogb2Zmc2V0LCBsaW1pdDogMTAgfSk7XG4gICAgICAgIHNldFZpZGVvcygocHJldikgPT4gKGlzQXBwZW5kaW5nID8gcHJldi5jb25jYXQocmVzdWx0cykgOiByZXN1bHRzKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICB9XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH0sXG4gICAgW3NlYXJjaFZpZGVvcywgcHJldmlvdXNRdWVyeSwgb25FcnJvcl0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFZpZGVvcygnJywgMCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25TdWJtaXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBzZXRPZmZzZXQoMCk7XG4gICAgICBmZXRjaFZpZGVvcyhxdWVyeSwgb2Zmc2V0KTtcbiAgICB9LFxuICAgIFtmZXRjaFZpZGVvcywgb2Zmc2V0LCBxdWVyeV0sXG4gICk7XG5cbiAgY29uc3Qgb25TaG93TW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXdPZmZzZXQgPSBvZmZzZXQgKyAxMDtcbiAgICBzZXRPZmZzZXQobmV3T2Zmc2V0KTtcbiAgICBmZXRjaFZpZGVvcyhxdWVyeSwgbmV3T2Zmc2V0KTtcbiAgfSwgW2ZldGNoVmlkZW9zLCBvZmZzZXQsIHF1ZXJ5XSk7XG5cbiAgY29uc3Qgb25RdWVyeUNoYW5nZSA9IHVzZUNhbGxiYWNrKChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZGVvU2VhcmNoV3JhcHBlcj5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgIDxTdHlsZWRGb3JtQ29udHJvbCBpZD1cInZpZGVvLXNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgIDxMYWJlbCB2aXN1YWxseUhpZGRlbj57dHJhbnNsYXRpb25zLnNlYXJjaFBsYWNlaG9sZGVyfTwvTGFiZWw+XG4gICAgICAgICAgPElucHV0VjMgdHlwZT1cInNlYXJjaFwiIHZhbHVlPXtxdWVyeX0gb25DaGFuZ2U9e29uUXVlcnlDaGFuZ2V9IHBsYWNlaG9sZGVyPXt0cmFuc2xhdGlvbnMuc2VhcmNoUGxhY2Vob2xkZXJ9IC8+XG4gICAgICAgICAgPEJ1dHRvblYyIHR5cGU9XCJzdWJtaXRcIj57dHJhbnNsYXRpb25zLnNlYXJjaEJ1dHRvblRpdGxlfTwvQnV0dG9uVjI+XG4gICAgICAgIDwvU3R5bGVkRm9ybUNvbnRyb2w+XG4gICAgICA8L2Zvcm0+XG4gICAgICB7dmlkZW9zLmxlbmd0aCA9PT0gMCAmJiAhaXNMb2FkaW5nID8gKFxuICAgICAgICA8cD57dHJhbnNsYXRpb25zLm5vUmVzdWx0c308L3A+XG4gICAgICApIDogKFxuICAgICAgICA8VmlkZW9SZXN1bHRMaXN0IHZpZGVvcz17dmlkZW9zfSBsb2NhbGU9e2xvY2FsZX0gb25TZWxlY3RWaWRlbz17b25WaWRlb1NlbGVjdH0gdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9IC8+XG4gICAgICApfVxuICAgICAge2lzTG9hZGluZyA/IDxTcGlubmVyIC8+IDogPEJ1dHRvblYyIG9uQ2xpY2s9e29uU2hvd01vcmV9Pnt0cmFuc2xhdGlvbnMubG9hZE1vcmVWaWRlb3N9PC9CdXR0b25WMj59XG4gICAgPC9WaWRlb1NlYXJjaFdyYXBwZXI+XG4gICk7XG59O1xuIl19 */"));
29
+ const StyledFormControl = /*#__PURE__*/(0, _base.default)(_forms.FormControl, {
30
+ target: "eyp4xih0",
31
+ label: "StyledFormControl"
32
+ })("display:flex;gap:", _core.spacing.small, ";flex-direction:row;align-items:center;button{min-width:", _core.spacing.xxlarge, ";height:", _core.spacing.large, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZGVvU2VhcmNoLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1RDZDIiwiZmlsZSI6IlZpZGVvU2VhcmNoLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEZvcm1FdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBCdXR0b25WMiB9IGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgeyBjb2xvcnMsIG1pc2MsIHNwYWNpbmcgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBJbnB1dFYzLCBMYWJlbCB9IGZyb20gJ0BuZGxhL2Zvcm1zJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdAbmRsYS9pY29ucyc7XG5pbXBvcnQgeyBCcmlnaHRjb3ZlQXBpVHlwZSB9IGZyb20gJ0BuZGxhL3R5cGVzLWVtYmVkJztcbmltcG9ydCB7IHVzZVByZXZpb3VzIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgeyBWaWRlb1Jlc3VsdExpc3QgfSBmcm9tICcuL1ZpZGVvUmVzdWx0TGlzdCc7XG5cbmV4cG9ydCB0eXBlIFRyYW5zbGF0aW9ucyA9IHtcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2VhcmNoQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgbG9hZE1vcmVWaWRlb3M6IHN0cmluZztcbiAgbm9SZXN1bHRzOiBzdHJpbmc7XG4gIGlzMzYwVmlkZW86IHN0cmluZztcbiAgcHJldmlld1ZpZGVvOiBzdHJpbmc7XG4gIGFkZFZpZGVvOiBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBvblZpZGVvU2VsZWN0OiAodmlkZW86IEJyaWdodGNvdmVBcGlUeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hWaWRlb3M6IChxdWVyeTogVmlkZW9RdWVyeVR5cGUpID0+IFByb21pc2U8QnJpZ2h0Y292ZUFwaVR5cGVbXT47XG4gIG9uRXJyb3I6IChlOiB1bmtub3duKSA9PiB2b2lkO1xuICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucztcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9RdWVyeVR5cGUge1xuICBxdWVyeTogc3RyaW5nO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbn1cblxuY29uc3QgVmlkZW9TZWFyY2hXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAke3NwYWNpbmcubm9ybWFsfTtcbiAgYm9yZGVyOiAxcHggc29saWQgJHtjb2xvcnMuYnJhbmQubGlnaHR9O1xuICBib3JkZXItcmFkaXVzOiAke21pc2MuYm9yZGVyUmFkaXVzfTtcbiAgcGFkZGluZzogJHtzcGFjaW5nLm5vcm1hbH07XG4gID4gZm9ybSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEZvcm1Db250cm9sID0gc3R5bGVkKEZvcm1Db250cm9sKWBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAke3NwYWNpbmcuc21hbGx9O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBidXR0b24ge1xuICAgIG1pbi13aWR0aDogJHtzcGFjaW5nLnh4bGFyZ2V9O1xuICAgIGhlaWdodDogJHtzcGFjaW5nLmxhcmdlfTtcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFZpZGVvU2VhcmNoID0gKHsgb25WaWRlb1NlbGVjdCwgc2VhcmNoVmlkZW9zLCBvbkVycm9yLCB0cmFuc2xhdGlvbnMsIGxvY2FsZSB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbdmlkZW9zLCBzZXRWaWRlb3NdID0gdXNlU3RhdGU8QnJpZ2h0Y292ZUFwaVR5cGVbXT4oW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBwcmV2aW91c1F1ZXJ5ID0gdXNlUHJldmlvdXMocXVlcnkpO1xuXG4gIGNvbnN0IGZldGNoVmlkZW9zID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHF1ZXJ5OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0FwcGVuZGluZyA9IHF1ZXJ5ID09PSBwcmV2aW91c1F1ZXJ5O1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgc2VhcmNoVmlkZW9zKHsgcXVlcnksIG9mZnNldDogb2Zmc2V0LCBsaW1pdDogMTAgfSk7XG4gICAgICAgIHNldFZpZGVvcygocHJldikgPT4gKGlzQXBwZW5kaW5nID8gcHJldi5jb25jYXQocmVzdWx0cykgOiByZXN1bHRzKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICB9XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH0sXG4gICAgW3NlYXJjaFZpZGVvcywgcHJldmlvdXNRdWVyeSwgb25FcnJvcl0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFZpZGVvcygnJywgMCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25TdWJtaXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBzZXRPZmZzZXQoMCk7XG4gICAgICBmZXRjaFZpZGVvcyhxdWVyeSwgb2Zmc2V0KTtcbiAgICB9LFxuICAgIFtmZXRjaFZpZGVvcywgb2Zmc2V0LCBxdWVyeV0sXG4gICk7XG5cbiAgY29uc3Qgb25TaG93TW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXdPZmZzZXQgPSBvZmZzZXQgKyAxMDtcbiAgICBzZXRPZmZzZXQobmV3T2Zmc2V0KTtcbiAgICBmZXRjaFZpZGVvcyhxdWVyeSwgbmV3T2Zmc2V0KTtcbiAgfSwgW2ZldGNoVmlkZW9zLCBvZmZzZXQsIHF1ZXJ5XSk7XG5cbiAgY29uc3Qgb25RdWVyeUNoYW5nZSA9IHVzZUNhbGxiYWNrKChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpZGVvU2VhcmNoV3JhcHBlcj5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgIDxTdHlsZWRGb3JtQ29udHJvbCBpZD1cInZpZGVvLXNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgIDxMYWJlbCB2aXN1YWxseUhpZGRlbj57dHJhbnNsYXRpb25zLnNlYXJjaFBsYWNlaG9sZGVyfTwvTGFiZWw+XG4gICAgICAgICAgPElucHV0VjMgdHlwZT1cInNlYXJjaFwiIHZhbHVlPXtxdWVyeX0gb25DaGFuZ2U9e29uUXVlcnlDaGFuZ2V9IHBsYWNlaG9sZGVyPXt0cmFuc2xhdGlvbnMuc2VhcmNoUGxhY2Vob2xkZXJ9IC8+XG4gICAgICAgICAgPEJ1dHRvblYyIHR5cGU9XCJzdWJtaXRcIj57dHJhbnNsYXRpb25zLnNlYXJjaEJ1dHRvblRpdGxlfTwvQnV0dG9uVjI+XG4gICAgICAgIDwvU3R5bGVkRm9ybUNvbnRyb2w+XG4gICAgICA8L2Zvcm0+XG4gICAgICB7dmlkZW9zLmxlbmd0aCA9PT0gMCAmJiAhaXNMb2FkaW5nID8gKFxuICAgICAgICA8cD57dHJhbnNsYXRpb25zLm5vUmVzdWx0c308L3A+XG4gICAgICApIDogKFxuICAgICAgICA8VmlkZW9SZXN1bHRMaXN0IHZpZGVvcz17dmlkZW9zfSBsb2NhbGU9e2xvY2FsZX0gb25TZWxlY3RWaWRlbz17b25WaWRlb1NlbGVjdH0gdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9IC8+XG4gICAgICApfVxuICAgICAge2lzTG9hZGluZyA/IDxTcGlubmVyIC8+IDogPEJ1dHRvblYyIG9uQ2xpY2s9e29uU2hvd01vcmV9Pnt0cmFuc2xhdGlvbnMubG9hZE1vcmVWaWRlb3N9PC9CdXR0b25WMj59XG4gICAgPC9WaWRlb1NlYXJjaFdyYXBwZXI+XG4gICk7XG59O1xuIl19 */"));
33
+ const VideoSearch = _ref => {
34
+ let {
35
+ onVideoSelect,
36
+ searchVideos,
37
+ onError,
38
+ translations,
39
+ locale
40
+ } = _ref;
41
+ const [query, setQuery] = (0, _react.useState)('');
42
+ const [offset, setOffset] = (0, _react.useState)(0);
43
+ const [videos, setVideos] = (0, _react.useState)([]);
44
+ const [isLoading, setIsLoading] = (0, _react.useState)(false);
45
+ const previousQuery = (0, _util.usePrevious)(query);
46
+ const fetchVideos = (0, _react.useCallback)(async (query, offset) => {
47
+ setIsLoading(true);
48
+ try {
49
+ const isAppending = query === previousQuery;
50
+ const results = await searchVideos({
51
+ query,
52
+ offset: offset,
37
53
  limit: 10
38
- },
39
- videos: [],
40
- selectedType: 'brightcove',
41
- // Default
42
- selectedVideo: undefined,
43
- lastPage: 0,
44
- searching: false
45
- };
46
- this.submitVideoSearchQuery = this.submitVideoSearchQuery.bind(this);
47
- this.changeQueryPage = this.changeQueryPage.bind(this);
48
- this.onSearchTypeChange = this.onSearchTypeChange.bind(this);
49
- this.searchVideos = this.searchVideos.bind(this);
50
- this.onVideoPreview = this.onVideoPreview.bind(this);
51
- this.onSelectVideo = this.onSelectVideo.bind(this);
52
- this.loadMoreVideos = this.loadMoreVideos.bind(this);
53
- }
54
- componentDidMount() {
55
- this.searchVideos(this.state.queryObject);
56
- }
57
- onVideoPreview(video) {
58
- this.setState({
59
- selectedVideo: video
60
- });
61
- }
62
- onSelectVideo(video) {
63
- const {
64
- selectedType
65
- } = this.state;
66
- const {
67
- onVideoSelect
68
- } = this.props;
69
- this.setState({
70
- selectedVideo: undefined
71
- });
72
- onVideoSelect(video, selectedType);
73
- }
74
- onSearchTypeChange(type) {
75
- let queryObject;
76
- if (type === 'youtube') {
77
- queryObject = {
78
- query: '',
79
- offset: undefined,
80
- limit: undefined,
81
- page: 1,
82
- start: 1
83
- };
84
- } else {
85
- queryObject = {
86
- query: '',
87
- offset: 0,
88
- limit: 10,
89
- page: undefined,
90
- start: undefined
91
- };
92
- }
93
- this.setState({
94
- queryObject,
95
- selectedType: type,
96
- selectedVideo: undefined,
97
- videos: [],
98
- searching: true
99
- }, this.searchVideos(queryObject, type));
100
- }
101
- loadMoreVideos() {
102
- const {
103
- queryObject,
104
- videos,
105
- selectedType
106
- } = this.state;
107
- const {
108
- searchVideos,
109
- onError
110
- } = this.props;
111
- this.setState({
112
- searching: true
113
- });
114
- searchVideos({
115
- ...queryObject,
116
- offset: queryObject.offset + 10
117
- }, selectedType).then(result => {
118
- this.setState(prevState => ({
119
- queryObject: {
120
- ...prevState.queryObject,
121
- offset: prevState.queryObject.offset + 10
122
- },
123
- videos: videos.concat(result),
124
- searching: false
125
- }));
126
- }).catch(err => {
127
- onError(err);
128
- this.setState({
129
- searching: false
130
- });
131
- });
132
- }
133
- changeQueryPage(page) {
134
- this.setState({
135
- lastPage: 0
136
- });
137
- const {
138
- queryObject
139
- } = this.state;
140
- const nextIndex = queryObject.start + (page.page - queryObject.page) * 10;
141
- const newQueryObject = {
142
- ...queryObject,
143
- ...page,
144
- start: nextIndex
145
- };
146
- this.searchVideos(newQueryObject);
147
- }
148
- submitVideoSearchQuery(query) {
149
- const queryObject = {
150
- ...this.state.queryObject,
151
- query
152
- };
153
- this.searchVideos(queryObject);
154
- }
155
- searchVideos(queryObject) {
156
- let selectedType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state.selectedType;
157
- const {
158
- searchVideos,
159
- onError
160
- } = this.props;
161
- searchVideos(queryObject, selectedType).then(result => {
162
- if (selectedType === this.state.selectedType) {
163
- this.setState(prevState => ({
164
- queryObject: {
165
- ...prevState.queryObject,
166
- query: queryObject.query,
167
- page: queryObject.page,
168
- start: queryObject.start,
169
- offset: 0
170
- },
171
- videos: selectedType === 'youtube' ? result.items : result,
172
- searching: false,
173
- lastPage: (0, _videoHelpers.getLastPage)(result, selectedType)
174
- }));
175
- }
176
- }).catch(err => {
177
- onError(err);
178
- this.setState({
179
- searching: false
180
54
  });
181
- });
182
- }
183
- render() {
184
- const {
185
- translations,
186
- locale,
187
- enabledSources
188
- } = this.props;
189
- const {
190
- queryObject,
191
- lastPage,
192
- videos,
193
- selectedVideo,
194
- selectedType,
195
- searching
196
- } = this.state;
197
- const {
198
- query,
199
- page
200
- } = queryObject;
201
- const paginationItem = () => {
202
- if (selectedType === 'brightcove') {
203
- return (0, _jsxRuntime.jsx)(_VideoLoadMoreButton.default, {
204
- searching: searching,
205
- videos: videos,
206
- loadMoreVideos: this.loadMoreVideos,
207
- limit: queryObject.limit,
208
- translations: translations
209
- });
210
- }
211
- return (0, _jsxRuntime.jsx)(_pager.default, {
212
- page: page || 1,
213
- lastPage: lastPage,
214
- onClick: this.changeQueryPage
215
- });
216
- };
217
- const searchListTabs = enabledSources.map(source => ({
218
- title: source,
219
- id: source,
220
- content: (0, _jsxRuntime.jsx)("div", {
221
- ...classes('list'),
222
- children: selectedType === source.toLowerCase() && (0, _jsxRuntime.jsx)(_VideoSearchList.default, {
223
- translations: translations,
224
- selectedType: source.toLowerCase(),
225
- selectedVideo: selectedVideo,
226
- videos: videos,
227
- locale: locale,
228
- onVideoPreview: this.onVideoPreview,
229
- searching: searching,
230
- onSelectVideo: this.onSelectVideo
231
- })
55
+ setVideos(prev => isAppending ? prev.concat(results) : results);
56
+ } catch (e) {
57
+ onError(e);
58
+ }
59
+ setIsLoading(false);
60
+ }, [searchVideos, previousQuery, onError]);
61
+ (0, _react.useEffect)(() => {
62
+ fetchVideos('', 0);
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
+ }, []);
65
+ const onSubmit = (0, _react.useCallback)(e => {
66
+ e.preventDefault();
67
+ e.stopPropagation();
68
+ setOffset(0);
69
+ fetchVideos(query, offset);
70
+ }, [fetchVideos, offset, query]);
71
+ const onShowMore = (0, _react.useCallback)(() => {
72
+ const newOffset = offset + 10;
73
+ setOffset(newOffset);
74
+ fetchVideos(query, newOffset);
75
+ }, [fetchVideos, offset, query]);
76
+ const onQueryChange = (0, _react.useCallback)(e => {
77
+ setQuery(e.target.value);
78
+ }, []);
79
+ return (0, _jsxRuntime.jsxs)(VideoSearchWrapper, {
80
+ children: [(0, _jsxRuntime.jsx)("form", {
81
+ onSubmit: onSubmit,
82
+ children: (0, _jsxRuntime.jsxs)(StyledFormControl, {
83
+ id: "video-search-field",
84
+ children: [(0, _jsxRuntime.jsx)(_forms.Label, {
85
+ visuallyHidden: true,
86
+ children: translations.searchPlaceholder
87
+ }), (0, _jsxRuntime.jsx)(_forms.InputV3, {
88
+ type: "search",
89
+ value: query,
90
+ onChange: onQueryChange,
91
+ placeholder: translations.searchPlaceholder
92
+ }), (0, _jsxRuntime.jsx)(_button.ButtonV2, {
93
+ type: "submit",
94
+ children: translations.searchButtonTitle
95
+ })]
232
96
  })
233
- }));
234
- return (0, _jsxRuntime.jsxs)("div", {
235
- ...classes(),
236
- children: [(0, _jsxRuntime.jsx)(_VideoSearchForm.default, {
237
- onSearchQuerySubmit: this.submitVideoSearchQuery,
238
- query: query,
239
- searching: searching,
240
- translations: translations
241
- }), (0, _jsxRuntime.jsx)(_VideoTabs.default, {
242
- searchTypes: selectedType,
243
- tabs: searchListTabs,
244
- onSearchTypeChange: this.onSearchTypeChange
245
- }), paginationItem()]
246
- });
247
- }
248
- }
249
- VideoSearch.propTypes = {
250
- onVideoSelect: _propTypes.default.func.isRequired,
251
- searchVideos: _propTypes.default.func.isRequired,
252
- onError: _propTypes.default.func.isRequired,
253
- translations: _propTypes.default.shape({
254
- searchPlaceholder: _propTypes.default.string.isRequired,
255
- searchButtonTitle: _propTypes.default.string.isRequired,
256
- loadMoreVideos: _propTypes.default.string.isRequired
257
- }),
258
- locale: _propTypes.default.string.isRequired,
259
- enabledSources: _propTypes.default.arrayOf(_propTypes.default.string)
260
- };
261
- VideoSearch.defaultProps = {
262
- enabledSources: ['Brightcove']
97
+ }), videos.length === 0 && !isLoading ? (0, _jsxRuntime.jsx)("p", {
98
+ children: translations.noResults
99
+ }) : (0, _jsxRuntime.jsx)(_VideoResultList.VideoResultList, {
100
+ videos: videos,
101
+ locale: locale,
102
+ onSelectVideo: onVideoSelect,
103
+ translations: translations
104
+ }), isLoading ? (0, _jsxRuntime.jsx)(_icons.Spinner, {}) : (0, _jsxRuntime.jsx)(_button.ButtonV2, {
105
+ onClick: onShowMore,
106
+ children: translations.loadMoreVideos
107
+ })]
108
+ });
263
109
  };
264
- var _default = exports.default = VideoSearch;
110
+ exports.VideoSearch = VideoSearch;
package/lib/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2017-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
+ import { VideoSearch } from './VideoSearch';
9
+ export type { VideoQueryType } from './VideoSearch';
10
+ export default VideoSearch;
package/lib/index.js CHANGED
@@ -4,8 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _VideoSearch = _interopRequireDefault(require("./VideoSearch"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ var _VideoSearch = require("./VideoSearch");
9
8
  /**
10
9
  * Copyright (c) 2017-present, NDLA.
11
10
  *
@@ -13,4 +12,4 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
13
12
  * LICENSE file in the root directory of this source tree.
14
13
  *
15
14
  */
16
- var _default = exports.default = _VideoSearch.default;
15
+ var _default = exports.default = _VideoSearch.VideoSearch;
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@ndla/video-search",
3
- "version": "4.1.47",
3
+ "version": "5.0.0",
4
4
  "description": "A simple library for searching NDLA videos",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
8
+ "types": "lib/index.d.ts",
8
9
  "scripts": {
9
- "build": "node ../../scripts/build.js package"
10
+ "build": "node ../../scripts/build.js package",
11
+ "build:types": "tsc -p tsconfig.build.json",
12
+ "prepublish": "yarn build:types"
10
13
  },
11
14
  "repository": {
12
15
  "type": "git",
@@ -18,29 +21,29 @@
18
21
  ],
19
22
  "author": "ndla@knowit.no",
20
23
  "files": [
21
- "scss",
22
24
  "lib",
23
25
  "es"
24
26
  ],
25
27
  "peerDependencies": {
26
28
  "@emotion/react": "^11.10.4",
29
+ "@emotion/styled": "^11.10.4",
27
30
  "react": ">= 16.8.0",
28
- "react-bem-helper": "^1.4.1"
31
+ "react-dom": ">= 16.8.0"
29
32
  },
30
33
  "devDependencies": {
31
- "prop-types": "^15.8.1"
34
+ "@ndla/types-embed": "^4.0.11"
32
35
  },
33
36
  "dependencies": {
34
37
  "@ndla/button": "^12.0.18",
38
+ "@ndla/core": "^4.3.0",
39
+ "@ndla/forms": "^5.2.8",
35
40
  "@ndla/icons": "^4.2.5",
36
41
  "@ndla/licenses": "^7.2.4",
37
42
  "@ndla/notion": "^6.0.19",
38
- "@ndla/pager": "^2.2.43",
39
- "@ndla/tabs": "^3.2.6",
40
- "react-bem-helper": "^1.4.1"
43
+ "@ndla/util": "^4.0.3"
41
44
  },
42
45
  "publishConfig": {
43
46
  "access": "public"
44
47
  },
45
- "gitHead": "33f14792431d5c46241455f1f5e05ac9a81ab7d6"
48
+ "gitHead": "674b17d155fc4c43b541e179821826bea1d47327"
46
49
  }
@@ -1,37 +0,0 @@
1
- /**
2
- * Copyright (c) 2017-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 PropTypes from 'prop-types';
10
- import BEMHelper from 'react-bem-helper';
11
- import { ButtonV2 } from '@ndla/button';
12
- import { Cross } from '@ndla/icons/action';
13
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
14
- import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
15
- const classes = new BEMHelper({
16
- name: 'video-preview',
17
- prefix: 'c-'
18
- });
19
- export default function PreviewVideo(_ref) {
20
- let {
21
- onVideoPreview,
22
- children
23
- } = _ref;
24
- return _jsxs("div", {
25
- ...classes(),
26
- children: [_jsx(ButtonV2, {
27
- ...classes('close'),
28
- variant: "stripped",
29
- onClick: () => onVideoPreview(undefined),
30
- children: _jsx(Cross, {})
31
- }), children]
32
- });
33
- }
34
- PreviewVideo.propTypes = {
35
- children: PropTypes.node,
36
- onVideoPreview: PropTypes.func.isRequired
37
- };
@@ -1,51 +0,0 @@
1
- /**
2
- * Copyright (c) 2017-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 PropTypes from 'prop-types';
10
- import BEMHelper from 'react-bem-helper';
11
- import { ButtonV2 } from '@ndla/button';
12
- import { BrightcoveShape, YouTubeShape } from './shapes';
13
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
14
- const classes = new BEMHelper({
15
- name: 'video-search',
16
- prefix: 'c-'
17
- });
18
- const VideoLoadMoreButton = props => {
19
- const {
20
- videos,
21
- searching,
22
- limit,
23
- translations,
24
- loadMoreVideos
25
- } = props;
26
- if (!videos || videos.length === 0 || videos.length % limit !== 0) {
27
- return null;
28
- }
29
- return _jsx("div", {
30
- ...classes('load-videos'),
31
- children: _jsx(ButtonV2, {
32
- disabled: searching,
33
- onClick: loadMoreVideos,
34
- children: searching ? _jsx("div", {
35
- ...classes('spinner')
36
- }) : translations.loadMoreVideos
37
- })
38
- });
39
- };
40
- VideoLoadMoreButton.propTypes = {
41
- searching: PropTypes.bool.isRequired,
42
- videos: PropTypes.oneOfType([PropTypes.arrayOf(BrightcoveShape), PropTypes.arrayOf(YouTubeShape)]),
43
- translations: PropTypes.shape({
44
- searchPlaceholder: PropTypes.string.isRequired,
45
- searchButtonTitle: PropTypes.string.isRequired,
46
- loadMoreVideos: PropTypes.string.isRequired
47
- }),
48
- limit: PropTypes.number.isRequired,
49
- loadMoreVideos: PropTypes.func.isRequired
50
- };
51
- export default VideoLoadMoreButton;
@@ -1,78 +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 PropTypes from 'prop-types';
10
- import { Component } from 'react';
11
- import BEMHelper from 'react-bem-helper';
12
- import { ButtonV2 } from '@ndla/button';
13
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
14
- import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
15
- const classes = new BEMHelper({
16
- name: 'video-search',
17
- prefix: 'c-'
18
- });
19
- class SearchForm extends Component {
20
- constructor(props) {
21
- super(props);
22
- this.state = {
23
- query: props.query
24
- };
25
- this.handleQueryChange = this.handleQueryChange.bind(this);
26
- this.handleSubmit = this.handleSubmit.bind(this);
27
- this.onKeyPress = this.onKeyPress.bind(this);
28
- }
29
- onKeyPress(evt) {
30
- if (evt.key === 'Enter') {
31
- this.handleSubmit(evt);
32
- }
33
- }
34
- handleQueryChange(evt) {
35
- this.setState({
36
- query: evt.target.value
37
- });
38
- }
39
- handleSubmit(evt) {
40
- evt.preventDefault();
41
- this.props.onSearchQuerySubmit(this.state.query);
42
- }
43
- render() {
44
- const {
45
- searching,
46
- translations
47
- } = this.props;
48
- return _jsxs("div", {
49
- ...classes('form'),
50
- children: [_jsx("input", {
51
- ...classes('form-query'),
52
- type: "text",
53
- onChange: this.handleQueryChange,
54
- onKeyPress: this.onKeyPress,
55
- value: this.state.query,
56
- placeholder: translations.searchPlaceholder
57
- }), _jsx(ButtonV2, {
58
- ...classes('form-button'),
59
- onClick: this.handleSubmit,
60
- disabled: searching,
61
- children: translations.searchButtonTitle
62
- })]
63
- });
64
- }
65
- }
66
- SearchForm.propTypes = {
67
- query: PropTypes.string,
68
- searching: PropTypes.bool.isRequired,
69
- onSearchQuerySubmit: PropTypes.func.isRequired,
70
- translations: PropTypes.shape({
71
- searchPlaceholder: PropTypes.string.isRequired,
72
- searchButtonTitle: PropTypes.string.isRequired
73
- })
74
- };
75
- SearchForm.defaultProps = {
76
- query: ''
77
- };
78
- export default SearchForm;