diff --git a/ios/ReactNativeCameraKit/CodeFormat.swift b/ios/ReactNativeCameraKit/CodeFormat.swift index 5371f4970..933ed9fb4 100644 --- a/ios/ReactNativeCameraKit/CodeFormat.swift +++ b/ios/ReactNativeCameraKit/CodeFormat.swift @@ -11,8 +11,8 @@ import AVFoundation enum CodeFormat: String, CaseIterable { case code128 = "code-128" case code39 = "code-39" + case code39Mod43 = "code-39-mod-43" case code93 = "code-93" - case codabar = "codabar" case ean13 = "ean-13" case ean8 = "ean-8" case itf14 = "itf-14" @@ -21,17 +21,35 @@ enum CodeFormat: String, CaseIterable { case pdf417 = "pdf-417" case aztec = "aztec" case dataMatrix = "data-matrix" - case code39Mod43 = "code-39-mod-43" case interleaved2of5 = "interleaved-2of5" case unknown = "unknown" + @available(iOS 15.4, *) + case codabar = "codabar" + @available(iOS 15.4, *) + case gs1DataBar = "gs1-data-bar" + @available(iOS 15.4, *) + case gs1DataBarLimited = "gs1-data-bar-limited" + @available(iOS 15.4, *) + case gs1DataBarExpanded = "gs1-data-bar-expanded" - // Convert from AVMetadataObject.ObjectType to CodeFormat - static func fromAVMetadataObjectType(_ type: AVMetadataObject.ObjectType) -> CodeFormat { + static var allCases: [CodeFormat] { + var supportedBarcodeTypes: [CodeFormat] = + [.upce, .code39, .code39Mod43, + .ean13, .ean8, .code93, .code128, + .pdf417, .qr, .itf14, .aztec, + .dataMatrix, .interleaved2of5] + if #available(iOS 15.4, *) { - if (type == .codabar) { - return .codabar - } + supportedBarcodeTypes.append(contentsOf: [ + .codabar, .gs1DataBar, .gs1DataBarLimited, .gs1DataBarExpanded + ]) } + + return supportedBarcodeTypes + } + + // Convert from AVMetadataObject.ObjectType to CodeFormat + static func fromAVMetadataObjectType(_ type: AVMetadataObject.ObjectType) -> CodeFormat { switch type { case .code128: return .code128 case .code39: return .code39 @@ -46,17 +64,20 @@ enum CodeFormat: String, CaseIterable { case .aztec: return .aztec case .dataMatrix: return .dataMatrix case .interleaved2of5: return .interleaved2of5 + @available(iOS 15.4, *) + case .codabar: return .codabar + @available(iOS 15.4, *) + case .gs1DataBar: return .gs1DataBar + @available(iOS 15.4, *) + case .gs1DataBarLimited: return .gs1DataBarLimited + @available(iOS 15.4, *) + case .gs1DataBarExpanded: return .gs1DataBarExpanded default: return .unknown } } // Convert from CodeFormat to AVMetadataObject.ObjectType func toAVMetadataObjectType() -> AVMetadataObject.ObjectType { - if #available(iOS 15.4, *) { - if (self == .codabar) { - return .codabar - } - } switch self { case .code128: return .code128 case .code39: return .code39 @@ -71,8 +92,15 @@ enum CodeFormat: String, CaseIterable { case .aztec: return .aztec case .dataMatrix: return .dataMatrix case .interleaved2of5: return .interleaved2of5 - case .unknown: fallthrough - default: return .init(rawValue: "unknown") + @available(iOS 15.4, *) + case .codabar: return .codabar + @available(iOS 15.4, *) + case .gs1DataBar: return .gs1DataBar + @available(iOS 15.4, *) + case .gs1DataBarLimited: return .gs1DataBarLimited + @available(iOS 15.4, *) + case .gs1DataBarExpanded: return .gs1DataBarExpanded + case .unknown: return .init(rawValue: "unknown") } } } diff --git a/src/types.ts b/src/types.ts index ec6fb1209..5cc74fd3b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -24,7 +24,6 @@ const codeFormatIOS = [ 'code-128', 'code-39', 'code-93', - 'codabar', // only iOS 15.4+ 'ean-13', 'ean-8', 'itf-14', @@ -35,6 +34,10 @@ const codeFormatIOS = [ 'data-matrix', 'code-39-mod-43', 'interleaved-2of5', + 'codabar', // iOS 15.4+ + 'gs1-data-bar', // iOS 15.4+ + 'gs1-data-bar-limited', // iOS 15.4+ + 'gs1-data-bar-expanded', // iOS 15.4+ ] as const; export const supportedCodeFormats = Array.from(new Set([...codeFormatAndroid, ...codeFormatIOS]));