Skip to content
Open
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
1 change: 1 addition & 0 deletions config/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ dev_roles_v2=false
dev_customer=false
dev_accept_invite=true
dev_theme=false
dev_users=false
[default.merchant_config]
[default.merchant_config.allowlist]
[default.merchant_config.allowlist.dev_recon_engine_v1]
Expand Down
2 changes: 2 additions & 0 deletions src/entryPoints/FeatureFlagUtils.res
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ type featureFlag = {
devSidebarV2: bool,
vaultProcessor: bool,
devTheme: bool,
devUsers: bool,
}

let featureFlagType = (featureFlags: JSON.t) => {
Expand Down Expand Up @@ -144,6 +145,7 @@ let featureFlagType = (featureFlags: JSON.t) => {
devSidebarV2: dict->getBool("dev_sidebar_v2", false),
vaultProcessor: dict->getBool("vault_processor", false),
devTheme: dict->getBool("dev_theme", false),
devUsers: dict->getBool("dev_users", false),
}
}

Expand Down
1 change: 1 addition & 0 deletions src/entryPoints/HyperSwitchApp.res
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ let make = () => {

| (_, list{"organization-chart"}) => <OrganisationChart />
| (_, list{"theme", ...remainingPath}) => <ThemeLanding remainingPath />
| (_, list{"users", ..._}) => <UserManagementContainer />
| (_, list{"account-settings", "profile", ...remainingPath}) =>
<EntityScaffold
entityName="profile setting"
Expand Down
16 changes: 16 additions & 0 deletions src/entryPoints/SidebarHooks.res
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ let useGetHsSidebarValues = (~isReconEnabled: bool) => {
vaultProcessor,
devModularityV2,
devTheme,
devUsers,
} = featureFlagDetails
let {
isFeatureEnabledForDenyListMerchant,
Expand Down Expand Up @@ -87,6 +88,7 @@ let useGetHsSidebarValues = (~isReconEnabled: bool) => {
~complianceCertificate,
~devModularityV2Enabled=devModularityV2,
~devThemeEnabled=devTheme,
~devUsers,
),
]
}
Expand Down Expand Up @@ -217,6 +219,13 @@ let useGetSidebarValuesForCurrentActive = (~isReconEnabled) => {
access: Access,
selectedIcon: "nd-fill-home",
}),
Link({
name: "Users",
icon: "nd-user",
link: "/users",
access: Access,
selectedIcon: "nd-user",
}),
ThemeSidebarValues.themeTopLevelLink(~userHasResourceAccess),
CustomComponent({
component: <ProductHeaderComponent />,
Expand All @@ -231,6 +240,13 @@ let useGetSidebarValuesForCurrentActive = (~isReconEnabled) => {
access: Access,
selectedIcon: "nd-fill-home",
}),
Link({
name: "Users",
icon: "nd-user",
link: "/users",
access: Access,
selectedIcon: "nd-user",
}),
CustomComponent({
component: <ProductHeaderComponent />,
}),
Expand Down
6 changes: 4 additions & 2 deletions src/entryPoints/SidebarValues.res
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ let settings = (
~complianceCertificate,
~devModularityV2Enabled,
~devThemeEnabled,
~devUsers,
) => {
let settingsLinkArray = []

Expand All @@ -487,8 +488,9 @@ let settings = (
->Array.push(ThemeSidebarValues.themeSublevelLinks(~userHasResourceAccess))
->ignore
}

settingsLinkArray->Array.push(userManagement(userHasResourceAccess))->ignore
if !devUsers {
settingsLinkArray->Array.push(userManagement(userHasResourceAccess))->ignore
}

Section({
name: "Settings",
Expand Down
25 changes: 24 additions & 1 deletion src/screens/Sidebar/Sidebar.res
Original file line number Diff line number Diff line change
Expand Up @@ -618,18 +618,21 @@ let make = (
globalUIConfig: {sidebarColor: {backgroundColor, secondaryTextColor, hoverColor, borderColor}},
} = React.useContext(ThemeProvider.themeContext)
let {roleId} = React.useContext(UserInfoProvider.defaultContext).getResolvedUserInfo()
let {getCommonSessionDetails} = React.useContext(UserInfoProvider.defaultContext)
let {version} = getCommonSessionDetails()
let {isSidebarExpanded, setIsSidebarExpanded} = React.useContext(SidebarProvider.defaultContext)
let {showSideBar} = React.useContext(GlobalProvider.defaultContext)
let {activeProduct, onProductSelectClick} = React.useContext(
ProductSelectionProvider.defaultContext,
)
let {userHasAccess} = GroupACLHooks.useUserGroupACLHook()
let handleLogout = APIUtils.useHandleLogout(~eventName="user_signout_manual")
let isMobileView = MatchMedia.useMobileChecker()
let sideBarRef = React.useRef(Nullable.null)
let {email} = useCommonAuthInfo()->Option.getOr(defaultAuthInfo)
let isInternalUser = roleId->HyperSwitchUtils.checkIsInternalUser
let (exploredModules, unexploredModules) = useGetSidebarProductModules()
let {devModularityV2, devSidebarV2, devTheme} =
let {devModularityV2, devSidebarV2, devTheme, devUsers} =
HyperswitchAtom.featureFlagAtom->Recoil.useRecoilValueFromAtom
let merchantList = Recoil.useRecoilValueFromAtom(HyperswitchAtom.merchantListAtom)
let (openItem, setOpenItem) = React.useState(_ => "")
Expand Down Expand Up @@ -740,6 +743,7 @@ let make = (

let isHomeSelected = linkSelectionCheck(firstPart, "/v2/home")
let isThemeSelected = linkSelectionCheck(firstPart, "/theme")
let isUsersSelected = linkSelectionCheck(firstPart, "/users")

<div className={`${backgroundColor.sidebarNormal} flex group relative `}>
<div
Expand Down Expand Up @@ -903,6 +907,25 @@ let make = (
</div>
</Link>
</RenderIf>
<RenderIf
condition={devUsers &&
userHasAccess(~groupAccess=UsersView) == Access &&
version == UserInfoTypes.V1}>
<Link to_={GlobalVars.appendDashboardPath(~url="/users")}>
<div
className={`${body.md.medium} ${secondaryTextColor} relative overflow-hidden flex flex-row rounded-lg items-center cursor-pointer hover:transition hover:duration-300 ${isUsersSelected
? "bg-sidebar-hoverColor"
: ""} ${isSidebarExpanded ? "" : "mx-1"} ${hoverColor}`}>
<SidebarOption
name="Users"
icon="nd-settings"
isSidebarExpanded
isSelected={isUsersSelected}
showIcon=true
/>
</div>
</Link>
</RenderIf>
</div>
<div className={`${body.sm.semibold} px-3 py-2 text-nd_gray-400 tracking-widest`}>
{React.string("My Modules"->String.toUpperCase)}
Expand Down
14 changes: 8 additions & 6 deletions src/screens/UserManagement/UserRevamp/UserManagementHelper.res
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ module MerchantSelection = {
let showToast = ToastState.useShowToast()
let internalSwitch = OMPSwitchHooks.useInternalSwitch()
let merchList = Recoil.useRecoilValueFromAtom(HyperswitchAtom.merchantListAtom)
let {devUsers} = HyperswitchAtom.featureFlagAtom->Recoil.useRecoilValueFromAtom
let {userEntity} = React.useContext(UserInfoProvider.defaultContext).getResolvedUserInfo()
let (showSwitchingMerchant, setShowSwitchingMerchant) = React.useState(_ => false)
let form = ReactFinalForm.useForm()
Expand All @@ -66,12 +67,13 @@ module MerchantSelection = {
| #Tenant | #Organization => false
}

let v1MerchantList = merchList->Array.filter(merchant => {
switch merchant.productType {
| Some(Orchestration(V1)) => true
| _ => false
let merchantList = merchList->Array.filter(merchant =>
if devUsers {
merchant.version == Some(V1)
} else {
merchant.productType == Some(Orchestration(V1))
}
})
)

let handleOnChange = async (event, input: ReactFinalForm.fieldRenderPropsInput) => {
try {
Expand All @@ -96,7 +98,7 @@ module MerchantSelection = {
~options=getMerchantSelectBoxOption(
~label="All merchants",
~value="all_merchants",
~dropdownList=v1MerchantList,
~dropdownList=merchantList,
~showAllSelection=true,
),
~deselectDisable=true,
Expand Down
Loading