-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
schemaInsights.reducer.ts
55 lines (50 loc) · 1.59 KB
/
schemaInsights.reducer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Copyright 2022 The Cockroach Authors.
//
// Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0, included in the file
// licenses/APL.txt.
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { DOMAIN_NAME, noopReducer } from "../utils";
import moment, { Moment } from "moment";
import {InsightRecommendation} from "../../insightsTable/insightsTable";
export type SchemaInsightsState = {
data: InsightRecommendation[];
lastUpdated: Moment;
lastError: Error;
valid: boolean;
};
const initialState: SchemaInsightsState = {
data: null,
lastUpdated: null,
lastError: null,
valid: false,
};
const schemaInsightsSlice = createSlice({
name: `${DOMAIN_NAME}/schemaInsightsSlice`,
initialState,
reducers: {
received: (state, action: PayloadAction<InsightRecommendation[]>) => {
state.data = action.payload;
state.valid = true;
state.lastError = null;
state.lastUpdated = moment.utc();
},
failed: (state, action: PayloadAction<Error>) => {
state.valid = false;
state.lastError = action.payload;
state.lastUpdated = moment.utc();
},
invalidated: state => {
state.valid = false;
state.lastUpdated = moment.utc();
},
// Define actions that don't change state.
refresh: noopReducer,
request: noopReducer,
},
});
export const { reducer, actions } = schemaInsightsSlice;