@panneau/medias 3.0.223 → 3.0.224

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