mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-05-14 15:09:30 +08:00
595 lines
14 KiB
JavaScript
595 lines
14 KiB
JavaScript
import {
|
|
defaultModifyState,
|
|
defaultPermissionsState,
|
|
defaultPresetsState,
|
|
} from '../DataState';
|
|
|
|
import { MAKE_REQUEST, REQUEST_SUCCESS, REQUEST_ERROR } from '../DataActions';
|
|
|
|
// TABLE MODIFY
|
|
|
|
import {
|
|
VIEW_DEF_REQUEST_SUCCESS,
|
|
VIEW_DEF_REQUEST_ERROR,
|
|
TABLE_COMMENT_EDIT,
|
|
TABLE_COMMENT_INPUT_EDIT,
|
|
SET_COLUMN_EDIT,
|
|
RESET_COLUMN_EDIT,
|
|
EDIT_COLUMN,
|
|
SET_PRIMARY_KEYS,
|
|
SET_FOREIGN_KEYS,
|
|
FETCH_COLUMN_TYPE_CASTS,
|
|
FETCH_COLUMN_TYPE_CASTS_FAIL,
|
|
RESET,
|
|
SET_UNIQUE_KEYS,
|
|
} from '../TableModify/ModifyActions';
|
|
|
|
// TABLE RELATIONSHIPS
|
|
|
|
import {
|
|
REL_SET_TYPE,
|
|
REL_SET_RTABLE,
|
|
REL_SET_LCOL,
|
|
REL_SET_RCOL,
|
|
REL_RESET,
|
|
REL_SELECTION_CHANGED,
|
|
REL_NAME_CHANGED,
|
|
REL_ADD_NEW_CLICKED,
|
|
REL_SET_MANUAL_COLUMNS,
|
|
REL_ADD_MANUAL_CLICKED,
|
|
UPDATE_MANUAL_REL_TABLE_LIST,
|
|
} from '../TableRelationships/Actions';
|
|
|
|
// TABLE PERMISSIONS
|
|
|
|
import {
|
|
PERM_OPEN_EDIT,
|
|
PERM_ADD_TABLE_SCHEMAS,
|
|
PERM_SET_FILTER,
|
|
PERM_SET_FILTER_SAME_AS,
|
|
PERM_TOGGLE_COLUMN,
|
|
PERM_TOGGLE_ALL_COLUMNS,
|
|
PERM_ALLOW_ALL,
|
|
PERM_TOGGLE_MODIFY_LIMIT,
|
|
PERM_TOGGLE_ALLOW_UPSERT,
|
|
PERM_TOGGLE_ALLOW_AGGREGATION,
|
|
PERM_CUSTOM_CHECKED,
|
|
PERM_REMOVE_ACCESS,
|
|
PERM_SAVE_PERMISSIONS,
|
|
PERM_CLOSE_EDIT,
|
|
PERM_SET_ROLE_NAME,
|
|
PERM_SELECT_BULK,
|
|
PERM_DESELECT_BULK,
|
|
PERM_RESET_BULK_SELECT,
|
|
PERM_RESET_APPLY_SAME,
|
|
PERM_SET_APPLY_SAME_PERM,
|
|
PERM_DEL_APPLY_SAME_PERM,
|
|
toggleColumn,
|
|
toggleAllColumns,
|
|
getFilterKey,
|
|
getBasePermissionsState,
|
|
updatePermissionsState,
|
|
deleteFromPermissionsState,
|
|
updateBulkSelect,
|
|
updateApplySamePerms,
|
|
CREATE_NEW_PRESET,
|
|
DELETE_PRESET,
|
|
SET_PRESET_VALUE,
|
|
} from '../TablePermissions/Actions';
|
|
|
|
const modifyReducer = (tableName, schemas, modifyStateOrig, action) => {
|
|
const modifyState = JSON.parse(JSON.stringify(modifyStateOrig));
|
|
|
|
switch (action.type) {
|
|
case RESET:
|
|
return { ...defaultModifyState };
|
|
case MAKE_REQUEST:
|
|
return {
|
|
...modifyState,
|
|
ongoingRequest: true,
|
|
lastError: null,
|
|
lastSuccess: null,
|
|
};
|
|
case REQUEST_SUCCESS:
|
|
return {
|
|
...modifyState,
|
|
ongoingRequest: false,
|
|
lastError: null,
|
|
lastSuccess: true,
|
|
};
|
|
case REQUEST_ERROR:
|
|
return {
|
|
...modifyState,
|
|
ongoingRequest: false,
|
|
lastError: action.data,
|
|
lastSuccess: false,
|
|
};
|
|
case VIEW_DEF_REQUEST_SUCCESS:
|
|
return {
|
|
...modifyState,
|
|
viewDefinition: action.data,
|
|
viewDefinitionError: action.error,
|
|
};
|
|
case VIEW_DEF_REQUEST_ERROR:
|
|
return {
|
|
...modifyState,
|
|
viewDefinitionError: action.data,
|
|
};
|
|
|
|
case REL_ADD_NEW_CLICKED:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
isActive: true,
|
|
},
|
|
};
|
|
case REL_ADD_MANUAL_CLICKED:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
isManualExpanded: !modifyState.relAdd.isManualExpanded,
|
|
},
|
|
};
|
|
case REL_NAME_CHANGED:
|
|
const relName = action.relName;
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
name: relName,
|
|
},
|
|
};
|
|
case REL_SELECTION_CHANGED:
|
|
const selectedRel = action.rel;
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
name: '',
|
|
tableName: selectedRel.tableName,
|
|
isObjRel: selectedRel.isObjRel,
|
|
lcol: selectedRel.lcol,
|
|
rTable: selectedRel.rTable,
|
|
rcol: selectedRel.rcol,
|
|
},
|
|
};
|
|
case REL_RESET:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...defaultModifyState.relAdd,
|
|
},
|
|
};
|
|
case REL_SET_TYPE:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
isObjRel: action.isObjRel,
|
|
},
|
|
};
|
|
case REL_SET_RTABLE:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
rTable: action.rTable,
|
|
},
|
|
};
|
|
case REL_SET_LCOL:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
lcol: action.lcol,
|
|
},
|
|
};
|
|
case REL_SET_RCOL:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
rcol: action.rcol,
|
|
},
|
|
};
|
|
case REL_SET_MANUAL_COLUMNS:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
manualColumns: action.data,
|
|
},
|
|
};
|
|
case TABLE_COMMENT_EDIT:
|
|
return {
|
|
...modifyState,
|
|
tableCommentEdit: {
|
|
...modifyState.tableCommentEdit,
|
|
enabled: action.data.enabled,
|
|
editedValue: action.data.value,
|
|
},
|
|
};
|
|
case TABLE_COMMENT_INPUT_EDIT:
|
|
return {
|
|
...modifyState,
|
|
tableCommentEdit: {
|
|
...modifyState.tableCommentEdit,
|
|
editedValue: action.value,
|
|
},
|
|
};
|
|
case SET_COLUMN_EDIT:
|
|
return {
|
|
...modifyState,
|
|
columnEdit: {
|
|
...modifyState.columnEdit,
|
|
[action.column]: { ...action.data },
|
|
},
|
|
};
|
|
case RESET_COLUMN_EDIT:
|
|
const updatedColumnEdit = {
|
|
...modifyState.columnEdit,
|
|
};
|
|
delete updatedColumnEdit[action.column];
|
|
return {
|
|
...modifyState,
|
|
columnEdit: updatedColumnEdit,
|
|
};
|
|
case EDIT_COLUMN:
|
|
return {
|
|
...modifyState,
|
|
columnEdit: {
|
|
...modifyState.columnEdit,
|
|
[action.column]: {
|
|
...modifyState.columnEdit[action.column],
|
|
[action.key]: action.value,
|
|
},
|
|
},
|
|
};
|
|
case PERM_OPEN_EDIT:
|
|
const permState = getBasePermissionsState(
|
|
action.tableSchema,
|
|
action.role,
|
|
action.query
|
|
);
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...permState,
|
|
tableSchemas: schemas,
|
|
},
|
|
prevPermissionState: {
|
|
...permState,
|
|
},
|
|
};
|
|
|
|
case PERM_ADD_TABLE_SCHEMAS:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
tableSchemas: [
|
|
...modifyState.permissionsState.tableSchemas,
|
|
...action.schemas,
|
|
],
|
|
},
|
|
};
|
|
|
|
case PERM_CLOSE_EDIT:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...JSON.parse(JSON.stringify(defaultPermissionsState)),
|
|
},
|
|
};
|
|
|
|
case PERM_CUSTOM_CHECKED:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
custom_checked: true,
|
|
},
|
|
};
|
|
|
|
case PERM_TOGGLE_ALLOW_UPSERT:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
'allow_upsert',
|
|
action.data
|
|
),
|
|
},
|
|
};
|
|
|
|
case PERM_TOGGLE_ALLOW_AGGREGATION:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
'allow_aggregations',
|
|
action.data
|
|
),
|
|
},
|
|
};
|
|
|
|
case PERM_TOGGLE_MODIFY_LIMIT:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
'limit',
|
|
action.data
|
|
),
|
|
},
|
|
};
|
|
|
|
case PERM_SET_FILTER_SAME_AS:
|
|
case PERM_SET_FILTER:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
getFilterKey(modifyState.permissionsState.query),
|
|
action.filter
|
|
),
|
|
custom_checked: false,
|
|
},
|
|
};
|
|
|
|
case PERM_ALLOW_ALL:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
getFilterKey(modifyState.permissionsState.query),
|
|
{}
|
|
),
|
|
custom_checked: false,
|
|
},
|
|
};
|
|
|
|
case PERM_TOGGLE_ALL_COLUMNS:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
'columns',
|
|
toggleAllColumns(
|
|
modifyState.permissionsState[modifyState.permissionsState.query],
|
|
action.allColumns
|
|
)
|
|
),
|
|
},
|
|
};
|
|
|
|
case PERM_TOGGLE_COLUMN:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...updatePermissionsState(
|
|
modifyState.permissionsState,
|
|
'columns',
|
|
toggleColumn(
|
|
modifyState.permissionsState[modifyState.permissionsState.query],
|
|
action.column
|
|
)
|
|
),
|
|
},
|
|
};
|
|
|
|
case PERM_REMOVE_ACCESS:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...deleteFromPermissionsState(modifyState.permissionsState),
|
|
},
|
|
};
|
|
|
|
case PERM_SET_ROLE_NAME:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
newRole: action.data,
|
|
},
|
|
};
|
|
|
|
case PERM_SAVE_PERMISSIONS:
|
|
return {
|
|
...modifyState,
|
|
};
|
|
|
|
case PERM_SELECT_BULK:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
bulkSelect: updateBulkSelect(
|
|
modifyState.permissionsState,
|
|
action.data,
|
|
true
|
|
),
|
|
},
|
|
};
|
|
case PERM_DESELECT_BULK:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
bulkSelect: updateBulkSelect(
|
|
modifyState.permissionsState,
|
|
action.data,
|
|
false
|
|
),
|
|
},
|
|
};
|
|
case PERM_SET_APPLY_SAME_PERM:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
applySamePermissions: updateApplySamePerms(
|
|
modifyState.permissionsState,
|
|
action.data
|
|
),
|
|
},
|
|
};
|
|
case PERM_DEL_APPLY_SAME_PERM:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
applySamePermissions: updateApplySamePerms(
|
|
modifyState.permissionsState,
|
|
action.data,
|
|
true
|
|
),
|
|
},
|
|
};
|
|
|
|
/* Preset operations */
|
|
case CREATE_NEW_PRESET:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
[action.data.query]: {
|
|
...modifyState.permissionsState[action.data.query],
|
|
localPresets: [
|
|
...modifyState.permissionsState[action.data.query].localPresets,
|
|
{ ...defaultPresetsState[action.data.query] },
|
|
],
|
|
},
|
|
},
|
|
};
|
|
case DELETE_PRESET:
|
|
const deleteIndex = action.data.index;
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
[action.data.queryType]: {
|
|
...modifyState.permissionsState[action.data.queryType],
|
|
localPresets: [
|
|
...modifyState.permissionsState[
|
|
action.data.queryType
|
|
].localPresets.slice(0, deleteIndex),
|
|
...modifyState.permissionsState[
|
|
action.data.queryType
|
|
].localPresets.slice(
|
|
deleteIndex + 1,
|
|
modifyState.permissionsState[action.data.queryType].localPresets
|
|
.length
|
|
),
|
|
],
|
|
},
|
|
},
|
|
};
|
|
case SET_PRESET_VALUE:
|
|
const updatedIndex = action.data.index;
|
|
const setKeyVal =
|
|
modifyState.permissionsState[action.data.queryType].localPresets[
|
|
updatedIndex
|
|
];
|
|
setKeyVal[action.data.key] = action.data.value;
|
|
if (action.data.key === 'key') {
|
|
// Clear if key changes
|
|
setKeyVal.value = '';
|
|
}
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
[action.data.queryType]: {
|
|
...modifyState.permissionsState[action.data.queryType],
|
|
localPresets: [
|
|
...modifyState.permissionsState[
|
|
action.data.queryType
|
|
].localPresets.slice(0, updatedIndex),
|
|
{ ...setKeyVal },
|
|
...modifyState.permissionsState[
|
|
action.data.queryType
|
|
].localPresets.slice(
|
|
updatedIndex + 1,
|
|
modifyState.permissionsState[action.data.queryType].localPresets
|
|
.length
|
|
),
|
|
],
|
|
},
|
|
},
|
|
};
|
|
case PERM_RESET_BULK_SELECT:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
bulkSelect: [],
|
|
},
|
|
};
|
|
case PERM_RESET_APPLY_SAME:
|
|
return {
|
|
...modifyState,
|
|
permissionsState: {
|
|
...modifyState.permissionsState,
|
|
applySamePermissions: [],
|
|
},
|
|
};
|
|
|
|
case SET_PRIMARY_KEYS:
|
|
return {
|
|
...modifyState,
|
|
pkModify: action.pks,
|
|
};
|
|
case SET_FOREIGN_KEYS:
|
|
return {
|
|
...modifyState,
|
|
fkModify: action.fks,
|
|
};
|
|
|
|
case FETCH_COLUMN_TYPE_CASTS:
|
|
return {
|
|
...modifyState,
|
|
alterColumnOptions: action.data,
|
|
alterColumnOptionsFetchErr: null,
|
|
};
|
|
|
|
case FETCH_COLUMN_TYPE_CASTS_FAIL:
|
|
return {
|
|
...modifyState,
|
|
alterColumnOptions: [],
|
|
alterColumnOptionsFetchErr: action.data,
|
|
};
|
|
|
|
case SET_UNIQUE_KEYS:
|
|
return {
|
|
...modifyState,
|
|
uniqueKeyModify: action.keys,
|
|
};
|
|
case UPDATE_MANUAL_REL_TABLE_LIST:
|
|
return {
|
|
...modifyState,
|
|
relAdd: {
|
|
...modifyState.relAdd,
|
|
manualRelInfo: {
|
|
...modifyState.relAdd.manualRelInfo,
|
|
tables: action.data,
|
|
},
|
|
},
|
|
};
|
|
|
|
default:
|
|
return modifyState;
|
|
}
|
|
};
|
|
|
|
export default modifyReducer;
|