UNPKG

@mirrormedia/lilith-draft-editor

Version:
288 lines (254 loc) 9.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VideoSelector = VideoSelector; var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _modals = require("@keystone-ui/modals"); var _apollo = require("@keystone-6/core/admin-ui/apollo"); var _searchBox = require("./search-box"); var _pagination = require("./pagination"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const videosQuery = (0, _apollo.gql)` query Videos($searchText: String!, $take: Int, $skip: Int) { videosCount(where: { name: { contains: $searchText } }) videos( where: { name: { contains: $searchText } } orderBy: { id: desc } take: $take skip: $skip ) { id name url file { filename filesize url } coverPhoto { id name imageFile { url } resized { original } } } } `; const VideoSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)` margin-top: 10px; `; const VideoSelectionWrapper = _styledComponents.default.div` overflow: auto; margin-top: 10px; `; const VideoGridsWrapper = _styledComponents.default.div` display: flex; flex-wrap: wrap; overflow: auto; `; const VideoGridWrapper = _styledComponents.default.div` flex: 0 0 33.3333%; cursor: pointer; padding: 0 10px 10px; `; const VideoMetaGridsWrapper = _styledComponents.default.div` display: flex; flex-wrap: wrap; overflow: auto; `; const VideoMetaGridWrapper = _styledComponents.default.div` flex: 0 0 33.3333%; cursor: pointer; padding: 0 10px 10px; `; const Video = _styledComponents.default.video` display: block; width: 100%; aspect-ratio: 2; object-fit: cover; `; const SeparationLine = _styledComponents.default.div` border: #e1e5e9 1px solid; margin-top: 10px; margin-bottom: 10px; `; const VideoSelected = _styledComponents.default.div` height: 1.4rem; `; const ErrorWrapper = _styledComponents.default.div` & * { margin: 0; } `; const VideoName = _styledComponents.default.p` text-align: center; `; function VideosGrids(props) { const { videos, selected, onSelect } = props; return /*#__PURE__*/_react.default.createElement(VideoGridsWrapper, null, videos.map(video => { return /*#__PURE__*/_react.default.createElement(VideoGrid, { key: video.id, isSelected: selected === null || selected === void 0 ? void 0 : selected.includes(video), onSelect: () => onSelect(video), video: video }); })); } function VideoGrid(props) { var _video$file; const { video, onSelect, isSelected } = props; return /*#__PURE__*/_react.default.createElement(VideoGridWrapper, { key: video === null || video === void 0 ? void 0 : video.id, onClick: () => onSelect(video) }, /*#__PURE__*/_react.default.createElement(VideoSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", { className: "fas fa-check-circle" }) : null), /*#__PURE__*/_react.default.createElement(Video, { muted: true, loop: true }, /*#__PURE__*/_react.default.createElement("source", { src: video === null || video === void 0 ? void 0 : video.url }), /*#__PURE__*/_react.default.createElement("source", { src: video === null || video === void 0 ? void 0 : (_video$file = video.file) === null || _video$file === void 0 ? void 0 : _video$file.url }))); } function VideoMetaGrids(props) { const { videoMetas } = props; return /*#__PURE__*/_react.default.createElement(VideoMetaGridsWrapper, null, videoMetas.map(videoMeta => { var _videoMeta$video; return /*#__PURE__*/_react.default.createElement(VideoMetaGrid, { key: videoMeta === null || videoMeta === void 0 ? void 0 : (_videoMeta$video = videoMeta.video) === null || _videoMeta$video === void 0 ? void 0 : _videoMeta$video.id, videoMeta: videoMeta }); })); } function VideoMetaGrid(props) { var _video$file2; const { videoMeta } = props; const { video } = videoMeta; return /*#__PURE__*/_react.default.createElement(VideoMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Video, { muted: true, autoPlay: true, loop: true }, /*#__PURE__*/_react.default.createElement("source", { src: video === null || video === void 0 ? void 0 : video.url }), /*#__PURE__*/_react.default.createElement("source", { src: video === null || video === void 0 ? void 0 : (_video$file2 = video.file) === null || _video$file2 === void 0 ? void 0 : _video$file2.url })), /*#__PURE__*/_react.default.createElement(VideoName, null, video === null || video === void 0 ? void 0 : video.name)); } function VideoSelector(props) { const [queryVideos, { loading, error, data: { videos = [], videosCount = 0 } = {} }] = (0, _apollo.useLazyQuery)(videosQuery, { fetchPolicy: 'no-cache' }); const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization const [searchText, setSearchText] = (0, _react.useState)(''); const [selected, setSelected] = (0, _react.useState)([]); const pageSize = 6; const { onChange } = props; const onSave = () => { onChange(selected); }; const onCancel = () => { onChange([]); }; const onSearchBoxChange = async searchInput => { setSearchText(searchInput); setCurrentPage(1); }; const onVideosGridSelect = videoEntity => { setSelected(selected => { const filterdSelected = selected.filter(ele => { var _ele$video; return ((_ele$video = ele.video) === null || _ele$video === void 0 ? void 0 : _ele$video.id) !== videoEntity.id; }); // deselect the video if (filterdSelected.length !== selected.length) { return filterdSelected; } // single select return [{ video: videoEntity }]; }); }; const selectedVideos = selected.map(ele => { return ele.video; }); (0, _react.useEffect)(() => { if (currentPage !== 0) { queryVideos({ variables: { searchText: searchText, skip: (currentPage - 1) * pageSize, take: pageSize } }); } }, [currentPage, searchText]); let searchResult = /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(VideosGrids, { videos: videos, selected: selectedVideos, onSelect: onVideosGridSelect }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, { currentPage: currentPage, total: videosCount, pageSize: pageSize, onChange: pageIndex => { setCurrentPage(pageIndex); } })); if (loading) { searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching..."); } if (error) { var _videosQuery$loc; searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `videos` query"), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Message:"), /*#__PURE__*/_react.default.createElement("div", null, error.message), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Stack:"), /*#__PURE__*/_react.default.createElement("div", null, error.stack), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Query:"), /*#__PURE__*/_react.default.createElement("pre", null, (_videosQuery$loc = videosQuery.loc) === null || _videosQuery$loc === void 0 ? void 0 : _videosQuery$loc.source.body))); } return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, { isOpen: true }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, { title: "Select video", actions: { cancel: { label: 'Cancel', action: onCancel }, confirm: { label: 'Confirm', action: onSave } } }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(VideoSearchBox, { onChange: onSearchBoxChange }), /*#__PURE__*/_react.default.createElement(VideoSelectionWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, searchResult), !!selected.length && /*#__PURE__*/_react.default.createElement(SeparationLine, null), /*#__PURE__*/_react.default.createElement(VideoMetaGrids, { videoMetas: selected }))))); }