@panneau/medias 3.0.139 → 3.0.140

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 (3) hide show
  1. package/es/index.js +72 -40
  2. package/lib/index.js +70 -38
  3. package/package.json +12 -12
package/es/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
2
- import React, { useContext, useMemo, useCallback, useState } from 'react';
2
+ import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
5
5
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
6
6
  import classNames from 'classnames';
7
7
  import { PropTypes as PropTypes$1 } from '@panneau/core';
8
- import { useQuery } from '@panneau/core/hooks';
8
+ import { useQuery, useItemSelection } from '@panneau/core/hooks';
9
9
  import Buttons from '@panneau/element-buttons';
10
10
  import Grid from '@panneau/element-grid';
11
11
  import Icon from '@panneau/element-icon';
@@ -372,6 +372,9 @@ var propTypes$4 = {
372
372
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
373
373
  theme: PropTypes.string,
374
374
  tableProps: PropTypes.bool,
375
+ onItemsChange: PropTypes.func,
376
+ selectedCount: PropTypes.number,
377
+ onClearSelected: PropTypes.func,
375
378
  className: PropTypes.string
376
379
  };
377
380
  var defaultProps$4 = {
@@ -381,7 +384,7 @@ var defaultProps$4 = {
381
384
  // fields: null,
382
385
  query: null,
383
386
  baseUrl: null,
384
- layout: null,
387
+ layout: 'table',
385
388
  layouts: [{
386
389
  id: 'table',
387
390
  label: /*#__PURE__*/React.createElement(Icon, {
@@ -395,6 +398,9 @@ var defaultProps$4 = {
395
398
  }],
396
399
  theme: null,
397
400
  tableProps: null,
401
+ onItemsChange: null,
402
+ selectedCount: null,
403
+ onClearSelected: null,
398
404
  className: null
399
405
  };
400
406
  function MediasBrowser(_ref) {
@@ -407,6 +413,9 @@ function MediasBrowser(_ref) {
407
413
  layouts = _ref.layouts,
408
414
  theme = _ref.theme,
409
415
  tableProps = _ref.tableProps,
416
+ onItemsChange = _ref.onItemsChange,
417
+ selectedCount = _ref.selectedCount,
418
+ onClearSelected = _ref.onClearSelected,
410
419
  className = _ref.className;
411
420
  var baseQuery = useMemo(function () {
412
421
  return initialQuery;
@@ -442,6 +451,9 @@ function MediasBrowser(_ref) {
442
451
  loading = _useMedias.loading,
443
452
  lastPage = _useMedias.lastPage,
444
453
  total = _useMedias.total;
454
+ useEffect(function () {
455
+ onItemsChange(items);
456
+ }, [items, onItemsChange]);
445
457
  var _useState = useState(initialLayout || 'grid'),
446
458
  _useState2 = _slicedToArray(_useState, 2),
447
459
  layout = _useState2[0],
@@ -452,6 +464,20 @@ function MediasBrowser(_ref) {
452
464
  var onClickLayout = useCallback(function (lay) {
453
465
  setLayout(lay);
454
466
  }, [setLayout]);
467
+ var pagination = /*#__PURE__*/React.createElement(Pagination, {
468
+ page: page,
469
+ lastPage: lastPage,
470
+ total: total,
471
+ url: baseUrl,
472
+ query: query,
473
+ onClickPage: onPageChange,
474
+ theme: theme,
475
+ loading: loading,
476
+ selectedCount: selectedCount,
477
+ onClearSelected: onClearSelected,
478
+ withPreviousNext: true,
479
+ alwaysShowButtons: true
480
+ });
455
481
  return /*#__PURE__*/React.createElement("div", {
456
482
  className: classNames([styles.container, className])
457
483
  }, /*#__PURE__*/React.createElement(Filters, {
@@ -478,18 +504,7 @@ function MediasBrowser(_ref) {
478
504
  className: 'px-3'
479
505
  });
480
506
  })
481
- }) : null, /*#__PURE__*/React.createElement(Pagination, {
482
- page: page,
483
- lastPage: lastPage,
484
- total: total,
485
- url: baseUrl,
486
- query: query,
487
- onClickPage: onPageChange,
488
- theme: theme,
489
- loading: loading,
490
- withPreviousNext: true,
491
- alwaysShowButtons: true
492
- })), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
507
+ }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
493
508
  items: items || [],
494
509
  component: MediaCard,
495
510
  componentProps: {
@@ -504,18 +519,7 @@ function MediasBrowser(_ref) {
504
519
  }, "\u2014")
505
520
  })), /*#__PURE__*/React.createElement("div", {
506
521
  className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
507
- }, /*#__PURE__*/React.createElement(Pagination, {
508
- page: page,
509
- lastPage: lastPage,
510
- total: total,
511
- url: baseUrl,
512
- query: query,
513
- onClickPage: onPageChange,
514
- theme: theme,
515
- loading: loading,
516
- withPreviousNext: true,
517
- alwaysShowButtons: true
518
- })));
522
+ }, pagination));
519
523
  }
