Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion dist/bundle.js

Large diffs are not rendered by default.

10 changes: 1 addition & 9 deletions dist/bundle.js.LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
/**
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
392 changes: 181 additions & 211 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@juspay-tech/react-hyper-js",
"version": "2.1.0",
"version": "2.2.0",
"main": "dist/bundle.js",
"files": [
"dist/",
Expand Down
42 changes: 38 additions & 4 deletions src/Context.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions src/Context.res
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ type rec elementsType = {
getElement: string => option<OrcaJs.paymentElement>,
fetchUpdates: unit => Promise.t<JSON.t>,
create: (string, JSON.t) => OrcaJs.paymentElement, // return a react component instead by doing new Payment Element.
updateIntent: (unit => promise<string>) => promise<JSON.t>,
}

type rec paymentMethodsManagementElementsType = {
Expand Down Expand Up @@ -115,6 +116,7 @@ let defaultGetCustomerSavedPaymentMethods = () => {

let defaultInitPaymentSession: OrcaJs.initPaymentSession = {
getCustomerSavedPaymentMethods: defaultGetCustomerSavedPaymentMethods,
updateIntent: _ => Promise.resolve(Dict.make()->JSON.Encode.object),
}

let defaultSwitchContext = {
Expand Down Expand Up @@ -202,6 +204,7 @@ let defaultElementsContext: elementsType = {
getElement,
fetchUpdates,
create,
updateIntent: _ => Promise.resolve(Dict.make()->JSON.Encode.object),
}

let elementsContext = React.createContext(defaultElementsContext)
Expand All @@ -227,6 +230,22 @@ let paymentMethodsManagementElementsOptionObjMapper = (options: JSON.t) => {
}
}

type paymentSessionContextType = {
getCustomerSavedPaymentMethods: unit => promise<JSON.t>,
updateIntent: (unit => promise<string>) => promise<JSON.t>,
}

let defaultPaymentSessionContext: paymentSessionContextType = {
getCustomerSavedPaymentMethods: () => Promise.resolve(Dict.make()->JSON.Encode.object),
updateIntent: _ => Promise.resolve(Dict.make()->JSON.Encode.object),
}

let paymentSessionContext = React.createContext(defaultPaymentSessionContext)

module PaymentSessionContextProvider = {
let make = React.Context.provider(paymentSessionContext)
}

let defaultPaymentMethodsManagementElementsContext: paymentMethodsManagementElementsType = {
options: {
fonts: [],
Expand Down
11 changes: 11 additions & 0 deletions src/Index.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions src/Index.res
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ let useStripe = () => {
Console.warn("useStripe() is deprecated. Use useHyper() instead")
useHyper()
}

let usePaymentSession = () => {
React.useContext(Context.paymentSessionContext)
}

let initPaymentSession = async (hyperPromise: promise<OrcaJs.switchInstance>, options: JSON.t) => {
let hyper = await hyperPromise
hyper.initPaymentSession(options)
}
let useWidgets = () => {
React.useContext(Context.elementsContext)
}
Expand Down
5 changes: 5 additions & 0 deletions src/Index.resi
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ let useHyper: unit => Context.switchContextType
let useStripe: unit => Context.switchContextType
let useWidgets: unit => Context.elementsType
let useElements: unit => Context.elementsType
let usePaymentSession: unit => Context.paymentSessionContextType
let initPaymentSession: (
promise<OrcaJs.switchInstance>,
RescriptCore.JSON.t,
) => promise<OrcaJs.initPaymentSession>
let \"Elements": Elements.props<
React.element,
RescriptCore.Promise.t<OrcaJs.switchInstance>,
Expand Down
6 changes: 5 additions & 1 deletion src/OrcaJs.res
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type element = {
update: JSON.t => unit,
fetchUpdates: unit => Promise.t<JSON.t>,
create: (string, JSON.t) => paymentElement,
updateIntent: (unit => promise<string>) => promise<JSON.t>,
}

type confirmParams = {return_url: string}
Expand All @@ -63,7 +64,10 @@ type getCustomerSavedPaymentMethods = {
confirmWithLastUsedPaymentMethod: JSON.t => Promise.t<JSON.t>,
}

type initPaymentSession = {getCustomerSavedPaymentMethods: unit => Promise.t<JSON.t>}
type initPaymentSession = {
getCustomerSavedPaymentMethods: unit => Promise.t<JSON.t>,
updateIntent: (unit => promise<string>) => promise<JSON.t>,
}

type switchInstance = {
confirmPayment: JSON.t => Promise.t<JSON.t>,
Expand Down
4 changes: 3 additions & 1 deletion src/components/Elements.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/components/Elements.res
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ let make = (~children, ~stripe: Promise.t<OrcaJs.switchInstance>, ~options: JSON
getElement: orcaElementsConfig.getElement,
fetchUpdates: orcaElementsConfig.fetchUpdates,
create: orcaElementsConfig.create,
updateIntent: orcaElementsConfig.updateIntent,
}
let switchValClone: Context.switchContextType = {
confirmPayment: switchInstance.confirmPayment,
Expand Down
23 changes: 21 additions & 2 deletions src/components/HyperElements.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 14 additions & 1 deletion src/components/HyperElements.res
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ let make = (~children, ~hyper: Promise.t<OrcaJs.switchInstance>, ~options: JSON.
let elementOptions = options->Context.elementsOptionObjMapper
let (switchState, setSwitchState) = React.useState(() => Context.defaultSwitchContext)
let (elementsState, setElementsState) = React.useState(() => Context.defaultElementsContext)
let (paymentSessionState, setPaymentSessionState) = React.useState(() =>
Context.defaultPaymentSessionContext
)

React.useEffect0(() => {
hyper
Expand All @@ -14,6 +17,7 @@ let make = (~children, ~hyper: Promise.t<OrcaJs.switchInstance>, ~options: JSON.
getElement: orcaElementsConfig.getElement,
fetchUpdates: orcaElementsConfig.fetchUpdates,
create: orcaElementsConfig.create,
updateIntent: orcaElementsConfig.updateIntent,
}
let switchValClone: Context.switchContextType = {
confirmPayment: switchInstance.confirmPayment,
Expand All @@ -27,8 +31,15 @@ let make = (~children, ~hyper: Promise.t<OrcaJs.switchInstance>, ~options: JSON.
confirmTokenization: switchInstance.confirmTokenization,
}

let paymentSession = switchInstance.initPaymentSession(options)
let newPaymentSessionValues: Context.paymentSessionContextType = {
getCustomerSavedPaymentMethods: paymentSession.getCustomerSavedPaymentMethods,
updateIntent: paymentSession.updateIntent,
}

setSwitchState(_ => switchValClone)
setElementsState(_ => newElemValues)
setPaymentSessionState(_ => newPaymentSessionValues)
Promise.resolve(switchValClone)
}, _)
->ignore
Expand All @@ -37,7 +48,9 @@ let make = (~children, ~hyper: Promise.t<OrcaJs.switchInstance>, ~options: JSON.

<Context.SwitchContextProvider value={switchState}>
<Context.ElementsContextProvider value={elementsState}>
{children}
<Context.PaymentSessionContextProvider value={paymentSessionState}>
{children}
</Context.PaymentSessionContextProvider>
</Context.ElementsContextProvider>
</Context.SwitchContextProvider>
}
Loading