@@ -47,15 +41,11 @@ function PluginListItemComponent({ plugin, pathName, displayMode = PluginListDis
);
}
-const PluginListItemSkeleton: SkeletonComponent
> = ({
- displayMode = PluginListDisplayMode.Grid,
- rootProps,
-}) => {
+const PluginListItemSkeleton: SkeletonComponent = ({ rootProps }) => {
const styles = useStyles2(getStyles);
- const isList = displayMode === PluginListDisplayMode.List;
return (
-
+
{
background: theme.colors.emphasize(theme.colors.background.secondary, 0.03),
},
}),
- list: css({
- rowGap: 0,
-
- '> img': {
- alignSelf: 'start',
- },
-
- '> .plugin-content': {
- minHeight: 0,
- gridArea: '2 / 2 / 4 / 3',
-
- '> p': {
- margin: theme.spacing(0, 0, 0.5, 0),
- },
- },
-
- '> .plugin-name': {
- alignSelf: 'center',
- gridArea: '1 / 2 / 2 / 3',
- },
- }),
pluginType: css({
gridArea: '1 / 3 / 2 / 4',
color: theme.colors.text.secondary,
diff --git a/public/app/features/plugins/admin/pages/Browse.test.tsx b/public/app/features/plugins/admin/pages/Browse.test.tsx
index 3cb936fb7c4..48ac0897243 100644
--- a/public/app/features/plugins/admin/pages/Browse.test.tsx
+++ b/public/app/features/plugins/admin/pages/Browse.test.tsx
@@ -1,5 +1,4 @@
import { render, RenderResult, waitFor, within } from '@testing-library/react';
-import userEvent from '@testing-library/user-event';
import { TestProvider } from 'test/helpers/TestProvider';
import { PluginType, escapeStringForRegex } from '@grafana/data';
@@ -406,39 +405,4 @@ describe('Browse list of plugins', () => {
await waitFor(() => expect(getByRole('radio', { name: 'Installed' })).toBeDisabled());
});
});
-
- it('should be possible to switch between display modes', async () => {
- const { findByTestId, getByRole, getByTitle, queryByText } = renderBrowse('/plugins?filterBy=all', [
- getCatalogPluginMock({ id: 'plugin-1', name: 'Plugin 1' }),
- getCatalogPluginMock({ id: 'plugin-2', name: 'Plugin 2' }),
- getCatalogPluginMock({ id: 'plugin-3', name: 'Plugin 3' }),
- ]);
-
- await findByTestId('plugin-list');
-
- const listOptionTitle = 'Display plugins in list';
- const gridOptionTitle = 'Display plugins in a grid layout';
- const listOption = getByRole('radio', { name: listOptionTitle });
- const listOptionLabel = getByTitle(listOptionTitle);
- const gridOption = getByRole('radio', { name: gridOptionTitle });
- const gridOptionLabel = getByTitle(gridOptionTitle);
-
- // All options should be visible
- expect(listOptionLabel).toBeVisible();
- expect(gridOptionLabel).toBeVisible();
-
- // The default display mode should be "grid"
- expect(gridOption).toBeChecked();
- expect(listOption).not.toBeChecked();
-
- // Switch to "list" view
- await userEvent.click(listOption);
- expect(gridOption).not.toBeChecked();
- expect(listOption).toBeChecked();
-
- // All plugins are still visible
- expect(queryByText('Plugin 1')).toBeInTheDocument();
- expect(queryByText('Plugin 2')).toBeInTheDocument();
- expect(queryByText('Plugin 3')).toBeInTheDocument();
- });
});
diff --git a/public/app/features/plugins/admin/pages/Browse.tsx b/public/app/features/plugins/admin/pages/Browse.tsx
index 0e60bb60003..c72d702ab73 100644
--- a/public/app/features/plugins/admin/pages/Browse.tsx
+++ b/public/app/features/plugins/admin/pages/Browse.tsx
@@ -17,14 +17,12 @@ import { RoadmapLinks } from '../components/RoadmapLinks';
import { SearchField } from '../components/SearchField';
import { Sorters } from '../helpers';
import { useHistory } from '../hooks/useHistory';
-import { useGetAll, useIsRemotePluginsAvailable, useDisplayMode } from '../state/hooks';
-import { PluginListDisplayMode } from '../types';
+import { useGetAll, useIsRemotePluginsAvailable } from '../state/hooks';
export default function Browse({ route }: GrafanaRouteComponentProps): ReactElement | null {
const location = useLocation();
const locationSearch = locationSearchToObject(location.search);
const navModel = useSelector((state) => getNavModel(state.navIndex, 'plugins'));
- const { displayMode, setDisplayMode } = useDisplayMode();
const styles = useStyles2(getStyles);
const history = useHistory();
const remotePluginsAvailable = useIsRemotePluginsAvailable();
@@ -143,27 +141,10 @@ export default function Browse({ route }: GrafanaRouteComponentProps): ReactElem
]}
/>
-
- {/* Display mode */}
-
-
- className={styles.displayAs}
- value={displayMode}
- onChange={setDisplayMode}
- options={[
- {
- value: PluginListDisplayMode.Grid,
- icon: 'table',
- description: 'Display plugins in a grid layout',
- },
- { value: PluginListDisplayMode.List, icon: 'list-ul', description: 'Display plugins in list' },
- ]}
- />
-
diff --git a/public/app/features/plugins/admin/state/hooks.ts b/public/app/features/plugins/admin/state/hooks.ts
index c50d9548348..a1cd84b3e16 100644
--- a/public/app/features/plugins/admin/state/hooks.ts
+++ b/public/app/features/plugins/admin/state/hooks.ts
@@ -4,17 +4,15 @@ import { PluginError, PluginType } from '@grafana/data';
import { useDispatch, useSelector } from 'app/types';
import { sortPlugins, Sorters } from '../helpers';
-import { CatalogPlugin, PluginListDisplayMode } from '../types';
+import { CatalogPlugin } from '../types';
import { fetchAll, fetchDetails, fetchRemotePlugins, install, uninstall, fetchAllLocal, unsetInstall } from './actions';
-import { setDisplayMode } from './reducer';
import {
selectPlugins,
selectById,
selectIsRequestPending,
selectRequestError,
selectIsRequestNotFetched,
- selectDisplayMode,
selectPluginErrors,
type PluginFilters,
} from './selectors';
@@ -150,13 +148,3 @@ export const useFetchDetailsLazy = () => {
return (id: string) => dispatch(fetchDetails(id));
};
-
-export const useDisplayMode = () => {
- const dispatch = useDispatch();
- const displayMode = useSelector(selectDisplayMode);
-
- return {
- displayMode,
- setDisplayMode: (v: PluginListDisplayMode) => dispatch(setDisplayMode(v)),
- };
-};
diff --git a/public/app/features/plugins/admin/state/reducer.ts b/public/app/features/plugins/admin/state/reducer.ts
index 2891856ea4a..f2414a31405 100644
--- a/public/app/features/plugins/admin/state/reducer.ts
+++ b/public/app/features/plugins/admin/state/reducer.ts
@@ -3,7 +3,7 @@ import { createSlice, createEntityAdapter, Reducer, AnyAction, PayloadAction } f
import { PanelPlugin } from '@grafana/data';
import { STATE_PREFIX } from '../constants';
-import { CatalogPlugin, PluginListDisplayMode, ReducerState, RequestStatus } from '../types';
+import { CatalogPlugin, ReducerState, RequestStatus } from '../types';
import {
fetchDetails,
@@ -33,9 +33,7 @@ const getOriginalActionType = (type: string) => {
export const initialState: ReducerState = {
items: pluginsAdapter.getInitialState(),
requests: {},
- settings: {
- displayMode: PluginListDisplayMode.Grid,
- },
+
// Backwards compatibility
// (we need to have the following fields in the store as well to be backwards compatible with other parts of Grafana)
// TODO
@@ -51,11 +49,7 @@ export const initialState: ReducerState = {
const slice = createSlice({
name: 'plugins',
initialState,
- reducers: {
- setDisplayMode(state, action: PayloadAction) {
- state.settings.displayMode = action.payload;
- },
- },
+ reducers: {},
extraReducers: (builder) =>
builder
.addCase(addPlugins, (state, action: PayloadAction) => {
@@ -113,5 +107,4 @@ const slice = createSlice({
}),
});
-export const { setDisplayMode } = slice.actions;
export const reducer: Reducer = slice.reducer;
diff --git a/public/app/features/plugins/admin/state/selectors.ts b/public/app/features/plugins/admin/state/selectors.ts
index db0de51035c..8ffb65ce52c 100644
--- a/public/app/features/plugins/admin/state/selectors.ts
+++ b/public/app/features/plugins/admin/state/selectors.ts
@@ -12,8 +12,6 @@ export const selectRoot = (state: PluginCatalogStoreState) => state.plugins;
export const selectItems = createSelector(selectRoot, ({ items }) => items);
-export const selectDisplayMode = createSelector(selectRoot, ({ settings }) => settings.displayMode);
-
export const { selectAll, selectById } = pluginsAdapter.getSelectors(selectItems);
export type PluginFilters = {
diff --git a/public/app/features/plugins/admin/types.ts b/public/app/features/plugins/admin/types.ts
index 0991c0921bb..b8f8e3b1669 100644
--- a/public/app/features/plugins/admin/types.ts
+++ b/public/app/features/plugins/admin/types.ts
@@ -13,11 +13,6 @@ import { StoreState, PluginsState } from 'app/types';
export type PluginTypeCode = 'app' | 'panel' | 'datasource';
-export enum PluginListDisplayMode {
- Grid = 'grid',
- List = 'list',
-}
-
export enum PluginAdminRoutes {
Home = 'plugins-home',
Browse = 'plugins-browse',
@@ -296,9 +291,6 @@ export type PluginDetailsTab = {
export type ReducerState = PluginsState & {
items: EntityState;
requests: Record;
- settings: {
- displayMode: PluginListDisplayMode;
- };
};
// TODO