520
524
  MediasBrowser.propTypes = propTypes$4;
521
525
  MediasBrowser.defaultProps = defaultProps$4;
@@ -537,46 +541,74 @@ function MediasBrowserContainer(_ref) {
537
541
  MediasBrowserContainer.propTypes = propTypes$3;
538
542
  MediasBrowserContainer.defaultProps = defaultProps$3;
539
543
 
540
- var _excluded$2 = ["value", "onChange", "onConfirm", "onClose", "multiple", "className"];
544
+ var _excluded$2 = ["value", "selectedItems", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "className"];
541
545
  var propTypes$2 = {
542
546
  // eslint-disable-next-line react/forbid-prop-types
543
- value: PropTypes.any,
547
+ value: PropTypes.arrayOf(PropTypes.shape({})),
548
+ selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
544
549
  onChange: PropTypes.func.isRequired,
545
550
  onConfirm: PropTypes.func.isRequired,
546
551
  onClose: PropTypes.func,
547
552
  multiple: PropTypes.bool,
553
+ withoutButtons: PropTypes.bool,
548
554
  className: PropTypes.string
549
555
  };
550
556
  var defaultProps$2 = {
551
557
  value: null,
558
+ selectedItems: null,
552
559
  onClose: null,
553
560
  multiple: false,
561
+ withoutButtons: false,
554
562
  className: null
555
563
  };
556
564
  function MediasPicker(_ref) {
557
565
  var value = _ref.value,
566
+ initialSelectedItems = _ref.selectedItems,
558
567
  onChange = _ref.onChange,
559
568
  onConfirm = _ref.onConfirm,
560
569
  onClose = _ref.onClose,
561
570
  multiple = _ref.multiple,
571
+ withoutButtons = _ref.withoutButtons,
562
572
  className = _ref.className,
563
573
  props = _objectWithoutProperties(_ref, _excluded$2);
564
- var onSelectionChange = useCallback(function (items) {
565
- if (onChange !== null) {
566
- onChange(items);
567
- }
568
- }, [onChange]);
574
+ var _useState = useState(value),
575
+ _useState2 = _slicedToArray(_useState, 2),
576
+ items = _useState2[0],
577
+ setItems = _useState2[1];
578
+ var onItemsChange = useCallback(function (pageItems) {
579
+ setItems(pageItems);
580
+ }, [setItems]);
569
581
  var disabled = value === null || value.length < 1;
582
+ var _useItemSelection = useItemSelection({
583
+ items: items,
584
+ selectedItems: initialSelectedItems,
585
+ onSelectionChange: onChange,
586
+ multipleSelection: multiple
587
+ }),
588
+ onSelectItem = _useItemSelection.onSelectItem,
589
+ onSelectPage = _useItemSelection.onSelectPage,
590
+ onClearSelected = _useItemSelection.onClearSelected,
591
+ pageSelected = _useItemSelection.pageSelected,
592
+ selectedCount = _useItemSelection.selectedCount,
593
+ selectedItems = _useItemSelection.selectedItems;
570
594
  return /*#__PURE__*/React.createElement("div", {
571
595
  className: className
572
596
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
573
597
  tableProps: {
574
598
  selectable: true,
575
599
  multipleSelection: multiple,
576
- onSelectionChange: onSelectionChange
577
- }
578
- }, props)), multiple ? /*#__PURE__*/React.createElement("div", {
600
+ onSelectItem: onSelectItem,
601
+ onSelectPage: onSelectPage,
602
+ selectedItems: selectedItems,
603
+ pageSelected: pageSelected
604
+ },
605
+ onItemsChange: onItemsChange,
606
+ selectedCount: selectedCount,
607
+ onClearSelected: onClearSelected
608
+ }, props)), multiple && !withoutButtons ? /*#__PURE__*/React.createElement("div", {
579
609
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
610
+ }, /*#__PURE__*/React.createElement("div", {
611
+ className: "btn-group"
580
612
  }, onClose !== null ? /*#__PURE__*/React.createElement(Button, {
581
613
  type: "button",
582
614
  theme: "secondary",
@@ -596,12 +628,12 @@ function MediasPicker(_ref) {
596
628
  outline: disabled,
597
629
  className: "d-block"
598
630
  }, /*#__PURE__*/React.createElement(FormattedMessage, {
599
- id: "UaVu03",
631
+ id: "rvOVCV",
600
632
  defaultMessage: [{
601
633
  "type": 0,
602
- "value": "Confirm"
634
+ "value": "Confirm selection"
603
635
  }]
604
- }))) : null);
636
+ })))) : null);
605
637
  }
