@wordpress/dataviews 0.2.0 → 0.3.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 (87) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +30 -6
  4. package/build/add-filter.js +109 -49
  5. package/build/add-filter.js.map +1 -1
  6. package/build/constants.js +24 -2
  7. package/build/constants.js.map +1 -1
  8. package/build/dataviews.js +12 -9
  9. package/build/dataviews.js.map +1 -1
  10. package/build/dropdown-menu-helper.js +72 -0
  11. package/build/dropdown-menu-helper.js.map +1 -0
  12. package/build/filter-summary.js +43 -54
  13. package/build/filter-summary.js.map +1 -1
  14. package/build/filters.js +27 -17
  15. package/build/filters.js.map +1 -1
  16. package/build/index.js +13 -0
  17. package/build/index.js.map +1 -1
  18. package/build/item-actions.js +12 -12
  19. package/build/item-actions.js.map +1 -1
  20. package/build/pagination.js +31 -65
  21. package/build/pagination.js.map +1 -1
  22. package/build/reset-filters.js +8 -8
  23. package/build/reset-filters.js.map +1 -1
  24. package/build/search.js +8 -6
  25. package/build/search.js.map +1 -1
  26. package/build/utils.js +71 -0
  27. package/build/utils.js.map +1 -0
  28. package/build/view-actions.js +72 -95
  29. package/build/view-actions.js.map +1 -1
  30. package/build/view-grid.js +4 -6
  31. package/build/view-grid.js.map +1 -1
  32. package/build/view-list.js +26 -13
  33. package/build/view-list.js.map +1 -1
  34. package/build/view-table.js +153 -154
  35. package/build/view-table.js.map +1 -1
  36. package/build-module/add-filter.js +113 -53
  37. package/build-module/add-filter.js.map +1 -1
  38. package/build-module/constants.js +20 -0
  39. package/build-module/constants.js.map +1 -1
  40. package/build-module/dataviews.js +13 -10
  41. package/build-module/dataviews.js.map +1 -1
  42. package/build-module/dropdown-menu-helper.js +64 -0
  43. package/build-module/dropdown-menu-helper.js.map +1 -0
  44. package/build-module/filter-summary.js +45 -56
  45. package/build-module/filter-summary.js.map +1 -1
  46. package/build-module/filters.js +26 -17
  47. package/build-module/filters.js.map +1 -1
  48. package/build-module/index.js +1 -0
  49. package/build-module/index.js.map +1 -1
  50. package/build-module/item-actions.js +12 -12
  51. package/build-module/item-actions.js.map +1 -1
  52. package/build-module/pagination.js +35 -69
  53. package/build-module/pagination.js.map +1 -1
  54. package/build-module/reset-filters.js +6 -6
  55. package/build-module/reset-filters.js.map +1 -1
  56. package/build-module/search.js +7 -6
  57. package/build-module/search.js.map +1 -1
  58. package/build-module/utils.js +63 -0
  59. package/build-module/utils.js.map +1 -0
  60. package/build-module/view-actions.js +73 -97
  61. package/build-module/view-actions.js.map +1 -1
  62. package/build-module/view-grid.js +4 -6
  63. package/build-module/view-grid.js.map +1 -1
  64. package/build-module/view-list.js +27 -14
  65. package/build-module/view-list.js.map +1 -1
  66. package/build-module/view-table.js +156 -157
  67. package/build-module/view-table.js.map +1 -1
  68. package/build-style/style-rtl.css +180 -70
  69. package/build-style/style.css +180 -70
  70. package/package.json +11 -10
  71. package/src/add-filter.js +227 -68
  72. package/src/constants.js +16 -0
  73. package/src/dataviews.js +19 -12
  74. package/src/dropdown-menu-helper.js +61 -0
  75. package/src/filter-summary.js +70 -103
  76. package/src/filters.js +41 -24
  77. package/src/index.js +1 -0
  78. package/src/item-actions.js +30 -25
  79. package/src/pagination.js +75 -123
  80. package/src/reset-filters.js +5 -5
  81. package/src/search.js +8 -6
  82. package/src/style.scss +182 -48
  83. package/src/utils.js +51 -0
  84. package/src/view-actions.js +113 -114
  85. package/src/view-grid.js +4 -4
  86. package/src/view-list.js +42 -28
  87. package/src/view-table.js +280 -238
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_compose","_itemActions","_interopRequireDefault","ViewGrid","data","fields","view","actions","getItemId","deferredRendering","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","shownData","useAsyncList","step","usedData","_react","createElement","__experimentalGrid","gap","columns","alignment","className","map","item","index","__experimentalVStack","spacing","key","render","__experimentalHStack","justify","FlexBlock","default","isCompact","renderedValue","header"],"sources":["@wordpress/dataviews/src/view-grid.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tFlexBlock,\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\n\nexport default function ViewGrid( {\n\tdata,\n\tfields,\n\tview,\n\tactions,\n\tgetItemId,\n\tdeferredRendering,\n} ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.mediaField, view.layout.primaryField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\treturn (\n\t\t<Grid\n\t\t\tgap={ 8 }\n\t\t\tcolumns={ 2 }\n\t\t\talignment=\"top\"\n\t\t\tclassName=\"dataviews-grid-view\"\n\t\t>\n\t\t\t{ usedData.map( ( item, index ) => (\n\t\t\t\t<VStack\n\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\tkey={ getItemId?.( item ) || index }\n\t\t\t\t\tclassName=\"dataviews-view-grid__card\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t\t\t{ mediaField?.render( { item } ) }\n\t\t\t\t\t</div>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__primary-field\"\n\t\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t<ItemActions\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__fields\"\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\tconst renderedValue = field.render( {\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tif ( ! renderedValue ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-grid__field\"\n\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-header\">\n\t\t\t\t\t\t\t\t\t\t{ field.header }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-value\">\n\t\t\t\t\t\t\t\t\t\t{ field.render( { item } ) }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</VStack>\n\t\t\t\t</VStack>\n\t\t\t) ) }\n\t\t</Grid>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_components","require","_compose","_itemActions","_interopRequireDefault","ViewGrid","data","fields","view","actions","getItemId","deferredRendering","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","shownData","useAsyncList","step","usedData","_react","createElement","__experimentalGrid","gap","columns","alignment","className","map","item","__experimentalVStack","spacing","key","render","__experimentalHStack","justify","FlexBlock","default","isCompact","renderedValue","header"],"sources":["@wordpress/dataviews/src/view-grid.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tFlexBlock,\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\n\nexport default function ViewGrid( {\n\tdata,\n\tfields,\n\tview,\n\tactions,\n\tgetItemId,\n\tdeferredRendering,\n} ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.mediaField, view.layout.primaryField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\treturn (\n\t\t<Grid\n\t\t\tgap={ 8 }\n\t\t\tcolumns={ 2 }\n\t\t\talignment=\"top\"\n\t\t\tclassName=\"dataviews-view-grid\"\n\t\t>\n\t\t\t{ usedData.map( ( item ) => (\n\t\t\t\t<VStack\n\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\tclassName=\"dataviews-view-grid__card\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t\t\t{ mediaField?.render( { item } ) }\n\t\t\t\t\t</div>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__primary-field\"\n\t\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t<ItemActions\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"dataviews-view-grid__fields\"\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\tconst renderedValue = field.render( {\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tif ( ! renderedValue ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-grid__field\"\n\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-header\">\n\t\t\t\t\t\t\t\t\t\t{ field.header }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-value\">\n\t\t\t\t\t\t\t\t\t\t{ renderedValue }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</VStack>\n\t\t\t\t</VStack>\n\t\t\t) ) }\n\t\t</Grid>\n\t);\n}\n"],"mappings":"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"}
@@ -10,6 +10,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _compose = require("@wordpress/compose");
11
11
  var _components = require("@wordpress/components");
