UNPKG

@mirrormedia/lilith-draft-editor

Version:
283 lines (248 loc) 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AudioSelector = AudioSelector; 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 AudioSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)` margin-top: 10px; `; const AudioSelectionWrapper = _styledComponents.default.div` overflow: auto; margin-top: 10px; `; const AudioGridsWrapper = _styledComponents.default.div` display: flex; flex-wrap: wrap; overflow: auto; `; const AudioGridWrapper = _styledComponents.default.div` flex: 0 0 50%; cursor: pointer; padding: 0 10px 10px; `; const AudioMetaGridsWrapper = _styledComponents.default.div` display: flex; flex-wrap: wrap; overflow: auto; `; const AudioMetaGridWrapper = _styledComponents.default.div` flex: 0 0 50%; cursor: pointer; padding: 0 10px 10px; `; const Audio = _styledComponents.default.audio` width: 100%; `; const AudioName = _styledComponents.default.p` text-align: center; `; const SeparationLine = _styledComponents.default.div` border: #e1e5e9 1px solid; margin-top: 10px; margin-bottom: 10px; `; const AudioSelected = _styledComponents.default.div` height: 1.4rem; `; const ErrorWrapper = _styledComponents.default.div` & * { margin: 0; } `; function AudiosGrids(props) { const { audios, selected, onSelect } = props; return /*#__PURE__*/_react.default.createElement(AudioGridsWrapper, null, audios.map(audio => { return /*#__PURE__*/_react.default.createElement(AudioGrid, { key: audio.id, isSelected: selected === null || selected === void 0 ? void 0 : selected.includes(audio), onSelect: () => onSelect(audio), audio: audio }); })); } function AudioGrid(props) { var _audio$file; const { audio, onSelect, isSelected } = props; return /*#__PURE__*/_react.default.createElement(AudioGridWrapper, { key: audio === null || audio === void 0 ? void 0 : audio.id, onClick: () => onSelect(audio) }, /*#__PURE__*/_react.default.createElement(AudioSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", { className: "fas fa-check-circle" }) : null), /*#__PURE__*/_react.default.createElement(Audio, { controls: true }, /*#__PURE__*/_react.default.createElement("source", { src: audio === null || audio === void 0 ? void 0 : audio.audioSrc }), /*#__PURE__*/_react.default.createElement("source", { src: audio === null || audio === void 0 ? void 0 : (_audio$file = audio.file) === null || _audio$file === void 0 ? void 0 : _audio$file.url })), /*#__PURE__*/_react.default.createElement(AudioName, null, audio === null || audio === void 0 ? void 0 : audio.name)); } function AudioMetaGrids(props) { const { audioMetas } = props; return /*#__PURE__*/_react.default.createElement(AudioMetaGridsWrapper, null, audioMetas.map(audioMeta => { var _audioMeta$audio; return /*#__PURE__*/_react.default.createElement(AudioMetaGrid, { key: audioMeta === null || audioMeta === void 0 ? void 0 : (_audioMeta$audio = audioMeta.audio) === null || _audioMeta$audio === void 0 ? void 0 : _audioMeta$audio.id, audioMeta: audioMeta }); })); } function AudioMetaGrid(props) { var _audio$file2; const { audioMeta } = props; const { audio } = audioMeta; return /*#__PURE__*/_react.default.createElement(AudioMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Audio, { controls: true }, /*#__PURE__*/_react.default.createElement("source", { src: audio === null || audio === void 0 ? void 0 : audio.audioSrc }), /*#__PURE__*/_react.default.createElement("source", { src: audio === null || audio === void 0 ? void 0 : (_audio$file2 = audio.file) === null || _audio$file2 === void 0 ? void 0 : _audio$file2.url })), /*#__PURE__*/_react.default.createElement(AudioName, null, audio === null || audio === void 0 ? void 0 : audio.name)); } const AudiosQuery = (0, _apollo.gql)` query Audios($searchText: String!, $take: Int, $skip: Int) { audioFilesCount(where: { name: { contains: $searchText } }) audioFiles( where: { name: { contains: $searchText } } orderBy: { id: desc } take: $take skip: $skip ) { id name audioSrc file { url } heroImage { imageFile { url } resized { w480 w800 w1200 w1600 w2400 } } } } `; function AudioSelector(props) { const [queryAudios, { loading, error, data: { audioFiles = [], audioFilesCount = 0 } = {} }] = (0, _apollo.useLazyQuery)(AudiosQuery, { 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 onAudiosGridSelect = audioEntity => { setSelected(selected => { const filterdSelected = selected.filter(ele => { var _ele$audio; return ((_ele$audio = ele.audio) === null || _ele$audio === void 0 ? void 0 : _ele$audio.id) !== audioEntity.id; }); // deselect the audio if (filterdSelected.length !== selected.length) { return filterdSelected; } // single select return [{ audio: audioEntity }]; }); }; const selectedAudios = selected.map(ele => { return ele.audio; }); (0, _react.useEffect)(() => { if (currentPage !== 0) { queryAudios({ variables: { searchText: searchText, skip: (currentPage - 1) * pageSize, take: pageSize } }); } }, [currentPage, searchText]); let searchResult = /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(AudiosGrids, { audios: audioFiles, selected: selectedAudios, onSelect: onAudiosGridSelect }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, { currentPage: currentPage, total: audioFilesCount, pageSize: pageSize, onChange: pageIndex => { setCurrentPage(pageIndex); } })); if (loading) { searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching..."); } if (error) { var _AudiosQuery$loc; searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `audios` 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, AudiosQuery === null || AudiosQuery === void 0 ? void 0 : (_AudiosQuery$loc = AudiosQuery.loc) === null || _AudiosQuery$loc === void 0 ? void 0 : _AudiosQuery$loc.source.body))); } return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, { isOpen: true }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, { title: "Select audio", actions: { cancel: { label: 'Cancel', action: onCancel }, confirm: { label: 'Confirm', action: onSave } } }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(AudioSearchBox, { onChange: onSearchBoxChange }), /*#__PURE__*/_react.default.createElement(AudioSelectionWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, searchResult), !!selected.length && /*#__PURE__*/_react.default.createElement(SeparationLine, null), /*#__PURE__*/_react.default.createElement(AudioMetaGrids, { audioMetas: selected }))))); }