Skip to content

Commit

Permalink
fix pipeline details page breadcrumbs in admin perspective
Browse files Browse the repository at this point in the history
  • Loading branch information
vikram-raj committed Aug 26, 2020
1 parent e867434 commit 45af4aa
Show file tree
Hide file tree
Showing 16 changed files with 311 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import * as React from 'react';
// FIXME upgrading redux types is causing many errors at this time
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import { useSelector } from 'react-redux';
import { DetailsPageProps, DetailsPage } from '@console/internal/components/factory';
import { getActiveNamespace } from '@console/internal/reducers/ui';
import { RootState } from '@console/internal/redux';
import { navFactory, Kebab } from '@console/internal/components/utils';
import { DetailsForKind } from '@console/internal/components/default-resource';
import { usePipelinesBreadcrumbsFor } from '../pipelines/hooks';

const ClusterTaskDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { kindObj, match, kind } = props;
const activeNamespace = useSelector((state: RootState) => getActiveNamespace(state));
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, activeNamespace, 'tasks');

return (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(DetailsForKind(kind)), navFactory.editYaml()]}
/>
);
};

export default ClusterTaskDetailsPage;
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@ import { getPipelineRunKebabActions } from '../../utils/pipeline-actions';
import { PipelineRunDetails } from './detail-page-tabs/PipelineRunDetails';
import { PipelineRunLogsWithActiveTask } from './detail-page-tabs/PipelineRunLogs';
import { useMenuActionsWithUserLabel } from './triggered-by';
import { usePipelinesBreadcrumbsFor } from '../pipelines/hooks';

const PipelineRunDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match } = props;
const menuActions: KebabAction[] = useMenuActionsWithUserLabel(getPipelineRunKebabActions(true));
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'pipelines');

return (
<DetailsPage
{...props}
menuActions={menuActions}
getResourceStatus={pipelineRunStatus}
breadcrumbsFor={() => breadcrumbsFor}
pages={[
navFactory.details(PipelineRunDetails),
navFactory.editYaml(viewYamlComponent),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import * as React from 'react';
// FIXME upgrading redux types is causing many errors at this time
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import { useSelector } from 'react-redux';
import { DetailsPageProps, DetailsPage } from '@console/internal/components/factory';
import { getActiveNamespace } from '@console/internal/reducers/ui';
import { RootState } from '@console/internal/redux';
import { navFactory, Kebab } from '@console/internal/components/utils';
import { DetailsForKind } from '@console/internal/components/default-resource';
import { usePipelinesBreadcrumbsFor } from './hooks';

const ClusterTriggerBindingPage: React.FC<DetailsPageProps> = (props) => {
const { kindObj, match, kind } = props;
const activeNamespace = useSelector((state: RootState) => getActiveNamespace(state));
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, activeNamespace, 'triggers');

return (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(DetailsForKind(kind)), navFactory.editYaml()]}
/>
);
};

export default ClusterTriggerBindingPage;
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@ import * as React from 'react';
import { DetailsPage, DetailsPageProps } from '@console/internal/components/factory';
import { Kebab, navFactory } from '@console/internal/components/utils';
import EventListenerDetails from './detail-page-tabs/EventListenerDetails';
import { usePipelinesBreadcrumbsFor } from './hooks';

const EventListenerPage: React.FC<DetailsPageProps> = (props) => (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
pages={[navFactory.details(EventListenerDetails), navFactory.editYaml()]}
/>
);
const EventListenerPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'triggers');
return (
<DetailsPage
{...props}
breadcrumbsFor={() => breadcrumbsFor}
menuActions={Kebab.factory.common}
pages={[navFactory.details(EventListenerDetails), navFactory.editYaml()]}
/>
);
};

export default EventListenerPage;
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ import {
resourcesValidationSchema,
} from './detail-page-tabs';
import { usePipelineTriggerTemplateNames } from './utils/triggers';
import { usePipelinesBreadcrumbsFor } from './hooks';

