2017-11-21 14:47:49 +00:00
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import Component from '@ember/component' ;
import { schedule } from '@ember/runloop' ;
2017-11-22 11:02:35 +00:00
import { computed } from '@ember/object' ;
import { inject as service } from '@ember/service' ;
2017-11-21 14:47:49 +00:00
import NotifierMixin from '../../mixins/notifier' ;
import AuthMixin from '../../mixins/auth' ;
export default Component . extend ( NotifierMixin , AuthMixin , {
2017-11-23 20:40:46 +00:00
spaceService : service ( 'folder' ) ,
2017-11-22 11:02:35 +00:00
session : service ( ) ,
appMeta : service ( ) ,
pinned : service ( ) ,
2017-11-21 14:47:49 +00:00
spaceName : '' ,
copyTemplate : true ,
copyPermission : true ,
copyDocument : false ,
clonedSpace : { id : '' } ,
2017-11-22 11:02:35 +00:00
pinState : {
isPinned : false ,
pinId : '' ,
newName : ''
} ,
spaceSettings : computed ( 'permissions' , function ( ) {
return this . get ( 'permissions.spaceOwner' ) || this . get ( 'permissions.spaceManage' ) ;
} ) ,
deleteSpaceName : '' ,
2017-11-23 20:40:46 +00:00
inviteEmail : '' ,
inviteMessage : '' ,
2017-11-22 11:02:35 +00:00
didReceiveAttrs ( ) {
this . _super ( ... arguments ) ;
let folder = this . get ( 'space' ) ;
let targets = _ . reject ( this . get ( 'spaces' ) , { id : folder . get ( 'id' ) } ) ;
this . get ( 'pinned' ) . isSpacePinned ( folder . get ( 'id' ) ) . then ( ( pinId ) => {
this . set ( 'pinState.pinId' , pinId ) ;
this . set ( 'pinState.isPinned' , pinId !== '' ) ;
this . set ( 'pinState.newName' , folder . get ( 'name' ) ) ;
this . renderTooltips ( ) ;
} ) ;
this . set ( 'movedFolderOptions' , targets ) ;
} ,
2017-11-21 14:47:49 +00:00
didInsertElement ( ) {
this . _super ( ... arguments ) ;
2017-11-23 20:40:46 +00:00
$ ( '#space-delete-modal' ) . on ( 'show.bs.modal' , function ( event ) { // eslint-disable-line no-unused-vars
2017-11-21 14:47:49 +00:00
schedule ( 'afterRender' , ( ) => {
2017-11-23 20:40:46 +00:00
$ ( "#delete-space-name" ) . focus ( ) ;
2017-11-21 14:47:49 +00:00
} ) ;
} ) ;
2017-11-23 20:40:46 +00:00
$ ( '#space-invite-modal' ) . on ( 'show.bs.modal' , ( ) => { // eslint-disable-line no-unused-vars
schedule ( 'afterRender' , ( ) => {
$ ( "#space-invite-email" ) . focus ( ) ;
if ( this . get ( 'inviteMessage' ) . length === 0 ) {
this . set ( 'inviteMessage' , this . getDefaultInvitationMessage ( ) ) ;
}
} ) ;
} ) ;
} ,
willDestroyElement ( ) {
this . _super ( ... arguments ) ;
$ ( '[data-toggle="tooltip"]' ) . tooltip ( 'dispose' ) ;
2017-11-21 14:47:49 +00:00
} ,
2017-11-22 11:02:35 +00:00
renderTooltips ( ) {
schedule ( 'afterRender' , ( ) => {
2017-11-23 20:40:46 +00:00
$ ( '[data-toggle="tooltip"]' ) . tooltip ( 'dispose' ) ;
$ ( 'body' ) . tooltip ( { selector : '[data-toggle="tooltip"]' , delay : 250 } ) ;
2017-11-22 11:02:35 +00:00
} ) ;
} ,
2017-11-23 20:40:46 +00:00
getDefaultInvitationMessage ( ) {
return "Hey there, I am sharing the " + this . get ( 'space.name' ) + " space (in " + this . get ( "appMeta.title" ) + ") with you so we can both collaborate on documents." ;
} ,
2017-11-21 14:47:49 +00:00
actions : {
2017-11-22 11:02:35 +00:00
onUnpin ( ) {
this . get ( 'pinned' ) . unpinItem ( this . get ( 'pinState.pinId' ) ) . then ( ( ) => {
2017-11-23 20:40:46 +00:00
$ ( '#space-pin-button' ) . tooltip ( 'dispose' ) ;
2017-11-22 11:02:35 +00:00
this . set ( 'pinState.isPinned' , false ) ;
this . set ( 'pinState.pinId' , '' ) ;
this . eventBus . publish ( 'pinChange' ) ;
this . renderTooltips ( ) ;
} ) ;
} ,
onPin ( ) {
let pin = {
pin : this . get ( 'pinState.newName' ) ,
documentId : '' ,
folderId : this . get ( 'space.id' )
} ;
this . get ( 'pinned' ) . pinItem ( pin ) . then ( ( pin ) => {
2017-11-23 20:40:46 +00:00
$ ( '#space-pin-button' ) . tooltip ( 'dispose' ) ;
2017-11-22 11:02:35 +00:00
this . set ( 'pinState.isPinned' , true ) ;
this . set ( 'pinState.pinId' , pin . get ( 'id' ) ) ;
this . eventBus . publish ( 'pinChange' ) ;
this . renderTooltips ( ) ;
} ) ;
return true ;
} ,
2017-11-23 20:40:46 +00:00
onSpaceInvite ( e ) {
e . preventDefault ( ) ;
var email = this . get ( 'inviteEmail' ) . trim ( ) . replace ( / /g , '' ) ;
var message = this . get ( 'inviteMessage' ) . trim ( ) ;
if ( message . length === 0 ) {
message = this . getDefaultInvitationMessage ( ) ;
}
if ( email . length === 0 ) {
$ ( '#space-invite-email' ) . addClass ( 'is-invalid' ) . focus ( ) ;
return ;
}
var result = {
Message : message ,
Recipients : [ ]
} ;
// Check for multiple email addresses
if ( email . indexOf ( "," ) > - 1 ) {
result . Recipients = email . split ( ',' ) ;
}
if ( email . indexOf ( ";" ) > - 1 && result . Recipients . length === 0 ) {
result . Recipients = email . split ( ';' ) ;
}
// Handle just one email address
if ( result . Recipients . length === 0 && email . length > 0 ) {
result . Recipients . push ( email ) ;
}
this . set ( 'inviteEmail' , '' ) ;
this . get ( 'spaceService' ) . share ( this . get ( 'space.id' ) , result ) . then ( ( ) => {
$ ( '#space-invite-email' ) . removeClass ( 'is-invalid' ) ;
} ) ;
$ ( '#space-invite-modal' ) . modal ( 'hide' ) ;
$ ( '#space-invite-modal' ) . modal ( 'dispose' ) ;
} ,
onSpaceDelete ( e ) {
2017-11-22 11:02:35 +00:00
e . preventDefault ( ) ;
let spaceName = this . get ( 'space' ) . get ( 'name' ) ;
let spaceNameTyped = this . get ( 'deleteSpaceName' ) ;
if ( spaceNameTyped !== spaceName || spaceNameTyped === '' || spaceName === '' ) {
$ ( "#delete-space-name" ) . addClass ( "is-invalid" ) . focus ( ) ;
return ;
}
this . set ( 'deleteSpaceName' , '' ) ;
$ ( "#delete-space-name" ) . removeClass ( "is-invalid" ) ;
this . attrs . onDeleteSpace ( this . get ( 'space.id' ) ) ;
2017-11-23 20:40:46 +00:00
$ ( '#space-delete-modal' ) . modal ( 'hide' ) ;
$ ( '#space-delete-modal' ) . modal ( 'dispose' ) ;
2017-11-21 14:47:49 +00:00
} ,
onAddSpace ( e ) {
e . preventDefault ( ) ;
2017-11-22 17:27:09 +00:00
} ,
onImport ( ) {
this . attrs . onRefresh ( ) ;
} ,
onHideStartDocument ( ) {
// this.set('showStartDocument', false);
2017-11-21 14:47:49 +00:00
}
}
} ) ;