Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-4.7] Bug 2052859: override normal namespace hiding for pods view in node details #11027

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -30,7 +30,11 @@ const NodeDetailsPage: React.FC<React.ComponentProps<typeof DetailsPage>> = (pro
},
editYaml(),
pods(({ obj }) => (
<PodsPage showTitle={false} fieldSelector={`spec.nodeName=${obj.metadata.name}`} />
<PodsPage
showTitle={false}
fieldSelector={`spec.nodeName=${obj.metadata.name}`}
customData={{ showNamespaceOverride: true }}
/>
)),
events(ResourceEventStream),
...(!_.some(
Expand Down
Expand Up @@ -425,6 +425,7 @@ const NodesTable: React.FC<NodesTableProps &
activeColumns={selectedColumns}
columnManagementID={columnManagementID}
aria-label={t('nodes~Nodes')}
showNamespaceOverride
Header={NodeTableHeader}
Row={Row}
virtualize
Expand Down
37 changes: 31 additions & 6 deletions frontend/public/components/factory/table.tsx
Expand Up @@ -305,9 +305,15 @@ const MAX_COL_MD = 4;
const MAX_COL_LG = 6;
const MAX_COL_XL = 8;

const isColumnVisible = (columnID: string, columns: Set<string> = new Set()) => {
const isColumnVisible = (
columnID: string,
columns: Set<string> = new Set(),
showNamespaceOverride,
) => {
const showNamespace =
columnID !== 'namespace' || UIActions.getActiveNamespace() === ALL_NAMESPACES_KEY;
columnID !== 'namespace' ||
UIActions.getActiveNamespace() === ALL_NAMESPACES_KEY ||
showNamespaceOverride;
if (_.isEmpty(columns) && showNamespace) {
return true;
}
Expand Down Expand Up @@ -338,9 +344,10 @@ export const TableData: React.SFC<TableDataProps> = ({
className,
columnID,
columns,
showNamespaceOverride,
...props
}) => {
return isColumnVisible(columnID, columns) ? (
return isColumnVisible(columnID, columns, showNamespaceOverride) ? (
<td {...props} className={className} role="gridcell" />
) : null;
};
Expand All @@ -350,6 +357,7 @@ export type TableDataProps = {
columnID?: string;
columns?: Set<string>;
id?: string;
showNamespaceOverride?: boolean;
};

const TableWrapper: React.SFC<TableWrapperProps> = ({
Expand Down Expand Up @@ -471,6 +479,7 @@ export type TableProps = {
defaultSortFunc?: string;
defaultSortField?: string;
defaultSortOrder?: SortByDirection;
showNamespaceOverride?: boolean;
filters?: { [key: string]: any };
Header: (...args) => any[];
loadError?: string | Object;
Expand Down Expand Up @@ -514,6 +523,7 @@ const getActiveColumns = (
componentProps: ComponentProps,
activeColumns: Set<string>,
columnManagementID: string,
showNamespaceOverride: boolean,
) => {
let columns = Header(componentProps);
if (_.isEmpty(activeColumns)) {
Expand All @@ -526,12 +536,15 @@ const getActiveColumns = (
);
}
if (columnManagementID) {
columns = columns?.filter((col) => isColumnVisible(col.id, activeColumns) || col.title === '');
columns = columns?.filter(
(col) => isColumnVisible(col.id, activeColumns, showNamespaceOverride) || col.title === '',
);
} else {
columns = columns?.filter((col) => activeColumns.has(col.id) || col.title === '');
}

const showNamespace = UIActions.getActiveNamespace() === ALL_NAMESPACES_KEY;
const showNamespace =
UIActions.getActiveNamespace() === ALL_NAMESPACES_KEY || showNamespaceOverride;
if (!showNamespace) {
columns = columns.filter((column) => column.id !== 'namespace');
}
Expand All @@ -551,6 +564,7 @@ export const Table = connect<
static propTypes = {
customData: PropTypes.any,
data: PropTypes.array,
showNamespaceOverride: PropTypes.bool,
unfilteredData: PropTypes.array,
NoDataEmptyMsg: PropTypes.func,
EmptyMsg: PropTypes.func,
Expand Down Expand Up @@ -597,6 +611,7 @@ export const Table = connect<
componentProps,
this.props.activeColumns,
this.props.columnManagementID,
this.props.showNamespaceOverride,
);
const { currentSortField, currentSortFunc, currentSortOrder } = props;

Expand Down Expand Up @@ -638,6 +653,7 @@ export const Table = connect<
componentProps,
this.props.activeColumns,
this.props.columnManagementID,
this.props.showNamespaceOverride,
);
const sp = new URLSearchParams(window.location.search);
const columnIndex = _.findIndex(columns, { title: sp.get('sortBy') });
Expand Down Expand Up @@ -686,6 +702,7 @@ export const Table = connect<
componentProps,
this.props.activeColumns,
this.props.columnManagementID,
this.props.showNamespaceOverride,
);
const sortColumn = columns[index - this._columnShift];
this._applySort(sortColumn.sortField, sortColumn.sortFunc, direction, sortColumn.title);
Expand Down Expand Up @@ -714,6 +731,7 @@ export const Table = connect<
gridBreakPoint = TableGridBreakpoint.none,
Header,
activeColumns,
showNamespaceOverride,
} = this.props;
const { sortBy } = this.state;
const componentProps: any = _.pick(this.props, [
Expand All @@ -723,7 +741,13 @@ export const Table = connect<
'match',
'kindObj',
]);
const columns = getActiveColumns(Header, componentProps, activeColumns, columnManagementID);
const columns = getActiveColumns(
Header,
componentProps,
activeColumns,
columnManagementID,
showNamespaceOverride,
);
const ariaRowCount = componentProps.data && componentProps.data.length;
const scrollNode = typeof scrollElement === 'function' ? scrollElement() : scrollElement;
const renderVirtualizedTable = (scrollContainer) => (
Expand Down Expand Up @@ -803,6 +827,7 @@ export type TableInnerProps = {
data?: any[];
defaultSortField?: string;
defaultSortFunc?: string;
showNamespaceOverride?: boolean;
activeColumns?: Set<string>;
unfilteredData?: any[];
NoDataEmptyMsg?: React.ComponentType<{}>;
Expand Down
Expand Up @@ -118,7 +118,8 @@ export const ColumnManagementModal: React.FC<ColumnManagementModalProps &
title={t('modal~You can select up to {{MAX_VIEW_COLS}} columns', { MAX_VIEW_COLS })}
variant="info"
>
{t('modal~The namespace column is only shown when in "All projects"')}
{!columnLayout?.showNamespaceOverride &&
t('modal~The namespace column is only shown when in "All projects"')}
</Alert>
</div>
<div className="row co-m-form-row">
Expand Down Expand Up @@ -206,6 +207,7 @@ export type ColumnLayout = {
id: string;
columns: ManagedColumn[];
selectedColumns: Set<string>;
showNamespaceOverride?: boolean;
type: string;
};

Expand Down
11 changes: 9 additions & 2 deletions frontend/public/components/pod.tsx
Expand Up @@ -311,6 +311,7 @@ const PodTableRow = connect<PodTableRowPropsFromState, null, PodTableRowProps>(p
style,
metrics,
showNodes,
showNamespaceOverride,
}: PodTableRowProps & PodTableRowPropsFromState) => {
const [tableColumns, , loaded] = useUserSettingsCompatibility(
COLUMN_MANAGEMENT_CONFIGMAP_KEY,
Expand All @@ -337,6 +338,7 @@ const PodTableRow = connect<PodTableRowPropsFromState, null, PodTableRowProps>(p
className={classNames(podColumnInfo.namespace.classes, 'co-break-word')}
columns={columns}
columnID={podColumnInfo.namespace.id}
showNamespaceOverride={showNamespaceOverride}
>
<ResourceLink kind="Namespace" name={namespace} />
</TableData>
Expand Down Expand Up @@ -791,14 +793,15 @@ export const PodsDetailsPage: React.FC<PodDetailsPageProps> = (props) => {
};
PodsDetailsPage.displayName = 'PodsDetailsPage';

const getRow = (showNodes) => {
const getRow = (showNodes, showNamespaceOverride) => {
return (rowArgs: RowFunctionArgs<PodKind>) => (
<PodTableRow
obj={rowArgs.obj}
index={rowArgs.index}
rowKey={rowArgs.key}
style={rowArgs.style}
showNodes={showNodes}
showNamespaceOverride={showNamespaceOverride}
/>
);
};
Expand All @@ -813,6 +816,7 @@ export const PodList: React.FC<PodListProps> = withUserSettingsCompatibility<
true,
)(({ userSettingState: tableColumns, ...props }) => {
const showNodes = props?.customData?.showNodes;
const showNamespaceOverride = props?.customData?.showNamespaceOverride;
const { t } = useTranslation();
const selectedColumns: Set<string> =
tableColumns?.[columnManagementID]?.length > 0
Expand All @@ -823,9 +827,10 @@ export const PodList: React.FC<PodListProps> = withUserSettingsCompatibility<
{...props}
activeColumns={selectedColumns}
columnManagementID={columnManagementID}
showNamespaceOverride={showNamespaceOverride}
aria-label={t('public~Pods')}
Header={getHeader(showNodes)}
Row={getRow(showNodes)}
Row={getRow(showNodes, showNamespaceOverride)}
virtualize
/>
);
Expand Down Expand Up @@ -920,6 +925,7 @@ export const PodsPage = connect<{}, PodPagePropsFromDispatch, PodPageProps>(
tableColumns?.[columnManagementID]?.length > 0
? new Set(tableColumns[columnManagementID])
: null,
showNamespaceOverride: props?.customData?.showNamespaceOverride,
type: t('public~Pod'),
}}
/>
Expand Down Expand Up @@ -977,6 +983,7 @@ type PodTableRowProps = {
rowKey: string;
style: object;
showNodes?: boolean;
showNamespaceOverride?: boolean;
};

type PodTableRowPropsFromState = {
Expand Down