main

mattermost/focalboard

Last updated at: 29/12/2023 09:42

limits.ts

TLDR

This file defines a Redux slice for managing limits related state. It exports a reducer and actions for setting the limits and card limit timestamp, as well as selectors for retrieving these values from the Redux store.

Methods

setLimits

This method is an action creator that takes a payload of type BoardsCloudLimits. It sets the limits in the Redux state to the provided payload.

setCardLimitTimestamp

This method is an action creator that takes a payload of type number. It sets the card limit timestamp in the Redux state to the provided payload.

END

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import {createSlice, PayloadAction} from '@reduxjs/toolkit'

import {BoardsCloudLimits} from '../boardsCloudLimits'

import {initialLoad} from './initialLoad'

import {RootState} from './index'

type LimitsState = {
    limits: BoardsCloudLimits
}

const defaultLimits = {
    cards: 0,
    used_cards: 0,
    card_limit_timestamp: 0,
    views: 0,
}

const initialState = {
    limits: defaultLimits,
} as LimitsState

const limitsSlice = createSlice({
    name: 'limits',
    initialState,
    reducers: {
        setLimits: (state, action: PayloadAction<BoardsCloudLimits>) => {
            state.limits = action.payload
        },
        setCardLimitTimestamp: (state, action: PayloadAction<number>) => {
            state.limits.card_limit_timestamp = action.payload
        },
    },
    extraReducers: (builder) => {
        builder.addCase(initialLoad.fulfilled, (state, action) => {
            state.limits = action.payload.limits || defaultLimits
        })
    },
})

export const {reducer} = limitsSlice
export const {setCardLimitTimestamp} = limitsSlice.actions

export const getLimits = (state: RootState): BoardsCloudLimits | undefined => state.limits.limits
export const getCardLimitTimestamp = (state: RootState): number => state.limits.limits.card_limit_timestamp