2020 */
2121
2222qx . Class . define ( "osparc.data.model.Conversation" , {
23+ type : "abstract" ,
2324 extend : qx . core . Object ,
2425
2526 /**
2627 * @param conversationData {Object} Object containing the serialized Conversation Data
27- * @param studyId {String} ID of the Study
2828 * */
29- construct : function ( conversationData , studyId ) {
29+ construct : function ( conversationData ) {
3030 this . base ( arguments ) ;
3131
3232 this . set ( {
@@ -36,17 +36,11 @@ qx.Class.define("osparc.data.model.Conversation", {
3636 type : conversationData . type ,
3737 created : new Date ( conversationData . created ) ,
3838 modified : new Date ( conversationData . modified ) ,
39- projectId : conversationData . projectUuid || null ,
40- extraContext : conversationData . extraContext || null ,
41- studyId : studyId || null ,
39+ lastMessageCreatedAt : conversationData . lastMessageCreatedAt ? new Date ( conversationData . lastMessageCreatedAt ) : null
4240 } ) ;
4341
4442 this . __messages = [ ] ;
4543 this . __listenToConversationMessageWS ( ) ;
46-
47- if ( conversationData . type === "SUPPORT" ) {
48- this . __fetchFirstAndLastMessages ( ) ;
49- }
5044 } ,
5145
5246 statics : {
@@ -76,7 +70,7 @@ qx.Class.define("osparc.data.model.Conversation", {
7670 nullable : false ,
7771 init : null ,
7872 event : "changeName" ,
79- apply : "__applyName " ,
73+ apply : "_applyName " ,
8074 } ,
8175
8276 userGroupId : {
@@ -111,46 +105,11 @@ qx.Class.define("osparc.data.model.Conversation", {
111105 event : "changeModified" ,
112106 } ,
113107
114- projectId : {
115- check : "String" ,
116- nullable : true ,
117- init : null ,
118- event : "changeProjectId" ,
119- } ,
120-
121- extraContext : {
122- check : "Object" ,
123- nullable : true ,
124- init : null ,
125- event : "changeExtraContext" ,
126- } ,
127-
128- nameAlias : {
129- check : "String" ,
130- nullable : false ,
131- init : "" ,
132- event : "changeNameAlias" ,
133- } ,
134-
135- firstMessage : {
136- check : "osparc.data.model.Message" ,
137- nullable : true ,
138- init : null ,
139- event : "changeFirstMessage" ,
140- } ,
141-
142- lastMessage : {
143- check : "osparc.data.model.Message" ,
144- nullable : true ,
145- init : null ,
146- event : "changeLastMessage" ,
147- apply : "__applyLastMessage" ,
148- } ,
149-
150- studyId : {
151- check : "String" ,
108+ lastMessageCreatedAt : {
109+ check : "Date" ,
152110 nullable : true ,
153111 init : null ,
112+ event : "changeLastMessageCreatedAt" ,
154113 } ,
155114 } ,
156115
@@ -161,21 +120,11 @@ qx.Class.define("osparc.data.model.Conversation", {
161120 } ,
162121
163122 members : {
164- __fetchingFirstAndLastMessage : null ,
165123 __nextRequestParams : null ,
166124 __messages : null ,
167125
168- __applyName : function ( name ) {
169- if ( name && name !== "null" ) {
170- this . setNameAlias ( name ) ;
171- }
172- } ,
173-
174- __applyLastMessage : function ( lastMessage ) {
175- const name = this . getName ( ) ;
176- if ( ! name || name === "null" ) {
177- this . setNameAlias ( lastMessage ? lastMessage . getContent ( ) : "" ) ;
178- }
126+ _applyName : function ( name ) {
127+ return ;
179128 } ,
180129
181130 __listenToConversationMessageWS : function ( ) {
@@ -191,13 +140,14 @@ qx.Class.define("osparc.data.model.Conversation", {
191140 if ( conversationId === this . getConversationId ( ) ) {
192141 switch ( eventName ) {
193142 case this . self ( ) . CHANNELS . CONVERSATION_MESSAGE_CREATED :
194- this . addMessage ( messageData ) ;
143+ this . _addMessage ( messageData ) ;
144+ this . setLastMessageCreatedAt ( new Date ( messageData . created ) ) ;
195145 break ;
196146 case this . self ( ) . CHANNELS . CONVERSATION_MESSAGE_UPDATED :
197- this . updateMessage ( messageData ) ;
147+ this . _updateMessage ( messageData ) ;
198148 break ;
199149 case this . self ( ) . CHANNELS . CONVERSATION_MESSAGE_DELETED :
200- this . deleteMessage ( messageData ) ;
150+ this . _deleteMessage ( messageData ) ;
201151 break ;
202152 }
203153 }
@@ -207,38 +157,6 @@ qx.Class.define("osparc.data.model.Conversation", {
207157 } ) ;
208158 } ,
209159
210- __fetchFirstAndLastMessages : function ( ) {
211- if ( this . __fetchingFirstAndLastMessage ) {
212- return this . __fetchingFirstAndLastMessage ;
213- }
214-
215- this . __fetchingFirstAndLastMessage = true ;
216- osparc . store . ConversationsSupport . getInstance ( ) . fetchLastMessage ( this . getConversationId ( ) )
217- . then ( resp => {
218- const messages = resp [ "data" ] ;
219- if ( messages . length ) {
220- const lastMessage = new osparc . data . model . Message ( messages [ 0 ] ) ;
221- this . setLastMessage ( lastMessage ) ;
222- }
223- // fetch first message only if there is more than one message
224- if ( resp [ "_meta" ] [ "total" ] === 1 ) {
225- const firstMessage = new osparc . data . model . Message ( messages [ 0 ] ) ;
226- this . setFirstMessage ( firstMessage ) ;
227- } else if ( resp [ "_meta" ] [ "total" ] > 1 ) {
228- osparc . store . ConversationsSupport . getInstance ( ) . fetchFirstMessage ( this . getConversationId ( ) , resp [ "_meta" ] )
229- . then ( firstMessages => {
230- if ( firstMessages . length ) {
231- const firstMessage = new osparc . data . model . Message ( firstMessages [ 0 ] ) ;
232- this . setFirstMessage ( firstMessage ) ;
233- }
234- } ) ;
235- }
236- return null ;
237- } )
238- . catch ( err => osparc . FlashMessenger . logError ( err ) )
239- . finally ( ( ) => this . __fetchingFirstAndLastMessage = null ) ;
240- } ,
241-
242160 amIOwner : function ( ) {
243161 return this . getUserGroupId ( ) === osparc . auth . Data . getInstance ( ) . getGroupId ( ) ;
244162 } ,
@@ -251,7 +169,8 @@ qx.Class.define("osparc.data.model.Conversation", {
251169 limit : 42
252170 }
253171 } ;
254- if ( this . getStudyId ( ) ) {
172+ const isProjectConversation = this instanceof osparc . data . model . ConversationProject ;
173+ if ( isProjectConversation ) {
255174 params . url . studyId = this . getStudyId ( ) ;
256175 }
257176
@@ -263,13 +182,13 @@ qx.Class.define("osparc.data.model.Conversation", {
263182 const options = {
264183 resolveWResponse : true
265184 } ;
266- const promise = this . getStudyId ( ) ?
185+ const promise = isProjectConversation ?
267186 osparc . data . Resources . fetch ( "conversationsStudies" , "getMessagesPage" , params , options ) :
268187 osparc . data . Resources . fetch ( "conversationsSupport" , "getMessagesPage" , params , options ) ;
269188 return promise
270189 . then ( resp => {
271190 const messagesData = resp [ "data" ] ;
272- messagesData . forEach ( messageData => this . addMessage ( messageData ) ) ;
191+ messagesData . forEach ( messageData => this . _addMessage ( messageData ) ) ;
273192 this . __nextRequestParams = resp [ "_links" ] [ "next" ] ;
274193 return resp ;
275194 } )
@@ -282,13 +201,6 @@ qx.Class.define("osparc.data.model.Conversation", {
282201 . catch ( err => osparc . FlashMessenger . logError ( err ) ) ;
283202 } ,
284203
285- patchExtraContext : function ( extraContext ) {
286- osparc . store . ConversationsSupport . getInstance ( ) . patchExtraContext ( this . getConversationId ( ) , extraContext )
287- . then ( ( ) => {
288- this . setExtraContext ( extraContext ) ;
289- } ) ;
290- } ,
291-
292204 getMessages : function ( ) {
293205 return this . __messages ;
294206 } ,
@@ -301,81 +213,35 @@ qx.Class.define("osparc.data.model.Conversation", {
301213 return this . __messages . some ( msg => msg . getMessageId ( ) === messageId ) ;
302214 } ,
303215
304- addMessage : function ( messageData ) {
216+ _addMessage : function ( messageData ) {
305217 let message = this . __messages . find ( msg => msg . getMessageId ( ) === messageData [ "messageId" ] ) ;
306218 if ( ! message ) {
307219 message = new osparc . data . model . Message ( messageData ) ;
308220 this . __messages . push ( message ) ;
309221 osparc . data . model . Message . sortMessagesByDate ( this . __messages ) ;
310222 this . fireDataEvent ( "messageAdded" , message ) ;
311- this . __evalFirstAndLastMessage ( ) ;
312223 }
313224 return message ;
314225 } ,
315226
316- updateMessage : function ( messageData ) {
227+ _updateMessage : function ( messageData ) {
317228 if ( messageData ) {
318229 const found = this . __messages . find ( msg => msg . getMessageId ( ) === messageData [ "messageId" ] ) ;
319230 if ( found ) {
320231 found . setData ( messageData ) ;
321232 this . fireDataEvent ( "messageUpdated" , found ) ;
322- this . __evalFirstAndLastMessage ( ) ;
323233 }
324234 }
325235 } ,
326236
327- deleteMessage : function ( messageData ) {
237+ _deleteMessage : function ( messageData ) {
328238 if ( messageData ) {
329239 const found = this . __messages . find ( msg => msg . getMessageId ( ) === messageData [ "messageId" ] ) ;
330240 if ( found ) {
331241 this . __messages . splice ( this . __messages . indexOf ( found ) , 1 ) ;
332242 this . fireDataEvent ( "messageDeleted" , found ) ;
333- this . __evalFirstAndLastMessage ( ) ;
334243 }
335244 }
336245 } ,
337-
338- __evalFirstAndLastMessage : function ( ) {
339- if ( this . __messages && this . __messages . length ) {
340- // newest first
341- this . setFirstMessage ( this . __messages [ this . __messages . length - 1 ] ) ;
342- this . setLastMessage ( this . __messages [ 0 ] ) ;
343- }
344- } ,
345-
346- getContextProjectId : function ( ) {
347- if ( this . getExtraContext ( ) && "projectId" in this . getExtraContext ( ) ) {
348- return this . getExtraContext ( ) [ "projectId" ] ;
349- }
350- return null ;
351- } ,
352-
353- getFogbugzLink : function ( ) {
354- if ( this . getExtraContext ( ) && "fogbugz_case_url" in this . getExtraContext ( ) ) {
355- return this . getExtraContext ( ) [ "fogbugz_case_url" ] ;
356- }
357- return null ;
358- } ,
359-
360- getAppointment : function ( ) {
361- if ( this . getExtraContext ( ) && "appointment" in this . getExtraContext ( ) ) {
362- return this . getExtraContext ( ) [ "appointment" ] ;
363- }
364- return null ;
365- } ,
366-
367- setAppointment : function ( appointment ) {
368- const extraContext = this . getExtraContext ( ) || { } ;
369- extraContext [ "appointment" ] = appointment ? appointment . toISOString ( ) : null ;
370- // OM: Supporters are not allowed to patch the conversation metadata yet
371- const backendAllowsPatch = osparc . store . Groups . getInstance ( ) . amIASupportUser ( ) ? false : true ;
372- if ( backendAllowsPatch ) {
373- return osparc . store . ConversationsSupport . getInstance ( ) . patchExtraContext ( this . getConversationId ( ) , extraContext )
374- . then ( ( ) => {
375- this . setExtraContext ( Object . assign ( { } , extraContext ) ) ;
376- } ) ;
377- }
378- return Promise . resolve ( this . setExtraContext ( Object . assign ( { } , extraContext ) ) ) ;
379- } ,
380246 } ,
381247} ) ;
0 commit comments