UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

157 lines (148 loc) 5.55 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { Fragment, useCallback, useEffect, useRef } from 'react'; import { observer } from 'mobx-react-lite'; import classNames from 'classnames'; import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; import isNumber from 'lodash/isNumber'; import Item from './Item'; import Animate from '../animate'; import { arrayMove } from '../data-set/utils'; import { PictureProvider } from '../picture/PictureContext'; var AttachmentList = function AttachmentList(props) { var prefixCls = props.prefixCls, attachments = props.attachments, onUpload = props.onUpload, onRemove = props.onRemove, onOrderChange = props.onOrderChange, listType = props.listType, pictureWidth = props.pictureWidth, bucketName = props.bucketName, bucketDirectory = props.bucketDirectory, storageCode = props.storageCode, attachmentUUID = props.attachmentUUID, uploadButton = props.uploadButton, sortable = props.sortable, readOnly = props.readOnly, disabled = props.disabled, onFetchAttachments = props.onFetchAttachments, onAttachmentsChange = props.onAttachmentsChange, limit = props.limit, onHistory = props.onHistory, onPreview = props.onPreview, previewTarget = props.previewTarget, isPublic = props.isPublic, record = props.record, showSize = props.showSize, buttons = props.buttons, getPreviewUrl = props.getPreviewUrl; var isCard = listType === 'picture-card'; var classString = classNames(prefixCls, isCard ? "".concat(prefixCls, "-card") : "".concat(prefixCls, "-no-card")); var oldValues = useRef(); var handleDragEnd = useCallback(function (result) { var destination = result.destination, source = result.source; if (destination && attachments) { var newAttachments = attachments.slice(); arrayMove(newAttachments, source.index, destination.index); onOrderChange({ attachments: newAttachments }); } }, [attachments, onOrderChange]); useEffect(function () { if (attachmentUUID) { var current = oldValues.current; if (!current || current.attachmentUUID !== attachmentUUID || current.record !== record) { if (attachments) { onAttachmentsChange(undefined); } oldValues.current = { attachmentUUID: attachmentUUID, record: record }; onFetchAttachments({ bucketName: bucketName, bucketDirectory: bucketDirectory, storageCode: storageCode, attachmentUUID: attachmentUUID, isPublic: isPublic }); } } }, [onFetchAttachments, bucketName, bucketDirectory, storageCode, attachmentUUID, isPublic, record]); if (attachments) { var length = attachments.length; var draggable = sortable && !readOnly && length > 1; var previewIndex = 0; var list = attachments.map(function (attachment, index) { var type = attachment.type, uid = attachment.uid; var restCount = index + 1 === limit ? length - limit : undefined; var hidden = isNumber(limit) && index >= limit; var itemDraggable = draggable && !restCount; var itemIndex = type.startsWith('image') ? previewIndex++ : undefined; return /*#__PURE__*/React.createElement(Draggable, { draggableId: uid, index: index, key: uid, isDragDisabled: !itemDraggable }, function (provided) { return /*#__PURE__*/React.createElement(Item, { key: uid, provided: provided, prefixCls: "".concat(prefixCls, "-item"), attachment: attachment, pictureWidth: pictureWidth, listType: listType, bucketName: bucketName, bucketDirectory: bucketDirectory, storageCode: storageCode, showSize: showSize, attachmentUUID: attachmentUUID, onRemove: onRemove, onUpload: onUpload, isCard: isCard, readOnly: readOnly, disabled: disabled, restCount: restCount, draggable: itemDraggable, index: itemIndex, hidden: hidden, onHistory: onHistory, onPreview: onPreview, previewTarget: previewTarget, isPublic: isPublic, buttons: buttons, getPreviewUrl: getPreviewUrl }); }); }); return /*#__PURE__*/React.createElement(PictureProvider, null, /*#__PURE__*/React.createElement(DragDropContext, { onDragEnd: handleDragEnd }, /*#__PURE__*/React.createElement(Droppable, { droppableId: "list", key: "list", isDropDisabled: !draggable, direction: isCard ? 'horizontal' : 'vertical' }, function (droppableProvided) { return /*#__PURE__*/React.createElement("div", _extends({ ref: droppableProvided.innerRef }, droppableProvided.droppableProps, { className: classString }), /*#__PURE__*/React.createElement(Animate, { component: Fragment, transitionName: "fade", exclusive: true }, list), droppableProvided.placeholder, uploadButton); }))); } if (uploadButton) { return /*#__PURE__*/React.createElement("div", { className: classString }, uploadButton); } return null; }; AttachmentList.displayName = 'AttachmentList'; export default observer(AttachmentList); //# sourceMappingURL=AttachmentList.js.map