mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-21 13:47:39 +02:00
Use new useConditionallyHiddenColumns hook (#2695)
https://linear.app/unleash/issue/2-515/adapt-tables-to-use-the-new-useconditionallyhiddencolumns-hook Uses the new `useConditionallyHiddenColumns` hook, like mentioned here: https://github.com/Unleash/unleash/pull/2691 Also includes small fixes for things I caught along the way. See comments below.
This commit is contained in:
parent
e437b61753
commit
1d1219a055
@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
Table,
|
Table,
|
||||||
SortableTableHeader,
|
SortableTableHeader,
|
||||||
@ -28,6 +28,7 @@ import { HighlightCell } from 'component/common/Table/cells/HighlightCell/Highli
|
|||||||
import theme from 'themes/theme';
|
import theme from 'themes/theme';
|
||||||
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
||||||
import { Search } from 'component/common/Search/Search';
|
import { Search } from 'component/common/Search/Search';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
const ROOTROLE = 'root';
|
const ROOTROLE = 'root';
|
||||||
const BUILTIN_ROLE_TYPE = 'project';
|
const BUILTIN_ROLE_TYPE = 'project';
|
||||||
@ -174,13 +175,16 @@ const ProjectRoleList = () => {
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isExtraSmallScreen) {
|
{
|
||||||
hiddenColumns.push('Icon');
|
condition: isExtraSmallScreen,
|
||||||
}
|
columns: ['Icon'],
|
||||||
setHiddenColumns(hiddenColumns);
|
},
|
||||||
}, [setHiddenColumns, isExtraSmallScreen]);
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
let count =
|
let count =
|
||||||
data.length < rows.length
|
data.length < rows.length
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useMemo, useState } from 'react';
|
import React, { useMemo, useState } from 'react';
|
||||||
import { TablePlaceholder, VirtualizedTable } from 'component/common/Table';
|
import { TablePlaceholder, VirtualizedTable } from 'component/common/Table';
|
||||||
import ChangePassword from './ChangePassword/ChangePassword';
|
import ChangePassword from './ChangePassword/ChangePassword';
|
||||||
import DeleteUser from './DeleteUser/DeleteUser';
|
import DeleteUser from './DeleteUser/DeleteUser';
|
||||||
@ -32,6 +32,7 @@ import { TimeAgoCell } from 'component/common/Table/cells/TimeAgoCell/TimeAgoCel
|
|||||||
import { UsersActionsCell } from './UsersActionsCell/UsersActionsCell';
|
import { UsersActionsCell } from './UsersActionsCell/UsersActionsCell';
|
||||||
import { Search } from 'component/common/Search/Search';
|
import { Search } from 'component/common/Search/Search';
|
||||||
import { UserAvatar } from 'component/common/UserAvatar/UserAvatar';
|
import { UserAvatar } from 'component/common/UserAvatar/UserAvatar';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
const UsersList = () => {
|
const UsersList = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@ -216,19 +217,24 @@ const UsersList = () => {
|
|||||||
useFlexLayout
|
useFlexLayout
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (!isBillingUsers || isSmallScreen) {
|
{
|
||||||
hiddenColumns.push('type');
|
condition: !isBillingUsers || isSmallScreen,
|
||||||
}
|
columns: ['type'],
|
||||||
if (isSmallScreen) {
|
},
|
||||||
hiddenColumns.push('createdAt', 'last-login');
|
{
|
||||||
}
|
condition: isExtraSmallScreen,
|
||||||
if (isExtraSmallScreen) {
|
columns: ['imageUrl', 'role'],
|
||||||
hiddenColumns.push('imageUrl', 'role');
|
},
|
||||||
}
|
{
|
||||||
setHiddenColumns(hiddenColumns);
|
condition: isSmallScreen,
|
||||||
}, [setHiddenColumns, isExtraSmallScreen, isSmallScreen, isBillingUsers]);
|
columns: ['createdAt', 'last-login'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageContent
|
<PageContent
|
||||||
|
@ -26,6 +26,7 @@ import { FeatureArchivedCell } from './FeatureArchivedCell/FeatureArchivedCell';
|
|||||||
import { useSearchParams } from 'react-router-dom';
|
import { useSearchParams } from 'react-router-dom';
|
||||||
import { ArchivedFeatureDeleteConfirm } from './ArchivedFeatureActionCell/ArchivedFeatureDeleteConfirm/ArchivedFeatureDeleteConfirm';
|
import { ArchivedFeatureDeleteConfirm } from './ArchivedFeatureActionCell/ArchivedFeatureDeleteConfirm/ArchivedFeatureDeleteConfirm';
|
||||||
import { IFeatureToggle } from 'interfaces/featureToggle';
|
import { IFeatureToggle } from 'interfaces/featureToggle';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
export interface IFeaturesArchiveTableProps {
|
export interface IFeaturesArchiveTableProps {
|
||||||
archivedFeatures: FeatureSchema[];
|
archivedFeatures: FeatureSchema[];
|
||||||
@ -84,7 +85,6 @@ export const ArchiveTable = ({
|
|||||||
const columns = useMemo(
|
const columns = useMemo(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
id: 'Seen',
|
|
||||||
Header: 'Seen',
|
Header: 'Seen',
|
||||||
width: 85,
|
width: 85,
|
||||||
canSort: true,
|
canSort: true,
|
||||||
@ -174,6 +174,8 @@ export const ArchiveTable = ({
|
|||||||
// Always hidden -- for search
|
// Always hidden -- for search
|
||||||
{
|
{
|
||||||
accessor: 'description',
|
accessor: 'description',
|
||||||
|
header: 'Description',
|
||||||
|
searchable: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
//eslint-disable-next-line
|
//eslint-disable-next-line
|
||||||
@ -222,16 +224,20 @@ export const ArchiveTable = ({
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = ['description'];
|
[
|
||||||
if (isMediumScreen) {
|
{
|
||||||
hiddenColumns.push('lastSeenAt', 'status');
|
condition: isSmallScreen,
|
||||||
}
|
columns: ['type', 'createdAt'],
|
||||||
if (isSmallScreen) {
|
},
|
||||||
hiddenColumns.push('type', 'createdAt');
|
{
|
||||||
}
|
condition: isMediumScreen,
|
||||||
setHiddenColumns(hiddenColumns);
|
columns: ['lastSeenAt', 'stale'],
|
||||||
}, [setHiddenColumns, isSmallScreen, isMediumScreen]);
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (loading) {
|
if (loading) {
|
||||||
|
@ -25,6 +25,7 @@ import { ChangeRequestTitleCell } from './ChangeRequestTitleCell/ChangeRequestTi
|
|||||||
import { TableBody, TableRow } from '../../../common/Table';
|
import { TableBody, TableRow } from '../../../common/Table';
|
||||||
import { useStyles } from './ChangeRequestsTabs.styles';
|
import { useStyles } from './ChangeRequestsTabs.styles';
|
||||||
import { createLocalStorage } from '../../../../utils/createLocalStorage';
|
import { createLocalStorage } from '../../../../utils/createLocalStorage';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
export interface IChangeRequestTableProps {
|
export interface IChangeRequestTableProps {
|
||||||
changeRequests: any[];
|
changeRequests: any[];
|
||||||
@ -172,13 +173,16 @@ export const ChangeRequestsTabs = ({
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [''];
|
[
|
||||||
if (isSmallScreen) {
|
{
|
||||||
hiddenColumns.push('createdBy', 'updatedAt');
|
condition: isSmallScreen,
|
||||||
}
|
columns: ['createdBy'],
|
||||||
setHiddenColumns(hiddenColumns);
|
},
|
||||||
}, [setHiddenColumns, isSmallScreen]);
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (loading) {
|
if (loading) {
|
||||||
|
@ -26,6 +26,7 @@ import { FavoriteIconCell } from 'component/common/Table/cells/FavoriteIconCell/
|
|||||||
import { FavoriteIconHeader } from 'component/common/Table/FavoriteIconHeader/FavoriteIconHeader';
|
import { FavoriteIconHeader } from 'component/common/Table/FavoriteIconHeader/FavoriteIconHeader';
|
||||||
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||||
import { useGlobalLocalStorage } from 'hooks/useGlobalLocalStorage';
|
import { useGlobalLocalStorage } from 'hooks/useGlobalLocalStorage';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
export const featuresPlaceholder: FeatureSchema[] = Array(15).fill({
|
export const featuresPlaceholder: FeatureSchema[] = Array(15).fill({
|
||||||
name: 'Name of the feature',
|
name: 'Name of the feature',
|
||||||
@ -174,6 +175,8 @@ export const FeatureToggleListTable: VFC = () => {
|
|||||||
// Always hidden -- for search
|
// Always hidden -- for search
|
||||||
{
|
{
|
||||||
accessor: 'description',
|
accessor: 'description',
|
||||||
|
Header: 'Description',
|
||||||
|
searchable: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[isFavoritesPinned, uiConfig?.flags?.favorites]
|
[isFavoritesPinned, uiConfig?.flags?.favorites]
|
||||||
@ -213,19 +216,24 @@ export const FeatureToggleListTable: VFC = () => {
|
|||||||
useFlexLayout
|
useFlexLayout
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = ['description'];
|
[
|
||||||
if (!features.some(({ tags }) => tags?.length)) {
|
{
|
||||||
hiddenColumns.push('tags');
|
condition: !features.some(({ tags }) => tags?.length),
|
||||||
}
|
columns: ['tags'],
|
||||||
if (isMediumScreen) {
|
},
|
||||||
hiddenColumns.push('lastSeenAt', 'stale');
|
{
|
||||||
}
|
condition: isSmallScreen,
|
||||||
if (isSmallScreen) {
|
columns: ['type', 'createdAt', 'tags'],
|
||||||
hiddenColumns.push('type', 'createdAt', 'tags');
|
},
|
||||||
}
|
{
|
||||||
setHiddenColumns(hiddenColumns);
|
condition: isMediumScreen,
|
||||||
}, [setHiddenColumns, isSmallScreen, isMediumScreen, features, columns]);
|
columns: ['lastSeenAt', 'stale'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const tableState: PageQueryType = {};
|
const tableState: PageQueryType = {};
|
||||||
|
@ -5,9 +5,10 @@ import { useTable, useGlobalFilter, useSortBy } from 'react-table';
|
|||||||
import { SortableTableHeader, TableCell, Table } from 'component/common/Table';
|
import { SortableTableHeader, TableCell, Table } from 'component/common/Table';
|
||||||
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
||||||
import { Assessment } from '@mui/icons-material';
|
import { Assessment } from '@mui/icons-material';
|
||||||
import { useMemo, useEffect } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
|
import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
|
||||||
import theme from 'themes/theme';
|
import theme from 'themes/theme';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
interface IFeatureMetricsTableProps {
|
interface IFeatureMetricsTableProps {
|
||||||
metrics: IFeatureMetricsRaw[];
|
metrics: IFeatureMetricsRaw[];
|
||||||
@ -41,13 +42,16 @@ export const FeatureMetricsTable = ({
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isMediumScreen) {
|
{
|
||||||
hiddenColumns.push('appName', 'environment');
|
condition: isMediumScreen,
|
||||||
}
|
columns: ['appName', 'environment'],
|
||||||
setHiddenColumns(hiddenColumns);
|
},
|
||||||
}, [setHiddenColumns, isMediumScreen]);
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
COLUMNS
|
||||||
|
);
|
||||||
|
|
||||||
if (metrics.length === 0) {
|
if (metrics.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -13,12 +13,13 @@ import {
|
|||||||
IOverride,
|
IOverride,
|
||||||
IPayload,
|
IPayload,
|
||||||
} from 'interfaces/featureToggle';
|
} from 'interfaces/featureToggle';
|
||||||
import { useEffect, useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useFlexLayout, useSortBy, useTable } from 'react-table';
|
import { useFlexLayout, useSortBy, useTable } from 'react-table';
|
||||||
import { sortTypes } from 'utils/sortTypes';
|
import { sortTypes } from 'utils/sortTypes';
|
||||||
import { PayloadCell } from './PayloadCell/PayloadCell';
|
import { PayloadCell } from './PayloadCell/PayloadCell';
|
||||||
import { OverridesCell } from './OverridesCell/OverridesCell';
|
import { OverridesCell } from './OverridesCell/OverridesCell';
|
||||||
import { VariantsActionCell } from './VariantsActionsCell/VariantsActionsCell';
|
import { VariantsActionCell } from './VariantsActionsCell/VariantsActionsCell';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
const StyledTableContainer = styled('div')(({ theme }) => ({
|
const StyledTableContainer = styled('div')(({ theme }) => ({
|
||||||
margin: theme.spacing(3, 0),
|
margin: theme.spacing(3, 0),
|
||||||
@ -145,16 +146,20 @@ export const EnvironmentVariantsTable = ({
|
|||||||
useFlexLayout
|
useFlexLayout
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isLargeScreen) {
|
{
|
||||||
hiddenColumns.push('weightType');
|
condition: isMediumScreen,
|
||||||
}
|
columns: ['payload', 'overrides'],
|
||||||
if (isMediumScreen) {
|
},
|
||||||
hiddenColumns.push('payload', 'overrides');
|
{
|
||||||
}
|
condition: isLargeScreen,
|
||||||
setHiddenColumns(hiddenColumns);
|
columns: ['weightType'],
|
||||||
}, [setHiddenColumns, isMediumScreen, isLargeScreen]);
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledTableContainer>
|
<StyledTableContainer>
|
||||||
|
@ -34,6 +34,7 @@ import { PayloadOverridesCell } from './PayloadOverridesCell/PayloadOverridesCel
|
|||||||
import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
|
import { TextCell } from 'component/common/Table/cells/TextCell/TextCell';
|
||||||
import theme from 'themes/theme';
|
import theme from 'themes/theme';
|
||||||
import { VariantsActionCell } from './VariantsActionsCell/VariantsActionsCell';
|
import { VariantsActionCell } from './VariantsActionsCell/VariantsActionsCell';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
export const FeatureVariantsList = () => {
|
export const FeatureVariantsList = () => {
|
||||||
const { hasAccess } = useContext(AccessContext);
|
const { hasAccess } = useContext(AccessContext);
|
||||||
@ -206,16 +207,20 @@ export const FeatureVariantsList = () => {
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isLargeScreen) {
|
{
|
||||||
hiddenColumns.push('weightType');
|
condition: isMediumScreen,
|
||||||
}
|
columns: ['data'],
|
||||||
if (isMediumScreen) {
|
},
|
||||||
hiddenColumns.push('data');
|
{
|
||||||
}
|
condition: isLargeScreen,
|
||||||
setHiddenColumns(hiddenColumns);
|
columns: ['weightType'],
|
||||||
}, [setHiddenColumns, isMediumScreen, isLargeScreen]);
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
const setClonedVariants = clonedVariants =>
|
const setClonedVariants = clonedVariants =>
|
||||||
|
@ -26,6 +26,7 @@ import { Box, Typography, useMediaQuery, useTheme } from '@mui/material';
|
|||||||
import useLoading from 'hooks/useLoading';
|
import useLoading from 'hooks/useLoading';
|
||||||
import { VariantCell } from './VariantCell/VariantCell';
|
import { VariantCell } from './VariantCell/VariantCell';
|
||||||
import { FeatureResultInfoPopoverCell } from './FeatureResultInfoPopoverCell/FeatureResultInfoPopoverCell';
|
import { FeatureResultInfoPopoverCell } from './FeatureResultInfoPopoverCell/FeatureResultInfoPopoverCell';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
const defaultSort: SortingRule<string> = { id: 'name' };
|
const defaultSort: SortingRule<string> = { id: 'name' };
|
||||||
const { value, setValue } = createLocalStorage(
|
const { value, setValue } = createLocalStorage(
|
||||||
@ -184,16 +185,20 @@ export const PlaygroundResultsTable = ({
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isSmallScreen) {
|
{
|
||||||
hiddenColumns.push('projectId');
|
condition: isExtraSmallScreen,
|
||||||
}
|
columns: ['variant'],
|
||||||
if (isExtraSmallScreen) {
|
},
|
||||||
hiddenColumns.push('variant');
|
{
|
||||||
}
|
condition: isSmallScreen,
|
||||||
setHiddenColumns(hiddenColumns);
|
columns: ['projectId'],
|
||||||
}, [setHiddenColumns, isExtraSmallScreen, isSmallScreen]);
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
COLUMNS
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (loading) {
|
if (loading) {
|
||||||
|
@ -45,6 +45,7 @@ import { usePinnedFavorites } from 'hooks/usePinnedFavorites';
|
|||||||
import { useFavoriteFeaturesApi } from 'hooks/api/actions/useFavoriteFeaturesApi/useFavoriteFeaturesApi';
|
import { useFavoriteFeaturesApi } from 'hooks/api/actions/useFavoriteFeaturesApi/useFavoriteFeaturesApi';
|
||||||
import { FeatureTagCell } from 'component/common/Table/cells/FeatureTagCell/FeatureTagCell';
|
import { FeatureTagCell } from 'component/common/Table/cells/FeatureTagCell/FeatureTagCell';
|
||||||
import { useGlobalLocalStorage } from 'hooks/useGlobalLocalStorage';
|
import { useGlobalLocalStorage } from 'hooks/useGlobalLocalStorage';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
interface IProjectFeatureTogglesProps {
|
interface IProjectFeatureTogglesProps {
|
||||||
features: IProject['features'];
|
features: IProject['features'];
|
||||||
@ -430,15 +431,16 @@ export const ProjectFeatureToggles = ({
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
if (!features.some(({ tags }) => tags?.length)) {
|
[
|
||||||
setHiddenColumns(hiddenColumns => [...hiddenColumns, 'tags']);
|
{
|
||||||
} else {
|
condition: !features.some(({ tags }) => tags?.length),
|
||||||
setHiddenColumns(hiddenColumns =>
|
columns: ['tags'],
|
||||||
hiddenColumns.filter(column => column !== 'tags')
|
},
|
||||||
);
|
],
|
||||||
}
|
setHiddenColumns,
|
||||||
}, [setHiddenColumns, features]);
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (loading) {
|
if (loading) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useMemo, useEffect } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { IFeatureToggleListItem } from 'interfaces/featureToggle';
|
import { IFeatureToggleListItem } from 'interfaces/featureToggle';
|
||||||
import { TablePlaceholder, VirtualizedTable } from 'component/common/Table';
|
import { TablePlaceholder, VirtualizedTable } from 'component/common/Table';
|
||||||
import { PageContent } from 'component/common/PageContent/PageContent';
|
import { PageContent } from 'component/common/PageContent/PageContent';
|
||||||
@ -23,6 +23,7 @@ import { ReportExpiredCell } from './ReportExpiredCell/ReportExpiredCell';
|
|||||||
import { ReportStatusCell } from './ReportStatusCell/ReportStatusCell';
|
import { ReportStatusCell } from './ReportStatusCell/ReportStatusCell';
|
||||||
import { formatStatus, ReportingStatus } from './ReportStatusCell/formatStatus';
|
import { formatStatus, ReportingStatus } from './ReportStatusCell/formatStatus';
|
||||||
import { formatExpiredAt } from './ReportExpiredCell/formatExpiredAt';
|
import { formatExpiredAt } from './ReportExpiredCell/formatExpiredAt';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
interface IReportTableProps {
|
interface IReportTableProps {
|
||||||
projectId: string;
|
projectId: string;
|
||||||
@ -91,19 +92,24 @@ export const ReportTable = ({ projectId, features }: IReportTableProps) => {
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isMediumScreen) {
|
{
|
||||||
hiddenColumns.push('createdAt');
|
condition: isExtraSmallScreen,
|
||||||
}
|
columns: ['stale'],
|
||||||
if (isSmallScreen) {
|
},
|
||||||
hiddenColumns.push('expiredAt', 'lastSeenAt');
|
{
|
||||||
}
|
condition: isSmallScreen,
|
||||||
if (isExtraSmallScreen) {
|
columns: ['expiredAt', 'lastSeenAt'],
|
||||||
hiddenColumns.push('stale');
|
},
|
||||||
}
|
{
|
||||||
setHiddenColumns(hiddenColumns);
|
condition: isMediumScreen,
|
||||||
}, [setHiddenColumns, isSmallScreen, isMediumScreen, isExtraSmallScreen]);
|
columns: ['createdAt'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
COLUMNS
|
||||||
|
);
|
||||||
|
|
||||||
const title =
|
const title =
|
||||||
rows.length < data.length
|
rows.length < data.length
|
||||||
|
@ -14,7 +14,7 @@ import { SearchHighlightProvider } from 'component/common/Table/SearchHighlightC
|
|||||||
import { useMediaQuery } from '@mui/material';
|
import { useMediaQuery } from '@mui/material';
|
||||||
import { sortTypes } from 'utils/sortTypes';
|
import { sortTypes } from 'utils/sortTypes';
|
||||||
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
|
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
|
||||||
import { useMemo, useEffect, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { SegmentEmpty } from 'component/segments/SegmentEmpty/SegmentEmpty';
|
import { SegmentEmpty } from 'component/segments/SegmentEmpty/SegmentEmpty';
|
||||||
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
import { IconCell } from 'component/common/Table/cells/IconCell/IconCell';
|
||||||
import { DonutLarge } from '@mui/icons-material';
|
import { DonutLarge } from '@mui/icons-material';
|
||||||
@ -24,6 +24,7 @@ import { DateCell } from 'component/common/Table/cells/DateCell/DateCell';
|
|||||||
import theme from 'themes/theme';
|
import theme from 'themes/theme';
|
||||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||||
import { Search } from 'component/common/Search/Search';
|
import { Search } from 'component/common/Search/Search';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
export const SegmentTable = () => {
|
export const SegmentTable = () => {
|
||||||
const { segments, loading } = useSegments();
|
const { segments, loading } = useSegments();
|
||||||
@ -71,13 +72,16 @@ export const SegmentTable = () => {
|
|||||||
useSortBy
|
useSortBy
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = ['description'];
|
[
|
||||||
if (isSmallScreen) {
|
{
|
||||||
hiddenColumns.push('createdAt', 'createdBy');
|
condition: isSmallScreen,
|
||||||
}
|
columns: ['createdAt', 'createdBy'],
|
||||||
setHiddenColumns(hiddenColumns);
|
},
|
||||||
}, [setHiddenColumns, isSmallScreen]);
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
COLUMNS
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageContent
|
<PageContent
|
||||||
|
@ -35,6 +35,7 @@ import { CreatePersonalAPIToken } from './CreatePersonalAPIToken/CreatePersonalA
|
|||||||
import { DeletePersonalAPIToken } from './DeletePersonalAPIToken/DeletePersonalAPIToken';
|
import { DeletePersonalAPIToken } from './DeletePersonalAPIToken/DeletePersonalAPIToken';
|
||||||
import { PersonalAPITokenDialog } from './PersonalAPITokenDialog/PersonalAPITokenDialog';
|
import { PersonalAPITokenDialog } from './PersonalAPITokenDialog/PersonalAPITokenDialog';
|
||||||
import { TimeAgoCell } from 'component/common/Table/cells/TimeAgoCell/TimeAgoCell';
|
import { TimeAgoCell } from 'component/common/Table/cells/TimeAgoCell/TimeAgoCell';
|
||||||
|
import { useConditionallyHiddenColumns } from 'hooks/useConditionallyHiddenColumns';
|
||||||
|
|
||||||
const StyledAlert = styled(Alert)(({ theme }) => ({
|
const StyledAlert = styled(Alert)(({ theme }) => ({
|
||||||
marginBottom: theme.spacing(3),
|
marginBottom: theme.spacing(3),
|
||||||
@ -199,16 +200,20 @@ export const PersonalAPITokensTab = () => {
|
|||||||
useFlexLayout
|
useFlexLayout
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useConditionallyHiddenColumns(
|
||||||
const hiddenColumns = [];
|
[
|
||||||
if (isSmallScreen) {
|
{
|
||||||
hiddenColumns.push('createdAt');
|
condition: isExtraSmallScreen,
|
||||||
}
|
columns: ['expiresAt'],
|
||||||
if (isExtraSmallScreen) {
|
},
|
||||||
hiddenColumns.push('expiresAt');
|
{
|
||||||
}
|
condition: isSmallScreen,
|
||||||
setHiddenColumns(hiddenColumns);
|
columns: ['createdAt'],
|
||||||
}, [setHiddenColumns, isSmallScreen, isExtraSmallScreen]);
|
},
|
||||||
|
],
|
||||||
|
setHiddenColumns,
|
||||||
|
columns
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const tableState: PageQueryType = {};
|
const tableState: PageQueryType = {};
|
||||||
|
@ -7,19 +7,27 @@ interface IConditionallyHiddenColumns {
|
|||||||
|
|
||||||
export const useConditionallyHiddenColumns = (
|
export const useConditionallyHiddenColumns = (
|
||||||
conditionallyHiddenColumns: IConditionallyHiddenColumns[],
|
conditionallyHiddenColumns: IConditionallyHiddenColumns[],
|
||||||
setHiddenColumns: (param: string[]) => void,
|
setHiddenColumns: (
|
||||||
|
columns: string[] | ((columns: string[]) => string[])
|
||||||
|
) => void,
|
||||||
columnsDefinition: unknown[]
|
columnsDefinition: unknown[]
|
||||||
) => {
|
) => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const hiddenColumnsSet = new Set<string>();
|
const columnsToHide = conditionallyHiddenColumns
|
||||||
|
|
||||||
conditionallyHiddenColumns
|
|
||||||
.filter(({ condition }) => condition)
|
.filter(({ condition }) => condition)
|
||||||
.forEach(({ columns }) =>
|
.flatMap(({ columns }) => columns);
|
||||||
columns.forEach(column => hiddenColumnsSet.add(column))
|
|
||||||
);
|
|
||||||
|
|
||||||
setHiddenColumns([...hiddenColumnsSet]);
|
const columnsToShow = conditionallyHiddenColumns
|
||||||
|
.flatMap(({ columns }) => columns)
|
||||||
|
.filter(column => !columnsToHide.includes(column));
|
||||||
|
|
||||||
|
setHiddenColumns(columns => [
|
||||||
|
...new Set(
|
||||||
|
[...columns, ...columnsToHide].filter(
|
||||||
|
column => !columnsToShow.includes(column)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
]);
|
||||||
}, [
|
}, [
|
||||||
...conditionallyHiddenColumns.map(({ condition }) => condition),
|
...conditionallyHiddenColumns.map(({ condition }) => condition),
|
||||||
setHiddenColumns,
|
setHiddenColumns,
|
||||||
|
Loading…
Reference in New Issue
Block a user