12
12
  var _keycodes = require("@wordpress/keycodes");
13
+ var _icons = require("@wordpress/icons");
14
+ var _i18n = require("@wordpress/i18n");
13
15
  /**
14
16
  * External dependencies
15
17
  */
@@ -24,6 +26,7 @@ function ViewList({
24
26
  data,
25
27
  getItemId,
26
28
  onSelectionChange,
29
+ onDetailsChange,
27
30
  selection,
28
31
  deferredRendering
29
32
  }) {
@@ -43,41 +46,51 @@ function ViewList({
43
46
  }
44
47
  };
45
48
  return (0, _react.createElement)("ul", {
46
- className: "dataviews-list-view"
47
- }, usedData.map((item, index) => {
49
+ className: "dataviews-view-list"
50
+ }, usedData.map(item => {
48
51
  return (0, _react.createElement)("li", {
49
- key: getItemId?.(item) || index
52
+ key: getItemId(item),
53
+ className: (0, _classnames.default)({
54
+ 'is-selected': selection.includes(item.id)
55
+ })
56
+ }, (0, _react.createElement)(_components.__experimentalHStack, {
57
+ className: "dataviews-view-list__item-wrapper"
50
58
  }, (0, _react.createElement)("div", {
51
59
  role: "button",
52
60
  tabIndex: 0,
53
61
  "aria-pressed": selection.includes(item.id),
54
62
  onKeyDown: onEnter(item),
55
- className: (0, _classnames.default)('dataviews-list-view__item', {
56
- 'dataviews-list-view__item-selected': selection.includes(item.id)
57
- }),
63
+ className: "dataviews-view-list__item",
58
64
  onClick: () => onSelectionChange([item])
59
65
  }, (0, _react.createElement)(_components.__experimentalHStack, {
60
- spacing: 3
66
+ spacing: 3,
67
+ justify: "start"
61
68
  }, (0, _react.createElement)("div", {
62
- className: "dataviews-list-view__media-wrapper"
69
+ className: "dataviews-view-list__media-wrapper"
63
70
  }, mediaField?.render({
64
71
  item
65
72
  }) || (0, _react.createElement)("div", {
66
- className: "dataviews-list-view__media-placeholder"
67
- })), (0, _react.createElement)(_components.__experimentalHStack, null, (0, _react.createElement)(_components.__experimentalVStack, {
73
+ className: "dataviews-view-list__media-placeholder"
74
+ })), (0, _react.createElement)(_components.__experimentalVStack, {
68
75
  spacing: 1
69
76
  }, primaryField?.render({
70
77
  item
71
78
  }), (0, _react.createElement)("div", {
72
- className: "dataviews-list-view__fields"
79
+ className: "dataviews-view-list__fields"
73
80
  }, visibleFields.map(field => {
74
81
  return (0, _react.createElement)("span", {
75
82
  key: field.id,
76
- className: "dataviews-list-view__field"
83
+ className: "dataviews-view-list__field"
77
84
  }, field.render({
78
85
  item
79
86
  }));
80
- })))))));
87
+ }))))), onDetailsChange && (0, _react.createElement)(_components.Button, {
88
+ className: "dataviews-view-list__details-button",
89
+ onClick: () => onDetailsChange([item]),
90
+ icon: _icons.info,
91
+ label: (0, _i18n.__)('View details'),
92
+ size: "compact"
93
+ })));
81
94
  }));
