diff --git a/src/screens/OMPSwitch/MerchantSwitch.res b/src/screens/OMPSwitch/MerchantSwitch.res index 736273181..74c27b371 100644 --- a/src/screens/OMPSwitch/MerchantSwitch.res +++ b/src/screens/OMPSwitch/MerchantSwitch.res @@ -128,16 +128,15 @@ let make = () => { let getURL = useGetURL() let fetchDetails = useGetMethod() let showToast = ToastState.useShowToast() - let internalSwitch = OMPSwitchHooks.useInternalSwitch() - let url = RescriptReactRouter.useUrl() + let {userInfo: {merchantId}} = React.useContext(UserInfoProvider.defaultContext) let (showModal, setShowModal) = React.useState(_ => false) let (merchantList, setMerchantList) = Recoil.useRecoilState(HyperswitchAtom.merchantListAtom) let merchantDetailsTypedValue = Recoil.useRecoilValueFromAtom( HyperswitchAtom.merchantDetailsValueAtom, ) - let (showSwitchingMerch, setShowSwitchingMerch) = React.useState(_ => false) let (arrow, setArrow) = React.useState(_ => false) + let { globalUIConfig: {sidebarColor: {backgroundColor, primaryTextColor, borderColor}}, } = React.useContext(ThemeProvider.themeContext) @@ -153,28 +152,10 @@ let make = () => { } } } - - let switchMerch = async value => { - try { - setShowSwitchingMerch(_ => true) - let _ = await internalSwitch(~expectedMerchantId=Some(value)) - RescriptReactRouter.replace(GlobalVars.extractModulePath(url)) - setShowSwitchingMerch(_ => false) - } catch { - | _ => { - showToast(~message="Failed to switch merchant", ~toastType=ToastError) - setShowSwitchingMerch(_ => false) - } - } - } - let input: ReactFinalForm.fieldRenderPropsInput = { name: "name", onBlur: _ => (), - onChange: ev => { - let value = ev->Identity.formReactEventToString - switchMerch(value)->ignore - }, + onChange: _ => (), onFocus: _ => (), value: merchantId->JSON.Encode.string, checked: true, @@ -213,9 +194,9 @@ let make = () => { })
generateDropdownOptionsCustomComponent} marginTop={`mt-8 ${borderColor} shadow-generic_shadow`} @@ -240,10 +221,5 @@ let make = () => { -
} diff --git a/src/screens/OMPSwitch/OMPSwitchHelper.res b/src/screens/OMPSwitch/OMPSwitchHelper.res index 978ad3110..7d69ddba6 100644 --- a/src/screens/OMPSwitch/OMPSwitchHelper.res +++ b/src/screens/OMPSwitch/OMPSwitchHelper.res @@ -4,7 +4,6 @@ module ListBaseComp = { ~heading="", ~subHeading, ~arrow, - ~showEditIcon=false, ~onEditClick=_ => (), ~isDarkBg=false, ~showDropdownArrow=true, @@ -517,82 +516,3 @@ let generateDropdownOptionsCustomComponent: array { - open LogicUtils - open APIUtils - let getURL = useGetURL() - let updateDetails = useUpdateMethod() - let showToast = ToastState.useShowToast() - let initialValues = - [ - ("organization_name", OMPSwitchUtils.currentOMPName(orgList, orgId)->JSON.Encode.string), - ]->Dict.fromArray - - let validateForm = (values: JSON.t) => { - let errors = Dict.make() - let organizationName = - values->getDictFromJsonObject->getString("organization_name", "")->String.trim - let regexForOrganizationName = "^([a-z]|[A-Z]|[0-9]|_|\\s)+$" - - let errorMessage = if organizationName->isEmptyString { - "Organization name cannot be empty" - } else if organizationName->String.length > 64 { - "Organization name cannot exceed 64 characters" - } else if !RegExp.test(RegExp.fromString(regexForOrganizationName), organizationName) { - "Organization name should not contain special characters" - } else { - "" - } - - if errorMessage->isNonEmptyString { - Dict.set(errors, "organization_name", errorMessage->JSON.Encode.string) - } - - errors->JSON.Encode.object - } - - let orgName = FormRenderer.makeFieldInfo( - ~label="Org Name", - ~name="organization_name", - ~placeholder=`Eg: Hyperswitch`, - ~customInput=InputFields.textInput(), - ~isRequired=true, - ) - - let onSubmit = async (values, _) => { - try { - let url = getURL(~entityName=UPDATE_ORGANIZATION, ~methodType=Put, ~id=Some(orgId)) - let _ = await updateDetails(url, values, Put) - let _ = await getOrgList() - showToast(~message="Updated organization name!", ~toastType=ToastSuccess) - } catch { - | _ => showToast(~message="Failed to update organization name!", ~toastType=ToastError) - } - setShowModal(_ => false) - Nullable.null - } - - <> - -
JSON.Encode.object} onSubmit validate={validateForm}> -
- - - -
- -
-
-
-
- - } -} diff --git a/src/screens/OMPSwitch/OrgSwitch.res b/src/screens/OMPSwitch/OrgSwitch.res deleted file mode 100644 index e67b07bec..000000000 --- a/src/screens/OMPSwitch/OrgSwitch.res +++ /dev/null @@ -1,358 +0,0 @@ -module SwitchOrg = { - @react.component - let make = (~setShowModal) => { - let showToast = ToastState.useShowToast() - let showPopUp = PopUpState.useShowPopUp() - let internalSwitch = OMPSwitchHooks.useInternalSwitch() - let (value, setValue) = React.useState(() => "") - let {globalUIConfig: {sidebarColor: {backgroundColor}}} = React.useContext( - ThemeProvider.themeContext, - ) - - let input = React.useMemo((): ReactFinalForm.fieldRenderPropsInput => { - { - name: "-", - onBlur: _ => (), - onChange: ev => { - let value = {ev->ReactEvent.Form.target}["value"] - if value->String.includes("") { - showPopUp({ - popUpType: (Warning, WithIcon), - heading: `Script Tags are not allowed`, - description: React.string(`Input cannot contain tags`), - handleConfirm: {text: "OK"}, - }) - } - let val = value->String.replace("", "") - setValue(_ => val) - }, - onFocus: _ => (), - value: JSON.Encode.string(value), - checked: false, - } - }, [value]) - - let switchOrg = async () => { - try { - setShowModal(_ => true) - let _ = await internalSwitch(~expectedOrgId=Some(value)) - setShowModal(_ => false) - } catch { - | _ => { - showToast(~message="Failed to switch the org! Try again.", ~toastType=ToastError) - setShowModal(_ => false) - } - } - } - - let handleKeyUp = event => { - if event->ReactEvent.Keyboard.keyCode === 13 { - switchOrg()->ignore - } - } - - - } -} -module NewOrgCreationModal = { - @react.component - let make = (~setShowModal, ~showModal, ~getOrgList) => { - open APIUtils - let getURL = useGetURL() - let updateDetails = useUpdateMethod() - let showToast = ToastState.useShowToast() - let createNewOrg = async values => { - try { - let url = getURL(~entityName=USERS, ~userType=#CREATE_ORG, ~methodType=Post) - let _ = await updateDetails(url, values, Post) - getOrgList()->ignore - showToast(~toastType=ToastSuccess, ~message="Org Created Successfully!", ~autoClose=true) - } catch { - | _ => showToast(~toastType=ToastError, ~message="Org Creation Failed", ~autoClose=true) - } - setShowModal(_ => false) - Nullable.null - } - - let onSubmit = (values, _) => { - createNewOrg(values) - } - - let orgName = FormRenderer.makeFieldInfo( - ~label="Org Name", - ~name="organization_name", - ~placeholder="Eg: My New Org", - ~customInput=InputFields.textInput(), - ~isRequired=true, - ) - - let merchantName = FormRenderer.makeFieldInfo( - ~label="Merchant Name", - ~name="merchant_name", - ~placeholder="Eg: My New Merchant", - ~customInput=InputFields.textInput(), - ~isRequired=true, - ) - - let validateForm = ( - ~values: JSON.t, - ~fieldstoValidate: array, - ) => { - open LogicUtils - let errors = Dict.make() - let regexForOrgName = "^([a-z]|[A-Z]|[0-9]|_|\\s)+$" - - fieldstoValidate->Array.forEach(field => { - let name = switch field { - | OrgName => "Org" - | MerchantName => "Merchant" - } - - let value = switch field { - | OrgName => "organization_name" - | MerchantName => "merchant_name" - } - - let fieldValue = values->getDictFromJsonObject->getString(value, "")->String.trim - - let errorMsg = if fieldValue->isEmptyString { - `${name} name cannot be empty` - } else if fieldValue->String.length > 64 { - `${name} name too long` - } else if !RegExp.test(RegExp.fromString(regexForOrgName), fieldValue) { - `${name} name should not contain special characters` - } else { - "" - } - if errorMsg->isNonEmptyString { - Dict.set(errors, value, errorMsg->JSON.Encode.string) - } - }) - errors->JSON.Encode.object - } - - let modalBody = { -
-
- -
setShowModal(_ => false)}> - -
-
-
validateForm(~values, ~fieldstoValidate=[OrgName, MerchantName])}> -
- -
- - -
-
-
- -
-
-
-
- } - - - modalBody - - } -} - -@react.component -let make = () => { - open APIUtils - open LogicUtils - open OMPSwitchUtils - open OMPSwitchHelper - let getURL = useGetURL() - let fetchDetails = useGetMethod() - let showToast = ToastState.useShowToast() - let internalSwitch = OMPSwitchHooks.useInternalSwitch() - let url = RescriptReactRouter.useUrl() - let {userHasAccess} = GroupACLHooks.useUserGroupACLHook() - let {userInfo: {orgId, roleId}} = React.useContext(UserInfoProvider.defaultContext) - let (orgList, setOrgList) = Recoil.useRecoilState(HyperswitchAtom.orgListAtom) - let {tenantUser} = HyperswitchAtom.featureFlagAtom->Recoil.useRecoilValueFromAtom - let (showSwitchingOrg, setShowSwitchingOrg) = React.useState(_ => false) - let (showEditOrgModal, setShowEditOrgModal) = React.useState(_ => false) - let (showAddOrgModal, setShowAddOrgModal) = React.useState(_ => false) - let (arrow, setArrow) = React.useState(_ => false) - let isTenantAdmin = roleId->HyperSwitchUtils.checkIsTenantAdmin - let {globalUIConfig: {sidebarColor: {backgroundColor, secondaryTextColor}}} = React.useContext( - ThemeProvider.themeContext, - ) - let getOrgList = async () => { - try { - let url = getURL(~entityName=USERS, ~userType=#LIST_ORG, ~methodType=Get) - let response = await fetchDetails(url) - setOrgList(_ => response->getArrayDataFromJson(orgItemToObjMapper)) - } catch { - | _ => { - setOrgList(_ => ompDefaultValue(orgId, "")) - showToast(~message="Failed to fetch organisation list", ~toastType=ToastError) - } - } - } - - React.useEffect(() => { - getOrgList()->ignore - None - }, []) - - let orgSwitch = async value => { - try { - setShowSwitchingOrg(_ => true) - let _ = await internalSwitch(~expectedOrgId=Some(value)) - RescriptReactRouter.replace(GlobalVars.extractModulePath(url)) - setShowSwitchingOrg(_ => false) - } catch { - | _ => { - showToast(~message="Failed to switch organisation", ~toastType=ToastError) - setShowSwitchingOrg(_ => false) - } - } - } - - let onEditClick = e => { - setShowEditOrgModal(_ => true) - e->ReactEvent.Mouse.stopPropagation - } - - let input: ReactFinalForm.fieldRenderPropsInput = { - name: "name", - onBlur: _ => (), - onChange: ev => { - let value = ev->Identity.formReactEventToString - orgSwitch(value)->ignore - }, - onFocus: _ => (), - value: orgId->JSON.Encode.string, - checked: true, - } - - let toggleChevronState = () => { - setArrow(prev => !prev) - } - - let customHRTagStyle = "border-t border-blue-830" - let customPadding = "py-1 w-full" - let customStyle = `w-56 ${secondaryTextColor} ${backgroundColor.sidebarSecondary} dark:bg-black hover:text-gray-100 !w-full` - - let customScrollStyle = `${backgroundColor.sidebarSecondary} max-h-72 overflow-scroll px-1 pt-1` - let dropdownContainerStyle = "min-w-[15rem] rounded" - - let showOrgDropdown = !(tenantUser && isTenantAdmin && orgList->Array.length >= 20) - let orgDropdown = - generateDropdownOptions(~customIconCss="text-grey-200")} - marginTop="mt-14" - hideMultiSelectButtons=true - addButton=false - customStyle={`${backgroundColor.sidebarSecondary} hover:!bg-black/10 rounded !w-full`} - customSelectStyle={`${backgroundColor.sidebarSecondary} hover:!bg-black/10 rounded`} - searchable=false - baseComponent={} - baseComponentCustomStyle={`border-blue-820 rounded ${backgroundColor.sidebarSecondary} rounded text-white`} - bottomComponent={ - - } - optionClass={`${secondaryTextColor} text-fs-14`} - selectClass={`${secondaryTextColor} text-fs-14`} - customDropdownOuterClass="!border-none !w-full" - fullLength=true - toggleChevronState - customScrollStyle - dropdownContainerStyle - shouldDisplaySelectedOnTop=true - /> - - let orgBaseComp = - - - let orgComp = showOrgDropdown ? orgDropdown : orgBaseComp - -
-
- {orgComp} - - - -
- - - - - -
-} diff --git a/src/screens/OMPSwitch/ProfileSwitch.res b/src/screens/OMPSwitch/ProfileSwitch.res index cf12b2d4b..bddc1e935 100644 --- a/src/screens/OMPSwitch/ProfileSwitch.res +++ b/src/screens/OMPSwitch/ProfileSwitch.res @@ -128,12 +128,10 @@ let make = () => { let getURL = useGetURL() let fetchDetails = useGetMethod() let showToast = ToastState.useShowToast() - let internalSwitch = OMPSwitchHooks.useInternalSwitch() - let url = RescriptReactRouter.useUrl() + let (showModal, setShowModal) = React.useState(_ => false) let {userInfo: {profileId}} = React.useContext(UserInfoProvider.defaultContext) let (profileList, setProfileList) = Recoil.useRecoilState(HyperswitchAtom.profileListAtom) - let (showSwitchingProfile, setShowSwitchingProfile) = React.useState(_ => false) let (arrow, setArrow) = React.useState(_ => false) let businessProfiles = Recoil.useRecoilValueFromAtom(HyperswitchAtom.businessProfilesAtom) @@ -153,27 +151,11 @@ let make = () => { let addItemBtnStyle = "border border-t-0 w-full" let customScrollStyle = "max-h-72 overflow-scroll px-1 pt-1 border border-b-0" let dropdownContainerStyle = "rounded-md border border-1 w-[14rem] max-w-[20rem]" - let profileSwitch = async value => { - try { - setShowSwitchingProfile(_ => true) - let _ = await internalSwitch(~expectedProfileId=Some(value)) - RescriptReactRouter.replace(GlobalVars.extractModulePath(url)) - setShowSwitchingProfile(_ => false) - } catch { - | _ => { - showToast(~message="Failed to switch profile", ~toastType=ToastError) - setShowSwitchingProfile(_ => false) - } - } - } let input: ReactFinalForm.fieldRenderPropsInput = { name: "name", onBlur: _ => (), - onChange: ev => { - let value = ev->Identity.formReactEventToString - profileSwitch(value)->ignore - }, + onChange: _ => (), onFocus: _ => (), value: profileId->JSON.Encode.string, checked: true, @@ -226,10 +208,5 @@ let make = () => { - } diff --git a/src/screens/Sidebar/OrgSidebar.res b/src/screens/Sidebar/OrgSidebar.res index 0f9e5eefd..7d893053c 100644 --- a/src/screens/Sidebar/OrgSidebar.res +++ b/src/screens/Sidebar/OrgSidebar.res @@ -136,7 +136,6 @@ module OrgTile = { } } - module NewOrgCreationModal = { @react.component let make = (~setShowModal, ~showModal, ~getOrgList) => { @@ -273,13 +272,11 @@ let make = () => { open APIUtils open LogicUtils open OMPSwitchUtils - open OMPSwitchHelper let getURL = useGetURL() let fetchDetails = useGetMethod() let url = RescriptReactRouter.useUrl() let (orgList, setOrgList) = Recoil.useRecoilState(HyperswitchAtom.orgListAtom) let (showSwitchingOrg, setShowSwitchingOrg) = React.useState(_ => false) - let (showEditOrgModal, setShowEditOrgModal) = React.useState(_ => false) let internalSwitch = OMPSwitchHooks.useInternalSwitch() let {userInfo: {orgId, roleId}} = React.useContext(UserInfoProvider.defaultContext) let {tenantUser} = HyperswitchAtom.featureFlagAtom->Recoil.useRecoilValueFromAtom @@ -365,9 +362,6 @@ let make = () => { setShowModal={setShowAddOrgModal} showModal={showAddOrgModal} getOrgList /> -