606
638
  MediasPicker.propTypes = propTypes$2;
607
639
  MediasPicker.defaultProps = defaultProps$2;
package/lib/index.js CHANGED
@@ -376,6 +376,9 @@ var propTypes$4 = {
376
376
  layouts: PropTypes.arrayOf(PropTypes.shape({})),
377
377
  theme: PropTypes.string,
378
378
  tableProps: PropTypes.bool,
379
+ onItemsChange: PropTypes.func,
380
+ selectedCount: PropTypes.number,
381
+ onClearSelected: PropTypes.func,
379
382
  className: PropTypes.string
380
383
  };
381
384
  var defaultProps$4 = {
@@ -385,7 +388,7 @@ var defaultProps$4 = {
385
388
  // fields: null,
386
389
  query: null,
387
390
  baseUrl: null,
388
- layout: null,
391
+ layout: 'table',
389
392
  layouts: [{
390
393
  id: 'table',
391
394
  label: /*#__PURE__*/React.createElement(Icon, {
@@ -399,6 +402,9 @@ var defaultProps$4 = {
399
402
  }],
400
403
  theme: null,
401
404
  tableProps: null,
405
+ onItemsChange: null,
406
+ selectedCount: null,
407
+ onClearSelected: null,
402
408
  className: null
403
409
  };
404
410
  function MediasBrowser(_ref) {
@@ -411,6 +417,9 @@ function MediasBrowser(_ref) {
411
417
  layouts = _ref.layouts,
412
418
  theme = _ref.theme,
413
419
  tableProps = _ref.tableProps,
420
+ onItemsChange = _ref.onItemsChange,
421
+ selectedCount = _ref.selectedCount,
422
+ onClearSelected = _ref.onClearSelected,
414
423
  className = _ref.className;
415
424
  var baseQuery = React.useMemo(function () {
416
425
  return initialQuery;
@@ -446,6 +455,9 @@ function MediasBrowser(_ref) {
446
455
  loading = _useMedias.loading,
447
456
  lastPage = _useMedias.lastPage,
448
457
  total = _useMedias.total;
458
+ React.useEffect(function () {
459
+ onItemsChange(items);
460
+ }, [items, onItemsChange]);
449
461
  var _useState = React.useState(initialLayout || 'grid'),
450
462
  _useState2 = _slicedToArray(_useState, 2),
451
463
  layout = _useState2[0],
@@ -456,6 +468,20 @@ function MediasBrowser(_ref) {
456
468
  var onClickLayout = React.useCallback(function (lay) {
457
469
  setLayout(lay);
458
470
  }, [setLayout]);
471
+ var pagination = /*#__PURE__*/React.createElement(Pagination, {
472
+ page: page,
473
+ lastPage: lastPage,
474
+ total: total,
475
+ url: baseUrl,
476
+ query: query,
477
+ onClickPage: onPageChange,
478
+ theme: theme,
479
+ loading: loading,
480
+ selectedCount: selectedCount,
481
+ onClearSelected: onClearSelected,
482
+ withPreviousNext: true,
483
+ alwaysShowButtons: true
484
+ });
459
485
  return /*#__PURE__*/React.createElement("div", {
460
486
  className: classNames([styles.container, className])
461
487
  }, /*#__PURE__*/React.createElement(Filters, {
@@ -482,18 +508,7 @@ function MediasBrowser(_ref) {
482
508
  className: 'px-3'
483
509
  });
484
510
  })
485
- }) : null, /*#__PURE__*/React.createElement(Pagination, {
486
- page: page,
487
- lastPage: lastPage,
488
- total: total,
489
- url: baseUrl,
490
- query: query,
491
- onClickPage: onPageChange,
492
- theme: theme,
493
- loading: loading,
494
- withPreviousNext: true,
495
- alwaysShowButtons: true
496
- })), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
511
+ }) : null, pagination), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, Object.assign({}, tableProps, {
497
512
  items: items || [],
498
513
  component: MediaCard,
499
514
  componentProps: {
@@ -508,18 +523,7 @@ function MediasBrowser(_ref) {
508
523
  }, "\u2014")
509
524
  })), /*#__PURE__*/React.createElement("div", {
510
525
  className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
511
- }, /*#__PURE__*/React.createElement(Pagination, {
512
- page: page,
513
- lastPage: lastPage,
514
- total: total,
515
- url: baseUrl,
516
- query: query,
517
- onClickPage: onPageChange,
518
- theme: theme,
519
- loading: loading,
520
- withPreviousNext: true,
521
- alwaysShowButtons: true
522
- })));
526
+ }, pagination));
523
527
  }
