This commit is contained in:
Diego Mello 2017-11-21 16:56:46 -02:00
parent 5ad676f7dc
commit 908c389155
6 changed files with 88 additions and 3 deletions

View File

@ -25,6 +25,14 @@ export function setAllSettings(settings) {
payload: settings
};
}
export function setAllPermissions(permissions) {
return {
type: types.SET_ALL_PERMISSIONS,
payload: permissions
};
}
export function login() {
return {
type: 'LOGIN'

View File

@ -1,2 +1,3 @@
export const SET_CURRENT_SERVER = 'SET_CURRENT_SERVER';
export const SET_ALL_SETTINGS = 'SET_ALL_SETTINGS';
export const SET_ALL_PERMISSIONS = 'SET_ALL_PERMISSIONS';

View File

@ -24,6 +24,24 @@ const settingsSchema = {
}
};
const permissionsRolesSchema = {
name: 'permissionsRoles',
properties: {
value: 'string'
}
};
const permissionsSchema = {
name: 'permissions',
primaryKey: '_id',
properties: {
_id: 'string',
_server: 'servers',
roles: { type: 'list', objectType: 'permissionsRoles' },
_updatedAt: { type: 'date', optional: true }
}
};
const roomsSchema = {
name: 'rooms',
primaryKey: '_id',
@ -130,7 +148,9 @@ const realm = new Realm({
usersSchema,
roomsSchema,
attachment,
messagesEditedBySchema
messagesEditedBySchema,
permissionsSchema,
permissionsRolesSchema
]
});
export default realm;

View File

@ -103,6 +103,7 @@ const RocketChat = {
}
});
RocketChat.getSettings();
RocketChat.getPermissions();
});
})
.catch(e => console.error(e));
@ -429,6 +430,44 @@ const RocketChat = {
});
},
_filterSettings: settings => settings.filter(setting => settingsType[setting.type] && setting.value),
async getPermissions() {
// const permissions = await call('permissions/get');
// console.log(permissions)
// reduxStore.dispatch(actions.setAllPermissions(RocketChat.parsePermissions(permissions)));
const temp = realm.objects('permissions').sorted('_updatedAt', true)[0];
const permissions = await call('permissions/get');
const preparedPermissions = RocketChat._preparePermissions(permissions);
console.log(preparedPermissions)
// realm.write(() => {
// permissions.forEach(permission => realm.create('permissions', permission, true));
// });
reduxStore.dispatch(actions.setAllPermissions(RocketChat.parsePermissions(permissions)));
// const filteredPermissions = RocketChat._preparePermissions(RocketChat._filterPermissions(permissions));
// const temp = realm.objects('permissions').sorted('_updatedAt', true)[0];
// const result = await (!temp ? call('public-permissions/get') : call('public-permissions/get', new Date(temp._updatedAt)));
// const permissions = temp ? result.update : result;
// const filteredPermissions = RocketChat._preparePermissions(RocketChat._filterPermissions(permissions));
// realm.write(() => {
// filteredPermissions.forEach(permission => realm.create('permissions', permission, true));
// });
// reduxStore.dispatch(actions.setAllPermissions(RocketChat.parsePermissions(filteredPermissions)));
},
parsePermissions: permissions => permissions.reduce((ret, item) => {
ret[item._id] = item.roles;
return ret;
}, {}),
_preparePermissions(permissions) {
const tmpPermissions = [...permissions];
tmpPermissions.forEach((permission) => {
permission.roles = permission.roles.map((role) => {
role = { value: role };
return role;
});
});
return tmpPermissions;
},
deleteMessage(message) {
return call('deleteMessage', { _id: message._id });
},

View File

@ -7,8 +7,8 @@ import server from './server';
import navigator from './navigator';
import createChannel from './createChannel';
import app from './app';
import permissions from './permissions';
export default combineReducers({
settings, login, meteor, messages, server, navigator, createChannel, app
settings, login, meteor, messages, server, navigator, createChannel, app, permissions
});

View File

@ -0,0 +1,17 @@
import * as types from '../constants/types';
const initialState = {
permissions: {}
};
export default function permissions(state = initialState.permissions, action) {
if (action.type === types.SET_ALL_PERMISSIONS) {
return {
...state,
...action.payload
};
}
return state;
}