diff --git a/ios/ReactNativeCameraKit/CodeFormat.swift b/ios/ReactNativeCameraKit/CodeFormat.swift index 5371f4970..bb37b8960 100644 --- a/ios/ReactNativeCameraKit/CodeFormat.swift +++ b/ios/ReactNativeCameraKit/CodeFormat.swift @@ -5,33 +5,51 @@ // Created by Imdad on 2023-12-22. // -import Foundation import AVFoundation +import Foundation 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" case upce = "upc-e" - case qr = "qr" + case qr case pdf417 = "pdf-417" - case aztec = "aztec" + case aztec case dataMatrix = "data-matrix" - case code39Mod43 = "code-39-mod-43" case interleaved2of5 = "interleaved-2of5" - case unknown = "unknown" + case unknown + @available(iOS 15.4, *) + case 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" + + static var allCases: [CodeFormat] { + var supportedBarcodeTypes: [CodeFormat] = + [.upce, .code39, .code39Mod43, + .ean13, .ean8, .code93, .code128, + .pdf417, .qr, .itf14, .aztec, + .dataMatrix, .interleaved2of5] - // Convert from AVMetadataObject.ObjectType to CodeFormat - static func fromAVMetadataObjectType(_ type: AVMetadataObject.ObjectType) -> CodeFormat { 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,24 @@ enum CodeFormat: String, CaseIterable { case .aztec: return .aztec case .dataMatrix: return .dataMatrix case .interleaved2of5: return .interleaved2of5 - default: return .unknown + default: break } - } - // Convert from CodeFormat to AVMetadataObject.ObjectType - func toAVMetadataObjectType() -> AVMetadataObject.ObjectType { if #available(iOS 15.4, *) { - if (self == .codabar) { - return .codabar + switch type { + case .codabar: return .codabar + case .gs1DataBar: return .gs1DataBar + case .gs1DataBarLimited: return .gs1DataBarLimited + case .gs1DataBarExpanded: return .gs1DataBarExpanded + default: break } } + + return .unknown + } + + // Convert from CodeFormat to AVMetadataObject.ObjectType + func toAVMetadataObjectType() -> AVMetadataObject.ObjectType { switch self { case .code128: return .code128 case .code39: return .code39 @@ -71,8 +96,19 @@ enum CodeFormat: String, CaseIterable { case .aztec: return .aztec case .dataMatrix: return .dataMatrix case .interleaved2of5: return .interleaved2of5 - case .unknown: fallthrough - default: return .init(rawValue: "unknown") + default: break + } + + if #available(iOS 15.4, *) { + switch self { + case .codabar: return .codabar + case .gs1DataBar: return .gs1DataBar + case .gs1DataBarLimited: return .gs1DataBarLimited + case .gs1DataBarExpanded: return .gs1DataBarExpanded + default: break + } } + + 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]));