文件
mynode/packages/app-mobile/utils/ShareExtension.ts
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

42 行
1.2 KiB
TypeScript

import { NativeEventEmitter } from 'react-native';
import { NativeModules, Platform } from 'react-native';
export interface SharedData {
title?: string;
text?: string;
resources?: string[];
}
type ShareListener = (event: SharedData)=> void;
export type UnsubscribeShareListener = ()=> void;
type ShareExtensionType = {
data: ()=> Promise<SharedData>;
close: ()=> void;
shareURL: ()=> string;
addShareListener: (listener: ShareListener)=> UnsubscribeShareListener|undefined;
};
let eventEmitter: NativeEventEmitter | undefined;
const ShareExtension: ShareExtensionType = (NativeModules.ShareExtension) ?
{
data: () => NativeModules.ShareExtension.data(),
close: () => NativeModules.ShareExtension.close(),
shareURL: (Platform.OS === 'ios') ? NativeModules.ShareExtension.getConstants().SHARE_EXTENSION_SHARE_URL : '',
addShareListener: (Platform.OS === 'android') ? ((handler) => {
if (!eventEmitter) {
eventEmitter = new NativeEventEmitter(NativeModules.ShareExtension);
}
return eventEmitter.addListener('new_share_intent', handler).remove;
}) : (() => undefined),
} :
{
data: () => {},
close: () => {},
shareURL: '',
addShareListener: () => undefined,
};
export default ShareExtension;