diff --git a/Dockerfile.dev-mcp b/Dockerfile.dev-mcp index 087b6618c..e39ed5d61 100644 --- a/Dockerfile.dev-mcp +++ b/Dockerfile.dev-mcp @@ -2,21 +2,18 @@ FROM registry.redhat.io/ubi9/nodejs-22:9.6-1755075210 AS web-builder -USER 0 - WORKDIR /opt/app-root -ENV HUSKY=0 +USER 0 +ENV HUSKY=0 +COPY web/package*.json web/ COPY Makefile Makefile -COPY scripts/update-plugin-name.sh scripts/update-plugin-name.sh -COPY web/ web/ - -RUN make update-plugin-name - -ENV I18N_NAMESPACE="plugin__monitoring-console-plugin" - RUN make install-frontend-ci + +COPY web/ web/ +COPY config/ config/ +ENV CONSOLE_PLUGIN_NAME="monitoring-console-plugin" RUN make build-frontend FROM registry.access.redhat.com/ubi9/go-toolset:1.25 AS go-builder diff --git a/web/src/components/dashboards/perses/dashboard-action-modals.tsx b/web/src/components/dashboards/perses/dashboard-action-modals.tsx index 1d088fd92..b24c32ece 100644 --- a/web/src/components/dashboards/perses/dashboard-action-modals.tsx +++ b/web/src/components/dashboards/perses/dashboard-action-modals.tsx @@ -24,7 +24,6 @@ import { useUpdateDashboardMutation, useCreateDashboardMutation, useDeleteDashboardMutation, - useCreateProjectMutation, } from './dashboard-api'; import { renameDashboardDialogValidationSchema, @@ -39,7 +38,11 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { DashboardResource, getResourceExtendedDisplayName } from '@perses-dev/core'; import { useToast } from './ToastProvider'; import { generateMetadataName } from './dashboard-utils'; -import { DashboardDeniedHelperText, useDashboardProjects } from './dashboard-dialog-helpers'; +import { + DashboardDeniedHelperText, + useDashboardProjects, + useProjectCreation, +} from './dashboard-dialog-helpers'; import { useOcpProjects } from './hooks/useOcpProjects'; import { usePersesDashboardAccess } from './hooks/usePersesDashboardAccess'; import { t_global_spacer_200, t_global_font_weight_200 } from '@patternfly/react-tokens'; @@ -195,7 +198,7 @@ export const DuplicateActionModal = ({ dashboard, isOpen, onClose }: ActionModal const { ocpProjects } = useOcpProjects(); const { availableProjects } = useDashboardProjects(); - const createProjectMutation = useCreateProjectMutation(); + const { ensureProjectExists, isCreatingProject } = useProjectCreation(); const defaultProject = useMemo(() => { if (!dashboard) return ''; @@ -293,27 +296,10 @@ export const DuplicateActionModal = ({ dashboard, isOpen, onClose }: ActionModal } const processForm: SubmitHandler = async (data) => { - // Check if project exists, create it if it doesn't - const projectExists = ocpProjects?.some( - (project) => project.metadata.name === data.projectName, - ); - - if (!projectExists) { - try { - await createProjectMutation.mutateAsync(data.projectName); - addAlert( - t('Project "{{project}}" created successfully', { project: data.projectName }), - 'success', - ); - } catch (projectError) { - const errorMessage = - projectError?.message || - t('Failed to create project "{{project}}". Please try again.', { - project: data.projectName, - }); - addAlert(t('Error creating project: {{error}}', { error: errorMessage }), 'danger'); - return; - } + try { + await ensureProjectExists(data.projectName); + } catch { + return; } const newDashboard: DashboardResource = { @@ -472,9 +458,12 @@ export const DuplicateActionModal = ({ dashboard, isOpen, onClose }: ActionModal checkingAccess || createDenied || isSchemaLoading || - createDashboardMutation.isPending + createDashboardMutation.isPending || + isCreatingProject + } + isLoading={ + createDashboardMutation.isPending || isCreatingProject || isSchemaLoading } - isLoading={createDashboardMutation.isPending || isSchemaLoading} > {t('Duplicate')}