From f4fc56729295eeaba89ca96bcf9fd8b59a2a5bb6 Mon Sep 17 00:00:00 2001 From: Elliott Stoneham Date: Fri, 15 Jul 2016 18:16:22 +0100 Subject: [PATCH] fix local storage of last used space id --- app/app/pods/folders/route.js | 15 +- app/app/services/folder.js | 303 +++++++++++++++++----------------- 2 files changed, 163 insertions(+), 155 deletions(-) diff --git a/app/app/pods/folders/route.js b/app/app/pods/folders/route.js index ee8d4664..2b6db839 100644 --- a/app/app/pods/folders/route.js +++ b/app/app/pods/folders/route.js @@ -11,6 +11,7 @@ import Ember from 'ember'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; +import { isNotFoundError } from 'ember-ajax/errors'; const { isPresent @@ -31,20 +32,23 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { if (is.empty(params)) { let lastFolder = this.get('localStorage').getSessionItem("folder"); + let self = this; //If folder lastFolder is defined if (isPresent(lastFolder)) { return this.get('folderService').getFolder(lastFolder).then((folder) => { //if Response is null or undefined redirect to login else transitionTo dashboard if (Ember.isNone(folder)) { - this.transitionTo('auth.login'); + self.get('localStorage').clearSessionItem("folder"); + this.transitionTo('application'); } Ember.set(this, 'folder', folder); this.transitionTo('folders.folder', folder.get('id'), folder.get('slug')); }).catch(() => { //if there was an error redirect to login - this.transitionTo('auth.login'); + self.get('localStorage').clearSessionItem("folder"); + this.transitionTo('application'); }); } @@ -64,11 +68,16 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { //If folder route has params if (isPresent(params)) { - + let self = this; let folderId = this.paramsFor('folders.folder').folder_id; return this.get('folderService').getFolder(folderId).then((folder) => { Ember.set(this, 'folder', folder); + }).catch(function (error) { + if (isNotFoundError(error)) { + // handle 404 errors here + self.transitionTo('application'); + } }); } diff --git a/app/app/services/folder.js b/app/app/services/folder.js index fbd4f4f4..b8ac6f65 100644 --- a/app/app/services/folder.js +++ b/app/app/services/folder.js @@ -14,194 +14,193 @@ import models from '../utils/model'; import BaseService from '../services/base'; const { - get + get } = Ember; export default BaseService.extend({ - sessionService: Ember.inject.service('session'), - ajax: Ember.inject.service(), - localStorage: Ember.inject.service(), + sessionService: Ember.inject.service('session'), + ajax: Ember.inject.service(), + localStorage: Ember.inject.service(), + // selected folder + currentFolder: null, + canEditCurrentFolder: false, - // selected folder - currentFolder: null, - canEditCurrentFolder: false, + // Add a new folder. + add(folder) { - // Add a new folder. - add(folder) { + return this.get('ajax').post(`folders`, { + contentType: 'json', + data: JSON.stringify(folder) + }).then((folder) => { + let folderModel = models.FolderModel.create(folder); + return folderModel; + }); + }, - return this.get('ajax').post(`folders`, { - contentType: 'json', - data: JSON.stringify(folder) - }).then((folder)=>{ - let folderModel = models.FolderModel.create(folder); - return folderModel; - }); - }, + // Returns folder model for specified folder id. + getFolder(id) { - // Returns folder model for specified folder id. - getFolder(id) { + return this.get('ajax').request(`folders/${id}`, { + method: 'GET' + }).then((response) => { + let folder = models.FolderModel.create(response); + return folder; + }); + }, - return this.get('ajax').request(`folders/${id}`, { - method: 'GET' - }).then((response)=>{ - let folder = models.FolderModel.create(response); - return folder; - }); - }, + // Returns all folders that user can see. + getAll() { + let self = this; - // Returns all folders that user can see. - getAll() { - let self = this; + if (this.get('folders') != null) { + return new Ember.RSVP.Promise(function (resolve) { + resolve(self.get('folders')); + }); + } else { + return this.reload(); + } + }, - if (this.get('folders') != null) { - return new Ember.RSVP.Promise(function(resolve) { - resolve(self.get('folders')); - }); - } else { - return this.reload(); - } - }, + // Updates an existing folder record. + save(folder) { + let id = folder.get('id'); - // Updates an existing folder record. - save(folder) { - let id = folder.get('id'); + return this.get('ajax').request(`folders/${id}`, { + method: 'PUT', + contentType: 'json', + data: JSON.stringify(folder) + }); + }, - return this.get('ajax').request(`folders/${id}`, { - method: 'PUT', - contentType: 'json', - data: JSON.stringify(folder) - }); - }, + remove: function (folderId, moveToId) { + let url = `folders/${folderId}/move/${moveToId}`; - remove: function(folderId, moveToId) { - let url = `folders/${folderId}/move/${moveToId}`; + return this.get('ajax').request(url, { + method: 'DELETE' + }); + }, - return this.get('ajax').request(url, { - method: 'DELETE' - }); - }, + onboard: function (folderId, payload) { + let url = `public/share/${folderId}`; - onboard: function(folderId, payload) { - let url = `public/share/${folderId}`; + return this.get('ajax').post(url, { + contentType: "application/json", + data: payload + }); + }, - return this.get('ajax').post(url, { - contentType: "application/json", - data: payload - }); - }, + // getProtectedFolderInfo returns non-private folders and who has access to them. + getProtectedFolderInfo: function () { + return this.get('ajax').request(`folders?filter=viewers`, { + method: "GET" + }).then((response) => { + let data = []; + _.each(response, function (obj) { + data.pushObject(models.ProtectedFolderParticipant.create(obj)); + }); - // getProtectedFolderInfo returns non-private folders and who has access to them. - getProtectedFolderInfo: function() { - return this.get('ajax').request(`folders?filter=viewers`, { - method: "GET" - }).then((response)=>{ - let data = []; - _.each(response, function(obj) { - data.pushObject(models.ProtectedFolderParticipant.create(obj)); - }); + return data; + }); + }, - return data; - }); - }, + // reloads and caches folders. + reload() { - // reloads and caches folders. - reload() { + return this.get('ajax').request(`folders`, { + method: "GET" + }).then((response) => { + let data = []; + _.each(response, function (obj) { + data.pushObject(models.FolderModel.create(obj)); + }); - return this.get('ajax').request(`folders`, { - method: "GET" - }).then((response)=>{ - let data = []; - _.each(response, function(obj) { - data.pushObject(models.FolderModel.create(obj)); - }); + return data; + }); + }, - return data; - }); - }, + // so who can see/edit this folder? + getPermissions(folderId) { - // so who can see/edit this folder? - getPermissions(folderId) { + return this.get('ajax').request(`folders/${folderId}/permissions`, { + method: "GET" + }).then((response) => { + let data = []; + _.each(response, function (obj) { + data.pushObject(models.FolderPermissionModel.create(obj)); + }); - return this.get('ajax').request(`folders/${folderId}/permissions`, { - method: "GET" - }).then((response)=>{ - let data = []; - _.each(response, function(obj) { - data.pushObject(models.FolderPermissionModel.create(obj)); - }); + return data; + }); + }, - return data; - }); - }, + // persist folder permissions + savePermissions(folderId, payload) { - // persist folder permissions - savePermissions(folderId, payload) { + return this.get('ajax').request(`folders/${folderId}/permissions`, { + method: 'PUT', + contentType: 'json', + data: JSON.stringify(payload) + }); + }, - return this.get('ajax').request(`folders/${folderId}/permissions`, { - method: 'PUT', - contentType: 'json', - data: JSON.stringify(payload) - }); - }, + // share this folder with new users! + share(folderId, invitation) { - // share this folder with new users! - share(folderId, invitation) { + return this.get('ajax').post(`folders/${folderId}/invitation`, { + contentType: 'json', + data: JSON.stringify(invitation) + }); + }, - return this.get('ajax').post(`folders/${folderId}/invitation`, { - contentType: 'json', - data: JSON.stringify(invitation) - }); - }, + // Current folder caching + setCurrentFolder(folder) { + if (is.undefined(folder) || is.null(folder)) { + return; + } - // Current folder caching - setCurrentFolder(folder) { - if (is.undefined(folder) || is.null(folder)) { - return; - } + this.set('currentFolder', folder); + this.get('localStorage').storeSessionItem("folder", get(folder, 'id')); + this.set('canEditCurrentFolder', false); - this.set('currentFolder', folder); - this.get('localStorage').storeSessionItem("folder", get(folder, 'id')); - this.set('canEditCurrentFolder', false); + let userId = this.get('sessionService.user.id'); + if (userId === "") { + userId = "0"; + } - let userId = this.get('sessionService.user.id'); - if (userId === "") { - userId = "0"; - } + let url = `users/${userId}/permissions`; - let url = `users/${userId}/permissions`; + return this.get('ajax').request(url).then((folderPermissions) => { + // safety check + this.set('canEditCurrentFolder', false); - return this.get('ajax').request(url).then((folderPermissions) => { - // safety check - this.set('canEditCurrentFolder', false); + if (folderPermissions.length === 0) { + return; + } - if (folderPermissions.length === 0) { - return; - } + let result = []; + let folderId = folder.get('id'); - let result = []; - let folderId = folder.get('id'); + folderPermissions.forEach(function (item) { + if (item.folderId === folderId) { + result.push(item); + } + }); - folderPermissions.forEach(function(item) { - if (item.folderId === folderId) { - result.push(item); - } - }); + let canEdit = false; - let canEdit = false; + result.forEach(function (permission) { + if (permission.userId === userId) { + canEdit = permission.canEdit; + } - result.forEach(function(permission) { - if (permission.userId === userId) { - canEdit = permission.canEdit; - } - - if (permission.userId === "" && !canEdit) { - canEdit = permission.canEdit; - } - }); - Ember.run(() => { - this.set('canEditCurrentFolder', canEdit && this.get('sessionService.authenticated')); - }); - }); - }, -}); + if (permission.userId === "" && !canEdit) { + canEdit = permission.canEdit; + } + }); + Ember.run(() => { + this.set('canEditCurrentFolder', canEdit && this.get('sessionService.authenticated')); + }); + }); + }, +}); \ No newline at end of file