1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import { createSlice, PayloadAction } from '@reduxjs/toolkit';
- import { NavModelItem } from '@grafana/data';
- import config from 'app/core/config';
- export const initialState: NavModelItem[] = config.bootData?.navTree ?? [];
- const navTreeSlice = createSlice({
- name: 'navBarTree',
- initialState,
- reducers: {
- setStarred: (state, action: PayloadAction<{ id: string; title: string; url: string; isStarred: boolean }>) => {
- const starredItems = state.find((navItem) => navItem.id === 'starred');
- const { id, title, url, isStarred } = action.payload;
- if (isStarred) {
- const newStarredItem: NavModelItem = {
- id,
- text: title,
- url,
- };
- starredItems?.children?.push(newStarredItem);
- starredItems?.children?.sort((a, b) => a.text.localeCompare(b.text));
- } else {
- const index = starredItems?.children?.findIndex((item) => item.id === id) ?? -1;
- if (index > -1) {
- starredItems?.children?.splice(index, 1);
- }
- }
- },
- updateDashboardName: (state, action: PayloadAction<{ id: string; title: string; url: string }>) => {
- const { id, title, url } = action.payload;
- const starredItems = state.find((navItem) => navItem.id === 'starred');
- const navItem = starredItems?.children?.find((navItem) => navItem.id === id);
- if (navItem) {
- navItem.text = title;
- navItem.url = url;
- starredItems?.children?.sort((a, b) => a.text.localeCompare(b.text));
- }
- },
- },
- });
- export const { setStarred, updateDashboardName } = navTreeSlice.actions;
- export const navTreeReducer = navTreeSlice.reducer;
|