prometheus/web/ui/mantine-ui/src/state/targetsPageSlice.ts
Julius Volz 70221fc4a0 Build initial targets page
Signed-off-by: Julius Volz <julius.volz@gmail.com>
2024-04-03 14:43:03 +02:00

51 lines
1.2 KiB
TypeScript

import { PayloadAction, createSlice } from "@reduxjs/toolkit";
import { initializeFromLocalStorage } from "./initializeFromLocalStorage";
export const localStorageKeyCollapsedPools = "targetsPage.collapsedPools";
export const localStorageKeyTargetFilters = "targetsPage.filters";
interface TargetFilters {
scrapePool: string | null;
health: string[];
}
interface TargetsPage {
filters: TargetFilters;
collapsedPools: string[];
}
const initialState: TargetsPage = {
filters: initializeFromLocalStorage<TargetFilters>(
localStorageKeyTargetFilters,
{
scrapePool: null,
health: [],
}
),
collapsedPools: initializeFromLocalStorage<string[]>(
localStorageKeyCollapsedPools,
[]
),
};
export const targetsPageSlice = createSlice({
name: "targetsPage",
initialState,
reducers: {
updateTargetFilters: (
state,
{ payload }: PayloadAction<Partial<TargetFilters>>
) => {
Object.assign(state.filters, payload);
},
setCollapsedPools: (state, { payload }: PayloadAction<string[]>) => {
state.collapsedPools = payload;
},
},
});
export const { updateTargetFilters, setCollapsedPools } =
targetsPageSlice.actions;
export default targetsPageSlice.reducer;