524
528
  MediasBrowser.propTypes = propTypes$4;
525
529
  MediasBrowser.defaultProps = defaultProps$4;
@@ -541,46 +545,74 @@ function MediasBrowserContainer(_ref) {
541
545
  MediasBrowserContainer.propTypes = propTypes$3;
542
546
  MediasBrowserContainer.defaultProps = defaultProps$3;
543
547
 
544
- var _excluded$2 = ["value", "onChange", "onConfirm", "onClose", "multiple", "className"];
548
+ var _excluded$2 = ["value", "selectedItems", "onChange", "onConfirm", "onClose", "multiple", "withoutButtons", "className"];
545
549
  var propTypes$2 = {
546
550
  // eslint-disable-next-line react/forbid-prop-types
547
- value: PropTypes.any,
551
+ value: PropTypes.arrayOf(PropTypes.shape({})),
552
+ selectedItems: PropTypes.arrayOf(PropTypes.shape({})),
548
553
  onChange: PropTypes.func.isRequired,
549
554
  onConfirm: PropTypes.func.isRequired,
550
555
  onClose: PropTypes.func,
551
556
  multiple: PropTypes.bool,
557
+ withoutButtons: PropTypes.bool,
552
558
  className: PropTypes.string
553
559
  };
554
560
  var defaultProps$2 = {
555
561
  value: null,
562
+ selectedItems: null,
556
563
  onClose: null,
557
564
  multiple: false,
565
+ withoutButtons: false,
558
566
  className: null
559
567
  };
560
568
  function MediasPicker(_ref) {
561
569
  var value = _ref.value,
570
+ initialSelectedItems = _ref.selectedItems,
562
571
  onChange = _ref.onChange,
563
572
  onConfirm = _ref.onConfirm,
564
573
  onClose = _ref.onClose,
565
574
  multiple = _ref.multiple,
575
+ withoutButtons = _ref.withoutButtons,
566
576
  className = _ref.className,
567
577
  props = _objectWithoutProperties(_ref, _excluded$2);
568
- var onSelectionChange = React.useCallback(function (items) {
569
- if (onChange !== null) {
570
- onChange(items);
571
- }
572
- }, [onChange]);
578
+ var _useState = React.useState(value),
579
+ _useState2 = _slicedToArray(_useState, 2),
580
+ items = _useState2[0],
581
+ setItems = _useState2[1];
582
+ var onItemsChange = React.useCallback(function (pageItems) {
583
+ setItems(pageItems);
584
+ }, [setItems]);
573
585
  var disabled = value === null || value.length < 1;
586
+ var _useItemSelection = hooks.useItemSelection({
587
+ items: items,
588
+ selectedItems: initialSelectedItems,
589
+ onSelectionChange: onChange,
590
+ multipleSelection: multiple
591
+ }),
592
+ onSelectItem = _useItemSelection.onSelectItem,
593
+ onSelectPage = _useItemSelection.onSelectPage,
594
+ onClearSelected = _useItemSelection.onClearSelected,
595
+ pageSelected = _useItemSelection.pageSelected,
596
+ selectedCount = _useItemSelection.selectedCount,
597
+ selectedItems = _useItemSelection.selectedItems;
574
598
  return /*#__PURE__*/React.createElement("div", {
575
599
  className: className
576
600
  }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
577
601
  tableProps: {
578
602
  selectable: true,
579
603
  multipleSelection: multiple,
580
- onSelectionChange: onSelectionChange
581
- }
582
- }, props)), multiple ? /*#__PURE__*/React.createElement("div", {
604
+ onSelectItem: onSelectItem,
605
+ onSelectPage: onSelectPage,
606
+ selectedItems: selectedItems,
607
+ pageSelected: pageSelected
608
+ },
609
+ onItemsChange: onItemsChange,
610
+ selectedCount: selectedCount,
611
+ onClearSelected: onClearSelected
612
+ }, props)), multiple && !withoutButtons ? /*#__PURE__*/React.createElement("div", {
583
613
  className: "d-flex w-100 align-items-end justify-content-end mt-3"
614
+ }, /*#__PURE__*/React.createElement("div", {
615
+ className: "btn-group"
584
616
  }, onClose !== null ? /*#__PURE__*/React.createElement(Button, {
585
617
  type: "button",
586
618
  theme: "secondary",
@@ -600,12 +632,12 @@ function MediasPicker(_ref) {
600
632
  outline: disabled,
601
633
  className: "d-block"
602
634
  }, /*#__PURE__*/React.createElement(reactIntl.FormattedMessage, {
603
- id: "UaVu03",
635
+ id: "rvOVCV",
604
636
  defaultMessage: [{
605
637
  "type": 0,
606
- "value": "Confirm"
638
+ "value": "Confirm selection"
607
639
  }]
608
- }))) : null);
640
+ })))) : null);
609
641
  }
