121 lines
3.9 KiB
JavaScript
121 lines
3.9 KiB
JavaScript
import { List, Map } from 'immutable';
|
|
import CustomField from 'Types/customField';
|
|
import { fetchListType, saveType, editType, initType, removeType } from './funcTools/crud/types';
|
|
import { createItemInListUpdater, mergeReducers, success, array } from './funcTools/tools';
|
|
import { createEdit, createInit } from './funcTools/crud';
|
|
import { createRequestReducer } from './funcTools/request';
|
|
import { addElementToFiltersMap, addElementToLiveFiltersMap, clearMetaFilters } from 'Types/filter/newFilter';
|
|
import { FilterCategory } from '../types/filter/filterType';
|
|
import { refreshFilterOptions } from './search';
|
|
|
|
const name = 'integration/variable';
|
|
const idKey = 'index';
|
|
const itemInListUpdater = createItemInListUpdater(idKey);
|
|
|
|
const FETCH_LIST = fetchListType(name);
|
|
const FETCH_LIST_ACTIVE = fetchListType(name + '_ACTIVE');
|
|
const SAVE = saveType(name);
|
|
const UPDATE = saveType(name);
|
|
const EDIT = editType(name);
|
|
const REMOVE = removeType(name);
|
|
const INIT = initType(name);
|
|
const FETCH_SOURCES = fetchListType('integration/sources');
|
|
|
|
const FETCH_SUCCESS = success(FETCH_LIST);
|
|
const FETCH_LIST_ACTIVE_SUCCESS = success(FETCH_LIST_ACTIVE);
|
|
const SAVE_SUCCESS = success(SAVE);
|
|
const UPDATE_SUCCESS = success(UPDATE);
|
|
const REMOVE_SUCCESS = success(REMOVE);
|
|
const FETCH_SOURCES_SUCCESS = success(FETCH_SOURCES);
|
|
|
|
// const defaultMeta = [{key: 'user_id', index: 0}, {key: 'user_anonymous_id', index: 0}];
|
|
const initialState = Map({
|
|
list: List(),
|
|
instance: CustomField(),
|
|
sources: List(),
|
|
optionsReady: false,
|
|
});
|
|
|
|
const reducer = (state = initialState, action = {}) => {
|
|
switch (action.type) {
|
|
case FETCH_SUCCESS:
|
|
return state.set('list', List(action.data).map(CustomField))
|
|
case FETCH_LIST_ACTIVE_SUCCESS:
|
|
clearMetaFilters();
|
|
action.data.forEach((item) => {
|
|
addElementToFiltersMap(FilterCategory.METADATA, item.key);
|
|
addElementToLiveFiltersMap(FilterCategory.METADATA, item.key);
|
|
});
|
|
return state.set('list', List(action.data).map(CustomField))
|
|
|
|
case FETCH_SOURCES_SUCCESS:
|
|
return state.set(
|
|
'sources',
|
|
List(action.data.map(({ value, ...item }) => ({ label: value, key: value, ...item }))).map(
|
|
CustomField
|
|
)
|
|
);
|
|
case SAVE_SUCCESS:
|
|
case UPDATE_SUCCESS:
|
|
return state.update('list', itemInListUpdater(CustomField(action.data)));
|
|
case REMOVE_SUCCESS:
|
|
return state.update('list', (list) => list.filter((item) => item.index !== action.index));
|
|
case INIT:
|
|
return state.set('instance', CustomField(action.instance));
|
|
case EDIT:
|
|
return state.mergeIn(['instance'], action.instance);
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export const edit = createEdit(name);
|
|
export const init = createInit(name);
|
|
|
|
export const fetchList = (siteId) => (dispatch, getState) => {
|
|
return dispatch({
|
|
types: array(FETCH_LIST),
|
|
call: (client) => client.get(siteId ? `/${siteId}/metadata` : '/metadata'),
|
|
})
|
|
};
|
|
|
|
export const fetchListActive = (siteId) => (dispatch, getState) => {
|
|
return dispatch({
|
|
types: array(FETCH_LIST_ACTIVE),
|
|
call: (client) => client.get(siteId ? `/${siteId}/metadata` : '/metadata'),
|
|
}).then(() => {
|
|
dispatch(refreshFilterOptions());
|
|
});
|
|
};
|
|
|
|
export const fetchSources = () => {
|
|
return {
|
|
types: array(FETCH_SOURCES),
|
|
call: (client) => client.get('/integration/sources'),
|
|
};
|
|
};
|
|
|
|
export const save = (siteId, instance) => {
|
|
const url = instance.exists() ? `/${siteId}/metadata/${instance.index}` : `/${siteId}/metadata`;
|
|
return {
|
|
types: array(instance.exists() ? SAVE : UPDATE),
|
|
call: (client) => client.post(url, instance.toData()),
|
|
};
|
|
};
|
|
|
|
export const remove = (siteId, index) => {
|
|
return {
|
|
types: array(REMOVE),
|
|
call: (client) => client.delete(`/${siteId}/metadata/${index}`),
|
|
index,
|
|
};
|
|
};
|
|
|
|
export default mergeReducers(
|
|
reducer,
|
|
createRequestReducer({
|
|
fetchRequest: FETCH_LIST,
|
|
fetchRequestActive: FETCH_LIST_ACTIVE,
|
|
saveRequest: SAVE,
|
|
})
|
|
);
|