diff --git a/Libraries/CameraRoll/NativeCameraRollManager.js b/Libraries/CameraRoll/NativeCameraRollManager.js new file mode 100644 index 00000000000..8fe058da893 --- /dev/null +++ b/Libraries/CameraRoll/NativeCameraRollManager.js @@ -0,0 +1,71 @@ +/** + * (c) Facebook, Inc. and its affiliates. Confidential and proprietary. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {TurboModule} from '../TurboModule/RCTExport'; +import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; + +export type PhotoIdentifier = {| + node: {| + image: PhotoIdentifierImage, + type: string, + group_name: string, + timestamp: number, + location: {| + longitude: number, + latitude: number, + + // iOS Only + altitude: ?number, + heading: ?number, + speed: ?number, + |}, + |}, +|}; + +export type PhotoIdentifierImage = {| + uri: string, + playableDuration: number, + width: number, + height: number, + isStored: ?boolean, + filename: ?string, +|}; + +export type PhotoIdentifiersPage = {| + edges: Array, + page_info: {| + has_next_page: boolean, + start_cursor?: ?string, + end_cursor?: ?string, + |}, +|}; + +export type GetPhotosParams = {| + first: number, + after?: ?string, + groupName?: ?string, + groupTypes?: ?string, + assetType?: ?string, + maxSize?: ?number, + mimeTypes?: ?Array, +|}; + +export interface Spec extends TurboModule { + +getConstants: () => {||}; + // eslint-disable-next-line lint/react-native-modules + +getPhotos: (params: GetPhotosParams) => Promise; + +saveToCameraRoll: (uri: string, type: string) => Promise; + + // iOS Only + +deletePhotos: (assets: Array) => Promise; +} + +export default (TurboModuleRegistry.getEnforcing( + 'CameraRollManager', +): Spec); diff --git a/Libraries/Image/NativeImageEditor.js b/Libraries/Image/NativeImageEditor.js new file mode 100644 index 00000000000..ff334b89777 --- /dev/null +++ b/Libraries/Image/NativeImageEditor.js @@ -0,0 +1,51 @@ +/** + * (c) Facebook, Inc. and its affiliates. Confidential and proprietary. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {TurboModule} from '../TurboModule/RCTExport'; +import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; + +type Options = {| + +offset: {| + +x: number, + +y: number, + |}, + +size: {| + +width: number, + +height: number, + |}, + +displaySize?: ?{| + +width: number, + +height: number, + |}, + /** + * Enum with potential values: + * - cover + * - contain + * - stretch + * - center + * - repeat + */ + +resizeMode?: ?string, + +allowExternalStorage?: boolean, +|}; + +export interface Spec extends TurboModule { + +getConstants: () => {||}; + +cropImage: ( + uri: string, + // eslint-disable-next-line lint/react-native-modules + cropData: Options, + successCallback: (uri: string) => void, + errorCallback: (error: string) => void, + ) => void; +} + +export default (TurboModuleRegistry.getEnforcing( + 'ImageEditingManager', +): Spec); diff --git a/Libraries/Image/NativeImageStore.js b/Libraries/Image/NativeImageStore.js new file mode 100644 index 00000000000..196b328f746 --- /dev/null +++ b/Libraries/Image/NativeImageStore.js @@ -0,0 +1,41 @@ +/** + * (c) Facebook, Inc. and its affiliates. Confidential and proprietary. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {TurboModule} from '../TurboModule/RCTExport'; +import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; + +export interface Spec extends TurboModule { + +getConstants: () => {||}; + // Common + +getBase64ForTag: ( + uri: string, + successCallback: (base64ImageData: string) => void, + + /** + * On Android, the failure callback is called with a string. + * On iOS, the failure callback is called with an error object. + * + * TODO(T47527939) Unify this inconsistency + */ + errorCallback: (error: {|message: string|} | string) => void, + ) => void; + + // iOS-only + +hasImageForTag: (uri: string, callback: (hasImage: boolean) => void) => void; + +removeImageForTag: (uri: string) => void; + +addImageFromBase64: ( + base64ImageData: string, + successCallback: (uri: string) => void, + errorCallback: (error: {|message: string|}) => void, + ) => void; +} + +export default (TurboModuleRegistry.getEnforcing( + 'ImageStoreManager', +): Spec); diff --git a/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js b/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js new file mode 100644 index 00000000000..46594ffdc31 --- /dev/null +++ b/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js @@ -0,0 +1,31 @@ +/** + * (c) Facebook, Inc. and its affiliates. Confidential and proprietary. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {TurboModule} from '../TurboModule/RCTExport'; +import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; + +export type TimePickerOptions = {| + hour?: number, + minute?: number, + is24Hour?: boolean, + mode?: string, +|}; + +export type TimePickerResult = {| + action: string, + hour: number, + minute: number, +|}; + +export interface Spec extends TurboModule { + // eslint-disable-next-line lint/react-native-modules + +open: (options: TimePickerOptions) => Promise; +} + +export default (TurboModuleRegistry.get('TimePickerAndroid'): ?Spec);