Skip to content

Commit

Permalink
Merge branch 'main' into sanky-response-strcuture
Browse files Browse the repository at this point in the history
  • Loading branch information
JeevaRamu0104 authored Oct 10, 2024
2 parents 673ec35 + a13717a commit d08f6b8
Show file tree
Hide file tree
Showing 68 changed files with 497 additions and 444 deletions.
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,26 @@ All notable changes to this project will be documented in this file. See [conven

- - -

## 2024.10.10.0

### Miscellaneous Tasks

- User-permission type change ([#1577](https://github.com/juspay/hyperswitch-control-center/pull/1577)) ([`ebc0a33`](https://github.com/juspay/hyperswitch-control-center/commit/ebc0a33b21dc9ecfb50cc812161f05b1debeead7))

**Full Changelog:** [`2024.10.08.2...2024.10.10.0`](https://github.com/juspay/hyperswitch-control-center/compare/2024.10.08.2...2024.10.10.0)

- - -

## 2024.10.08.2

### Features

- Addition of new connector "NEXIXPAY" ([#1569](https://github.com/juspay/hyperswitch-control-center/pull/1569)) ([`8437983`](https://github.com/juspay/hyperswitch-control-center/commit/8437983269d3554d4abd0ab3a6649ddf88da373e))

**Full Changelog:** [`2024.10.08.1...2024.10.08.2`](https://github.com/juspay/hyperswitch-control-center/compare/2024.10.08.1...2024.10.08.2)

- - -

## 2024.10.08.1

### Features
Expand Down
9 changes: 7 additions & 2 deletions src/Recoils/HyperswitchAtom.res
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,16 @@ let paypalAccountStatusAtom: Recoil.recoilAtom<PayPalFlowTypes.setupAccountStatu
"paypalAccountStatusAtom",
PayPalFlowTypes.Connect_paypal_landing,
)
let userPermissionAtom: Recoil.recoilAtom<UserManagementTypes.permissionJson> = Recoil.atom(
// TODO: remove this after userGroupPermissionsAtom is stable
let userPermissionAtom: Recoil.recoilAtom<UserManagementTypes.groupAccessJsonType> = Recoil.atom(
"userPermissionAtom",
PermissionUtils.defaultValueForPermission,
GroupACLMapper.defaultValueForGroupAccessJson,
)

let userGroupACLAtom: Recoil.recoilAtom<
option<Map.t<UserManagementTypes.groupAccessType, CommonAuthTypes.authorization>>,
> = Recoil.atom("userGroupACLAtom", None)

let switchMerchantListAtom: Recoil.recoilAtom<
array<SwitchMerchantUtils.switchMerchantListResponse>,
> = Recoil.atom("switchMerchantListAtom", [SwitchMerchantUtils.defaultValue])
Expand Down
6 changes: 3 additions & 3 deletions src/components/ACLButton.res
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ let make = (
~customHeightClass=?,
~customBackColor=?,
~showBtnTextToolTip=false,
~access=CommonAuthTypes.Access,
~authorization=CommonAuthTypes.Access,
~tooltipText=HSwitchUtils.noAccessControlText,
~toolTipPosition=?,
) => {
let buttonState = switch access {
let buttonState = switch authorization {
| Access => buttonState
| NoAccess => Button.Disabled
}

let showBtnTextToolTip = access === NoAccess
let showBtnTextToolTip = authorization === NoAccess

<Button
buttonState
Expand Down
2 changes: 1 addition & 1 deletion src/components/ACLButton.resi
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ let make: (
~customHeightClass: string=?,
~customBackColor: string=?,
~showBtnTextToolTip: bool=?,
~access: CommonAuthTypes.authorization=?,
~authorization: CommonAuthTypes.authorization=?,
~tooltipText: string=?,
~toolTipPosition: ToolTip.toolTipPosition=?,
) => React.element
6 changes: 3 additions & 3 deletions src/components/ACLDiv.res
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@react.component
let make = (
~permission,
~authorization,
~onClick,
~children,
~className="",
Expand All @@ -15,7 +15,7 @@ let make = (
~height=?,
) => {
<ACLToolTip
access=permission
authorization
?noAccessDescription
?tooltipForWidthClass
?description
Expand All @@ -26,7 +26,7 @@ let make = (
?height
toolTipFor={<AddDataAttributes
attributes=[("data-testid", dataAttrStr->Option.getOr("")->String.toLowerCase)]>
<div className onClick={permission === CommonAuthTypes.Access ? onClick : {_ => ()}}>
<div className onClick={authorization === CommonAuthTypes.Access ? onClick : {_ => ()}}>
{children}
</div>
</AddDataAttributes>}
Expand Down
2 changes: 1 addition & 1 deletion src/components/ACLDiv.resi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@react.component
let make: (
~permission: CommonAuthTypes.authorization,
~authorization: CommonAuthTypes.authorization,
~onClick: JsxEvent.Mouse.t => unit,
~children: React.element,
~className: string=?,
Expand Down
4 changes: 2 additions & 2 deletions src/components/tooltip/ACLToolTip.res
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ open ToolTip

@react.component
let make = (
~access,
~authorization,
~noAccessDescription=HSwitchUtils.noAccessControlText,
~description="",
~descriptionComponent=React.null,
Expand All @@ -28,7 +28,7 @@ let make = (
~isRelative=true,
~dismissable=false,
) => {
let description = access === CommonAuthTypes.Access ? description : noAccessDescription
let description = authorization === CommonAuthTypes.Access ? description : noAccessDescription

<ToolTip
description
Expand Down
2 changes: 1 addition & 1 deletion src/components/tooltip/ACLToolTip.resi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@react.component
let make: (
~access: CommonAuthTypes.authorization,
~authorization: CommonAuthTypes.authorization,
~noAccessDescription: string=?,
~description: string=?,
~descriptionComponent: React.element=?,
Expand Down
12 changes: 7 additions & 5 deletions src/container/AnalyticsContainer.res
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,33 @@ let make = () => {
open HSwitchUtils
open HyperswitchAtom
let url = RescriptReactRouter.useUrl()
let userPermissionJson = Recoil.useRecoilValueFromAtom(userPermissionAtom)
let {userHasAccess} = GroupACLHooks.useUserGroupACLHook()
let {userInfo: {analyticsEntity}} = React.useContext(UserInfoProvider.defaultContext)
let {performanceMonitor, disputeAnalytics} = featureFlagAtom->Recoil.useRecoilValueFromAtom
<div key={(analyticsEntity :> string)}>
{switch url.path->urlPath {
| list{"analytics-payments"} =>
<AccessControl permission=userPermissionJson.analyticsView>
<AccessControl authorization={userHasAccess(~groupAccess=AnalyticsView)}>
<FilterContext key="PaymentsAnalytics" index="PaymentsAnalytics">
<PaymentAnalytics />
</FilterContext>
</AccessControl>
| list{"analytics-refunds"} =>
<AccessControl permission=userPermissionJson.analyticsView>
<AccessControl authorization={userHasAccess(~groupAccess=AnalyticsView)}>
<FilterContext key="PaymentsRefunds" index="PaymentsRefunds">
<RefundsAnalytics />
</FilterContext>
</AccessControl>
| list{"analytics-disputes"} =>
<AccessControl isEnabled={disputeAnalytics} permission=userPermissionJson.analyticsView>
<AccessControl
isEnabled={disputeAnalytics} authorization={userHasAccess(~groupAccess=AnalyticsView)}>
<FilterContext key="DisputeAnalytics" index="DisputeAnalytics">
<DisputeAnalytics />
</FilterContext>
</AccessControl>
| list{"performance-monitor"} =>
<AccessControl permission=userPermissionJson.analyticsView isEnabled={performanceMonitor}>
<AccessControl
authorization={userHasAccess(~groupAccess=AnalyticsView)} isEnabled={performanceMonitor}>
<FilterContext key="PerformanceMonitor" index="PerformanceMonitor">
<PerformanceMonitor domain="payments" />
</FilterContext>
Expand Down
4 changes: 2 additions & 2 deletions src/container/BusinessProfileContainer.res
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ let make = () => {
{switch url.path->urlPath {
// Business Profile Modules
| list{"business-details"} =>
<AccessControl isEnabled=featureFlagDetails.default permission={Access}>
<AccessControl isEnabled=featureFlagDetails.default authorization={Access}>
<BusinessDetails />
</AccessControl>
| list{"business-profiles"} =>
<AccessControl permission=Access>
<AccessControl authorization=Access>
<BusinessProfile />
</AccessControl>
| list{"payment-settings", ...remainingPath} =>
Expand Down
32 changes: 18 additions & 14 deletions src/container/ConnectorContainer.res
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ let make = () => {
open HSwitchUtils
open HyperswitchAtom
let url = RescriptReactRouter.useUrl()

let userPermissionJson = Recoil.useRecoilValueFromAtom(userPermissionAtom)
let {userHasAccess} = GroupACLHooks.useUserGroupACLHook()
let featureFlagDetails = featureFlagAtom->Recoil.useRecoilValueFromAtom
let fetchConnectorListResponse = ConnectorListHook.useFetchConnectorList()
let fetchBusinessProfiles = BusinessProfileHook.useFetchBusinessProfiles()
Expand All @@ -16,9 +15,9 @@ let make = () => {
try {
setScreenState(_ => PageLoaderWrapper.Loading)
if (
userPermissionJson.connectorsView === Access ||
userPermissionJson.workflowsView === Access ||
userPermissionJson.workflowsManage === Access
userHasAccess(~groupAccess=ConnectorsView) === Access ||
userHasAccess(~groupAccess=WorkflowsView) === Access ||
userHasAccess(~groupAccess=WorkflowsManage) === Access
) {
let _ = await fetchConnectorListResponse()
let _ = await fetchBusinessProfiles()
Expand All @@ -38,7 +37,7 @@ let make = () => {
{switch url.path->urlPath {
// Connector Modules
| list{"connectors", ...remainingPath} =>
<AccessControl permission=userPermissionJson.connectorsView>
<AccessControl authorization={userHasAccess(~groupAccess=ConnectorsView)}>
<EntityScaffold
entityName="Connectors"
remainingPath
Expand All @@ -49,7 +48,8 @@ let make = () => {
</AccessControl>
| list{"payoutconnectors", ...remainingPath} =>
<AccessControl
isEnabled={featureFlagDetails.payOut} permission=userPermissionJson.connectorsView>
isEnabled={featureFlagDetails.payOut}
authorization={userHasAccess(~groupAccess=ConnectorsView)}>
<EntityScaffold
entityName="PayoutConnectors"
remainingPath
Expand All @@ -60,7 +60,7 @@ let make = () => {
</AccessControl>
| list{"3ds-authenticators", ...remainingPath} =>
<AccessControl
permission=userPermissionJson.connectorsView
authorization={userHasAccess(~groupAccess=ConnectorsView)}
isEnabled={featureFlagDetails.threedsAuthenticator}>
<EntityScaffold
entityName="3DS Authenticator"
Expand All @@ -73,7 +73,7 @@ let make = () => {

| list{"pm-authentication-processor", ...remainingPath} =>
<AccessControl
permission=userPermissionJson.connectorsView
authorization={userHasAccess(~groupAccess=ConnectorsView)}
isEnabled={featureFlagDetails.pmAuthenticationProcessor}>
<EntityScaffold
entityName="PM Authentication Processor"
Expand All @@ -85,7 +85,8 @@ let make = () => {
</AccessControl>
| list{"tax-processor", ...remainingPath} =>
<AccessControl
permission=userPermissionJson.connectorsView isEnabled={featureFlagDetails.taxProcessor}>
authorization={userHasAccess(~groupAccess=ConnectorsView)}
isEnabled={featureFlagDetails.taxProcessor}>
<EntityScaffold
entityName="Tax Processor"
remainingPath
Expand All @@ -96,7 +97,8 @@ let make = () => {
</AccessControl>
| list{"fraud-risk-management", ...remainingPath} =>
<AccessControl
isEnabled={featureFlagDetails.frm} permission=userPermissionJson.connectorsView>
isEnabled={featureFlagDetails.frm}
authorization={userHasAccess(~groupAccess=ConnectorsView)}>
<EntityScaffold
entityName="risk-management"
remainingPath
Expand All @@ -107,7 +109,8 @@ let make = () => {
</AccessControl>
| list{"configure-pmts", ...remainingPath} =>
<AccessControl
permission=userPermissionJson.connectorsView isEnabled={featureFlagDetails.configurePmts}>
authorization={userHasAccess(~groupAccess=ConnectorsView)}
isEnabled={featureFlagDetails.configurePmts}>
<FilterContext key="ConfigurePmts" index="ConfigurePmts">
<EntityScaffold
entityName="ConfigurePMTs"
Expand All @@ -119,7 +122,7 @@ let make = () => {
</AccessControl>
// Routing
| list{"routing", ...remainingPath} =>
<AccessControl permission=userPermissionJson.workflowsView>
<AccessControl authorization={userHasAccess(~groupAccess=WorkflowsView)}>
<EntityScaffold
entityName="Routing"
remainingPath
Expand All @@ -129,7 +132,8 @@ let make = () => {
</AccessControl>
| list{"payoutrouting", ...remainingPath} =>
<AccessControl
isEnabled={featureFlagDetails.payOut} permission=userPermissionJson.workflowsView>
isEnabled={featureFlagDetails.payOut}
authorization={userHasAccess(~groupAccess=WorkflowsView)}>
<EntityScaffold
entityName="PayoutRouting"
remainingPath
Expand Down
13 changes: 7 additions & 6 deletions src/container/MerchantAccountContainer.res
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ let make = () => {
open HyperswitchAtom
let url = RescriptReactRouter.useUrl()
let (surveyModal, setSurveyModal) = React.useState(_ => false)
let userPermissionJson = Recoil.useRecoilValueFromAtom(userPermissionAtom)
let {userHasAccess} = GroupACLHooks.useUserGroupACLHook()
let featureFlagDetails = featureFlagAtom->Recoil.useRecoilValueFromAtom
let fetchConnectorListResponse = ConnectorListHook.useFetchConnectorList()
let fetchBusinessProfiles = BusinessProfileHook.useFetchBusinessProfiles()
Expand All @@ -20,7 +20,7 @@ let make = () => {
setScreenState(_ => PageLoaderWrapper.Loading)

let _ = await fetchMerchantAccountDetails()
if userPermissionJson.connectorsView === Access {
if userHasAccess(~groupAccess=ConnectorsView) === Access {
if !featureFlagDetails.isLiveMode {
let _ = await fetchConnectorListResponse()
let _ = await fetchBusinessProfiles()
Expand All @@ -43,7 +43,7 @@ let make = () => {

| list{"recon"} =>
<AccessControl
isEnabled={featureFlagDetails.recon && !checkUserEntity([#Profile])} permission=Access>
isEnabled={featureFlagDetails.recon && !checkUserEntity([#Profile])} authorization=Access>
<Recon />
</AccessControl>
| list{"upload-files"}
Expand All @@ -53,20 +53,21 @@ let make = () => {
| list{"config-settings"}
| list{"file-processor"} =>
<AccessControl
isEnabled={featureFlagDetails.recon && !checkUserEntity([#Profile])} permission=Access>
isEnabled={featureFlagDetails.recon && !checkUserEntity([#Profile])} authorization=Access>
<ReconModule urlList={url.path->urlPath} />
</AccessControl>
| list{"sdk"} =>
<AccessControl
isEnabled={!featureFlagDetails.isLiveMode} permission={userPermissionJson.connectorsView}>
isEnabled={!featureFlagDetails.isLiveMode}
authorization={userHasAccess(~groupAccess=ConnectorsView)}>
<SDKPage />
</AccessControl>
| list{"unauthorized"} => <UnauthorizedPage />
| _ => <NotFoundPage />
}}
<RenderIf
condition={!featureFlagDetails.isLiveMode &&
userPermissionJson.merchantDetailsManage === Access &&
userHasAccess(~groupAccess=MerchantDetailsManage) === Access &&
merchantDetailsTypedValue.merchant_name->Option.isNone}>
<SbxOnboardingSurvey showModal=surveyModal setShowModal=setSurveyModal />
</RenderIf>
Expand Down
11 changes: 6 additions & 5 deletions src/container/TransactionContainer.res
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ let make = () => {
open HSwitchUtils
open HyperswitchAtom
let url = RescriptReactRouter.useUrl()
let userPermissionJson = Recoil.useRecoilValueFromAtom(userPermissionAtom)

let {userHasAccess} = GroupACLHooks.useUserGroupACLHook()
let {userInfo: {transactionEntity}} = React.useContext(UserInfoProvider.defaultContext)
let {payOut} = featureFlagAtom->Recoil.useRecoilValueFromAtom
<div key={(transactionEntity :> string)}>
{switch url.path->urlPath {
| list{"payments", ...remainingPath} =>
<AccessControl permission=userPermissionJson.operationsView>
<AccessControl authorization={userHasAccess(~groupAccess=OperationsView)}>
<FilterContext key="payments" index="payments">
<EntityScaffold
entityName="Payments"
Expand All @@ -21,7 +22,7 @@ let make = () => {
</FilterContext>
</AccessControl>
| list{"payouts", ...remainingPath} =>
<AccessControl isEnabled={payOut} permission=userPermissionJson.operationsView>
<AccessControl isEnabled={payOut} authorization={userHasAccess(~groupAccess=OperationsView)}>
<FilterContext key="payouts" index="payouts">
<EntityScaffold
entityName="Payouts"
Expand All @@ -33,7 +34,7 @@ let make = () => {
</FilterContext>
</AccessControl>
| list{"refunds", ...remainingPath} =>
<AccessControl permission=userPermissionJson.operationsView>
<AccessControl authorization={userHasAccess(~groupAccess=OperationsView)}>
<FilterContext key="refunds" index="refunds">
<EntityScaffold
entityName="Refunds"
Expand All @@ -45,7 +46,7 @@ let make = () => {
</FilterContext>
</AccessControl>
| list{"disputes", ...remainingPath} =>
<AccessControl permission=userPermissionJson.operationsView>
<AccessControl authorization={userHasAccess(~groupAccess=OperationsView)}>
<FilterContext key="disputes" index="disputes">
<EntityScaffold
entityName="Disputes"
Expand Down
Loading

0 comments on commit d08f6b8

Please sign in to comment.