diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..d92d987 --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1,6 @@ +{ + "ignore_dirs": [ + ".git", + "node_modules" + ] +} diff --git a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java index dcad610..07feee5 100644 --- a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java +++ b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java @@ -48,4 +48,4 @@ public void onServiceConnected(ServiceConnector connector) { public void onServiceDisconnected(ServiceConnector connector) { Log.i(RNCloverBridgeModule.TAG, "service disconnected: " + connector); } -} \ No newline at end of file +} diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index eb32d6f..1a20e09 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -15,6 +15,7 @@ import android.os.RemoteException; import android.util.DisplayMetrics; import android.util.Log; +import java.util.Optional; import android.view.WindowManager; import com.clover.sdk.util.CloverAccount; @@ -27,6 +28,7 @@ import com.clover.sdk.v1.printer.job.StaticReceiptPrintJob; import com.clover.sdk.v3.order.Order; import com.clover.sdk.v3.order.OrderConnector; +import com.clover.sdk.v3.order.OrderType; import com.clover.sdk.v3.payments.Payment; import com.clover.sdk.v3.scanner.BarcodeResult; import com.facebook.react.bridge.ActivityEventListener; @@ -110,7 +112,6 @@ public void run() { try { CloverAuth.AuthResult result = CloverAuth.authenticate( getCurrentActivity(), - getAccount(), forceValidateToken, (long) timeout, TimeUnit.MILLISECONDS @@ -120,7 +121,7 @@ public void run() { map.putString("authToken", result.authToken); map.putString("message", result.errorMessage); promise.resolve(map); - } catch (OperationCanceledException | AuthenticatorException | IOException e) { + } catch (Exception e) { Log.e(TAG, "authentication_error", e); promise.reject("authentication_error", e.getMessage()); } @@ -197,6 +198,40 @@ public void voidPaymentRefund(ReadableMap options, Promise promise) { bridgePaymentConnector.voidPaymentRefund(options, promise); } + @ReactMethod + public void getOrder(final String orderId, final Promise promise) { + try { + OrderConnector orderConnector = new BridgeServiceConnector().getOrderConnector(mContext); + Order order = orderConnector.getOrder(orderId); + + WritableMap responseMap = Arguments.createMap(); + WritableMap orderMap = Arguments.createMap(); + WritableMap orderTypeMap = Arguments.createMap(); + OrderType orderType = order.getOrderType(); + + orderMap.putString("id", order.getId()); + orderMap.putString("currency", order.getCurrency()); + orderMap.putDouble("total", order.getTotal()); + orderMap.putString("state", order.getState()); + orderMap.putBoolean("testMode", order.getTestMode()); + if (orderType != null) { + orderTypeMap.putString("id", orderType.getId()); + orderTypeMap.putString("label", orderType.getLabel()); + orderMap.putMap("type", orderTypeMap); + } + + responseMap.putBoolean("success", true); + responseMap.putMap("order", orderMap); + promise.resolve(responseMap); + } catch (RemoteException | ClientException | ServiceException | BindingException e) { + Log.e(TAG, "", e); + promise.reject("order_error", e.getMessage()); + } catch (NoSuchKeyException | UnexpectedNativeTypeException e) { + Log.e(TAG, "RN", e); + promise.reject("order_error", e.getMessage()); + } + } + @ReactMethod public void printPayment(ReadableMap options) { try { diff --git a/index.d.ts b/index.d.ts index 6072b70..1b930ff 100644 --- a/index.d.ts +++ b/index.d.ts @@ -29,12 +29,44 @@ interface MerchantResult extends Result { merchant: Merchant; } +interface OrderResult extends Result { + order: Order; +} + +interface InventoryResult extends Result { + statusMessage?: String; + inventory: Inventory; +} + +interface Inventory extends ObjectRef { + name: String; + quantity: Number; + price: Number; + sku: String; + barcode: String; + category: String; + taxRate: Number; + taxName: String; + taxable: Boolean; +} + interface Merchant extends ObjectRef { name: String; email: String; location: MerchantLocation; } +interface Order extends ObjectRef { + currency: String; + total: Number; + state: String; + testMode: String; + type: { + id: String; + label: String; + } +} + interface MerchantLocation { country: String; city: String; @@ -64,7 +96,7 @@ interface Refund extends Transaction { payment: ObjectRef; } -interface Credit extends Transaction { +interface Credit extends Transaction { order: ObjectRef; tender: Tender; } @@ -94,15 +126,15 @@ interface VoidReason { DEVELOPER_PAY_TIP_ADJUST_FAILED: String; FAILED: String; GIFTCARD_LOAD_FAILED: String; - NOT_APPROVED: String; - REJECT_DUPLICATE: String; - REJECT_OFFLINE: String; + NOT_APPROVED: String; + REJECT_DUPLICATE: String; + REJECT_OFFLINE: String; REJECT_PARTIAL_AUTH: String; REJECT_SIGNATURE: String; - TRANSPORT_ERROR: String; - USER_CANCEL: String; - USER_CUSTOMER_CANCEL: String; - USER_GIFTCARD_LOAD_CANCEL: String; + TRANSPORT_ERROR: String; + USER_CANCEL: String; + USER_CUSTOMER_CANCEL: String; + USER_GIFTCARD_LOAD_CANCEL: String; } interface TipMode { @@ -224,6 +256,8 @@ declare const _default: { * @returns {Promise} A promise that resolves to a MerchantResult. */ getMerchant: () => Promise; + getOrder: (orderId: string) => Promise; + getInventoryItems: () => Promise; enableCustomerMode: () => Void; disableCustomerMode: () => Void; print: (imagePath: String) => Promise; @@ -245,7 +279,7 @@ declare const _default: { // Payment Methods /////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// /** - * Readies the Clover Bridge for sending payment requests to Clover device. Must be called before calling any payment method and should be + * Readies the Clover Bridge for sending payment requests to Clover device. Must be called before calling any payment method and should be * called as soon as possible. * @param {String} raid Remote Application Id. Obtained from Clover App dashboard. */ @@ -295,4 +329,4 @@ declare const _default: { EVENT: BridgeEvent } -export default _default; \ No newline at end of file +export default _default; diff --git a/index.js b/index.js index 77c201f..7277c5d 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,8 @@ export default { authenticate: (force = false, timeout = 10000) => RNCloverBridge.authenticate(force, timeout), getMerchant: () => RNCloverBridge.getMerchant(), + getOrder: (orderId) => RNCloverBridge.getOrder(orderId), + getInventoryItems: () => RNCloverBridge.getInventoryItems(), isFlex: () => RNCloverBridge.isFlex, isMini: () => RNCloverBridge.isMini, getSpaVersion: () => RNCloverBridge.getSpaVersion,