610
642
  MediasPicker.propTypes = propTypes$2;
611
643
  MediasPicker.defaultProps = defaultProps$2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/medias",
3
- "version": "3.0.139",
3
+ "version": "3.0.140",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -46,16 +46,16 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@babel/runtime": "^7.12.5",
49
- "@panneau/core": "^3.0.136",
50
- "@panneau/data": "^3.0.136",
51
- "@panneau/element-button": "^3.0.136",
52
- "@panneau/element-buttons": "^3.0.136",
53
- "@panneau/element-grid": "^3.0.136",
54
- "@panneau/element-icon": "^3.0.136",
55
- "@panneau/element-media-card": "^3.0.139",
56
- "@panneau/element-pagination": "^3.0.136",
57
- "@panneau/element-table": "^3.0.137",
58
- "@panneau/filter-filters": "^3.0.139",
49
+ "@panneau/core": "^3.0.140",
50
+ "@panneau/data": "^3.0.140",
51
+ "@panneau/element-button": "^3.0.140",
52
+ "@panneau/element-buttons": "^3.0.140",
53
+ "@panneau/element-grid": "^3.0.140",
54
+ "@panneau/element-icon": "^3.0.140",
55
+ "@panneau/element-media-card": "^3.0.140",
56
+ "@panneau/element-pagination": "^3.0.140",
57
+ "@panneau/element-table": "^3.0.140",
58
+ "@panneau/filter-filters": "^3.0.140",
59
59
  "classnames": "^2.5.1",
60
60
  "lodash": "^4.17.21",
61
61
  "prop-types": "^15.7.2",
@@ -64,5 +64,5 @@
64
64
  "publishConfig": {
65
65
  "access": "public"
66
66
  },
67
- "gitHead": "76afd9861b4a6ce9792314fcdd471214afca9aeb"
67
+ "gitHead": "f148a421cabe2dfa529d2df1eaae42d0f4bb32c5"
68
68
  }