Add share intent

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-07-29 19:14:19 +03:00
parent a0b7a6310b
commit f33fe2c54b
13 changed files with 224 additions and 26 deletions

View File

@@ -1,5 +1,11 @@
export { type Dimensions } from './dimensions';
export { ROUTE, type RootStackParamList } from './route';
export {
ROUTE,
type RootStackParamList,
documentPickerResponseToAddMemeFile,
sharedItemToAddMemeFile,
} from './route';
export { type SharedItem } from './share';
export {
MEME_SORT,
memesSortQuery,

View File

@@ -1,4 +1,6 @@
import { DocumentPickerResponse } from 'react-native-document-picker';
import { getFilenameFromUri, guessMimeType } from '../utilities';
import { SharedItem } from './share';
enum ROUTE {
MAIN = 'Main',
@@ -17,8 +19,48 @@ interface MemeViewRouteParams {
index: number;
}
interface AddMemeFile {
uri: string;
filename: string;
type?: string;
}
const documentPickerResponseToAddMemeFile = (
response: DocumentPickerResponse[],
): AddMemeFile[] => {
return response.map(item => {
const { uri, name, type } = item;
return {
uri,
filename: name ?? getFilenameFromUri(uri),
type: type ?? guessMimeType(uri),
};
});
};
const sharedItemToAddMemeFile = (item: SharedItem): AddMemeFile[] => {
const { data, mimeType } = item;
if (typeof data === 'string') {
return [
{
uri: data,
filename: getFilenameFromUri(data),
type: mimeType,
},
];
}
return data.map(uri => ({
uri,
filename: getFilenameFromUri(uri),
type: guessMimeType(uri),
}));
};
interface AddMemeRouteParams {
files: DocumentPickerResponse[];
files: AddMemeFile[];
}
interface EditMemeRouteParams {
@@ -44,4 +86,9 @@ interface RootStackParamList {
[ROUTE.EDIT_TAG]: EditTagRouteParams;
}
export { ROUTE, type RootStackParamList };
export {
ROUTE,
type RootStackParamList,
documentPickerResponseToAddMemeFile,
sharedItemToAddMemeFile,
};

7
src/types/share.ts Normal file
View File

@@ -0,0 +1,7 @@
interface SharedItem {
data: string | string[];
mimeType: string;
extraData?: object;
}
export { type SharedItem };