Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
renderAsset(asset: MediaLibrary.Asset) {
const aspectRatio = asset.height ? asset.width / asset.height : 1;
switch (asset.mediaType) {
case MediaLibrary.MediaType.photo:
case MediaLibrary.MediaType.video: // TODO: render Expo.Video component
return (
<img style="{[styles.image,">
);
default:
return null;
}
}
import { connect } from 'react-redux';
import ProfileActions from '../../redux/ProfileActions';
import Store from '../../redux/Store';
import MediaLibraryCell from './MediaLibraryCell';
const RNButton = Button;
const COLUMNS = 3;
const PAGE_SIZE = COLUMNS * 10;
const WINDOW_SIZE = Dimensions.get('window');
const mediaTypeStates: { [key in MediaLibrary.MediaTypeValue]: MediaLibrary.MediaTypeValue } = {
[MediaLibrary.MediaType.unknown]: MediaLibrary.MediaType.photo,
[MediaLibrary.MediaType.photo]: MediaLibrary.MediaType.video,
[MediaLibrary.MediaType.video]: MediaLibrary.MediaType.audio,
[MediaLibrary.MediaType.audio]: MediaLibrary.MediaType.unknown,
};
const sortByStates: { [key in MediaLibrary.SortByKey]: MediaLibrary.SortByKey } = {
[MediaLibrary.SortBy.default]: MediaLibrary.SortBy.creationTime,
[MediaLibrary.SortBy.creationTime]: MediaLibrary.SortBy.modificationTime,
[MediaLibrary.SortBy.modificationTime]: MediaLibrary.SortBy.mediaType,
[MediaLibrary.SortBy.mediaType]: MediaLibrary.SortBy.width,
[MediaLibrary.SortBy.width]: MediaLibrary.SortBy.height,
[MediaLibrary.SortBy.height]: MediaLibrary.SortBy.duration,
[MediaLibrary.SortBy.duration]: MediaLibrary.SortBy.default,
};
interface State {
assets: MediaLibrary.Asset[];
endCursor?: string;
} from 'react-native';
import { NavigationEvents, NavigationScreenConfig, NavigationScreenProps } from 'react-navigation';
import { connect } from 'react-redux';
import ProfileActions from '../../redux/ProfileActions';
import Store from '../../redux/Store';
import MediaLibraryCell from './MediaLibraryCell';
const RNButton = Button;
const COLUMNS = 3;
const PAGE_SIZE = COLUMNS * 10;
const WINDOW_SIZE = Dimensions.get('window');
const mediaTypeStates: { [key in MediaLibrary.MediaTypeValue]: MediaLibrary.MediaTypeValue } = {
[MediaLibrary.MediaType.unknown]: MediaLibrary.MediaType.photo,
[MediaLibrary.MediaType.photo]: MediaLibrary.MediaType.video,
[MediaLibrary.MediaType.video]: MediaLibrary.MediaType.audio,
[MediaLibrary.MediaType.audio]: MediaLibrary.MediaType.unknown,
};
const sortByStates: { [key in MediaLibrary.SortByKey]: MediaLibrary.SortByKey } = {
[MediaLibrary.SortBy.default]: MediaLibrary.SortBy.creationTime,
[MediaLibrary.SortBy.creationTime]: MediaLibrary.SortBy.modificationTime,
[MediaLibrary.SortBy.modificationTime]: MediaLibrary.SortBy.mediaType,
[MediaLibrary.SortBy.mediaType]: MediaLibrary.SortBy.width,
[MediaLibrary.SortBy.width]: MediaLibrary.SortBy.height,
[MediaLibrary.SortBy.height]: MediaLibrary.SortBy.duration,
[MediaLibrary.SortBy.duration]: MediaLibrary.SortBy.default,
};
interface State {
RefreshControl,
ListRenderItem,
} from 'react-native';
import { NavigationEvents, NavigationScreenProps, NavigationScreenConfig } from 'react-navigation';
import Colors from '../../constants/Colors';
import MediaLibraryCell from './MediaLibraryCell';
import Button from '../../components/Button';
import HeadingText from '../../components/HeadingText';
const COLUMNS = 3;
const PAGE_SIZE = COLUMNS * 10;
const WINDOW_SIZE = Dimensions.get('window');
const mediaTypeStates: { [key in MediaLibrary.MediaTypeValue]: MediaLibrary.MediaTypeValue } = {
[MediaLibrary.MediaType.unknown]: MediaLibrary.MediaType.photo,
[MediaLibrary.MediaType.photo]: MediaLibrary.MediaType.video,
[MediaLibrary.MediaType.video]: MediaLibrary.MediaType.audio,
[MediaLibrary.MediaType.audio]: MediaLibrary.MediaType.unknown,
};
const sortByStates: { [key in MediaLibrary.SortByKey]: MediaLibrary.SortByKey } = {
[MediaLibrary.SortBy.default]: MediaLibrary.SortBy.creationTime,
[MediaLibrary.SortBy.creationTime]: MediaLibrary.SortBy.modificationTime,
[MediaLibrary.SortBy.modificationTime]: MediaLibrary.SortBy.mediaType,
[MediaLibrary.SortBy.mediaType]: MediaLibrary.SortBy.width,
[MediaLibrary.SortBy.width]: MediaLibrary.SortBy.height,
[MediaLibrary.SortBy.height]: MediaLibrary.SortBy.duration,
[MediaLibrary.SortBy.duration]: MediaLibrary.SortBy.default,
};
interface State {
getAssetData(asset: MediaLibrary.Asset) {
switch (asset.mediaType) {
case MediaLibrary.MediaType.photo:
return {
icon: 'photo',
description: `${asset.width}x${asset.height}`,
preview: <img style="{styles.preview}">,
};
case MediaLibrary.MediaType.video:
return {
icon: 'video-camera',
description: `${Math.round(asset.duration)}s`,
preview: <img style="{styles.preview}">,
};
case MediaLibrary.MediaType.audio:
return {
icon: 'music',
description: `${Math.round(asset.duration)}s`,
preview: (
import { NavigationEvents, NavigationScreenProps, NavigationScreenConfig } from 'react-navigation';
import Colors from '../../constants/Colors';
import MediaLibraryCell from './MediaLibraryCell';
import Button from '../../components/Button';
import HeadingText from '../../components/HeadingText';
const COLUMNS = 3;
const PAGE_SIZE = COLUMNS * 10;
const WINDOW_SIZE = Dimensions.get('window');
const mediaTypeStates: { [key in MediaLibrary.MediaTypeValue]: MediaLibrary.MediaTypeValue } = {
[MediaLibrary.MediaType.unknown]: MediaLibrary.MediaType.photo,
[MediaLibrary.MediaType.photo]: MediaLibrary.MediaType.video,
[MediaLibrary.MediaType.video]: MediaLibrary.MediaType.audio,
[MediaLibrary.MediaType.audio]: MediaLibrary.MediaType.unknown,
};
const sortByStates: { [key in MediaLibrary.SortByKey]: MediaLibrary.SortByKey } = {
[MediaLibrary.SortBy.default]: MediaLibrary.SortBy.creationTime,
[MediaLibrary.SortBy.creationTime]: MediaLibrary.SortBy.modificationTime,
[MediaLibrary.SortBy.modificationTime]: MediaLibrary.SortBy.mediaType,
[MediaLibrary.SortBy.mediaType]: MediaLibrary.SortBy.width,
[MediaLibrary.SortBy.width]: MediaLibrary.SortBy.height,
[MediaLibrary.SortBy.height]: MediaLibrary.SortBy.duration,
[MediaLibrary.SortBy.duration]: MediaLibrary.SortBy.default,
};
interface State {
assets: MediaLibrary.Asset[];
endCursor?: string;
hasNextPage?: boolean;
async loadMoreAssets(currentAssets = this.state.assets, cursor = this.state.endCursor) {
if (
this.isLoadingAssets ||
(cursor === this.state.endCursor && this.state.hasNextPage === false)
) {
return;
}
const { state } = this;
const album = this.getAlbum();
this.isLoadingAssets = true;
const { assets, endCursor, hasNextPage } = await MediaLibrary.getAssetsAsync({
first: PAGE_SIZE,
after: cursor,
mediaType: state.mediaType,
sortBy: state.sortBy,
album: album && album.id,
});
const lastAsset = currentAssets[currentAssets.length - 1];
if (!lastAsset || lastAsset.id === cursor) {
this.setState({
assets: ([] as MediaLibrary.Asset[]).concat(currentAssets, assets),
endCursor,
hasNextPage,
refreshing: false,
});
getPhotos = () => {
let params = { first: 500, mimeTypes: ['image/jpeg'] }
if (this.state.after) params.after = this.state.after
if (!this.state.hasNextPage) return
MediaLibrary
.getAssetsAsync(params)
.then((assets) => this.processPhotos(assets))
}
public componentWillMount(): void {
MediaLibrary.getAssetsAsync({ first: 6 })
.then((data: MediaLibrary.PagedInfo) =>
this.setState({ galleryFiles: data.assets }));
this.props.navigation.setParams({
interlocutor: this.state.conversation.interlocutor,
lastSeen: this.state.conversation.lastSeen,
onBack: this.onBackPress,
onProfile: this.onProfilePress,
});
}
public componentWillMount(): void {
MediaLibrary.getAssetsAsync({ first: 6 })
.then(this.onMediaResponse);
this.props.navigation.setParams({
interlocutor: this.state.conversation.interlocutor,
lastSeen: this.state.conversation.lastSeen,
onBack: this.onBackPress,
onProfile: this.onProfilePress,
});
}