@panneau/medias 3.0.257 → 3.0.259

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.js DELETED
@@ -1,1697 +0,0 @@
1
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
- import classNames from 'classnames';
4
- import PropTypes from 'prop-types';
5
- import React, { useContext, useMemo, useCallback, useState, useEffect } from 'react';
6
- import { FormattedMessage } from 'react-intl';
7
- import { useFieldComponent, usePanneauResource } from '@panneau/core/contexts';
8
- import { useForm, useQuery } from '@panneau/core/hooks';
9
- import Button from '@panneau/element-button';
10
- import Form from '@panneau/element-form';
11
- import FormStatus from '@panneau/element-form-status';
12
- import ImageDisplay from '@panneau/display-image';
13
- import MediaPlayer from '@panneau/element-media-player';
14
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
15
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
16
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
17
- import isArray from 'lodash/isArray';
18
- import uniqBy from 'lodash/uniqBy';
19
- import { PropTypes as PropTypes$1 } from '@panneau/core';
20
- import Buttons from '@panneau/element-buttons';
21
- import Grid from '@panneau/element-grid';
22
- import Icon from '@panneau/element-icon';
23
- import MediaCard from '@panneau/element-media-card';
24
- import Pagination from '@panneau/element-pagination';
25
- import Table from '@panneau/element-table';
26
- import UploadField from '@panneau/field-upload';
27
- import Filters from '@panneau/filter-filters';
28
- import { useItemsStore, useData, useApi } from '@panneau/data';
29
-
30
- /* eslint-disable react/jsx-props-no-spreading */
31
- var MediasApiContext = /*#__PURE__*/React.createContext(null);
32
- var useMediasApi = function useMediasApi() {
33
- return useContext(MediasApiContext);
34
- };
35
- var apiPropTypes = PropTypes.shape({
36
- get: PropTypes.func.isRequired,
37
- getTrashed: PropTypes.func.isRequired,
38
- create: PropTypes.func.isRequired,
39
- find: PropTypes.func.isRequired,
40
- update: PropTypes.func.isRequired,
41
- trash: PropTypes.func.isRequired,
42
- restore: PropTypes.func.isRequired,
43
- "delete": PropTypes.func.isRequired
44
- });
45
- var propTypes$9 = {
46
- api: apiPropTypes,
47
- children: PropTypes.node.isRequired
48
- };
49
- var defaultProps$9 = {
50
- api: null
51
- };
52
- function MediasApiProvider(_ref) {
53
- var providedApi = _ref.api,
54
- children = _ref.children;
55
- var previousApi = useMediasApi();
56
- var api = useMemo(function () {
57
- return providedApi || previousApi;
58
- }, [providedApi, previousApi]);
59
- return /*#__PURE__*/React.createElement(MediasApiContext.Provider, {
60
- value: api
61
- }, children);
62
- }
63
- MediasApiProvider.propTypes = propTypes$9;
64
- MediasApiProvider.defaultProps = defaultProps$9;
65
-
66
- var _excluded$7 = ["items"];
67
- var useMedias = function useMedias() {
68
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
69
- var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
70
- var count = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
71
- var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
72
- var api = useMediasApi();
73
- var trashed = useMemo(function () {
74
- var _ref = opts || {},
75
- _ref$trashed = _ref.trashed,
76
- trashedOpt = _ref$trashed === void 0 ? false : _ref$trashed;
77
- return trashedOpt;
78
- }, [opts]);
79
- var finalQuery = useMemo(function () {
80
- return _objectSpread(_objectSpread({}, query), {}, {
81
- trashed: trashed
82
- });
83
- }, [query, trashed]);
84
- var getItems = useCallback(function () {
85
- var requestedPage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
86
- return trashed ? api.getTrashed(query, requestedPage, count) : api.get(query, requestedPage, count);
87
- }, [api, query, count, trashed]);
88
- var _useItemsStore = useItemsStore('medias', _objectSpread({
89
- getPage: page !== null ? getItems : null,
90
- getItems: page === null ? getItems : null,
91
- page: page,
92
- count: count,
93
- query: finalQuery
94
- }, opts)),
95
- items = _useItemsStore.items,
96
- props = _objectWithoutProperties(_useItemsStore, _excluded$7);
97
- return _objectSpread({
98
- items: items
99
- }, props);
100
- };
101
- var useMedias$1 = useMedias;
102
-
103
- var _excluded$6 = ["data"];
104
- var useMedia = function useMedia(id, opts) {
105
- var api = useMediasApi();
106
- var loader = useCallback(function () {
107
- return api.find(id);
108
- }, [api, id]);
109
- var _useData = useData(loader, opts),
110
- data = _useData.data,
111
- request = _objectWithoutProperties(_useData, _excluded$6);
112
- return _objectSpread({
113
- story: data
114
- }, request);
115
- };
116
- var useMedia$1 = useMedia;
117
-
118
- var useMediaCreate = function useMediaCreate() {
119
- var _useState = useState(false),
120
- _useState2 = _slicedToArray(_useState, 2),
121
- creating = _useState2[0],
122
- setCreating = _useState2[1];
123
- var api = useMediasApi();
124
- var create = useCallback(function (data) {
125
- setCreating(true);
126
- return api.create(data).then(function (response) {
127
- setCreating(false);
128
- return response;
129
- });
130
- }, [api, setCreating]);
131
- return {
132
- create: create,
133
- creating: creating
134
- };
135
- };
136
- var useMediaCreate$1 = useMediaCreate;
137
-
138
- var useMediaUpdate = function useMediaUpdate() {
139
- var _useState = useState(false),
140
- _useState2 = _slicedToArray(_useState, 2),
141
- updating = _useState2[0],
142
- setUpdating = _useState2[1];
143
- var api = useMediasApi();
144
- var update = useCallback(function (id, data) {
145
- setUpdating(true);
146
- return api.update(id, data).then(function (response) {
147
- setUpdating(false);
148
- return response;
149
- });
150
- }, [api, setUpdating]);
151
- return {
152
- update: update,
153
- updating: updating
154
- };
155
- };
156
- var useMediaUpdate$1 = useMediaUpdate;
157
-
158
- var useMediaDelete = function useMediaDelete() {
159
- var _useState = useState(false),
160
- _useState2 = _slicedToArray(_useState, 2),
161
- deleting = _useState2[0],
162
- setDeleting = _useState2[1];
163
- var api = useMediasApi();
164
- var mediaDelete = useCallback(function (id, data) {
165
- setDeleting(true);
166
- return api["delete"](id, data).then(function (response) {
167
- setDeleting(false);
168
- return response;
169
- });
170
- }, [api, setDeleting]);
171
- return {
172
- mediaDelete: mediaDelete,
173
- deleting: deleting
174
- };
175
- };
176
- var useMediaDelete$1 = useMediaDelete;
177
-
178
- var useMediaTrash = function useMediaTrash() {
179
- var _useState = useState(false),
180
- _useState2 = _slicedToArray(_useState, 2),
181
- trashing = _useState2[0],
182
- setTrashing = _useState2[1];
183
- var api = useMediasApi();
184
- var mediaTrash = useCallback(function (id, data) {
185
- setTrashing(true);
186
- return api.trash(id, data).then(function (response) {
187
- setTrashing(false);
188
- return response;
189
- });
190
- }, [api, setTrashing]);
191
- return {
192
- mediaTrash: mediaTrash,
193
- trashing: trashing
194
- };
195
- };
196
- var useMediaTrash$1 = useMediaTrash;
197
-
198
- var styles = {"mediaFrame":"panneau-medias-mediaFrame","playButton":"panneau-medias-playButton"};
199
-
200
- var propTypes$8 = {
201
- value: PropTypes.shape({
202
- id: PropTypes.string,
203
- type: PropTypes.string
204
- }),
205
- showPlayer: PropTypes.bool,
206
- className: PropTypes.string
207
- };
208
- var defaultProps$8 = {
209
- value: null,
210
- showPlayer: true,
211
- className: null
212
- };
213
- function MediaFrame(_ref) {
214
- var value = _ref.value,
215
- initialShowPlayer = _ref.showPlayer,
216
- className = _ref.className;
217
- var _useState = useState(initialShowPlayer),
218
- _useState2 = _slicedToArray(_useState, 2),
219
- showPlayer = _useState2[0],
220
- setShowPlayer = _useState2[1];
221
- var _ref2 = value || {},
222
- _ref2$type = _ref2.type,
223
- type = _ref2$type === void 0 ? null : _ref2$type;
224
- var onClick = useCallback(function () {
225
- setShowPlayer(!showPlayer);
226
- }, [showPlayer, setShowPlayer]);
227
- return /*#__PURE__*/React.createElement("div", {
228
- className: classNames([styles.mediaFrame, 'position-relative', 'd-flex', 'flex-grow-1', 'w-100', 'mw-100', _defineProperty({}, className, className != null)])
229
- }, showPlayer && type !== 'image' ? /*#__PURE__*/React.createElement(MediaPlayer, {
230
- value: value,
231
- autoPlay: false,
232
- width: "100%"
233
- }) : /*#__PURE__*/React.createElement(ImageDisplay, {
234
- className: "w-100",
235
- value: value,
236
- maxWidth: "100%",
237
- maxHeight: "100%",
238
- onClick: type === 'video' || type === 'audio' ? onClick : null
239
- }));
240
- }
241
- MediaFrame.propTypes = propTypes$8;
242
- MediaFrame.defaultProps = defaultProps$8;
243
-
244
- var defaultFields = [{
245
- name: 'name',
246
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
247
- id: "WX83V9",
248
- defaultMessage: [{
249
- "type": 0,
250
- "value": "File name"
251
- }]
252
- }),
253
- type: 'text',
254
- component: 'text'
255
- }, {
256
- name: 'description',
257
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
258
- id: "ygNvmz",
259
- defaultMessage: [{
260
- "type": 0,
261
- "value": "Description"
262
- }]
263
- }),
264
- type: 'text',
265
- component: 'text'
266
- },
267
- // Creatable example
268
- // {
269
- // name: 'tags',
270
- // label: <FormattedMessage defaultMessage="Tags" description="Field name" />,
271
- // type: 'array',
272
- // component: 'select',
273
- // requestUrl: '/api/tags',
274
- // optionLabelPath: 'label',
275
- // optionValuePath: 'id', // Uses taggable so change the logic here
276
- // valueIsOption: true,
277
- // multiple: true,
278
- // paginated: false,
279
- // creatable: true, // TODO
280
- // },
281
- {
282
- id: 'info',
283
- component: 'fields',
284
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
285
- id: "3RT69u",
286
- defaultMessage: [{
287
- "type": 0,
288
- "value": "Informations"
289
- }]
290
- }),
291
- isList: true,
292
- hideWithoutValue: true,
293
- fields: [{
294
- id: 'user',
295
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
296
- id: "yByaBh",
297
- defaultMessage: [{
298
- "type": 0,
299
- "value": "Added by"
300
- }]
301
- }),
302
- type: 'display',
303
- display: 'avatar',
304
- name: 'user',
305
- horizontal: true
306
- }, {
307
- id: 'created_at',
308
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
309
- id: "PN+75e",
310
- defaultMessage: [{
311
- "type": 0,
312
- "value": "Created at"
313
- }]
314
- }),
315
- type: 'display',
316
- display: 'date',
317
- name: 'created_at',
318
- format: 'yyyy-MM-dd hh:ss',
319
- horizontal: true
320
- }]
321
- }, {
322
- id: 'technical',
323
- component: 'fields',
324
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
325
- id: "xKUOLG",
326
- defaultMessage: [{
327
- "type": 0,
328
- "value": "Technical details"
329
- }]
330
- }),
331
- isList: true,
332
- hideWithoutValue: true,
333
- fields: [{
334
- id: 'format',
335
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
336
- id: "JuxiUN",
337
- defaultMessage: [{
338
- "type": 0,
339
- "value": "Format"
340
- }]
341
- }),
342
- type: 'display',
343
- display: 'unit',
344
- format: 'format',
345
- name: 'format',
346
- horizontal: true
347
- }, {
348
- id: 'dimensions',
349
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
350
- id: "rmJBin",
351
- defaultMessage: [{
352
- "type": 0,
353
- "value": "Dimensions"
354
- }]
355
- }),
356
- type: 'display',
357
- display: 'unit',
358
- format: 'dimensions',
359
- name: 'metadata',
360
- horizontal: true
361
- }, {
362
- id: 'size',
363
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
364
- id: "g2CRt5",
365
- defaultMessage: [{
366
- "type": 0,
367
- "value": "Size"
368
- }]
369
- }),
370
- type: 'display',
371
- display: 'unit',
372
- format: 'bytes',
373
- name: 'metadata.size',
374
- horizontal: true
375
- }, {
376
- id: 'duration',
377
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
378
- id: "wU++NJ",
379
- defaultMessage: [{
380
- "type": 0,
381
- "value": "Duration"
382
- }]
383
- }),
384
- type: 'display',
385
- display: 'unit',
386
- format: 'duration',
387
- name: 'metadata.duration',
388
- horizontal: true
389
- }]
390
- }];
391
-
392
- var propTypes$7 = {
393
- value: PropTypes.shape({
394
- id: PropTypes.string
395
- }),
396
- fields: PropTypes.arrayOf(PropTypes.shape({
397
- name: PropTypes.string
398
- })),
399
- onChange: PropTypes.func,
400
- onSave: PropTypes.func,
401
- onDelete: PropTypes.func,
402
- onClose: PropTypes.func,
403
- withDelete: PropTypes.bool,
404
- withTrash: PropTypes.bool,
405
- className: PropTypes.string,
406
- children: PropTypes.node
407
- };
408
- var defaultProps$7 = {
409
- value: null,
410
- fields: defaultFields,
411
- onChange: null,
412
- onSave: null,
413
- onDelete: null,
414
- onClose: null,
415
- withDelete: false,
416
- withTrash: false,
417
- className: null,
418
- children: null
419
- };
420
- function MediaForm(_ref) {
421
- var initialValue = _ref.value,
422
- initialFields = _ref.fields,
423
- onChange = _ref.onChange,
424
- onSave = _ref.onSave,
425
- onDelete = _ref.onDelete,
426
- onClose = _ref.onClose,
427
- withDelete = _ref.withDelete,
428
- withTrash = _ref.withTrash,
429
- className = _ref.className,
430
- children = _ref.children;
431
- var FieldsComponent = useFieldComponent('fields');
432
- var _useMediaUpdate = useMediaUpdate$1(),
433
- update = _useMediaUpdate.update,
434
- updating = _useMediaUpdate.updating;
435
- var _useMediaTrash = useMediaTrash$1(),
436
- mediaTrash = _useMediaTrash.mediaTrash,
437
- trashing = _useMediaTrash.trashing;
438
- var _useMediaDelete = useMediaDelete$1(),
439
- mediaDelete = _useMediaDelete.mediaDelete,
440
- deleting = _useMediaDelete.deleting;
441
- var _useState = useState(false),
442
- _useState2 = _slicedToArray(_useState, 2),
443
- changed = _useState2[0],
444
- setChanged = _useState2[1];
445
- var disabled = updating || deleting || trashing || initialValue === null;
446
- var _ref2 = initialValue || {},
447
- _ref2$name = _ref2.name,
448
- name = _ref2$name === void 0 ? null : _ref2$name,
449
- _ref2$type = _ref2.type,
450
- type = _ref2$type === void 0 ? null : _ref2$type,
451
- _ref2$deletedAt = _ref2.deletedAt,
452
- deletedAt = _ref2$deletedAt === void 0 ? null : _ref2$deletedAt;
453
- var onChangeMedia = useCallback(function (newValue) {
454
- if (onChange !== null) {
455
- onChange(newValue);
456
- }
457
- setChanged(true);
458
- }, [onChange, setChanged]);
459
- var onMediaSaved = useCallback(function (newValue) {
460
- if (onSave !== null) {
461
- onSave(newValue);
462
- }
463
- setChanged(false);
464
- }, [onChange, setChanged]);
465
- var onDeleteMedia = useCallback(function () {
466
- var _ref3 = initialValue || {},
467
- _ref3$id = _ref3.id,
468
- id = _ref3$id === void 0 ? null : _ref3$id;
469
- if (withTrash && deletedAt !== null) {
470
- mediaTrash(id, initialValue).then(function () {
471
- if (onDelete !== null) {
472
- onDelete();
473
- }
474
- setChanged(false);
475
- if (onClose !== null) {
476
- onClose();
477
- }
478
- });
479
- } else {
480
- // Destroy
481
- mediaDelete(id, initialValue).then(function () {
482
- if (onDelete !== null) {
483
- onDelete();
484
- }
485
- setChanged(false);
486
- if (onClose !== null) {
487
- onClose();
488
- }
489
- });
490
- }
491
- }, [initialValue, mediaDelete, mediaTrash, deletedAt, setChanged, onDelete, withTrash]);
492
- var postForm = useCallback(function (action, data) {
493
- return initialValue !== null ? update(initialValue.id, data) : new Promise();
494
- }, [initialValue, update]);
495
- var _useForm = useForm({
496
- fields: initialFields,
497
- postForm: postForm,
498
- onComplete: onMediaSaved,
499
- value: initialValue,
500
- setValue: onChangeMedia,
501
- disabled: updating
502
- }),
503
- value = _useForm.value,
504
- setValue = _useForm.setValue,
505
- fields = _useForm.fields,
506
- onSubmit = _useForm.onSubmit,
507
- status = _useForm.status,
508
- generalError = _useForm.generalError;
509
- return /*#__PURE__*/React.createElement("div", {
510
- className: classNames(['text-body', _defineProperty({}, className, className !== null)])
511
- }, /*#__PURE__*/React.createElement("nav", {
512
- className: "navbar d-flex w-100 align-items-end justify-content-between border-bottom mb-3"
513
- }, /*#__PURE__*/React.createElement("div", {
514
- className: "d-flex align-items-end justify-content-start mb-1",
515
- style: {
516
- maxWidth: '66%'
517
- }
518
- }, /*#__PURE__*/React.createElement("div", {
519
- className: "me-3 mb-0"
520
- }, /*#__PURE__*/React.createElement(Button, {
521
- theme: "secondary",
522
- outline: true,
523
- onClick: onClose,
524
- icon: "arrow-left"
525
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
526
- id: "8NyYTH",
527
- defaultMessage: [{
528
- "type": 0,
529
- "value": "Back"
530
- }]
531
- }))), /*#__PURE__*/React.createElement("h4", {
532
- className: "d-inline text-truncate mb-0"
533
- }, name), /*#__PURE__*/React.createElement("span", {
534
- className: "mx-2"
535
- }, type)), /*#__PURE__*/React.createElement("div", null, withDelete ? /*#__PURE__*/React.createElement(Button, {
536
- className: "me-2 mb-1 mt-1",
537
- theme: "danger",
538
- icon: withTrash && deletedAt !== null ? 'trash-fill' : 'trash',
539
- iconPosition: "right",
540
- onClick: onDeleteMedia,
541
- disabled: deleting || trashing
542
- }, withTrash && deletedAt === null ? /*#__PURE__*/React.createElement(FormattedMessage, {
543
- id: "PSlT7H",
544
- defaultMessage: [{
545
- "type": 0,
546
- "value": "Trash"
547
- }]
548
- }) : /*#__PURE__*/React.createElement(FormattedMessage, {
549
- id: "Bhu3B2",
550
- defaultMessage: [{
551
- "type": 0,
552
- "value": "Delete"
553
- }]
554
- })) : null, onSave !== null ? /*#__PURE__*/React.createElement(Button, {
555
- className: "mb-1 mt-1",
556
- theme: "primary",
557
- icon: changed ? 'check' : 'check',
558
- iconPosition: "right",
559
- onClick: onSubmit,
560
- disabled: !changed || updating || deleting
561
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
562
- id: "R1HYj0",
563
- defaultMessage: [{
564
- "type": 0,
565
- "value": "Save"
566
- }]
567
- })) : null)), /*#__PURE__*/React.createElement("div", {
568
- className: "row"
569
- }, /*#__PURE__*/React.createElement("div", {
570
- className: "col-md-6"
571
- }, /*#__PURE__*/React.createElement("div", {
572
- className: "position-relative w-100"
573
- }, /*#__PURE__*/React.createElement("div", {
574
- className: styles.mediaFrame
575
- }, /*#__PURE__*/React.createElement(MediaFrame, {
576
- value: value
577
- }))), children), /*#__PURE__*/React.createElement("div", {
578
- className: "col-md-6"
579
- }, /*#__PURE__*/React.createElement(Form, {
580
- onChange: onChangeMedia,
581
- withoutActions: true
582
- }, /*#__PURE__*/React.createElement(FieldsComponent, {
583
- fields: fields,
584
- value: value,
585
- onChange: setValue,
586
- disabled: disabled
587
- })), generalError !== null && status !== null ? /*#__PURE__*/React.createElement("div", {
588
- className: "mt-5"
589
- }, /*#__PURE__*/React.createElement(FormStatus, {
590
- status: status
591
- })) : null)));
592
- }
593
- MediaForm.propTypes = propTypes$7;
594
- MediaForm.defaultProps = defaultProps$7;
595
-
596
- var useMediaRestore = function useMediaRestore() {
597
- var _useState = useState(false),
598
- _useState2 = _slicedToArray(_useState, 2),
599
- restoring = _useState2[0],
600
- setRestoring = _useState2[1];
601
- var api = useMediasApi();
602
- var mediaRestore = useCallback(function (id, data) {
603
- setRestoring(true);
604
- return api.restore(id, data).then(function (response) {
605
- setRestoring(false);
606
- return response;
607
- });
608
- }, [api, setRestoring]);
609
- return {
610
- mediaRestore: mediaRestore,
611
- restoring: restoring
612
- };
613
- };
614
-
615
- var MediaContext = /*#__PURE__*/React.createContext(null);
616
- var useCurrentMedia = function useCurrentMedia() {
617
- return useContext(MediaContext);
618
- };
619
- var propTypes$6 = {
620
- media: PropTypes.shape({
621
- id: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
622
- }),
623
- children: PropTypes.node.isRequired
624
- };
625
- var defaultProps$6 = {
626
- media: null
627
- };
628
- function MediaProvider(_ref) {
629
- var providedMedia = _ref.media,
630
- children = _ref.children;
631
- var _useState = useState(providedMedia),
632
- _useState2 = _slicedToArray(_useState, 2),
633
- currentMedia = _useState2[0],
634
- setCurrentMedia = _useState2[1];
635
- var values = useMemo(function () {
636
- return {
637
- currentMedia: currentMedia,
638
- setCurrentMedia: setCurrentMedia
639
- };
640
- }, [currentMedia, setCurrentMedia]);
641
- return /*#__PURE__*/React.createElement(MediaContext.Provider, {
642
- value: values
643
- }, children);
644
- }
645
- MediaProvider.propTypes = propTypes$6;
646
- MediaProvider.defaultProps = defaultProps$6;
647
-
648
- var defaultColumns = [{
649
- id: 'image',
650
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
651
- id: "UbxbKP",
652
- defaultMessage: [{
653
- "type": 0,
654
- "value": "Preview"
655
- }]
656
- }),
657
- component: 'image',
658
- path: 'thumbnail_url',
659
- sortable: false
660
- }, {
661
- id: 'name',
662
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
663
- id: "WX83V9",
664
- defaultMessage: [{
665
- "type": 0,
666
- "value": "File name"
667
- }]
668
- }),
669
- component: 'text-description',
670
- path: 'name',
671
- descriptionPath: 'type',
672
- descriptionValues: {
673
- image: /*#__PURE__*/React.createElement(FormattedMessage, {
674
- id: "AwDQvD",
675
- defaultMessage: [{
676
- "type": 0,
677
- "value": "Image"
678
- }]
679
- }),
680
- video: /*#__PURE__*/React.createElement(FormattedMessage, {
681
- id: "mQiyAm",
682
- defaultMessage: [{
683
- "type": 0,
684
- "value": "Video"
685
- }]
686
- }),
687
- audio: /*#__PURE__*/React.createElement(FormattedMessage, {
688
- id: "XnyI69",
689
- defaultMessage: [{
690
- "type": 0,
691
- "value": "Audio"
692
- }]
693
- }),
694
- document: /*#__PURE__*/React.createElement(FormattedMessage, {
695
- id: "1dqmFw",
696
- defaultMessage: [{
697
- "type": 0,
698
- "value": "Document"
699
- }]
700
- })
701
- },
702
- sortable: true
703
- }, {
704
- id: 'dimensions',
705
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
706
- id: "eCe9ZY",
707
- defaultMessage: [{
708
- "type": 0,
709
- "value": "Dimensions"
710
- }]
711
- }),
712
- component: 'unit',
713
- format: 'dimensions',
714
- path: 'metadata'
715
- }, {
716
- id: 'size',
717
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
718
- id: "c3hu9o",
719
- defaultMessage: [{
720
- "type": 0,
721
- "value": "Size"
722
- }]
723
- }),
724
- component: 'unit',
725
- format: 'bytes',
726
- path: 'metadata.size'
727
- }, {
728
- id: 'duration',
729
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
730
- id: "002oWQ",
731
- defaultMessage: [{
732
- "type": 0,
733
- "value": "Duration"
734
- }]
735
- }),
736
- component: 'unit',
737
- format: 'duration',
738
- path: 'metadata.duration'
739
- },
740
- // {
741
- // id: 'author',
742
- // label: <FormattedMessage defaultMessage="Added by" description="Field name" />,
743
- // component: 'avatar',
744
- // path: 'metadata.author',
745
- // namePath: 'name',
746
- // withoutName: true,
747
- // },
748
- {
749
- id: 'created_at',
750
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
751
- id: "OzYWZz",
752
- defaultMessage: [{
753
- "type": 0,
754
- "value": "Created at"
755
- }]
756
- }),
757
- component: 'date',
758
- path: 'created_at',
759
- format: 'yyyy-MM-dd hh:ss',
760
- sortable: true
761
- }, {
762
- id: 'actions',
763
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
764
- id: "rtwfuZ",
765
- defaultMessage: [{
766
- "type": 0,
767
- "value": "Actions"
768
- }]
769
- }),
770
- actions: ['edit', 'delete']
771
- // component: ItemActions,
772
- // label: 'Edit',
773
- // url: '/edit/1',
774
- }
775
- // {
776
- // id: 'status',
777
- // label: <FormattedMessage defaultMessage="Status" description="Field name" />,
778
- // component: 'text',
779
- // path: 'metadata.status',
780
- // },
781
- ];
782
-
783
- var defaultFilters = [{
784
- id: 'search',
785
- component: 'search',
786
- name: 'search',
787
- width: 220
788
- }, {
789
- id: 'types',
790
- component: 'select',
791
- name: 'types',
792
- placeholder: /*#__PURE__*/React.createElement(FormattedMessage, {
793
- id: "9/t5wK",
794
- defaultMessage: [{
795
- "type": 0,
796
- "value": "Type"
797
- }]
798
- }),
799
- options: [{
800
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
801
- id: "yHAmDD",
802
- defaultMessage: [{
803
- "type": 0,
804
- "value": "Image"
805
- }]
806
- }),
807
- value: 'image'
808
- }, {
809
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
810
- id: "xSERPA",
811
- defaultMessage: [{
812
- "type": 0,
813
- "value": "Video"
814
- }]
815
- }),
816
- value: 'video'
817
- }, {
818
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
819
- id: "yQRtgx",
820
- defaultMessage: [{
821
- "type": 0,
822
- "value": "Audio"
823
- }]
824
- }),
825
- value: 'audio'
826
- }, {
827
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
828
- id: "8INLfU",
829
- defaultMessage: [{
830
- "type": 0,
831
- "value": "Document"
832
- }]
833
- }),
834
- value: 'document'
835
- }],
836
- multiple: true
837
- }
838
- // {
839
- // id: 'author',
840
- // component: 'select',
841
- // name: 'author',
842
- // placeholder: <FormattedMessage defaultMessage="Author" description="Filter label" />,
843
- // requestUrl: '/persons',
844
- // itemLabelPath: 'name',
845
- // multiple: true,
846
- // },
847
- // {
848
- // id: 'tag',
849
- // component: 'select',
850
- // name: 'tag',
851
- // placeholder: <FormattedMessage defaultMessage="Tag" description="Filter label" />,
852
- // requestUrl: '/tags',
853
- // itemLabelPath: 'label',
854
- // multiple: true,
855
- // },
856
- ];
857
-
858
- var _excluded$5 = ["page", "count"],
859
- _excluded2 = ["types", "trashed"];
860
- var propTypes$5 = {
861
- items: PropTypes$1.medias,
862
- extraItems: PropTypes$1.medias,
863
- types: PropTypes.arrayOf(PropTypes.string),
864
- permissions: PropTypes.shape({
865
- create: PropTypes.bool,
866
- edit: PropTypes.bool,
867
- "delete": PropTypes.bool
868
- }),
869
- filters: PropTypes$1.filters,
870
- columns: PropTypes$1.tableColumns,
871
- query: PropTypes.shape({}),
872
- baseUrl: PropTypes.string,
873
- fields: PropTypes$1.fields,
874
- layout: PropTypes.string,
875
- layouts: PropTypes.arrayOf(PropTypes.shape({})),
876
- theme: PropTypes.string,
877
- onMediaUploaded: PropTypes.func,
878
- onItemsChange: PropTypes.func,
879
- onLayoutChange: PropTypes.func,
880
- onMediaFormOpen: PropTypes.func,
881
- onMediaFormClose: PropTypes.func,
882
- selectable: PropTypes.bool,
883
- selectedItems: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.arrayOf(PropTypes.shape({}))]),
884
- onSelectionChange: PropTypes.func,
885
- multipleSelection: PropTypes.bool,
886
- uppyConfig: PropTypes.shape({}),
887
- withDelete: PropTypes.bool,
888
- withTrash: PropTypes.bool,
889
- withStickySelection: PropTypes.bool,
890
- withoutUpload: PropTypes.bool,
891
- className: PropTypes.string,
892
- formChildren: PropTypes.node
893
- };
894
- var defaultProps$5 = {
895
- items: null,
896
- extraItems: null,
897
- types: null,
898
- permissions: null,
899
- filters: defaultFilters,
900
- columns: defaultColumns,
901
- fields: defaultFields,
902
- query: null,
903
- baseUrl: null,
904
- layout: 'table',
905
- layouts: [{
906
- id: 'table',
907
- label: /*#__PURE__*/React.createElement(Icon, {
908
- name: "table"
909
- })
910
- }, {
911
- id: 'grid',
912
- label: /*#__PURE__*/React.createElement(Icon, {
913
- name: "grid"
914
- })
915
- }],
916
- theme: null,
917
- onMediaUploaded: null,
918
- onItemsChange: null,
919
- onLayoutChange: null,
920
- onMediaFormOpen: null,
921
- onMediaFormClose: null,
922
- selectable: false,
923
- selectedItems: null,
924
- onSelectionChange: null,
925
- multipleSelection: false,
926
- uppyConfig: null,
927
- withDelete: false,
928
- withTrash: false,
929
- withStickySelection: false,
930
- withoutUpload: false,
931
- className: null,
932
- formChildren: null
933
- };
934
- function MediasBrowser(_ref) {
935
- var initialItems = _ref.items,
936
- extraItems = _ref.extraItems,
937
- types = _ref.types,
938
- permissions = _ref.permissions,
939
- baseUrl = _ref.baseUrl,
940
- filters = _ref.filters,
941
- columns = _ref.columns,
942
- fields = _ref.fields,
943
- initialQuery = _ref.query,
944
- initialLayout = _ref.layout,
945
- layouts = _ref.layouts,
946
- theme = _ref.theme,
947
- onMediaUploaded = _ref.onMediaUploaded,
948
- onItemsChange = _ref.onItemsChange,
949
- onLayoutChange = _ref.onLayoutChange,
950
- onMediaFormOpen = _ref.onMediaFormOpen,
951
- onMediaFormClose = _ref.onMediaFormClose,
952
- selectable = _ref.selectable,
953
- selectedItems = _ref.selectedItems,
954
- onSelectionChange = _ref.onSelectionChange,
955
- multipleSelection = _ref.multipleSelection,
956
- uppyConfig = _ref.uppyConfig,
957
- withDelete = _ref.withDelete,
958
- withTrash = _ref.withTrash,
959
- withStickySelection = _ref.withStickySelection,
960
- withoutUpload = _ref.withoutUpload,
961
- className = _ref.className,
962
- formChildren = _ref.formChildren;
963
- var _useState = useState(initialItems || null),
964
- _useState2 = _slicedToArray(_useState, 1),
965
- baseItems = _useState2[0];
966
- var baseQuery = useMemo(function () {
967
- return _objectSpread(_objectSpread({
968
- count: 12
969
- }, initialQuery), types !== null ? {
970
- types: types
971
- } : null);
972
- }, [initialQuery, types]);
973
- var _useQuery = useQuery(baseQuery),
974
- fullQuery = _useQuery.query,
975
- onPageChange = _useQuery.onPageChange,
976
- onQueryChange = _useQuery.onQueryChange,
977
- onQueryReset = _useQuery.onQueryReset;
978
- var _useMemo = useMemo(function () {
979
- var _ref2 = fullQuery || {},
980
- _ref2$page = _ref2.page,
981
- fullQueryPage = _ref2$page === void 0 ? null : _ref2$page,
982
- _ref2$count = _ref2.count,
983
- fullQueryCount = _ref2$count === void 0 ? null : _ref2$count,
984
- params = _objectWithoutProperties(_ref2, _excluded$5);
985
- return {
986
- page: fullQueryPage,
987
- count: fullQueryCount,
988
- query: params
989
- };
990
- }, [fullQuery]),
991
- _useMemo$page = _useMemo.page,
992
- page = _useMemo$page === void 0 ? null : _useMemo$page,
993
- _useMemo$count = _useMemo.count,
994
- count = _useMemo$count === void 0 ? null : _useMemo$count,
995
- _useMemo$query = _useMemo.query,
996
- query = _useMemo$query === void 0 ? null : _useMemo$query;
997
- var _ref3 = permissions || {},
998
- _ref3$create = _ref3.create,
999
- canCreate = _ref3$create === void 0 ? true : _ref3$create,
1000
- _ref3$edit = _ref3.edit,
1001
- canEdit = _ref3$edit === void 0 ? true : _ref3$edit,
1002
- _ref3$delete = _ref3["delete"],
1003
- canDelete = _ref3$delete === void 0 ? true : _ref3$delete;
1004
- var canUpload = canCreate && !withoutUpload;
1005
-
1006
- // eslint-disable-next-line no-unused-vars
1007
- var _ref4 = query || {};
1008
- _ref4.types;
1009
- var _ref4$trashed = _ref4.trashed,
1010
- trashed = _ref4$trashed === void 0 ? null : _ref4$trashed,
1011
- queryWithoutTypes = _objectWithoutProperties(_ref4, _excluded2);
1012
- var _useMediaTrash = useMediaTrash$1(),
1013
- mediaTrash = _useMediaTrash.mediaTrash,
1014
- trashing = _useMediaTrash.trashing;
1015
- var _useMediaDelete = useMediaDelete$1(),
1016
- mediaDelete = _useMediaDelete.mediaDelete,
1017
- deleting = _useMediaDelete.deleting;
1018
- var _useMediaRestore = useMediaRestore(),
1019
- mediaRestore = _useMediaRestore.mediaRestore;
1020
- var _useState3 = useState(false),
1021
- _useState4 = _slicedToArray(_useState3, 2),
1022
- showTrashed = _useState4[0],
1023
- setShowTrashed = _useState4[1];
1024
- var _useMedias = useMedias$1(query, page, count, {
1025
- items: baseItems,
1026
- trashed: showTrashed
1027
- }),
1028
- items = _useMedias.items,
1029
- allItems = _useMedias.allItems,
1030
- _useMedias$loading = _useMedias.loading,
1031
- loading = _useMedias$loading === void 0 ? false : _useMedias$loading,
1032
- _useMedias$loaded = _useMedias.loaded,
1033
- loaded = _useMedias$loaded === void 0 ? false : _useMedias$loaded,
1034
- _useMedias$updateItem = _useMedias.updateItem,
1035
- updateItem = _useMedias$updateItem === void 0 ? null : _useMedias$updateItem,
1036
- _useMedias$pagination = _useMedias.pagination,
1037
- _useMedias$pagination2 = _useMedias$pagination === void 0 ? {} : _useMedias$pagination,
1038
- lastPage = _useMedias$pagination2.lastPage,
1039
- total = _useMedias$pagination2.total,
1040
- _useMedias$pages = _useMedias.pages,
1041
- pages = _useMedias$pages === void 0 ? null : _useMedias$pages,
1042
- reload = _useMedias.reload;
1043
- var onClickTrash = useCallback(function () {
1044
- setShowTrashed(!showTrashed);
1045
- }, [showTrashed, setShowTrashed]);
1046
-
1047
- // dirty fix to bypass global query caching
1048
- useEffect(function () {
1049
- reload();
1050
- }, [showTrashed]);
1051
- useEffect(function () {
1052
- if (onItemsChange !== null) {
1053
- onItemsChange(items);
1054
- }
1055
- }, [items, onItemsChange]);
1056
- var _useState5 = useState(initialLayout || 'table'),
1057
- _useState6 = _slicedToArray(_useState5, 2),
1058
- layout = _useState6[0],
1059
- setLayout = _useState6[1];
1060
- var hasLayouts = useMemo(function () {
1061
- return layouts !== null && layouts.length > 1;
1062
- }, [layouts]);
1063
- var onClickLayout = useCallback(function (newLayout) {
1064
- setLayout(newLayout);
1065
- if (onLayoutChange !== null) {
1066
- onLayoutChange(newLayout);
1067
- }
1068
- }, [setLayout]);
1069
- var _useCurrentMedia = useCurrentMedia(),
1070
- currentMedia = _useCurrentMedia.currentMedia,
1071
- setCurrentMedia = _useCurrentMedia.setCurrentMedia;
1072
- useEffect(function () {
1073
- if (currentMedia !== null && onMediaFormOpen !== null) {
1074
- onMediaFormOpen();
1075
- }
1076
- if (currentMedia === null && onMediaFormClose !== null) {
1077
- onMediaFormClose();
1078
- }
1079
- }, [currentMedia]);
1080
- var onOpenMedia = useCallback(function (media) {
1081
- setCurrentMedia(media);
1082
- }, [setCurrentMedia]);
1083
- var onCloseMedia = useCallback(function () {
1084
- setCurrentMedia(null);
1085
- }, [setCurrentMedia]);
1086
- var onSaveMedia = useCallback(function (item) {
1087
- setCurrentMedia(null);
1088
- updateItem(item);
1089
- }, [setCurrentMedia, updateItem]);
1090
- var onDeleteMedia = useCallback(function () {
1091
- if (reload !== null) {
1092
- reload();
1093
- }
1094
- }, [reload]);
1095
- var onTrashMedia = useCallback(function (id) {
1096
- return !showTrashed && withTrash ? mediaTrash(id).then(function () {
1097
- if (!multipleSelection) {
1098
- var _ref5 = selectedItems || {},
1099
- _ref5$id = _ref5.id,
1100
- selectedId = _ref5$id === void 0 ? null : _ref5$id;
1101
- if (selectedId !== null && selectedId === id) {
1102
- onSelectionChange(null);
1103
- }
1104
- }
1105
- // Todo remove from mult selection
1106
- }).then(reload) : mediaDelete(id).then(function () {
1107
- if (!multipleSelection) {
1108
- var _ref6 = selectedItems || {},
1109
- _ref6$id = _ref6.id,
1110
- selectedId = _ref6$id === void 0 ? null : _ref6$id;
1111
- if (selectedId !== null && selectedId === id) {
1112
- onSelectionChange(null);
1113
- }
1114
- }
1115
- // Todo remove from selection
1116
- }).then(reload);
1117
- }, [showTrashed, withTrash, mediaTrash, mediaDelete, reload, selectedItems, multipleSelection, onSelectionChange]);
1118
- var _useState7 = useState(null),
1119
- _useState8 = _slicedToArray(_useState7, 2),
1120
- uploadedMedias = _useState8[0],
1121
- setUploadedMedias = _useState8[1];
1122
- var _useState9 = useState(false),
1123
- _useState10 = _slicedToArray(_useState9, 2),
1124
- uploadProcessing = _useState10[0],
1125
- setUploadProcessing = _useState10[1];
1126
- var onUploadedMediaChanged = useCallback(function (newMedias) {
1127
- var uploadedNewMedias = (isArray(newMedias) ? [].concat(_toConsumableArray(newMedias), _toConsumableArray(uploadedMedias || [])) : [newMedias].concat(_toConsumableArray(uploadedMedias || []))).filter(function (it) {
1128
- return it !== null;
1129
- });
1130
- setUploadedMedias(uploadedNewMedias);
1131
- if (onSelectionChange !== null) {
1132
- var _ref7 = newMedias || [],
1133
- _ref8 = _slicedToArray(_ref7, 1),
1134
- _ref8$ = _ref8[0],
1135
- firstMedia = _ref8$ === void 0 ? null : _ref8$;
1136
- onSelectionChange(multipleSelection && isArray(newMedias) ? newMedias : firstMedia);
1137
- onQueryReset();
1138
- reload();
1139
- }
1140
- }, [onSelectionChange, setUploadedMedias, uploadedMedias, onQueryReset, reload, multipleSelection]);
1141
- var onUploadComplete = useCallback(function () {
1142
- var medias = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1143
- if (showTrashed) {
1144
- setShowTrashed(false);
1145
- }
1146
- if (medias === null) return;
1147
- var rawMedias = (isArray(medias) ? medias : [medias]).filter(function (it) {
1148
- return it !== null;
1149
- });
1150
- if (onMediaUploaded !== null) {
1151
- setUploadProcessing(true);
1152
- onMediaUploaded(rawMedias).then(function (newMedias) {
1153
- onUploadedMediaChanged(newMedias);
1154
- setUploadProcessing(false);
1155
- })["catch"](function () {
1156
- setUploadProcessing(false);
1157
- });
1158
- } else {
1159
- onUploadedMediaChanged(rawMedias);
1160
- }
1161
- }, [onMediaUploaded, setUploadedMedias, setUploadProcessing, onUploadedMediaChanged]);
1162
- var pagination = /*#__PURE__*/React.createElement(Pagination, {
1163
- page: page,
1164
- lastPage: lastPage,
1165
- total: total,
1166
- url: baseUrl,
1167
- query: query,
1168
- onClickPage: onPageChange,
1169
- theme: theme,
1170
- loading: loading && pages !== null,
1171
- selectable: selectable,
1172
- selectedItems: selectedItems,
1173
- onSelectionChange: onSelectionChange,
1174
- multipleSelection: multipleSelection,
1175
- withPreviousNext: true,
1176
- alwaysShowButtons: true
1177
- });
1178
- var hidePagination = loaded && !loading && (items || []).length === 0;
1179
- var finalFilters = useMemo(function () {
1180
- var partialFilters = withTrash ? (filters || []).concat([{
1181
- name: 'trashed',
1182
- component: 'button',
1183
- theme: showTrashed ? 'danger' : 'secondary',
1184
- outline: !showTrashed,
1185
- activeTheme: 'danger',
1186
- icon: showTrashed ? 'trash-fill' : 'trash',
1187
- onClick: onClickTrash
1188
- }]) : filters;
1189
- if (types !== null && partialFilters !== null) {
1190
- return (partialFilters || []).map(function (filter) {
1191
- var _ref9 = filter || {},
1192
- _ref9$id = _ref9.id,
1193
- id = _ref9$id === void 0 ? null : _ref9$id;
1194
- return id === 'types' ? _objectSpread(_objectSpread({}, filter), {}, {
1195
- disabled: true
1196
- }) : filter;
1197
- });
1198
- }
1199
- return partialFilters;
1200
- }, [filters, types, withTrash, showTrashed, onClickTrash]);
1201
- var partialColumns = useMemo(function () {
1202
- return withTrash && showTrashed ? (columns || []).map(function (column) {
1203
- var _ref10 = column || {},
1204
- _ref10$id = _ref10.id,
1205
- columnId = _ref10$id === void 0 ? null : _ref10$id;
1206
- if (columnId === 'created_at') {
1207
- return _objectSpread(_objectSpread({}, column), {}, {
1208
- path: 'deleted_at',
1209
- label: /*#__PURE__*/React.createElement(FormattedMessage, {
1210
- id: "uds4wJ",
1211
- defaultMessage: [{
1212
- "type": 0,
1213
- "value": "Deleted at"
1214
- }]
1215
- })
1216
- });
1217
- }
1218
- if (columnId === 'actions') {
1219
- var _ref11 = column || {},
1220
- _ref11$actions = _ref11.actions,
1221
- actions = _ref11$actions === void 0 ? [] : _ref11$actions;
1222
- return _objectSpread(_objectSpread({}, column), {}, {
1223
- actions: (actions || []).reduce(function (acc, action) {
1224
- if (action === 'delete') {
1225
- acc.push({
1226
- id: 'restore',
1227
- component: 'restore',
1228
- withConfirmation: true,
1229
- action: function action(ids) {
1230
- return mediaRestore(ids[0]).then(reload);
1231
- }
1232
- });
1233
- }
1234
- acc.push(action);
1235
- return acc;
1236
- }, []).filter(function (it) {
1237
- return it !== 'edit';
1238
- })
1239
- });
1240
- }
1241
- return column;
1242
- }) : columns;
1243
- }, [columns, withTrash, showTrashed]);
1244
- var finalColumns = useMemo(function () {
1245
- return (partialColumns || []).map(function (column) {
1246
- var _ref12 = column || {},
1247
- _ref12$id = _ref12.id,
1248
- columnId = _ref12$id === void 0 ? null : _ref12$id;
1249
- if (columnId === 'actions') {
1250
- var _ref13 = column || {},
1251
- _ref13$actions = _ref13.actions,
1252
- actions = _ref13$actions === void 0 ? [] : _ref13$actions;
1253
- var availableActions = actions.filter(function (act) {
1254
- return act !== 'delete' || canDelete;
1255
- }).filter(function (act) {
1256
- return act !== 'edit' || canEdit;
1257
- });
1258
- if (availableActions.length === 0) {
1259
- return null;
1260
- }
1261
- return _objectSpread(_objectSpread({}, column), {}, {
1262
- actions: availableActions
1263
- });
1264
- }
1265
- return column;
1266
- }).filter(function (act) {
1267
- return act !== null;
1268
- });
1269
- }, [partialColumns, canEdit, canDelete]);
1270
- var hasQueryItem = useMemo(function () {
1271
- var showOnTopQuery = types === null ? query : queryWithoutTypes;
1272
- return showOnTopQuery !== null && !trashed ? Object.keys(showOnTopQuery).length > 0 : false;
1273
- }, [types, query, queryWithoutTypes, trashed]);
1274
- var finalItems = useMemo(function () {
1275
- if (withStickySelection && (extraItems !== null || uploadedMedias !== null || uploadProcessing === true)) {
1276
- return uniqBy([].concat(_toConsumableArray(uploadProcessing ? [{
1277
- id: '-',
1278
- loading: true,
1279
- actionsDisabled: true,
1280
- selectionDisabled: true
1281
- }] : []), _toConsumableArray(page === 1 && !hasQueryItem ? uploadedMedias || [] : []), _toConsumableArray(page === 1 && !hasQueryItem && !showTrashed ? (extraItems || []).map(function (item) {
1282
- var _item$id = item.id,
1283
- itemId = _item$id === void 0 ? null : _item$id;
1284
- return (allItems || []).find(function () {
1285
- var _ref14 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1286
- _ref14$id = _ref14.id,
1287
- otherId = _ref14$id === void 0 ? null : _ref14$id;
1288
- return otherId === itemId;
1289
- }) || item || null;
1290
- }).filter(function (it) {
1291
- return it !== null;
1292
- }) || [] : []), _toConsumableArray(items || [])), function (it) {
1293
- return it === null || it === void 0 ? void 0 : it.id;
1294
- });
1295
- }
1296
- return items;
1297
- }, [items, page, allItems, withStickySelection, extraItems, uploadProcessing, hasQueryItem, showTrashed]);
1298
-
1299
- // const emptyWithSticky = useMemo(
1300
- // () => (items || []).length === 0 && (finalItems || []).length > 0,
1301
- // [items, finalItems],
1302
- // );
1303
-
1304
- return /*#__PURE__*/React.createElement("div", {
1305
- className: className
1306
- }, currentMedia !== null ? /*#__PURE__*/React.createElement(MediaForm, {
1307
- value: currentMedia,
1308
- fields: fields,
1309
- onChange: setCurrentMedia,
1310
- onSave: onSaveMedia,
1311
- onClose: onCloseMedia,
1312
- onDelete: onDeleteMedia,
1313
- withDelete: withDelete,
1314
- withTrash: withTrash
1315
- }, formChildren) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1316
- className: classNames(['d-flex', 'justify-content-between'])
1317
- }, filters !== null ? /*#__PURE__*/React.createElement(Filters, {
1318
- value: query,
1319
- clearValue: types !== null ? queryWithoutTypes : null,
1320
- filters: finalFilters,
1321
- onChange: onQueryChange,
1322
- onReset: onQueryReset,
1323
- theme: theme
1324
- }) : null, canUpload ? /*#__PURE__*/React.createElement(UploadField, {
1325
- className: "ms-auto w-auto text-nowrap mt-2 mb-2 ps-2",
1326
- withButton: true,
1327
- withoutMedia: true,
1328
- uppyProps: uppyConfig,
1329
- types: types,
1330
- allowMultipleUploads: true,
1331
- onChange: onUploadComplete,
1332
- disabled: uploadProcessing,
1333
- loading: uploadProcessing,
1334
- outline: false,
1335
- closeAfterFinish: true
1336
- }) : null), /*#__PURE__*/React.createElement("div", {
1337
- className: classNames(['d-flex', 'mt-1', 'mb-3', {
1338
- 'justify-content-between': hasLayouts,
1339
- 'justify-content-end': !hasLayouts
1340
- }])
1341
- }, hasLayouts ? /*#__PURE__*/React.createElement(Buttons, {
1342
- size: "sm",
1343
- theme: "secondary",
1344
- outline: true,
1345
- items: (layouts || []).map(function (lay) {
1346
- return _objectSpread(_objectSpread({}, lay), {}, {
1347
- active: layout === lay.id,
1348
- onClick: function onClick() {
1349
- return onClickLayout(lay.id);
1350
- },
1351
- className: 'px-3 py-2'
1352
- });
1353
- })
1354
- }) : null, !hidePagination ? pagination : /*#__PURE__*/React.createElement("div", null)), layout === 'grid' ? /*#__PURE__*/React.createElement(Grid, {
1355
- size: "small",
1356
- theme: theme,
1357
- component: MediaCard,
1358
- componentProps: {
1359
- className: 'd-flex w-100',
1360
- cardClassName: 'flex-grow-1',
1361
- vertical: true,
1362
- onClickDescription: function onClickDescription(it) {
1363
- onOpenMedia(it);
1364
- }
1365
- },
1366
- selectable: selectable && !showTrashed,
1367
- selectedItems: selectedItems,
1368
- onSelectionChange: uploadProcessing ? null : onSelectionChange,
1369
- multipleSelection: multipleSelection,
1370
- query: query // For sort
1371
- ,
1372
- onQueryChange: onQueryChange,
1373
- items: finalItems || [],
1374
- loading: loading,
1375
- loaded: loaded
1376
- // empty={emptyWithSticky}
1377
- }) : null, layout === 'table' ? /*#__PURE__*/React.createElement(Table, {
1378
- theme: theme,
1379
- columns: finalColumns,
1380
- displayPlaceholder: /*#__PURE__*/React.createElement("span", {
1381
- className: "text-secondary text-opacity-75"
1382
- }, "\u2014"),
1383
- selectable: selectable && !showTrashed,
1384
- selectedItems: selectedItems,
1385
- onSelectionChange: uploadProcessing ? null : onSelectionChange,
1386
- multipleSelection: multipleSelection,
1387
- query: query // For sort
1388
- ,
1389
- onQueryChange: onQueryChange,
1390
- items: finalItems,
1391
- loading: loading,
1392
- loaded: loaded
1393
- // empty={emptyWithSticky}
1394
- ,
1395
- actionsProps: {
1396
- getDeletePropsFromItem: function getDeletePropsFromItem() {
1397
- return {
1398
- href: null,
1399
- withConfirmation: true,
1400
- disabled: trashing || deleting,
1401
- icon: showTrashed ? 'trash-fill' : 'trash',
1402
- action: function action(ids) {
1403
- return onTrashMedia(ids[0]);
1404
- }
1405
- };
1406
- },
1407
- getEditPropsFromItem: function getEditPropsFromItem(it) {
1408
- return {
1409
- href: null,
1410
- onClick: function onClick() {
1411
- onOpenMedia(it);
1412
- }
1413
- };
1414
- }
1415
- }
1416
- }) : null, !hidePagination ? /*#__PURE__*/React.createElement("div", {
1417
- className: classNames(['d-flex', 'mt-3', 'mb-1', 'justify-content-end'])
1418
- }, pagination) : null));
1419
- }
1420
- MediasBrowser.propTypes = propTypes$5;
1421
- MediasBrowser.defaultProps = defaultProps$5;
1422
-
1423
- var _excluded$4 = ["items", "value", "onChange", "multiple", "className"];
1424
- var propTypes$4 = {
1425
- items: PropTypes.arrayOf(PropTypes.shape({})),
1426
- value: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.arrayOf(PropTypes.shape({}))]),
1427
- multiple: PropTypes.bool,
1428
- onChange: PropTypes.func.isRequired,
1429
- className: PropTypes.string
1430
- };
1431
- var defaultProps$4 = {
1432
- items: null,
1433
- value: null,
1434
- multiple: false,
1435
- className: null
1436
- };
1437
- function MediasPicker(_ref) {
1438
- var initialItems = _ref.items,
1439
- initialSelectedItems = _ref.value,
1440
- onChange = _ref.onChange,
1441
- multiple = _ref.multiple,
1442
- className = _ref.className,
1443
- props = _objectWithoutProperties(_ref, _excluded$4);
1444
- // Keep the previous selection on top of first page
1445
- var extraItems = useMemo(function () {
1446
- if (initialSelectedItems === null) {
1447
- return null;
1448
- }
1449
- return isArray(initialSelectedItems) ? initialSelectedItems : [initialSelectedItems];
1450
- }, []);
1451
-
1452
- // Mostly for testing
1453
- var _useState = useState(initialSelectedItems || null),
1454
- _useState2 = _slicedToArray(_useState, 2),
1455
- selectedItems = _useState2[0],
1456
- setSelectedItems = _useState2[1];
1457
- var onSelectionChange = useCallback(function (newSelection) {
1458
- setSelectedItems(newSelection);
1459
- }, [setSelectedItems]);
1460
-
1461
- // Sync from the top
1462
- useEffect(function () {
1463
- setSelectedItems(initialSelectedItems);
1464
- }, [initialSelectedItems, setSelectedItems]);
1465
- useEffect(function () {
1466
- if (onChange !== null) {
1467
- onChange(selectedItems);
1468
- }
1469
- }, [selectedItems, onChange]);
1470
- return /*#__PURE__*/React.createElement("div", {
1471
- className: className
1472
- }, /*#__PURE__*/React.createElement(MediasBrowser, Object.assign({
1473
- items: initialItems // TODO: fix useItems if actually using this
1474
- ,
1475
- selectable: true,
1476
- selectedItems: selectedItems,
1477
- onSelectionChange: onSelectionChange,
1478
- multipleSelection: multiple,
1479
- extraItems: extraItems
1480
- }, props)));
1481
- }
1482
- MediasPicker.propTypes = propTypes$4;
1483
- MediasPicker.defaultProps = defaultProps$4;
1484
-
1485
- var _excluded$3 = ["api", "media"];
1486
- var propTypes$3 = {
1487
- api: apiPropTypes,
1488
- media: PropTypes.shape({
1489
- id: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
1490
- })
1491
- };
1492
- var defaultProps$3 = {
1493
- api: null,
1494
- media: null
1495
- };
1496
- function MediasBrowserContainer(_ref) {
1497
- var api = _ref.api,
1498
- media = _ref.media,
1499
- props = _objectWithoutProperties(_ref, _excluded$3);
1500
- return /*#__PURE__*/React.createElement(MediasApiProvider, {
1501
- api: api
1502
- }, /*#__PURE__*/React.createElement(MediaProvider, {
1503
- media: media
1504
- }, /*#__PURE__*/React.createElement(MediasBrowser, props)));
1505
- }
1506
- MediasBrowserContainer.propTypes = propTypes$3;
1507
- MediasBrowserContainer.defaultProps = defaultProps$3;
1508
-
1509
- var _excluded$2 = ["api", "media", "onChange"];
1510
- var propTypes$2 = {
1511
- api: apiPropTypes,
1512
- media: PropTypes.shape({
1513
- id: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
1514
- }),
1515
- onChange: PropTypes.func.isRequired
1516
- };
1517
- var defaultProps$2 = {
1518
- api: null,
1519
- media: null
1520
- };
1521
- function MediasPickerContainer(_ref) {
1522
- var api = _ref.api,
1523
- media = _ref.media,
1524
- onChange = _ref.onChange,
1525
- props = _objectWithoutProperties(_ref, _excluded$2);
1526
- return /*#__PURE__*/React.createElement(MediasApiProvider, {
1527
- api: api
1528
- }, /*#__PURE__*/React.createElement(MediaProvider, {
1529
- media: media
1530
- }, /*#__PURE__*/React.createElement(MediasPicker, Object.assign({}, props, {
1531
- onChange: onChange
1532
- }))));
1533
- }
1534
- MediasPickerContainer.propTypes = propTypes$2;
1535
- MediasPickerContainer.defaultProps = defaultProps$2;
1536
-
1537
- var _excluded$1 = ["resource"];
1538
- var propTypes$1 = {
1539
- resource: PropTypes.string
1540
- };
1541
- var defaultProps$1 = {
1542
- resource: 'medias'
1543
- };
1544
- function MediasResourceBrowser(_ref) {
1545
- var resourceId = _ref.resource,
1546
- props = _objectWithoutProperties(_ref, _excluded$1);
1547
- var resource = usePanneauResource(resourceId);
1548
- var api = useApi();
1549
- var mediasApi = useMemo(function () {
1550
- return {
1551
- get: function get() {
1552
- var _api$resources;
1553
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1554
- args[_key] = arguments[_key];
1555
- }
1556
- return (_api$resources = api.resources).get.apply(_api$resources, [resource].concat(args));
1557
- },
1558
- getTrashed: function getTrashed() {
1559
- var _api$resources2;
1560
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1561
- args[_key2] = arguments[_key2];
1562
- }
1563
- return (_api$resources2 = api.resources).getTrashed.apply(_api$resources2, [resource].concat(args));
1564
- },
1565
- find: function find() {
1566
- var _api$resources3;
1567
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1568
- args[_key3] = arguments[_key3];
1569
- }
1570
- return (_api$resources3 = api.resources).find.apply(_api$resources3, [resource].concat(args));
1571
- },
1572
- create: function create() {
1573
- var _api$resources4;
1574
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
1575
- args[_key4] = arguments[_key4];
1576
- }
1577
- return (_api$resources4 = api.resources).create.apply(_api$resources4, [resource].concat(args));
1578
- },
1579
- update: function update() {
1580
- var _api$resources5;
1581
- for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
1582
- args[_key5] = arguments[_key5];
1583
- }
1584
- return (_api$resources5 = api.resources).update.apply(_api$resources5, [resource].concat(args));
1585
- },
1586
- trash: function trash() {
1587
- var _api$resources6;
1588
- for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
1589
- args[_key6] = arguments[_key6];
1590
- }
1591
- return (_api$resources6 = api.resources).trash.apply(_api$resources6, [resource].concat(args));
1592
- },
1593
- "delete": function _delete() {
1594
- var _api$resources7;
1595
- for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
1596
- args[_key7] = arguments[_key7];
1597
- }
1598
- return (_api$resources7 = api.resources)["delete"].apply(_api$resources7, [resource].concat(args));
1599
- }
1600
- };
1601
- }, [api, resource]);
1602
- return /*#__PURE__*/React.createElement(MediasBrowserContainer, Object.assign({
1603
- api: mediasApi
1604
- }, props));
1605
- }
1606
- MediasResourceBrowser.propTypes = propTypes$1;
1607
- MediasResourceBrowser.defaultProps = defaultProps$1;
1608
-
1609
- var _excluded = ["resource"];
1610
- var propTypes = {
1611
- resource: PropTypes.string
1612
- };
1613
- var defaultProps = {
1614
- resource: 'medias'
1615
- };
1616
- function MediasResourcePicker(_ref) {
1617
- var resourceId = _ref.resource,
1618
- props = _objectWithoutProperties(_ref, _excluded);
1619
- var resource = usePanneauResource(resourceId);
1620
- var _ref2 = resource || {},
1621
- _ref2$index = _ref2.index,
1622
- index = _ref2$index === void 0 ? null : _ref2$index,
1623
- _ref2$fields = _ref2.fields,
1624
- fields = _ref2$fields === void 0 ? null : _ref2$fields;
1625
- var _ref3 = index || {},
1626
- _ref3$filters = _ref3.filters,
1627
- filters = _ref3$filters === void 0 ? null : _ref3$filters,
1628
- _ref3$columns = _ref3.columns,
1629
- columns = _ref3$columns === void 0 ? null : _ref3$columns;
1630
- var api = useApi();
1631
- var mediasApi = useMemo(function () {
1632
- return {
1633
- get: function get() {
1634
- var _api$resources;
1635
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1636
- args[_key] = arguments[_key];
1637
- }
1638
- return (_api$resources = api.resources).get.apply(_api$resources, [resource].concat(args));
1639
- },
1640
- getTrashed: function getTrashed() {
1641
- var _api$resources2;
1642
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1643
- args[_key2] = arguments[_key2];
1644
- }
1645
- return (_api$resources2 = api.resources).getTrashed.apply(_api$resources2, [resource].concat(args));
1646
- },
1647
- find: function find() {
1648
- var _api$resources3;
1649
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1650
- args[_key3] = arguments[_key3];
1651
- }
1652
- return (_api$resources3 = api.resources).find.apply(_api$resources3, [resource].concat(args));
1653
- },
1654
- create: function create() {
1655
- var _api$resources4;
1656
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
1657
- args[_key4] = arguments[_key4];
1658
- }
1659
- return (_api$resources4 = api.resources).create.apply(_api$resources4, [resource].concat(args));
1660
- },
1661
- update: function update() {
1662
- var _api$resources5;
1663
- for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
1664
- args[_key5] = arguments[_key5];
1665
- }
1666
- return (_api$resources5 = api.resources).update.apply(_api$resources5, [resource].concat(args));
1667
- },
1668
- trash: function trash() {
1669
- var _api$resources6;
1670
- for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
1671
- args[_key6] = arguments[_key6];
1672
- }
1673
- return (_api$resources6 = api.resources).trash.apply(_api$resources6, [resource].concat(args));
1674
- },
1675
- "delete": function _delete() {
1676
- var _api$resources7;
1677
- for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
1678
- args[_key7] = arguments[_key7];
1679
- }
1680
- return (_api$resources7 = api.resources)["delete"].apply(_api$resources7, [resource].concat(args));
1681
- }
1682
- };
1683
- }, [api, resource]);
1684
- return /*#__PURE__*/React.createElement(MediasPickerContainer, Object.assign({
1685
- api: mediasApi
1686
- }, filters !== null ? {
1687
- filters: filters
1688
- } : null, fields !== null ? {
1689
- fields: fields
1690
- } : null, columns !== null ? {
1691
- columns: columns
1692
- } : null, props));
1693
- }
1694
- MediasResourcePicker.propTypes = propTypes;
1695
- MediasResourcePicker.defaultProps = defaultProps;
1696
-
1697
- export { MediaForm, MediaProvider, MediasApiProvider, MediasBrowser, MediasBrowserContainer, MediasPicker, MediasPickerContainer, MediasResourceBrowser, MediasResourcePicker, apiPropTypes, defaultColumns as columns, defaultFields as fields, defaultFilters as filters, useCurrentMedia, useMedia$1 as useMedia, useMediaCreate$1 as useMediaCreate, useMediaDelete$1 as useMediaDelete, useMediaTrash$1 as useMediaTrash, useMediaUpdate$1 as useMediaUpdate, useMedias$1 as useMedias, useMediasApi };