124 lines
3.1 KiB
JavaScript
124 lines
3.1 KiB
JavaScript
import Site from 'Types/site';
|
|
import GDPR from 'Types/site/gdpr';
|
|
import {
|
|
mergeReducers,
|
|
createItemInListUpdater,
|
|
success,
|
|
array
|
|
} from './funcTools/tools';
|
|
import {
|
|
createCRUDReducer,
|
|
getCRUDRequestTypes,
|
|
createFetchList,
|
|
createInit,
|
|
createEdit,
|
|
createRemove,
|
|
createUpdate,
|
|
createSave,
|
|
} from './funcTools/crud';
|
|
import { createRequestReducer } from './funcTools/request';
|
|
import { Map, List, fromJS } from "immutable";
|
|
|
|
const SITE_ID_STORAGE_KEY = "__$user-siteId$__";
|
|
const storedSiteId = localStorage.getItem(SITE_ID_STORAGE_KEY);
|
|
|
|
const name = 'project';
|
|
const idKey = 'id';
|
|
const itemInListUpdater = createItemInListUpdater(idKey)
|
|
|
|
const EDIT_GDPR = 'sites/EDIT_GDPR';
|
|
const SAVE_GDPR = 'sites/SAVE_GDPR';
|
|
const FETCH_GDPR = 'sites/FETCH_GDPR';
|
|
const FETCH_LIST = 'sites/FETCH_LIST';
|
|
const SET_SITE_ID = 'sites/SET_SITE_ID';
|
|
const FETCH_GDPR_SUCCESS = success(FETCH_GDPR);
|
|
const SAVE_GDPR_SUCCESS = success(SAVE_GDPR);
|
|
const FETCH_LIST_SUCCESS = success(FETCH_LIST);
|
|
|
|
const initialState = Map({
|
|
list: List(),
|
|
instance: fromJS(),
|
|
remainingSites: undefined,
|
|
siteId: null,
|
|
active: null,
|
|
});
|
|
|
|
const reducer = (state = initialState, action = {}) => {
|
|
switch(action.type) {
|
|
case EDIT_GDPR:
|
|
return state.mergeIn([ 'instance', 'gdpr' ], action.gdpr);
|
|
case FETCH_GDPR_SUCCESS:
|
|
return state.mergeIn([ 'instance', 'gdpr' ], action.data);
|
|
case SAVE_GDPR_SUCCESS:
|
|
const gdpr = GDPR(action.data);
|
|
return state.setIn([ 'instance', 'gdpr' ], gdpr);
|
|
case FETCH_LIST_SUCCESS:
|
|
let siteId = state.get("siteId");
|
|
const siteExists = action.data.map(s => s.projectId).includes(siteId);
|
|
if (!siteId || !siteExists) {
|
|
siteId = !!action.data.find(s => s.projectId === parseInt(storedSiteId))
|
|
? storedSiteId
|
|
: action.data[0].projectId;
|
|
}
|
|
return state.set('list', List(action.data.map(Site)))
|
|
.set('siteId', siteId)
|
|
.set('active', List(action.data.map(Site)).find(s => s.id === parseInt(siteId)));
|
|
case SET_SITE_ID:
|
|
localStorage.setItem(SITE_ID_STORAGE_KEY, action.siteId)
|
|
const site = state.get('list').find(s => s.id === action.siteId);
|
|
return state.set('siteId', action.siteId).set('active', site);
|
|
}
|
|
return state;
|
|
};
|
|
|
|
export function editGDPR(gdpr) {
|
|
return {
|
|
type: EDIT_GDPR,
|
|
gdpr,
|
|
};
|
|
}
|
|
|
|
export function fetchGDPR(siteId) {
|
|
return {
|
|
types: array(FETCH_GDPR),
|
|
call: client => client.get(`/${ siteId }/gdpr`),
|
|
}
|
|
}
|
|
|
|
export function saveGDPR(siteId, gdpr) {
|
|
return {
|
|
types: array(SAVE_GDPR),
|
|
call: client => client.post(`/${ siteId }/gdpr`, gdpr.toData()),
|
|
};
|
|
}
|
|
|
|
export function fetchList() {
|
|
return {
|
|
types: array(FETCH_LIST),
|
|
call: client => client.get('/projects'),
|
|
};
|
|
}
|
|
|
|
// export const fetchList = createFetchList(name);
|
|
export const init = createInit(name);
|
|
export const edit = createEdit(name);
|
|
export const save = createSave(name);
|
|
export const update = createUpdate(name);
|
|
export const remove = createRemove(name);
|
|
|
|
export function setSiteId(siteId) {
|
|
return {
|
|
type: SET_SITE_ID,
|
|
siteId,
|
|
};
|
|
}
|
|
|
|
export default mergeReducers(
|
|
reducer,
|
|
createCRUDReducer(name, Site, idKey),
|
|
createRequestReducer({
|
|
saveGDPR: SAVE_GDPR,
|
|
...getCRUDRequestTypes(name),
|
|
}),
|
|
);
|
|
|