From 908c3891559010a332fe626a4cd6bc67febfd763 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 21 Nov 2017 16:56:46 -0200 Subject: [PATCH] tmp --- app/actions/index.js | 8 ++++++++ app/constants/types.js | 1 + app/lib/realm.js | 22 ++++++++++++++++++++- app/lib/rocketchat.js | 39 +++++++++++++++++++++++++++++++++++++ app/reducers/index.js | 4 ++-- app/reducers/permissions.js | 17 ++++++++++++++++ 6 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 app/reducers/permissions.js diff --git a/app/actions/index.js b/app/actions/index.js index dba8b7e18..023d9eeb0 100644 --- a/app/actions/index.js +++ b/app/actions/index.js @@ -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' diff --git a/app/constants/types.js b/app/constants/types.js index f772c2b92..0ac33098d 100644 --- a/app/constants/types.js +++ b/app/constants/types.js @@ -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'; diff --git a/app/lib/realm.js b/app/lib/realm.js index ee44086da..915c0564b 100644 --- a/app/lib/realm.js +++ b/app/lib/realm.js @@ -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; diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index da645a95f..6136e4c75 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -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 }); }, diff --git a/app/reducers/index.js b/app/reducers/index.js index 3321b8481..723437b69 100644 --- a/app/reducers/index.js +++ b/app/reducers/index.js @@ -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 }); diff --git a/app/reducers/permissions.js b/app/reducers/permissions.js new file mode 100644 index 000000000..e90a871e6 --- /dev/null +++ b/app/reducers/permissions.js @@ -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; +}