kopia lustrzana https://github.com/mediacms-io/mediacms
93 wiersze
2.9 KiB
JavaScript
93 wiersze
2.9 KiB
JavaScript
import React, { useState } from 'react';
|
|
import { usePopup } from '../../utils/hooks/';
|
|
import { SiteContext } from '../../utils/contexts/';
|
|
import { MediaPageStore } from '../../utils/stores/';
|
|
import { formatInnerLink } from '../../utils/helpers/';
|
|
import { CircleIconButton, MaterialIcon, NavigationContentApp, NavigationMenuList, PopupMain } from '../_shared/';
|
|
|
|
function downloadOptionsList() {
|
|
const media_data = MediaPageStore.get('media-data');
|
|
|
|
const title = media_data.title;
|
|
const encodings_info = media_data.encodings_info;
|
|
|
|
const optionsList = {};
|
|
|
|
let k, g;
|
|
for (k in encodings_info) {
|
|
if (encodings_info.hasOwnProperty(k)) {
|
|
if (Object.keys(encodings_info[k]).length) {
|
|
for (g in encodings_info[k]) {
|
|
if (encodings_info[k].hasOwnProperty(g)) {
|
|
if ('success' === encodings_info[k][g].status && 100 === encodings_info[k][g].progress && null !== encodings_info[k][g].url) {
|
|
optionsList[encodings_info[k][g].title] = {
|
|
text: k + ' - ' + g.toUpperCase() + ' (' + encodings_info[k][g].size + ')',
|
|
link: formatInnerLink(encodings_info[k][g].url, SiteContext._currentValue.url),
|
|
linkAttr: {
|
|
target: '_blank',
|
|
download: media_data.title + '_' + k + '_' + g.toUpperCase(),
|
|
},
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
optionsList.original_media_url = {
|
|
text: 'Original file (' + media_data.size + ')',
|
|
link: formatInnerLink(media_data.original_media_url, SiteContext._currentValue.url),
|
|
linkAttr: {
|
|
target: '_blank',
|
|
download: media_data.title,
|
|
},
|
|
};
|
|
|
|
return Object.values(optionsList);
|
|
}
|
|
|
|
function downloadOptionsPages() {
|
|
return {
|
|
main: (
|
|
<div className="main-options">
|
|
<PopupMain>
|
|
<NavigationMenuList items={downloadOptionsList()} />
|
|
</PopupMain>
|
|
</div>
|
|
),
|
|
};
|
|
}
|
|
|
|
export function VideoMediaDownloadLink(props) {
|
|
const [popupContentRef, PopupContent, PopupTrigger] = usePopup();
|
|
|
|
const [downloadOptionsCurrentPage, setDownloadOptionsCurrentPage] = useState('main');
|
|
|
|
return (
|
|
<div className="video-downloads hidden-only-in-small">
|
|
<PopupTrigger contentRef={popupContentRef}>
|
|
<button>
|
|
<CircleIconButton type="span">
|
|
<MaterialIcon type="arrow_downward" />
|
|
</CircleIconButton>
|
|
<span>DOWNLOAD</span>
|
|
</button>
|
|
</PopupTrigger>
|
|
|
|
<div className={'nav-page-' + downloadOptionsCurrentPage}>
|
|
<PopupContent contentRef={popupContentRef}>
|
|
<NavigationContentApp
|
|
pageChangeCallback={null}
|
|
initPage="main"
|
|
focusFirstItemOnPageChange={false}
|
|
pages={downloadOptionsPages()}
|
|
pageChangeSelector={'.change-page'}
|
|
pageIdSelectorAttr={'data-page-id'}
|
|
/>
|
|
</PopupContent>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|