Personalizzazione dell’app di revisione
Per facilitare la personalizzazione dell’app di revisione abbiamo fornito alcuni hook elencati e spiegati di seguito:
Revisione-Commento
- id:
review_comment
- hook:
this.next('updateExtraProps')
:
Come discusso qui, qualsiasi nuovo attributo aggiunto durante la personalizzazione va sotto this.model.extraProps
. Il metodo updateExtraProps
consente di aggiungere attributi a un commento di revisione, gestendo l'aggiornamento e l'archiviazione dell'attributo aggiunto anche sul server.
Esempio di utilizzo
Si supponga, ad esempio, di voler aggiungere i campi commentRationale
e severity
ai commenti.
Aggiorniamo commentRationale
a "Questa è una frase importante". e severity
a "CRITICAL".
Questa operazione può essere eseguita utilizzando la sintassi:
this.next('updateExtraProps', {
'commentRationale': 'This is an important sentence.',
'severity': 'CRITICAL'
})
Il frammento di codice sopra riportato gestirà l’aggiornamento e il salvataggio dei valori. È possibile eseguire il rendering dei valori salvati nell’interfaccia utente definendo la vista.
{
"component" : "label",
"label": "@extraProps.commentRationale"
}
Pannello Revisione in linea
- id:
inline_review_panel
-
hook:
onNewCommentEvent
L'hookonNewCommentEvent
consente di generare un evento o di chiamare un metodo su un nuovo commento o su un nuovo evento di risposta.
Gli argomenti ricevuti inonNewCommentEvent
includono:- eventi: l’evento di commento/risposta inviato.
- newComment: booleano
Se l'evento inviato è un nuovo evento di commento, ad esempiohighlight
,insertion
,deletion
,sticky note comment
- newReply: booleano
Se l’evento inviato era un nuovo evento di risposta.
-
hook:
sendExtraProps
Questo hook è utile se desideri estendere un event
e inviare extraProps
dal pannello di revisione in linea. Di seguito viene illustrato l'utilizzo di questi due hook.
Esempio di pannello Revisione in linea
Si supponga di voler inviare un oggetto extraProp, userInfo
, ogni volta che viene inviato un nuovo commento o una nuova risposta. Ora questo verrà fatto tramite il pannello di revisione in linea, tuttavia non abbiamo il riferimento al commentId del commento appena generato, quindi per ottenere questo possiamo scrivere il seguente codice.
onNewCommentEvent(args){
const events = _.get(args, "events")
const currTopicIndex = tcx.model.getValue(tcx.model.KEYS.REVIEW_CURR_TOPIC) || this.getValue('currTopicIndex') || "0"
const event = _.get(_.get(events, currTopicIndex), '0')
const newComment = _.get(args, 'newComment')
const newReply = _.get(args, 'newReply')
if ((newComment || newReply) && event) {
this.next('setUserInfo', event)
}
},
Nel frammento di codice precedente, stiamo verificando se l’evento inviato è un nuovo commento o una nuova risposta. In caso di un nuovo commento o risposta, verrà chiamato il metodo setUserInfo
const getUserInfo = (userId) => {
return $.ajax({
url: '/bin/dxml/xmleditor/userinfo',
data: {
username: userId,
},
success: (data) => {
return data
}
})
}
setUserInfo(event) {
getUserInfo(event.user).done(userData => {
const extraProps = {
"userFirstName": userData?.givenName || '',
"userLastName": userData?.familyName || '',
"userTitle": userData?.title || '',
"userJobTitle": userData?.jobTitle || '',
'userEmail': userData?.email || '',
}
const data = {... event, extraProps}
this.next(
'sendExtraProps',
data
)
})
},
Con il metodo precedente, estendiamo l’evento per inviare extraProp che includono nome dell’utente, e-mail, titolo, ecc. Estendendo l’evento in questo modo, gli extraProp vengono inviati con il commentId corretto, garantendo che siano allegati al commento corretto.
L'hook updateExtraProps
chiama intrinsecamente l'hook sendExtraProps
, quindi quando utilizzare cosa?
updateExtraProps
viene utilizzato nel controller review_comment
, che ha già il id
del commento e pertanto è sufficiente menzionare extraProps.
inline_review_panel
non ha tuttavia accesso all'ID del commento, pertanto in qualsiasi momento sia necessario inviare un evento dal pannello di revisione in linea, sendExtraProps
sarà utile.