mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
97 lines (83 loc) • 2.5 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {combineReducers} from 'redux';
import {CloudTypes} from 'action_types';
import {GenericAction} from 'types/actions';
import {Product, Subscription, CloudCustomer, Invoice, SubscriptionStats} from 'types/cloud';
import {Dictionary} from 'types/utilities';
function subscription(state: Subscription | null = null, action: GenericAction) {
switch (action.type) {
case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION: {
return action.data;
}
default:
return state;
}
}
function customer(state: CloudCustomer | null = null, action: GenericAction) {
switch (action.type) {
case CloudTypes.RECEIVED_CLOUD_CUSTOMER: {
return action.data;
}
default:
return state;
}
}
function products(state: Dictionary<Product> | null = null, action: GenericAction) {
switch (action.type) {
case CloudTypes.RECEIVED_CLOUD_PRODUCTS: {
const productList: Product[] = action.data;
const productDict = productList.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {} as Dictionary<Product>);
return {
...state,
...productDict,
};
}
default:
return state;
}
}
function invoices(state: Dictionary<Invoice> | null = null, action: GenericAction) {
switch (action.type) {
case CloudTypes.RECEIVED_CLOUD_INVOICES: {
const invoiceList: Invoice[] = action.data;
const invoiceDict = invoiceList.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {} as Dictionary<Invoice>);
return {
...state,
...invoiceDict,
};
}
default:
return state;
}
}
function subscriptionStats(state: SubscriptionStats | null = null, action: GenericAction) {
switch (action.type) {
case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION_STATS: {
const data = action.data;
return {
...state,
...data,
};
}
default:
return state;
}
}
export default combineReducers({
// represents the current cloud customer
customer,
// represents the current cloud subscription
subscription,
// represents the cloud products offered
products,
// represents the invoices tied to the current subscription
invoices,
subscriptionStats,
});