import React from 'react';
import { LinksContext } from '../../utils/contexts/';
import { PageStore } from '../../utils/stores/';
import { MediaItemAudio as AudioItem } from './MediaItemAudio';
import { MediaItemVideo as VideoItem } from './MediaItemVideo';
import { MediaItem as ImageItem } from './MediaItem';
import { MediaItem as PdfItem } from './MediaItem';
import { MediaItem as AttachmentItem } from './MediaItem';
import { PlaylistItem } from './PlaylistItem';
import { TaxonomyItem } from './TaxonomyItem';
import { UserItem } from './UserItem';
function extractPlaylistId() {
let playlistId = null;
const getParamsString = window.location.search;
if ('' !== getParamsString) {
let tmp = getParamsString.split('?');
if (2 === tmp.length) {
tmp = tmp[1].split('&');
let x;
let i = 0;
while (i < tmp.length) {
x = tmp[i].split('=');
if ('pl' === x[0]) {
if (2 === x.length) {
playlistId = x[1];
}
break;
}
i += 1;
}
}
}
return playlistId;
}
function itemPageLink(props, item) {
if (props.inCategoriesList) {
return LinksContext._currentValue.search.category + item.title.replace(' ', '%20');
}
if (props.inTagsList) {
return LinksContext._currentValue.search.tag + item.title.replace(' ', '%20');
}
const playlistId = extractPlaylistId();
if (props.inPlaylistView && playlistId) {
return item.url + '&pl=' + playlistId;
}
if (void 0 !== props.playlistId && null !== props.playlistId) {
return item.url + '&pl=' + props.playlistId;
}
return item.url;
}
export function listItemProps(props, item, index) {
const isArchiveItem = props.inCategoriesList || props.inTagsList;
const isUserItem = !isArchiveItem && void 0 !== item.username;
const isPlaylistItem =
!isArchiveItem &&
!isUserItem &&
('playlist' === item.media_type || (void 0 !== item.url && -1 < item.url.indexOf('playlists'))); // TODO: Improve this.
const isMediaItem = !isArchiveItem && !isUserItem && !isPlaylistItem;
const isSearchItem = 'search-results' === PageStore.get('current-page'); // TODO: Improve this.
const url = {
view: itemPageLink(props, item),
edit: props.canEdit ? item.url.replace('view?m=', 'edit?m=') : null,
};
if (window.MediaCMS.site.devEnv && -1 < url.view.indexOf('view?')) {
url.view = '/media.html?' + url.view.split('view?')[1];
}
const thumbnail = item.thumbnail_url || '';
const previewThumbnail = item.preview_url || '';
let type, title, date, description, meta_description;
title =
void 0 !== item.username && 'string' === typeof item.username
? item.username
: void 0 !== item.title && 'string' === typeof item.title
? item.title
: null;
date =
void 0 !== item.date_added && 'string' === typeof item.date_added
? item.date_added
: void 0 !== item.add_date && 'string' === typeof item.add_date
? item.add_date
: null;
// description = props.preferSummary && 'string' === typeof props.summary ? props.summary.trim() : ( 'string' === typeof item.description ? item.description.trim() : null );
// description = null === description ? description : description.replace(/(<([^>]+)>)/ig,"");
if (isUserItem) {
type = 'user';
} else if (isPlaylistItem) {
type = 'playlist';
} else if (isMediaItem) {
type = item.media_type;
}
const taxonomyPage = {
current: false,
type: null,
};
const playlistPage = {
current: props.inPlaylistPage,
id: props.playlistId,
hideOptions: props.hidePlaylistOptions || false,
hideOrderNumber: props.hidePlaylistOrderNumber || false,
};
const playlistPlayback = {
current: props.inPlaylistView,
id: props.playlistId,
activeItem: props.playlistActiveItem || false,
hideOrderNumber: props.hidePlaylistOrderNumber || false,
};
if (isArchiveItem) {
if (props.inCategoriesList) {
taxonomyPage.type = 'categories';
} else if (props.inTagsList) {
taxonomyPage.type = 'tags';
}
if (null !== taxonomyPage.type) {
taxonomyPage.current = true;
}
}
const author = {
name: item.author_name || item.user,
url: item.author_profile ? item.author_profile.replace(' ', '%20') : null,
};
const stats = {
views: item.views || null,
};
const hide = {
allMeta: props.hideAllMeta || false,
};
let args = {
order: index + 1,
type,
title,
date,
url,
author,
stats,
thumbnail,
taxonomyPage,
playlistPage,
playlistPlayback,
canEdit: null !== url.edit,
singleLinkContent: props.singleLinkContent || false,
hasMediaViewer: 0 === index && 'video' === item.media_type && !!props.firstItemViewer,
hasMediaViewerDescr: false,
};
args.hasMediaViewerDescr = args.hasMediaViewer && !!props.firstItemDescr;
if (!args.hasMediaViewerDescr) {
description =
props.preferSummary && 'string' === typeof props.summary
? props.summary.trim()
: 'string' === typeof item.description
? item.description.trim()
: null;
description = null === description ? description : description.replace(/(<([^>]+)>)/gi, '');
if (isSearchItem || props.inCategoriesList || 'user' === type) {
args.description = description;
} else {
args.meta_description = description;
}
} else {
if (!!props.firstItemViewer) {
description = 'string' === typeof props.summary ? props.summary.trim() : null;
} else {
description = 'string' === typeof item.description ? item.description.trim() : null;
}
description = null === description ? description : description.replace(/(<([^>]+)>)/gi, '');
args.description = description;
// TODO: Improve this.
if (props.summary) {
meta_description = props.summary.trim();
meta_description = null === meta_description ? meta_description : meta_description.replace(/(<([^>]+)>)/gi, '');
args.meta_description = meta_description;
}
}
if ('video' === type) {
args.previewThumbnail = previewThumbnail;
}
if ('video' === type || 'audio' === type) {
args.duration = item.duration;
}
if ((isArchiveItem || isPlaylistItem) && !isNaN(item.media_count)) {
args.media_count = parseInt(item.media_count, 10);
}
if (isMediaItem) {
hide.date = props.hideDate || false;
hide.views = props.hideViews || false;
hide.author = props.hideAuthor || false;
}
args = { ...args, hide };
return args;
}
export function ListItem(props) {
let isMediaItem = false;
const args = {
order: props.order,
title: props.title,
link: props.url.view,
thumbnail: props.thumbnail,
publish_date: props.date,
singleLinkContent: props.singleLinkContent,
hasMediaViewer: props.hasMediaViewer,
hasMediaViewerDescr: props.hasMediaViewerDescr,
};
switch (props.type) {
case 'user':
break;
case 'playlist':
break;
case 'video':
isMediaItem = true;
args.duration = props.duration;
args.preview_thumbnail = props.previewThumbnail;
break;
case 'audio':
isMediaItem = true;
args.duration = props.duration;
break;
case 'image':
isMediaItem = true;
break;
case 'pdf':
isMediaItem = true;
break;
}
if (void 0 !== props.description) {
args.description = props.description;
}
if (void 0 !== props.meta_description) {
args.meta_description = props.meta_description;
}
if ((props.taxonomyPage.current || 'playlist' === props.type) && !isNaN(props.media_count)) {
args.media_count = props.media_count;
}
args.hideAllMeta = props.hide.allMeta;
if (isMediaItem) {
args.views = props.stats.views;
args.author_name = props.author.name;
args.author_link = props.author.url;
args.hideDate = props.hide.date;
args.hideViews = props.hide.views;
args.hideAuthor = props.hide.author;
}
if (props.playlistPage.current || props.playlistPlayback.current) {
args.playlistOrder = props.order;
if (props.playlistPlayback.current) {
args.playlist_id = props.playlistPlayback.id;
args.playlistActiveItem = props.playlistPlayback.activeItem;
args.hidePlaylistOrderNumber = props.playlistPlayback.hideOrderNumber;
} else {
args.playlist_id = props.playlistPage.id;
args.hidePlaylistOptions = props.playlistPage.hideOptions;
args.hidePlaylistOrderNumber = props.playlistPage.hideOrderNumber;
}
}
if (props.canEdit) {
args.editLink = props.url.edit;
}
if (props.taxonomyPage.current) {
switch (props.taxonomyPage.type) {
case 'categories':
return ;
case 'tags':
return ;
}
}
switch (props.type) {
case 'user':
return ;
case 'playlist':
if (window.MediaCMS.site.devEnv) {
args.link = args.link.replace('/playlists/', 'playlist.html?pl=');
}
return ;
case 'video':
return ;
case 'audio':
return ;
case 'image':
return ;
case 'pdf':
return ;
}
return ;
}