tabs.ts 779 Bytes
import { createSlice, type PayloadAction } from '@reduxjs/toolkit'

export interface TabItem {
  key: string
  title: string
  path: string
}

interface TabsState {
  items: TabItem[]
}

const initialState: TabsState = {
  items: [],
}

const slice = createSlice({
  name: 'tabs',
  initialState,
  reducers: {
    openTab(state, action: PayloadAction<TabItem>) {
      const exists = state.items.find(t => t.key === action.payload.key)
      if (!exists) state.items.push(action.payload)
    },
    closeTab(state, action: PayloadAction<string>) {
      state.items = state.items.filter(t => t.key !== action.payload)
    },
    resetTabs(state) {
      state.items = []
    },
  },
})

export const { openTab, closeTab, resetTabs } = slice.actions
export default slice.reducer