const PipelineDetailsPage: React.FC<DetailsPageProps> = (props) => {
const [errorCode, setErrorCode] = React.useState(null);
const [latestPipelineRun, setLatestPipelineRun] = React.useState<PipelineRun>({});
const { name, namespace } = props;
const { name, namespace, kindObj, match } = props;
const templateNames = usePipelineTriggerTemplateNames(name, namespace) || [];
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'pipelines');

React.useEffect(() => {
k8sGet(PipelineModel, name, namespace)
Expand Down Expand Up @@ -55,6 +57,7 @@ const PipelineDetailsPage: React.FC<DetailsPageProps> = (props) => {
{...props}
menuActions={augmentedMenuActions}
customData={templateNames}
breadcrumbsFor={() => breadcrumbsFor}
pages={[
navFactory.details(PipelineDetails),
navFactory.editYaml(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@ import * as React from 'react';
import { DetailsPage, DetailsPageProps } from '@console/internal/components/factory';
import { Kebab, navFactory } from '@console/internal/components/utils';
import TriggerBindingDetails from './detail-page-tabs/TriggerBindingDetails';
import { usePipelinesBreadcrumbsFor } from './hooks';

const TriggerBindingPage: React.FC<DetailsPageProps> = (props) => (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
pages={[navFactory.details(TriggerBindingDetails), navFactory.editYaml()]}
/>
);
const TriggerBindingPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'triggers');

return (
<DetailsPage
{...props}
breadcrumbsFor={() => breadcrumbsFor}
menuActions={Kebab.factory.common}
pages={[navFactory.details(TriggerBindingDetails), navFactory.editYaml()]}
/>
);
};

export default TriggerBindingPage;
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@ import * as React from 'react';
import { DetailsPage, DetailsPageProps } from '@console/internal/components/factory';
import { Kebab, navFactory } from '@console/internal/components/utils';
import TriggerTemplateDetails from './detail-page-tabs/TriggerTemplateDetails';
import { usePipelinesBreadcrumbsFor } from './hooks';

const TriggerTemplatePage: React.FC<DetailsPageProps> = (props) => (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
pages={[navFactory.details(TriggerTemplateDetails), navFactory.editYaml()]}
/>
);
const TriggerTemplatePage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'triggers');

return (
<DetailsPage
{...props}
breadcrumbsFor={() => breadcrumbsFor}
menuActions={Kebab.factory.common}
pages={[navFactory.details(TriggerTemplateDetails), navFactory.editYaml()]}
/>
);
};

export default TriggerTemplatePage;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import * as React from 'react';
import { DetailsPageProps, DetailsPage } from '@console/internal/components/factory';
import { navFactory, Kebab } from '@console/internal/components/utils';
import { DetailsForKind } from '@console/internal/components/default-resource';
import { usePipelinesBreadcrumbsFor } from '../hooks';

const PipelineConditionDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match, kind } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'pipelines');

return (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(DetailsForKind(kind)), navFactory.editYaml()]}
/>
);
};

export default PipelineConditionDetailsPage;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import * as React from 'react';
import { DetailsPageProps, DetailsPage } from '@console/internal/components/factory';
import { navFactory, Kebab } from '@console/internal/components/utils';
import { DetailsForKind } from '@console/internal/components/default-resource';
import { usePipelinesBreadcrumbsFor } from '../hooks';

const PipelineResourceDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match, kind } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'pipelines');

return (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(DetailsForKind(kind)), navFactory.editYaml()]}
/>
);
};

export default PipelineResourceDetailsPage;
31 changes: 31 additions & 0 deletions frontend/packages/dev-console/src/components/pipelines/hooks.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { match as RMatch } from 'react-router-dom';
// FIXME upgrading redux types is causing many errors at this time
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import { useSelector } from 'react-redux';
import { getBreadcrumbPath } from '@console/internal/components/utils/breadcrumbs';
import { K8sKind } from '@console/internal/module/k8s';
import { RootState } from '@console/internal/redux';
import { getActivePerspective } from '@console/internal/reducers/ui';
import { pipelinesTab } from '../../utils/pipeline-utils';