82
95
  }
83
96
  //# sourceMappingURL=view-list.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_classnames","_interopRequireDefault","require","_compose","_components","_keycodes","ViewList","view","fields","data","getItemId","onSelectionChange","selection","deferredRendering","shownData","useAsyncList","step","usedData","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","onEnter","item","event","keyCode","ENTER","SPACE","_react","createElement","className","map","index","key","role","tabIndex","onKeyDown","classNames","onClick","__experimentalHStack","spacing","render","__experimentalVStack"],"sources":["@wordpress/dataviews/src/view-list.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useAsyncList } from '@wordpress/compose';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\n\nexport default function ViewList( {\n\tview,\n\tfields,\n\tdata,\n\tgetItemId,\n\tonSelectionChange,\n\tselection,\n\tdeferredRendering,\n} ) {\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.primaryField, view.layout.mediaField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\n\tconst onEnter = ( item ) => ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif ( [ ENTER, SPACE ].includes( keyCode ) ) {\n\t\t\tonSelectionChange( [ item ] );\n\t\t}\n\t};\n\n\treturn (\n\t\t<ul className=\"dataviews-list-view\">\n\t\t\t{ usedData.map( ( item, index ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<li key={ getItemId?.( item ) || index }>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\ttabIndex={ 0 }\n\t\t\t\t\t\t\taria-pressed={ selection.includes( item.id ) }\n\t\t\t\t\t\t\tonKeyDown={ onEnter( item ) }\n\t\t\t\t\t\t\tclassName={ classNames(\n\t\t\t\t\t\t\t\t'dataviews-list-view__item',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'dataviews-list-view__item-selected':\n\t\t\t\t\t\t\t\t\t\tselection.includes( item.id ),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tonClick={ () => onSelectionChange( [ item ] ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<HStack spacing={ 3 }>\n\t\t\t\t\t\t\t\t<div className=\"dataviews-list-view__media-wrapper\">\n\t\t\t\t\t\t\t\t\t{ mediaField?.render( { item } ) || (\n\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-list-view__media-placeholder\"></div>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<VStack spacing={ 1 }>\n\t\t\t\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-list-view__fields\">\n\t\t\t\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"dataviews-list-view__field\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ field.render( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ul>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_classnames","_interopRequireDefault","require","_compose","_components","_keycodes","_icons","_i18n","ViewList","view","fields","data","getItemId","onSelectionChange","onDetailsChange","selection","deferredRendering","shownData","useAsyncList","step","usedData","mediaField","find","field","id","layout","primaryField","visibleFields","filter","hiddenFields","includes","onEnter","item","event","keyCode","ENTER","SPACE","_react","createElement","className","map","key","classNames","__experimentalHStack","role","tabIndex","onKeyDown","onClick","spacing","justify","render","__experimentalVStack","Button","icon","info","label","__","size"],"sources":["@wordpress/dataviews/src/view-list.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useAsyncList } from '@wordpress/compose';\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n} from '@wordpress/components';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\nimport { info } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nexport default function ViewList( {\n\tview,\n\tfields,\n\tdata,\n\tgetItemId,\n\tonSelectionChange,\n\tonDetailsChange,\n\tselection,\n\tdeferredRendering,\n} ) {\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.primaryField, view.layout.mediaField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\n\tconst onEnter = ( item ) => ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif ( [ ENTER, SPACE ].includes( keyCode ) ) {\n\t\t\tonSelectionChange( [ item ] );\n\t\t}\n\t};\n\n\treturn (\n\t\t<ul className=\"dataviews-view-list\">\n\t\t\t{ usedData.map( ( item ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<li\n\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\tclassName={ classNames( {\n\t\t\t\t\t\t\t'is-selected': selection.includes( item.id ),\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack className=\"dataviews-view-list__item-wrapper\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\ttabIndex={ 0 }\n\t\t\t\t\t\t\t\taria-pressed={ selection.includes( item.id ) }\n\t\t\t\t\t\t\t\tonKeyDown={ onEnter( item ) }\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__item\"\n\t\t\t\t\t\t\t\tonClick={ () => onSelectionChange( [ item ] ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<HStack spacing={ 3 } justify=\"start\">\n\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-wrapper\">\n\t\t\t\t\t\t\t\t\t\t{ mediaField?.render( { item } ) || (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__media-placeholder\"></div>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<VStack spacing={ 1 }>\n\t\t\t\t\t\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t\t\t\t\t\t\t<div className=\"dataviews-view-list__fields\">\n\t\t\t\t\t\t\t\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__field\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ field.render( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{ onDetailsChange && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-view-list__details-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonDetailsChange( [ item ] )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ticon={ info }\n\t\t\t\t\t\t\t\t\tlabel={ __( 'View details' ) }\n\t\t\t\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ul>\n\t);\n}\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = require("react");
