diff --git a/web/config/moduleFederation.config.js b/web/config/moduleFederation.config.js index f8c09bb56..78016e676 100644 --- a/web/config/moduleFederation.config.js +++ b/web/config/moduleFederation.config.js @@ -55,7 +55,8 @@ module.exports = { './Labels': './src/pages/ManageSpace/ManageLabels/ManageLabels.tsx', './WebhookDetails': './src/pages/WebhookDetails/WebhookDetails.tsx', './NewRepoModalButton': './src/components/NewRepoModalButton/NewRepoModalButton.tsx', - './HAREnterpriseApp': './src/ar/app/EnterpriseApp.tsx' + './HAREnterpriseApp': './src/ar/app/EnterpriseApp.tsx', + './HARCreateRegistryButton': './src/ar/views/CreateRegistryButton/CreateRegistryButton.tsx' }, shared: { formik: packageJSON.dependencies['formik'], diff --git a/web/src/ar/app/App.tsx b/web/src/ar/app/App.tsx index dc3d66ed6..9abf2f27e 100644 --- a/web/src/ar/app/App.tsx +++ b/web/src/ar/app/App.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { Suspense, useEffect, useRef } from 'react' +import React, { PropsWithChildren, Suspense, useEffect, useRef } from 'react' import { Page } from '@harnessio/uicore' import { HARServiceAPIClient } from '@harnessio/react-har-service-client' import { QueryClientProvider } from '@tanstack/react-query' @@ -35,7 +35,7 @@ import css from '@ar/app/app.module.scss' const RouteDestinations = React.lazy(() => import('@ar/routes/RouteDestinations')) -export default function ChildApp(props: MFEAppProps): React.ReactElement { +export default function ChildApp(props: PropsWithChildren): React.ReactElement { const { renderUrl, parentContextObj, @@ -105,16 +105,18 @@ export default function ChildApp(props: MFEAppProps): React.ReactElement { components={{ ...components, ...customComponents } as ParentProviderProps['components']} utils={{ ...customUtils }}> - - - - - }> - - - + {props.children ?? ( + + + + + }> + + + + )} diff --git a/web/src/ar/pages/repository-details/components/Forms/RepositoryCreateForm.tsx b/web/src/ar/pages/repository-details/components/Forms/RepositoryCreateForm.tsx index cc74dc732..bfa83cae0 100644 --- a/web/src/ar/pages/repository-details/components/Forms/RepositoryCreateForm.tsx +++ b/web/src/ar/pages/repository-details/components/Forms/RepositoryCreateForm.tsx @@ -49,6 +49,7 @@ import css from './RepositoryDetailsForm.module.scss' interface FormContentProps { formikProps: FormikProps + allowedPackageTypes?: RepositoryPackageType[] getDefaultValuesByRepositoryType: ( type: RepositoryPackageType, defaultValue: VirtualRegistryRequest @@ -56,7 +57,7 @@ interface FormContentProps { } function FormContent(props: FormContentProps): JSX.Element { - const { formikProps, getDefaultValuesByRepositoryType } = props + const { formikProps, getDefaultValuesByRepositoryType, allowedPackageTypes } = props const { getString } = useStrings() const { values } = formikProps const { packageType, config } = values @@ -78,7 +79,8 @@ function FormContent(props: FormContentProps): JSX.Element { name="packageType" items={RepositoryTypes.map(each => ({ ...each, - label: getString(each.label) + label: getString(each.label), + disabled: allowedPackageTypes?.length ? !allowedPackageTypes.includes(each.value) : each.disabled }))} staticItems /> @@ -97,12 +99,13 @@ function FormContent(props: FormContentProps): JSX.Element { interface RepositoryCreateFormProps { factory?: RepositoryAbstractFactory defaultType?: RepositoryPackageType + allowedPackageTypes?: RepositoryPackageType[] setShowOverlay: (show: boolean) => void onSuccess: (data: Repository) => void } function RepositoryCreateForm(props: RepositoryCreateFormProps, formikRef: FormikFowardRef): JSX.Element { - const { defaultType = RepositoryPackageType.DOCKER, factory = repositoryFactory, onSuccess, setShowOverlay } = props + const { defaultType, factory = repositoryFactory, onSuccess, setShowOverlay, allowedPackageTypes } = props const { getString } = useStrings() const parentRef = useGetSpaceRef() const { showSuccess, showError, clear } = useToaster() @@ -125,7 +128,10 @@ function RepositoryCreateForm(props: RepositoryCreateFormProps, formikRef: Formi ) const getInitialValues = (): VirtualRegistryRequest => { - return getDefaultValuesByRepositoryType(defaultType) + const defaultSelectedPackageType = allowedPackageTypes?.length + ? allowedPackageTypes[0] + : RepositoryPackageType.DOCKER + return getDefaultValuesByRepositoryType(defaultType ?? defaultSelectedPackageType) } const handleSubmit = async (values: VirtualRegistryRequest): Promise => { @@ -170,7 +176,11 @@ function RepositoryCreateForm(props: RepositoryCreateFormProps, formikRef: Formi setFormikRef(formikRef, formik) return ( - + ) }} diff --git a/web/src/ar/pages/repository-details/hooks/useCreateRepositoryModal/useCreateRepositoryModal.tsx b/web/src/ar/pages/repository-details/hooks/useCreateRepositoryModal/useCreateRepositoryModal.tsx index a5a637683..3503bfb4d 100644 --- a/web/src/ar/pages/repository-details/hooks/useCreateRepositoryModal/useCreateRepositoryModal.tsx +++ b/web/src/ar/pages/repository-details/hooks/useCreateRepositoryModal/useCreateRepositoryModal.tsx @@ -21,15 +21,17 @@ import { Button, ButtonVariation, Layout, ModalDialog, Text } from '@harnessio/u import { useParentHooks } from '@ar/hooks' import { useStrings } from '@ar/frameworks/strings' +import type { RepositoryPackageType } from '@ar/common/types' import RepositoryCreateForm from '@ar/pages/repository-details/components/Forms/RepositoryCreateForm' import type { Repository } from '@ar/pages/repository-details/types' interface useCreateRepositoryModalProps { onSuccess: (data: Repository) => void + allowedPackageTypes?: RepositoryPackageType[] } export function useCreateRepositoryModal(props: useCreateRepositoryModalProps) { - const { onSuccess } = props + const { onSuccess, allowedPackageTypes } = props const { getString } = useStrings() const { useModalHook } = useParentHooks() const [showOverlay, setShowOverlay] = useState(false) @@ -62,7 +64,6 @@ export function useCreateRepositoryModal(props: useCreateRepositoryModalProps) { } isCloseButtonShown width={800} - showOverlay={showOverlay} footer={