export const usePipelinesBreadcrumbsFor = (
kindObj: K8sKind,
match: RMatch<any>,
namespace: string,
navOption: string,
) => {
const activePerspective = useSelector((state: RootState) => getActivePerspective(state));
return [
{
name: kindObj.labelPlural,
path:
activePerspective === 'admin'
? `/${navOption}/ns/${namespace}${
pipelinesTab(kindObj) ? `/${pipelinesTab(kindObj)}` : ''
}`
: getBreadcrumbPath(match),
},
{ name: `${kindObj.label} Details`, path: `${match.url}` },
];
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@ import * as React from 'react';
import { DetailsPage, DetailsPageProps } from '@console/internal/components/factory';
import { navFactory, viewYamlComponent } from '@console/internal/components/utils';
import TaskRunDetails from './TaskRunDetails';
import { usePipelinesBreadcrumbsFor } from '../pipelines/hooks';

const TaskRunDetailsPage: React.FC<DetailsPageProps> = (props) => (
<DetailsPage
{...props}
pages={[navFactory.details(TaskRunDetails), navFactory.editYaml(viewYamlComponent)]}
/>
);
const TaskRunDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'tasks');

return (
<DetailsPage
{...props}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(TaskRunDetails), navFactory.editYaml(viewYamlComponent)]}
/>
);
};
export default TaskRunDetailsPage;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import * as React from 'react';
import { DetailsPageProps, DetailsPage } from '@console/internal/components/factory';
import { navFactory, Kebab } from '@console/internal/components/utils';
import { DetailsForKind } from '@console/internal/components/default-resource';
import { usePipelinesBreadcrumbsFor } from '../pipelines/hooks';

const TaskDetailsPage: React.FC<DetailsPageProps> = (props) => {
const { namespace, kindObj, match, kind } = props;
const breadcrumbsFor = usePipelinesBreadcrumbsFor(kindObj, match, namespace, 'tasks');

return (
<DetailsPage
{...props}
menuActions={Kebab.factory.common}
breadcrumbsFor={() => breadcrumbsFor}
pages={[navFactory.details(DetailsForKind(kind)), navFactory.editYaml()]}
/>
);
};

export default TaskDetailsPage;
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import * as React from 'react';
import { match as Rmatch } from 'react-router-dom';
import MultiTabListPage from '../multi-tab-list/MultiTabListPage';
import MultiTabListPage from '../../multi-tab-list/MultiTabListPage';
import { referenceForModel } from '@console/internal/module/k8s';
import { TaskModel, ClusterTaskModel, TaskRunModel } from '../../models';
import { TaskModel, ClusterTaskModel, TaskRunModel } from '../../../models';
import { Page } from '@console/internal/components/utils';
import { TechPreviewBadge } from '@console/shared';
import { DefaultPage } from '@console/internal/components/default-resource';
import TaskRunsListPage from '../taskruns/list-page/TaskRunsListPage';
import { MenuActions } from '../multi-tab-list/multi-tab-list-page-types';
import TaskRunsListPage from '../../taskruns/list-page/TaskRunsListPage';
import { MenuActions } from '../../multi-tab-list/multi-tab-list-page-types';

interface TasksListsPageProps {
match: Rmatch<any>;
Expand Down
2 changes: 1 addition & 1 deletion frontend/packages/dev-console/src/models/pipelines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export const ConditionModel: K8sKind = {
id: 'condition',
labelPlural: 'Conditions',
crd: true,
badge: BadgeType.DEV,
badge: BadgeType.TECH,
color,
};

Expand Down

0 comments on commit 45af4aa

Please sign in to comment.