expo-image-multiple-picker
Version:
Fully customizable image picker for react native
132 lines (131 loc) • 3.99 kB
TypeScript
import * as MediaLibrary from 'expo-media-library';
import { Component, RefObject } from 'react';
import { FlatList, ViewProps, ViewStyle } from 'react-native';
export declare type Views = 'album' | 'gallery';
export declare type Page = MediaLibrary.PagedInfo<MediaLibrary.Asset>;
export declare type Asset = MediaLibrary.Asset;
export declare type Album = MediaLibrary.Album;
export declare type AssetsOptions = MediaLibrary.AssetsOptions;
interface SelectedAsset {
asset: Asset;
uncheck: () => void;
}
interface Size {
width: number;
height: number;
}
interface ImagePickerCarouselState {
page?: Page;
selectedAssets: Map<string, SelectedAsset>;
data: ImageBoxItem[];
currentIndex: number;
}
interface ImagePickerCarouselProps {
columns: number;
multiple?: boolean;
onSelect?: (images: Asset[]) => void;
albumID?: string;
check?: () => JSX.Element;
selected?: Asset[];
max?: number;
timeSlider?: boolean;
timeSliderHeight?: number;
slider?: (data: SliderData) => JSX.Element;
video?: boolean;
image?: boolean;
videoComponent?: (asset: Asset) => JSX.Element;
}
export interface ImageBoxItem {
asset: Asset;
size: Size;
onCheck: (checked: boolean, asset: SelectedAsset) => boolean;
isChecked: () => boolean;
check?: () => JSX.Element;
video?: (asset: Asset) => JSX.Element;
}
export interface HeaderData {
view: Views;
goToAlbum?: () => void;
imagesPicked: number;
multiple: boolean;
picked: boolean;
album?: Album;
noAlbums: boolean;
save?: () => void;
}
export interface AlbumData {
thumb: Asset;
album: Album;
goToGallery: (album: Album) => void;
}
export interface SliderItem {
date: Date;
top: number;
styles?: ViewStyle;
}
export interface SliderBalloon extends SliderItem {
quantity: number;
}
export interface SliderData {
balloons: SliderBalloon[];
button?: SliderItem;
height: number;
isMoving: boolean;
buttonProps?: ViewProps;
}
export interface ScrollTimeData {
selected: Map<string, SelectedAsset>;
data: ImageBoxItem[];
flatList: RefObject<FlatList<ImageBoxItem>> | null;
galleryColumns: number;
currentIndex: number;
height?: number;
customSlider?: (data: SliderData) => JSX.Element;
}
export interface ImagePickerTheme {
header?: (props: HeaderData) => JSX.Element;
album?: (props: AlbumData) => JSX.Element;
check?: () => JSX.Element;
slider?: (props: SliderData) => JSX.Element;
video?: (asset: Asset) => JSX.Element;
}
export interface ImagePickerProps {
galleryColumns?: number;
albumColumns?: number;
theme?: ImagePickerTheme;
noAlbums?: boolean;
multiple?: boolean;
onSave?: (images: Asset[]) => void;
onCancel?: () => void;
selected?: Asset[];
selectedAlbum?: Album;
onSelectAlbum?: (album: Album | undefined) => void;
limit?: number;
timeSlider?: boolean;
timeSliderHeight?: number;
video?: boolean;
image?: boolean;
}
export declare class ImagePickerCarousel extends Component<ImagePickerCarouselProps> {
private flatListRef;
_unmounted: boolean;
state: ImagePickerCarouselState;
getColumns(): number;
isMultiple(): boolean;
getImageSize(): {
width: number;
height: number;
};
getItemsPerScreen(): number;
selectedImage(checked: boolean, selected: SelectedAsset): boolean;
exists(asset_id: string): ImageBoxItem | undefined;
isChecked(asset_id: string): boolean;
fetchNextPage(stack: number): Promise<boolean>;
fillStartImages(): Promise<void>;
selectPropsImages(): void;
componentDidMount(): Promise<void>;
componentWillUnmount(): void;
render(): JSX.Element;
}
export declare function ImagePicker(props: ImagePickerProps): JSX.Element;
export {};