9
+ var _classnames = _interopRequireDefault(require("classnames"));
9
10
  var _i18n = require("@wordpress/i18n");
10
11
  var _compose = require("@wordpress/compose");
11
12
  var _icons = require("@wordpress/icons");
@@ -14,6 +15,11 @@ var _element = require("@wordpress/element");
14
15
  var _lockUnlock = require("./lock-unlock");
15
16
  var _itemActions = _interopRequireDefault(require("./item-actions"));
16
17
  var _constants = require("./constants");
18
+ var _dropdownMenuHelper = require("./dropdown-menu-helper");
19
+ /**
20
+ * External dependencies
21
+ */
22
+
17
23
  /**
18
24
  * WordPress dependencies
19
25
  */
@@ -26,94 +32,76 @@ const {
26
32
  DropdownMenuV2: DropdownMenu,
27
33
  DropdownMenuGroupV2: DropdownMenuGroup,
28
34
  DropdownMenuItemV2: DropdownMenuItem,
35
+ DropdownMenuRadioItemV2: DropdownMenuRadioItem,
29
36
  DropdownMenuSeparatorV2: DropdownMenuSeparator,
30
- DropdownSubMenuV2: DropdownSubMenu,
31
- DropdownSubMenuTriggerV2: DropdownSubMenuTrigger
37
+ DropdownMenuItemLabelV2: DropdownMenuItemLabel,
38
+ DropdownMenuItemHelpTextV2: DropdownMenuItemHelpText
32
39
  } = (0, _lockUnlock.unlock)(_components.privateApis);
33
- const sortingItemsInfo = {
34
- asc: {
35
- icon: _icons.arrowUp,
36
- label: (0, _i18n.__)('Sort ascending')
37
- },
38
- desc: {
39
- icon: _icons.arrowDown,
40
- label: (0, _i18n.__)('Sort descending')
41
- }
40
+ const sortArrows = {
41
+ asc: '↑',
42
+ desc: '↓'
42
43
  };
43
- const sortIcons = {
44
- asc: _icons.chevronUp,
45
- desc: _icons.chevronDown
44
+ const sanitizeOperators = field => {
45
+ let operators = field.filterBy?.operators;
46
+ if (!operators || !Array.isArray(operators)) {
47
+ operators = Object.keys(_constants.OPERATORS);
48
+ }
49
+ return operators.filter(operator => Object.keys(_constants.OPERATORS).includes(operator));
46
50
  };
47
- function HeaderMenu({
51
+ const HeaderMenu = (0, _element.forwardRef)(function HeaderMenu({
48
52
  field,
49
53
  view,
50
- onChangeView
51
- }) {
52
- const isSortable = field.enableSorting !== false;
54
+ onChangeView,
55
+ onHide
56
+ }, ref) {
53
57
  const isHidable = field.enableHiding !== false;
54
- if (!isSortable && !isHidable) {
55
- return field.header;
56
- }
58
+ const isSortable = field.enableSorting !== false;
57
59
  const isSorted = view.sort?.field === field.id;
58
- let filter, filterInView;
59
- const otherFilters = [];
60
- if (field.type === _constants.ENUMERATION_TYPE) {
61
- let columnOperators = field.filterBy?.operators;
62
- if (!columnOperators || !Array.isArray(columnOperators)) {
63
- columnOperators = [_constants.OPERATOR_IN, _constants.OPERATOR_NOT_IN];
64
- }
65
- const operators = columnOperators.filter(operator => [_constants.OPERATOR_IN, _constants.OPERATOR_NOT_IN].includes(operator));
66
- if (operators.length >= 0) {
67
- filter = {
68
- field: field.id,
69
- operators,
70
- elements: field.elements || []
71
- };
72
- filterInView = {
73
- field: filter.field,
74
- operator: filter.operators[0],
75
- value: undefined
76
- };
77
- }
60
+ let filter, filterInView, activeElement, activeOperator, otherFilters;
61
+ const operators = sanitizeOperators(field);
62
+ if (field.type === _constants.ENUMERATION_TYPE && operators.length > 0) {
63
+ filter = {
64
+ field: field.id,
65
+ operators,
66
+ elements: field.elements || []
67
+ };
68
+ filterInView = view.filters.find(f => f.field === filter.field);
69
+ otherFilters = view.filters.filter(f => f.field !== filter.field);
70
+ activeElement = filter.elements.find(element => element.value === filterInView?.value);
71
+ activeOperator = filterInView?.operator || filter.operators[0];
78
72
  }
79
73
  const isFilterable = !!filter;
80
- if (isFilterable) {
81
- const columnFilters = view.filters;
82
- columnFilters.forEach(columnFilter => {
83
- if (columnFilter.field === filter.field) {
84
- filterInView = {
85
- ...columnFilter
86
- };
87
- } else {
88
- otherFilters.push(columnFilter);
89
- }
90
- });
74
+ if (!isSortable && !isHidable && !isFilterable) {
75
+ return field.header;
91
76
  }
92
77
  return (0, _react.createElement)(DropdownMenu, {
93
78
  align: "start",
94
79
  trigger: (0, _react.createElement)(_components.Button, {
95
- icon: isSorted && sortIcons[view.sort.direction],
96
- iconPosition: "right",
97
- text: field.header,
98
- style: {
99
- padding: 0
100
- },
101
- size: "compact"
102
- })
103
- }, (0, _react.createElement)(WithSeparators, null, isSortable && (0, _react.createElement)(DropdownMenuGroup, null, Object.entries(sortingItemsInfo).map(([direction, info]) => {
104
- const isActive = isSorted && view.sort.direction === direction;
105
- return (0, _react.createElement)(DropdownMenuItem, {
106
- key: direction,
107
- role: "menuitemradio",
108
- "aria-checked": isActive,
109
- prefix: (0, _react.createElement)(_components.Icon, {
110
- icon: info.icon
111
- }),
112
- suffix: isActive && (0, _react.createElement)(_components.Icon, {
113
- icon: _icons.check
114
- }),
115
- onSelect: event => {
116
- event.preventDefault();
80
+ size: "compact",
81
+ className: "dataviews-view-table-header-button",
82
+ ref: ref,
83
+ variant: "tertiary"
84
+ }, field.header, isSorted && (0, _react.createElement)("span", {
85
+ "aria-hidden": "true"
86
+ }, isSorted && sortArrows[view.sort.direction])),
87
+ style: {
88
+ minWidth: '240px'
89
+ }
90
+ }, (0, _react.createElement)(WithSeparators, null, isSortable && (0, _react.createElement)(DropdownMenuGroup, null, Object.entries(_constants.SORTING_DIRECTIONS).map(([direction, info]) => {
91
+ const isChecked = isSorted && view.sort.direction === direction;
92
+ const value = `${field.id}-${direction}`;
93
+ return (0, _react.createElement)(DropdownMenuRadioItem, {
94
+ key: value
95
+ // All sorting radio items share the same name, so that
96
+ // selecting a sorting option automatically deselects the
97
+ // previously selected one, even if it is displayed in
98
+ // another submenu. The field and direction are passed via
99
+ // the `value` prop.
100
+ ,
101
+ name: "view-table-sorting",
102
+ value: value,
103
+ checked: isChecked,
104
+ onChange: () => {
117
105
  onChangeView({
118
106
  ...view,
119
107
  sort: {
@@ -122,96 +110,72 @@ function HeaderMenu({
122
110
  }
123
111
  });
124
112
  }
125
- }, info.label);
113
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, info.label));
126
114
  })), isHidable && (0, _react.createElement)(DropdownMenuItem, {
127
- role: "menuitemradio",
128
- "aria-checked": false,
129
115
  prefix: (0, _react.createElement)(_components.Icon, {
130
116
  icon: _icons.unseen
131
117
  }),
132
- onSelect: event => {
133
- event.preventDefault();
118
+ onClick: () => {
119
+ onHide(field);
134
120
  onChangeView({
135
121
  ...view,
136
122
  hiddenFields: view.hiddenFields.concat(field.id)
137
123
  });
138
124
  }
139
- }, (0, _i18n.__)('Hide')), isFilterable && (0, _react.createElement)(DropdownMenuGroup, null, (0, _react.createElement)(DropdownSubMenu, {
125
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Hide'))), isFilterable && (0, _react.createElement)(DropdownMenuGroup, null, (0, _react.createElement)(DropdownMenu, {
140
126
  key: filter.field,
141
- trigger: (0, _react.createElement)(DropdownSubMenuTrigger, {
127
+ trigger: (0, _react.createElement)(DropdownMenuItem, {
142
128
  prefix: (0, _react.createElement)(_components.Icon, {
143
129
  icon: _icons.funnel
144
130
  }),
145
- suffix: (0, _react.createElement)(_components.Icon, {
146
- icon: _icons.chevronRightSmall
147
- })
148
- }, (0, _i18n.__)('Filter by'))
131
+ suffix: activeElement && (0, _react.createElement)("span", {
132
+ "aria-hidden": "true"
133
+ }, activeOperator in _constants.OPERATORS && `${_constants.OPERATORS[activeOperator].label} `, activeElement?.label)
134
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Filter by')))
149
135
  }, (0, _react.createElement)(WithSeparators, null, (0, _react.createElement)(DropdownMenuGroup, null, filter.elements.map(element => {
150
- let isActive = false;
151
- if (filterInView) {
152
- // Intentionally use loose comparison, so it does type conversion.
153
- // This covers the case where a top-level filter for the same field converts a number into a string.
154
- /* eslint-disable eqeqeq */
155
- isActive = element.value == filterInView.value;
156
- /* eslint-enable eqeqeq */
157
- }
158
-
159
- return (0, _react.createElement)(DropdownMenuItem, {
136
+ const isActive = activeElement?.value === element.value;
137
+ return (0, _react.createElement)(_dropdownMenuHelper.DropdownMenuRadioItemCustom, {
160
138
  key: element.value,
161
- role: "menuitemradio",
162
- "aria-checked": isActive,
163
- prefix: isActive && (0, _react.createElement)(_components.Icon, {
164
- icon: _icons.check
165
- }),
166
- onSelect: () => {
139
+ name: `view-table-${filter.field}`,
140
+ value: element.value,
141
+ checked: isActive,
142
+ onClick: () => {
167
143
  onChangeView({
168
144
  ...view,
145
+ page: 1,
169
146
  filters: [...otherFilters, {
170
147
  field: filter.field,
171
- operator: filterInView?.operator,
148
+ operator: activeOperator,
172
149
  value: isActive ? undefined : element.value
173
150
  }]
174
151
  });
175
152
  }
176
- }, element.label);
177
- })), filter.operators.length > 1 && (0, _react.createElement)(DropdownSubMenu, {
178
- trigger: (0, _react.createElement)(DropdownSubMenuTrigger, {
179
- suffix: (0, _react.createElement)(_element.Fragment, null, filterInView.operator === _constants.OPERATOR_IN ? (0, _i18n.__)('Is') : (0, _i18n.__)('Is not'), (0, _react.createElement)(_components.Icon, {
180
- icon: _icons.chevronRightSmall
181
- }), ' ')
182
- }, (0, _i18n.__)('Conditions'))
183
- }, (0, _react.createElement)(DropdownMenuItem, {
184
- key: "in-filter",
185
- role: "menuitemradio",
186
- "aria-checked": filterInView?.operator === _constants.OPERATOR_IN,
187
- prefix: filterInView?.operator === _constants.OPERATOR_IN && (0, _react.createElement)(_components.Icon, {
188
- icon: _icons.check
189
- }),
190
- onSelect: () => onChangeView({
191
- ...view,
192
- filters: [...otherFilters, {
193
- field: filter.field,
194
- operator: _constants.OPERATOR_IN,
195
- value: filterInView?.value
196
- }]
197
- })
198
- }, (0, _i18n.__)('Is')), (0, _react.createElement)(DropdownMenuItem, {
199
- key: "not-in-filter",
200
- role: "menuitemradio",
201
- "aria-checked": filterInView?.operator === _constants.OPERATOR_NOT_IN,
202
- prefix: filterInView?.operator === _constants.OPERATOR_NOT_IN && (0, _react.createElement)(_components.Icon, {
203
- icon: _icons.check
204
- }),
205
- onSelect: () => onChangeView({
153
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, element.label), !!element.description && (0, _react.createElement)(DropdownMenuItemHelpText, null, element.description));
154
+ })), filter.operators.length > 1 && (0, _react.createElement)(DropdownMenu, {
155
+ trigger: (0, _react.createElement)(DropdownMenuItem, {
156
+ suffix: (0, _react.createElement)("span", {
157
+ "aria-hidden": "true"
158
+ }, _constants.OPERATORS[activeOperator]?.label)
159
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, (0, _i18n.__)('Conditions')))
160
+ }, Object.entries(_constants.OPERATORS).map(([operator, {
161
+ label,
162
+ key
163
+ }]) => (0, _react.createElement)(DropdownMenuRadioItem, {
164
+ key: key,
165
+ name: `view-table-${filter.field}-conditions`,
166
+ value: operator,
167
+ checked: activeOperator === operator,
168
+ onChange: e => onChangeView({
206
169
  ...view,
170
+ page: 1,
207
171
  filters: [...otherFilters, {
208
172
  field: filter.field,
209
- operator: _constants.OPERATOR_NOT_IN,
173
+ operator: e.target.value,
210
174
  value: filterInView?.value
211
175
  }]
212
176
  })
213
- }, (0, _i18n.__)('Is not'))))))));
214
- }
177
+ }, (0, _react.createElement)(DropdownMenuItemLabel, null, label)))))))));
178
+ });
215
179
  function WithSeparators({
216
180
  children
217
181
  }) {
@@ -229,25 +193,43 @@ function ViewTable({
229
193
  isLoading = false,
230
194
  deferredRendering
231
195
  }) {
196
+ const headerMenuRefs = (0, _element.useRef)(new Map());
197
+ const headerMenuToFocusRef = (0, _element.useRef)();
198
+ const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, _element.useState)();
199
+ (0, _element.useEffect)(() => {
200
+ if (headerMenuToFocusRef.current) {
201
+ headerMenuToFocusRef.current.focus();
202
+ headerMenuToFocusRef.current = undefined;
203
+ }
204
+ });
205
+ const asyncData = (0, _compose.useAsyncList)(data);
206
+ const tableNoticeId = (0, _element.useId)();
207
+ if (nextHeaderMenuToFocus) {
208
+ // If we need to force focus, we short-circuit rendering here
209
+ // to prevent any additional work while we handle that.
210
+ // Clearing out the focus directive is necessary to make sure
211
+ // future renders don't cause unexpected focus jumps.
212
+ headerMenuToFocusRef.current = nextHeaderMenuToFocus;
213
+ setNextHeaderMenuToFocus();
214
+ return;
215
+ }
216
+ const onHide = field => {
217
+ const hidden = headerMenuRefs.current.get(field.id);
218
+ const fallback = headerMenuRefs.current.get(hidden.fallback);
219
+ setNextHeaderMenuToFocus(fallback?.node);
220
+ };
232
221
  const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && ![view.layout.mediaField, view.layout.primaryField].includes(field.id));
233
- const shownData = (0, _compose.useAsyncList)(data);
234
- const usedData = deferredRendering ? shownData : data;
222
+ const usedData = deferredRendering ? asyncData : data;
235
223
  const hasData = !!usedData?.length;
236
- if (isLoading) {
237
- // TODO:Add spinner or progress bar..
238
- return (0, _react.createElement)("div", {
239
- className: "dataviews-loading"
240
- }, (0, _react.createElement)("h3", null, (0, _i18n.__)('Loading')));
241
- }
242
224
  const sortValues = {
243
225
  asc: 'ascending',
244
226
  desc: 'descending'
245
227
  };
246
- return (0, _react.createElement)("div", {
247
- className: "dataviews-table-view-wrapper"
248
- }, hasData && (0, _react.createElement)("table", {
249
- className: "dataviews-table-view"
250
- }, (0, _react.createElement)("thead", null, (0, _react.createElement)("tr", null, visibleFields.map(field => (0, _react.createElement)("th", {
228
+ return (0, _react.createElement)("div", null, (0, _react.createElement)("table", {
229
+ className: "dataviews-view-table",
230
+ "aria-busy": isLoading,
231
+ "aria-describedby": tableNoticeId
232
+ }, (0, _react.createElement)("thead", null, (0, _react.createElement)("tr", null, visibleFields.map((field, index) => (0, _react.createElement)("th", {
251
233
  key: field.id,
252
234
  style: {
253
235
  width: field.width || undefined,
@@ -258,13 +240,26 @@ function ViewTable({
258
240
  "aria-sort": view.sort?.field === field.id && sortValues[view.sort.direction],
259
241
  scope: "col"
260
242
  }, (0, _react.createElement)(HeaderMenu, {
243
+ ref: node => {
244
+ if (node) {
245
+ headerMenuRefs.current.set(field.id, {
246
+ node,
247
+ fallback: visibleFields[index > 0 ? index - 1 : 1]?.id
248
+ });
249
+ } else {
250
+ headerMenuRefs.current.delete(field.id);
251
+ }
252
+ },
261
253
  field: field,
262
254
  view: view,
263
- onChangeView: onChangeView
255
+ onChangeView: onChangeView,
256
+ onHide: onHide
264
257
  }))), !!actions?.length && (0, _react.createElement)("th", {
265
258
  "data-field-id": "actions"
266
- }, (0, _i18n.__)('Actions')))), (0, _react.createElement)("tbody", null, usedData.map((item, index) => (0, _react.createElement)("tr", {
267
- key: getItemId?.(item) || index
259
+ }, (0, _react.createElement)("span", {
260
+ className: "dataviews-view-table-header"
261
+ }, (0, _i18n.__)('Actions'))))), (0, _react.createElement)("tbody", null, hasData && usedData.map(item => (0, _react.createElement)("tr", {
262
+ key: getItemId(item)
268
263
  }, visibleFields.map(field => (0, _react.createElement)("td", {
269
264
  key: field.id,
270
265
  style: {
@@ -277,9 +272,13 @@ function ViewTable({
277
272
  }))), !!actions?.length && (0, _react.createElement)("td", null, (0, _react.createElement)(_itemActions.default, {
278
273
  item: item,
279
274
  actions: actions
280
- })))))), !hasData && (0, _react.createElement)("div", {
281
- className: "dataviews-no-results"
282
- }, (0, _react.createElement)("p", null, (0, _i18n.__)('No results'))));
275
+ })))))), (0, _react.createElement)("div", {
276
+ className: (0, _classnames.default)({
277
+ 'dataviews-loading': isLoading,
278
+ 'dataviews-no-results': !hasData && !isLoading
279
+ }),
280
+ id: tableNoticeId
281
+ }, !hasData && (0, _react.createElement)("p", null, isLoading ? (0, _i18n.__)('Loading…') : (0, _i18n.__)('No results'))));
283
282
  }
284
283
  var _default = ViewTable;
285
284
  exports.default = _default;