[IMP] mail, *: auto add implicit attributes of identifying fields
Automatically add `required` and `readonly` on identifying fields and remove them from field definition. Task-2955910. * = calendar, hr, im_livechat, rating, snailmail, website_livechat closes odoo/odoo#98283 Related: odoo/enterprise#30511 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit is contained in:
@@ -25,8 +25,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
name: attr(),
|
||||
start: attr(),
|
||||
|
||||
@@ -164,8 +164,6 @@ registerModel({
|
||||
*/
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Partner related to this employee.
|
||||
|
||||
@@ -158,8 +158,6 @@ registerModel({
|
||||
publicLivechatGlobalOwner: one('PublicLivechatGlobal', {
|
||||
identifying: true,
|
||||
inverse: 'chatbot',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
scriptId: attr({
|
||||
compute: '_computeScriptId',
|
||||
|
||||
@@ -9,8 +9,6 @@ registerModel({
|
||||
chabotOwner: one('Chatbot', {
|
||||
identifying: true,
|
||||
inverse: 'currentStep',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
data: attr(),
|
||||
},
|
||||
|
||||
@@ -10,7 +10,6 @@ addFields('DiscussSidebarCategory', {
|
||||
discussAsLivechat: one('Discuss', {
|
||||
identifying: true,
|
||||
inverse: 'categoryLivechat',
|
||||
readonly: true,
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
@@ -610,8 +610,6 @@ registerModel({
|
||||
publicLivechatGlobalOwner: one('PublicLivechatGlobal', {
|
||||
identifying: true,
|
||||
inverse: 'livechatButtonView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
serverUrl: attr({
|
||||
compute: '_computeServerUrl',
|
||||
|
||||
@@ -8,8 +8,6 @@ registerModel({
|
||||
fields: {
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
name: attr(),
|
||||
},
|
||||
|
||||
@@ -94,8 +94,6 @@ registerModel({
|
||||
publicLivechatGlobalOwner: one('PublicLivechatGlobal', {
|
||||
identifying: true,
|
||||
inverse: 'publicLivechat',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
name: attr({
|
||||
compute: '_computeName',
|
||||
|
||||
@@ -36,8 +36,6 @@ registerModel({
|
||||
publicLivechatGlobalOwner: one('PublicLivechatGlobal', {
|
||||
identifying: true,
|
||||
inverse: 'feedbackView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
widget: attr(),
|
||||
},
|
||||
|
||||
@@ -97,8 +97,6 @@ registerModel({
|
||||
publicLivechatGlobalOwner: one('PublicLivechatGlobal', {
|
||||
identifying: true,
|
||||
inverse: 'notificationHandler',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -25,8 +25,6 @@ registerModel({
|
||||
data: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
legacyPublicLivechatMessage: attr(),
|
||||
},
|
||||
|
||||
@@ -21,8 +21,6 @@ registerModel({
|
||||
publicLivechatWindowOwner: one('PublicLivechatWindow', {
|
||||
identifying: true,
|
||||
inverse: 'publicLivechatView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
widget: attr(),
|
||||
},
|
||||
|
||||
@@ -44,8 +44,6 @@ registerModel({
|
||||
livechatButtonViewOwner: one('LivechatButtonView', {
|
||||
identifying: true,
|
||||
inverse: 'chatWindow',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
publicLivechatView: one('PublicLivechatView', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -21,6 +21,7 @@ export class ModelField {
|
||||
identifying = false,
|
||||
inverse,
|
||||
isCausal = false,
|
||||
model,
|
||||
readonly = false,
|
||||
related,
|
||||
relationType,
|
||||
@@ -69,6 +70,7 @@ export class ModelField {
|
||||
* relation is removed, the related record is automatically deleted.
|
||||
*/
|
||||
this.isCausal = isCausal;
|
||||
this.model = model;
|
||||
/**
|
||||
* Determines whether the field is read only. Read only field
|
||||
* can't be updated once the record is created.
|
||||
@@ -137,6 +139,12 @@ export class ModelField {
|
||||
* model name this relation refers to.
|
||||
*/
|
||||
this.to = to;
|
||||
if (this.identifying) {
|
||||
this.readonly = true;
|
||||
if (model.identifyingMode === 'and') {
|
||||
this.required = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -506,14 +506,23 @@ export class ModelManager {
|
||||
throw new Error(`Relational field "${model}/${fieldName}" has "sort" with a relation of type "${field.relationType}" but "sort" is only supported for "many".`);
|
||||
}
|
||||
}
|
||||
// 3. Computed field.
|
||||
// 3. Check for redundant attributes on identifying fields.
|
||||
if (field.identifying) {
|
||||
if ('readonly' in field) {
|
||||
throw new Error(`Identifying field(${fieldName}) on ${model} has unnecessary "readonly" attribute (readonly is implicit for identifying fields).`);
|
||||
}
|
||||
if ('required' in field && model.identifyingMode === 'and') {
|
||||
throw new Error(`Identifying field(${fieldName}) on ${model} has unnecessary "required" attribute (required is implicit for AND identifying fields).`);
|
||||
}
|
||||
}
|
||||
// 4. Computed field.
|
||||
if (field.compute && !(typeof field.compute === 'string')) {
|
||||
throw new Error(`Property "compute" of field(${fieldName}) on ${model} must be a string (instance method name).`);
|
||||
}
|
||||
if (field.compute && !(model.prototype[field.compute])) {
|
||||
throw new Error(`Property "compute" of field(${fieldName}) on ${model} does not refer to an instance method of this model.`);
|
||||
}
|
||||
// 4. Related field.
|
||||
// 5. Related field.
|
||||
if (field.compute && field.related) {
|
||||
throw new Error(`field(${fieldName}) on ${model} cannot be a related and compute field at the same time.`);
|
||||
}
|
||||
@@ -624,9 +633,6 @@ export class ModelManager {
|
||||
if (!field) {
|
||||
throw new Error(`Identifying field "${identifyingField}" is not a field on ${model}.`);
|
||||
}
|
||||
if (!field.readonly) {
|
||||
throw new Error(`Identifying field "${identifyingField}" on ${model} is lacking readonly.`);
|
||||
}
|
||||
if (field.to) {
|
||||
if (field.relationType !== 'one') {
|
||||
throw new Error(`Identifying field "${identifyingField}" on ${model} has a relation of type "${field.relationType}" but identifying field is only supported for "one".`);
|
||||
@@ -1084,6 +1090,7 @@ export class ModelManager {
|
||||
// Allows the inverse of an identifying field to be
|
||||
// automatically generated.
|
||||
isCausal: field.identifying,
|
||||
model: this.models[field.to],
|
||||
},
|
||||
));
|
||||
return inverseField;
|
||||
@@ -1196,6 +1203,7 @@ export class ModelManager {
|
||||
for (const [fieldName, fieldData] of registry.get(model.name).get('fields')) {
|
||||
model.fields[fieldName] = new ModelField(Object.assign({}, fieldData, {
|
||||
fieldName,
|
||||
model,
|
||||
}));
|
||||
if (fieldData.sum) {
|
||||
const [relationFieldName, contributionFieldName] = fieldData.sum.split('.');
|
||||
|
||||
@@ -289,8 +289,6 @@ registerModel({
|
||||
icon: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isCurrentPartnerAssignee: attr({
|
||||
compute: '_computeIsCurrentPartnerAssignee',
|
||||
|
||||
@@ -33,8 +33,6 @@ registerModel({
|
||||
chatter: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'activityBoxView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isActivityListVisible: attr({
|
||||
default: true,
|
||||
|
||||
@@ -46,8 +46,6 @@ registerModel({
|
||||
irModel: one('ir.model', {
|
||||
identifying: true,
|
||||
inverse: 'activityGroup',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
overdue_count: attr({
|
||||
default: 0,
|
||||
|
||||
@@ -79,14 +79,10 @@ registerModel({
|
||||
activityGroup: one('ActivityGroup', {
|
||||
identifying: true,
|
||||
inverse: 'activityGroupViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
activityMenuViewOwner: one('ActivityMenuView', {
|
||||
identifying: true,
|
||||
inverse: 'activityGroupViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -106,8 +106,6 @@ registerModel({
|
||||
popoverViewOwner: one('PopoverView', {
|
||||
identifying: true,
|
||||
inverse: 'activityMarkDonePopoverContentView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -12,8 +12,6 @@ registerModel({
|
||||
displayName: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -170,14 +170,10 @@ registerModel({
|
||||
activity: one('Activity', {
|
||||
identifying: true,
|
||||
inverse: 'activityViews',
|
||||
required: true,
|
||||
readonly: true,
|
||||
}),
|
||||
activityBoxView: one('ActivityBoxView', {
|
||||
identifying: true,
|
||||
inverse: 'activityViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determines whether the details are visible.
|
||||
|
||||
@@ -330,8 +330,6 @@ registerModel({
|
||||
filename: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* States whether this attachment is deletable.
|
||||
|
||||
@@ -36,8 +36,6 @@ registerModel({
|
||||
chatter: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentBoxView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* States the OWL component displaying this attachment box.
|
||||
|
||||
@@ -49,8 +49,6 @@ registerModel({
|
||||
*/
|
||||
attachment: one('Attachment', {
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
attachmentDeleteConfirmDialog: one('Dialog', {
|
||||
inverse: 'attachmentCardOwnerAsAttachmentDeleteConfirm',
|
||||
@@ -62,8 +60,6 @@ registerModel({
|
||||
attachmentList: one('AttachmentList', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentCards',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
hasMultipleActions: attr({
|
||||
compute: '_computeHasMultipleActions',
|
||||
|
||||
@@ -85,8 +85,6 @@ registerModel({
|
||||
dialogOwner: one('Dialog', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentDeleteConfirmView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -115,8 +115,6 @@ registerModel({
|
||||
*/
|
||||
attachment: one('Attachment', {
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
attachmentDeleteConfirmDialog: one('Dialog', {
|
||||
inverse: 'attachmentImageOwnerAsAttachmentDeleteConfirm',
|
||||
@@ -128,8 +126,6 @@ registerModel({
|
||||
attachmentList: one('AttachmentList', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentImages',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determines whether `this` should display a download button.
|
||||
|
||||
@@ -139,7 +139,6 @@ registerModel({
|
||||
attachmentBoxViewOwner: one('AttachmentBoxView', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentList',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the attachment cards that are displaying this nonImageAttachments.
|
||||
@@ -174,7 +173,6 @@ registerModel({
|
||||
composerViewOwner: one('ComposerView', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentList',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the attachment that are an image.
|
||||
@@ -224,7 +222,6 @@ registerModel({
|
||||
messageViewOwner: one('MessageView', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentList',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the attachment that are not an image.
|
||||
|
||||
@@ -251,7 +251,6 @@ registerModel({
|
||||
identifying: true,
|
||||
inverse: 'attachmentViewer',
|
||||
isCausal: true,
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Style of the image (scale + rotation).
|
||||
|
||||
@@ -96,7 +96,6 @@ registerModel({
|
||||
attachmentOwner: one("Attachment", {
|
||||
identifying: true,
|
||||
inverse: 'attachmentViewerViewable',
|
||||
readonly: true,
|
||||
}),
|
||||
accessToken: attr({
|
||||
compute: "_computeAccessToken",
|
||||
|
||||
@@ -89,7 +89,6 @@ registerModel({
|
||||
chatWindowOwnerAsNewMessage: one('ChatWindow', {
|
||||
identifying: true,
|
||||
inverse: 'newMessageAutocompleteInputView',
|
||||
readonly: true,
|
||||
}),
|
||||
component: attr(),
|
||||
customClass: attr({
|
||||
@@ -99,12 +98,10 @@ registerModel({
|
||||
discussSidebarCategoryOwnerAsAddingItem: one('DiscussSidebarCategory', {
|
||||
identifying: true,
|
||||
inverse: 'addingItemAutocompleteInputView',
|
||||
readonly: true,
|
||||
}),
|
||||
discussViewOwnerAsMobileAddItemHeader: one('DiscussView', {
|
||||
identifying: true,
|
||||
inverse: 'mobileAddItemHeaderAutocompleteInputView',
|
||||
readonly: true,
|
||||
}),
|
||||
isFocusOnMount: attr({
|
||||
compute: '_computeIsFocusOnMount',
|
||||
@@ -117,7 +114,6 @@ registerModel({
|
||||
messagingMenuOwnerAsMobileNewMessageInput: one('MessagingMenu', {
|
||||
identifying: true,
|
||||
inverse: 'mobileNewMessageAutocompleteInputView',
|
||||
readonly: true,
|
||||
}),
|
||||
placeholder: attr({
|
||||
compute: '_computePlaceholder',
|
||||
|
||||
@@ -151,8 +151,6 @@ registerModel({
|
||||
callMainView: one('CallMainView', {
|
||||
identifying: true,
|
||||
inverse: 'callActionListView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
callView: one('CallView', {
|
||||
related: 'callMainView.callView',
|
||||
|
||||
@@ -175,7 +175,6 @@ registerModel({
|
||||
welcomeView: one('WelcomeView', {
|
||||
identifying: true,
|
||||
inverse: 'callDemoView',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -36,8 +36,6 @@ registerModel({
|
||||
thread: one('Thread', {
|
||||
identifying: true,
|
||||
inverse: 'callInviteRequestPopup',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -164,8 +164,6 @@ registerModel({
|
||||
callView: one('CallView', {
|
||||
identifying: true,
|
||||
inverse: 'callMainView',
|
||||
required: true,
|
||||
readonly: true,
|
||||
}),
|
||||
channel: one('Thread', {
|
||||
related: 'callView.channel',
|
||||
|
||||
@@ -10,13 +10,9 @@ registerModel({
|
||||
callMainViewOwner: one('CallMainView', {
|
||||
identifying: true,
|
||||
inverse: 'mainTiles',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
channelMember: one('ChannelMember', {
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
participantCard: one('CallParticipantCard', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -68,8 +68,6 @@ registerModel({
|
||||
callActionListView: one('CallActionListView', {
|
||||
identifying: true,
|
||||
inverse: 'callOptionMenu',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
callView: one('CallView', {
|
||||
related: 'callActionListView.callView',
|
||||
|
||||
@@ -170,7 +170,6 @@ registerModel({
|
||||
mainViewTileOwner: one('CallMainViewTile', {
|
||||
identifying: true,
|
||||
inverse: 'participantCard',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Determines if this card has to be displayed in a minimized form.
|
||||
@@ -206,7 +205,6 @@ registerModel({
|
||||
sidebarViewTileOwner: one('CallSidebarViewTile', {
|
||||
identifying: true,
|
||||
inverse: 'participantCard',
|
||||
readonly: true,
|
||||
}),
|
||||
callParticipantVideoView: one('CallParticipantVideoView', {
|
||||
compute: '_computeCallParticipantVideoView',
|
||||
|
||||
@@ -39,8 +39,6 @@ registerModel({
|
||||
callParticipantCardOwner: one('CallParticipantCard', {
|
||||
identifying: true,
|
||||
inverse: 'callParticipantVideoView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
rtcSession: one('RtcSession', {
|
||||
compute: '_computeRtcSession',
|
||||
|
||||
@@ -84,7 +84,6 @@ registerModel({
|
||||
userSetting: one('UserSetting', {
|
||||
identifying: true,
|
||||
inverse: 'callSettingsMenu',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -19,8 +19,6 @@ registerModel({
|
||||
callView: one('CallView', {
|
||||
identifying: true,
|
||||
inverse: 'callSidebarView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
sidebarTiles: many('CallSidebarViewTile', {
|
||||
compute: '_computeSidebarTiles',
|
||||
|
||||
@@ -10,13 +10,9 @@ registerModel({
|
||||
callSidebarViewOwner: one('CallSidebarView', {
|
||||
identifying: true,
|
||||
inverse: 'sidebarTiles',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
channelMember: one('ChannelMember', {
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
participantCard: one('CallParticipantCard', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -31,8 +31,6 @@ registerModel({
|
||||
rtc: one('Rtc', {
|
||||
identifying: true,
|
||||
inverse: 'callSystrayMenu',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -230,8 +230,6 @@ registerModel({
|
||||
threadView: one('ThreadView', {
|
||||
identifying: true,
|
||||
inverse: 'callView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
onChanges: [
|
||||
|
||||
@@ -71,8 +71,6 @@ registerModel({
|
||||
fields: {
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* The keyword to use a specific canned response.
|
||||
|
||||
@@ -92,8 +92,6 @@ registerModel({
|
||||
channel_type: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
memberCount: attr({
|
||||
related: 'thread.memberCount',
|
||||
|
||||
@@ -128,8 +128,6 @@ registerModel({
|
||||
*/
|
||||
name: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
suggestable: one('ComposerSuggestable', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -238,7 +238,6 @@ registerModel({
|
||||
chatWindow: one('ChatWindow', {
|
||||
identifying: true,
|
||||
inverse: 'channelInvitationForm',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the OWL component of this channel invitation form.
|
||||
@@ -275,7 +274,6 @@ registerModel({
|
||||
identifying: true,
|
||||
inverse: 'channelInvitationForm',
|
||||
isCausal: true,
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the OWL ref of the "search" input of this channel invitation
|
||||
|
||||
@@ -19,14 +19,10 @@ registerModel({
|
||||
channelInvitationFormOwner: one('ChannelInvitationForm', {
|
||||
identifying: true,
|
||||
inverse: 'selectablePartnerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
partner: one('Partner', {
|
||||
identifying: true,
|
||||
inverse: 'channelInvitationFormSelectablePartnerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
personaImStatusIconView: one('PersonaImStatusIconView', {
|
||||
compute: '_computePersonaImStatusIconView',
|
||||
|
||||
@@ -9,14 +9,10 @@ registerModel({
|
||||
channelInvitationFormOwner: one('ChannelInvitationForm', {
|
||||
identifying: true,
|
||||
inverse: 'selectedPartnerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
partner: one('Partner', {
|
||||
identifying: true,
|
||||
inverse: 'channelInvitationFormSelectedPartnerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -81,8 +81,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isStreaming: attr({
|
||||
compute: '_computeIsStreaming',
|
||||
|
||||
@@ -79,12 +79,10 @@ registerModel({
|
||||
channelMemberListViewOwnerAsOffline: one('ChannelMemberListView', {
|
||||
identifying: true,
|
||||
inverse: 'offlineCategoryView',
|
||||
readonly: true,
|
||||
}),
|
||||
channelMemberListViewOwnerAsOnline: one('ChannelMemberListView', {
|
||||
identifying: true,
|
||||
inverse: 'onlineCategoryView',
|
||||
readonly: true,
|
||||
}),
|
||||
channelMemberViews: many('ChannelMemberView', {
|
||||
compute: '_computeChannelMemberViews',
|
||||
|
||||
@@ -61,7 +61,6 @@ registerModel({
|
||||
chatWindowOwner: one('ChatWindow', {
|
||||
identifying: true,
|
||||
inverse: 'channelMemberListView',
|
||||
readonly: true,
|
||||
}),
|
||||
offlineCategoryView: one('ChannelMemberListCategoryView', {
|
||||
compute: '_computeOfflineCategoryView',
|
||||
@@ -76,7 +75,6 @@ registerModel({
|
||||
threadViewOwner: one('ThreadView', {
|
||||
identifying: true,
|
||||
inverse: 'channelMemberListView',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -48,14 +48,10 @@ registerModel({
|
||||
channelMemberListCategoryViewOwner: one('ChannelMemberListCategoryView', {
|
||||
identifying: true,
|
||||
inverse: 'channelMemberViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
channelMember: one('ChannelMember', {
|
||||
identifying: true,
|
||||
inverse: 'channelMemberViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
hasOpenChat: attr({
|
||||
compute: '_computeHasOpenChat',
|
||||
|
||||
@@ -660,7 +660,6 @@ registerModel({
|
||||
managerAsNewMessage: one('ChatWindowManager', {
|
||||
identifying: true,
|
||||
inverse: 'newMessageChatWindow',
|
||||
readonly: true,
|
||||
}),
|
||||
name: attr({
|
||||
compute: '_computeName',
|
||||
@@ -684,7 +683,6 @@ registerModel({
|
||||
thread: one('Thread', {
|
||||
identifying: true,
|
||||
inverse: 'chatWindow',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the `ThreadView` displaying `this.thread`.
|
||||
|
||||
@@ -29,8 +29,6 @@ registerModel({
|
||||
chatWindowOwner: one('ChatWindow', {
|
||||
identifying: true,
|
||||
inverse: 'chatWindowHeaderView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -439,8 +439,6 @@ registerModel({
|
||||
*/
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determiners whether the attachment box is visible initially.
|
||||
|
||||
@@ -42,8 +42,6 @@ registerModel({
|
||||
chatter: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'topbar',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -62,8 +62,6 @@ registerModel({
|
||||
*/
|
||||
frequency: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
tickInterval: attr({
|
||||
compute: '_computeTickInterval',
|
||||
|
||||
@@ -13,7 +13,6 @@ registerModel({
|
||||
activityViewOwner: one('ActivityView', {
|
||||
identifying: true,
|
||||
inverse: 'clockWatcher',
|
||||
readonly: true,
|
||||
}),
|
||||
clock: one('Clock', {
|
||||
inverse: 'watchers',
|
||||
@@ -22,7 +21,6 @@ registerModel({
|
||||
messageViewOwner: one('MessageView', {
|
||||
identifying: true,
|
||||
inverse: 'clockWatcher',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -187,7 +187,6 @@ registerModel({
|
||||
messageViewInEditing: one('MessageView', {
|
||||
identifying: true,
|
||||
inverse: 'composerForEditing',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Placeholder displayed in the composer textarea when it's empty
|
||||
@@ -221,7 +220,6 @@ registerModel({
|
||||
thread: one('Thread', {
|
||||
identifying: true,
|
||||
inverse: 'composer',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -10,12 +10,10 @@ registerModel({
|
||||
cannedResponse: one('CannedResponse', {
|
||||
identifying: true,
|
||||
inverse: 'suggestable',
|
||||
readonly: true,
|
||||
}),
|
||||
channelCommand: one('ChannelCommand', {
|
||||
identifying: true,
|
||||
inverse: 'suggestable',
|
||||
readonly: true,
|
||||
}),
|
||||
composerSuggestionListViewExtraComposerSuggestionViewItems: many('ComposerSuggestionListViewExtraComposerSuggestionViewItem', {
|
||||
inverse: 'suggestable',
|
||||
@@ -28,12 +26,10 @@ registerModel({
|
||||
partner: one('Partner', {
|
||||
identifying: true,
|
||||
inverse: 'suggestable',
|
||||
readonly: true,
|
||||
}),
|
||||
thread: one('Thread', {
|
||||
identifying: true,
|
||||
inverse: 'suggestable',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -64,8 +64,6 @@ registerModel({
|
||||
composerViewOwner: one('ComposerView', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestedRecipientListView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
hasShowMoreButton: attr({
|
||||
default: false,
|
||||
|
||||
@@ -9,14 +9,10 @@ registerModel({
|
||||
composerSuggestedRecipientListViewOwner: one('ComposerSuggestedRecipientListView', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestedRecipientViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
suggestedRecipientInfo: one('SuggestedRecipientInfo', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestedRecipientViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -121,8 +121,6 @@ registerModel({
|
||||
composerViewOwner: one('ComposerView', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionListView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determines whether the currently active suggestion should be scrolled
|
||||
|
||||
-4
@@ -15,8 +15,6 @@ registerModel({
|
||||
composerSuggestionListViewOwner: one('ComposerSuggestionListView', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionListViewExtraComposerSuggestionViewItems',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
composerSuggestionView: one('ComposerSuggestionView', {
|
||||
default: insertAndReplace(),
|
||||
@@ -28,8 +26,6 @@ registerModel({
|
||||
suggestable: one('ComposerSuggestable', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionListViewExtraComposerSuggestionViewItems',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
-4
@@ -15,8 +15,6 @@ registerModel({
|
||||
composerSuggestionListViewOwner: one('ComposerSuggestionListView', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionListViewMainComposerSuggestionViewItems',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
composerSuggestionView: one('ComposerSuggestionView', {
|
||||
default: insertAndReplace(),
|
||||
@@ -28,8 +26,6 @@ registerModel({
|
||||
suggestable: one('ComposerSuggestable', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionListViewMainComposerSuggestionViewItems',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -117,12 +117,10 @@ registerModel({
|
||||
composerSuggestionListViewExtraComposerSuggestionViewItemOwner: one('ComposerSuggestionListViewExtraComposerSuggestionViewItem', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionView',
|
||||
readonly: true,
|
||||
}),
|
||||
composerSuggestionListViewMainComposerSuggestionViewItemOwner: one('ComposerSuggestionListViewMainComposerSuggestionViewItem', {
|
||||
identifying: true,
|
||||
inverse: 'composerSuggestionView',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* The text that identifies this suggestion in a mention.
|
||||
|
||||
@@ -1379,7 +1379,6 @@ registerModel({
|
||||
chatter: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'composerView',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* States the OWL component of this composer view.
|
||||
@@ -1545,7 +1544,6 @@ registerModel({
|
||||
messageViewInEditing: one('MessageView', {
|
||||
identifying: true,
|
||||
inverse: 'composerViewInEditing',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* This is the invisible textarea used to compute the composer height
|
||||
@@ -1613,7 +1611,6 @@ registerModel({
|
||||
threadView: one('ThreadView', {
|
||||
identifying: true,
|
||||
inverse: 'composerView',
|
||||
readonly: true,
|
||||
}),
|
||||
useDragVisibleDropZone: one('UseDragVisibleDropZone', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -25,8 +25,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
name: attr(),
|
||||
},
|
||||
|
||||
@@ -45,8 +45,6 @@ registerModel({
|
||||
dialogOwner: one('Dialog', {
|
||||
identifying: true,
|
||||
inverse: 'deleteMessageConfirmView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
message: one('Message', {
|
||||
compute: '_computeMessage',
|
||||
|
||||
@@ -184,7 +184,6 @@ registerModel({
|
||||
attachmentCardOwnerAsAttachmentDeleteConfirm: one('AttachmentCard', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentDeleteConfirmDialog',
|
||||
readonly: true,
|
||||
}),
|
||||
attachmentDeleteConfirmView: one('AttachmentDeleteConfirmView', {
|
||||
compute: '_computeAttachmentDeleteConfirmView',
|
||||
@@ -194,12 +193,10 @@ registerModel({
|
||||
attachmentImageOwnerAsAttachmentDeleteConfirm: one('AttachmentImage', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentDeleteConfirmDialog',
|
||||
readonly: true,
|
||||
}),
|
||||
attachmentListOwnerAsAttachmentView: one('AttachmentList', {
|
||||
identifying: true,
|
||||
inverse: 'attachmentListViewDialog',
|
||||
readonly: true,
|
||||
}),
|
||||
attachmentViewer: one('AttachmentViewer', {
|
||||
compute: '_computeAttachmentViewer',
|
||||
@@ -224,7 +221,6 @@ registerModel({
|
||||
followerOwnerAsSubtypeList: one('Follower', {
|
||||
identifying: true,
|
||||
inverse: 'followerSubtypeListDialog',
|
||||
readonly: true,
|
||||
}),
|
||||
followerSubtypeList: one('FollowerSubtypeList', {
|
||||
compute: '_computeFollowerSubtypeList',
|
||||
@@ -243,7 +239,6 @@ registerModel({
|
||||
messageActionListOwnerAsDeleteConfirm: one('MessageActionList', {
|
||||
identifying: true,
|
||||
inverse: 'deleteConfirmDialog',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Content of dialog that is directly linked to a record that models
|
||||
|
||||
@@ -379,12 +379,10 @@ registerModel({
|
||||
discussAsChannel: one('Discuss', {
|
||||
identifying: true,
|
||||
inverse: 'categoryChannel',
|
||||
readonly: true,
|
||||
}),
|
||||
discussAsChat: one('Discuss', {
|
||||
identifying: true,
|
||||
inverse: 'categoryChat',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Determines the filtered and sorted discuss sidebar category items
|
||||
|
||||
@@ -227,8 +227,6 @@ registerModel({
|
||||
category: one('DiscussSidebarCategory', {
|
||||
identifying: true,
|
||||
inverse: 'categoryItems',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determines the contribution of this discuss sidebar category item to
|
||||
@@ -290,8 +288,6 @@ registerModel({
|
||||
thread: one('Thread', {
|
||||
identifying: true,
|
||||
inverse: 'discussSidebarCategoryItem',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -29,17 +29,14 @@ registerModel({
|
||||
discussViewOwnerAsHistory: one('DiscussView', {
|
||||
identifying: true,
|
||||
inverse: 'historyView',
|
||||
readonly: true,
|
||||
}),
|
||||
discussViewOwnerAsInbox: one('DiscussView', {
|
||||
identifying: true,
|
||||
inverse: 'inboxView',
|
||||
readonly: true,
|
||||
}),
|
||||
discussViewOwnerAsStarred: one('DiscussView', {
|
||||
identifying: true,
|
||||
inverse: 'starredView',
|
||||
readonly: true,
|
||||
}),
|
||||
mailbox: one('Mailbox', {
|
||||
compute: '_computeMailbox',
|
||||
|
||||
@@ -137,8 +137,6 @@ registerModel({
|
||||
discuss: one('Discuss', {
|
||||
identifying: true,
|
||||
inverse: 'discussView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
historyView: one('DiscussSidebarMailboxView', {
|
||||
default: insertAndReplace(),
|
||||
|
||||
@@ -96,12 +96,10 @@ registerModel({
|
||||
chatterOwner: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'dropZoneView',
|
||||
readonly: true,
|
||||
}),
|
||||
composerViewOwner: one('ComposerView', {
|
||||
identifying: true,
|
||||
inverse: 'dropZoneView',
|
||||
readonly: true,
|
||||
}),
|
||||
/**
|
||||
* Counts how many drag enter/leave happened on self and children. This
|
||||
|
||||
@@ -37,8 +37,6 @@ registerModel({
|
||||
}),
|
||||
unicode: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -11,8 +11,6 @@ registerModel({
|
||||
}),
|
||||
categoryName: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
emojiCategoryViews: many('EmojiCategoryView', {
|
||||
inverse: 'emojiCategory',
|
||||
|
||||
@@ -59,8 +59,6 @@ registerModel({
|
||||
emojiPickerViewOwner: one('EmojiPickerView', {
|
||||
identifying: true,
|
||||
inverse: 'emojiCategoryBarView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -29,14 +29,10 @@ registerModel({
|
||||
emojiCategory: one('EmojiCategory', {
|
||||
identifying: true,
|
||||
inverse: 'emojiCategoryViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
emojiCategoryBarViewOwner: one('EmojiCategoryBarView', {
|
||||
identifying: true,
|
||||
inverse: 'emojiCategoryViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
emojiCategoryBarViewOwnerAsActiveByUser: one('EmojiCategoryBarView', {
|
||||
inverse: 'activeByUserCategoryView',
|
||||
|
||||
@@ -26,8 +26,6 @@ registerModel({
|
||||
emojiPickerViewOwner: one('EmojiPickerView', {
|
||||
identifying: true,
|
||||
inverse: 'emojiGridView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
emojiViews: many('EmojiView', {
|
||||
compute: '_computeEmojiViews',
|
||||
|
||||
@@ -24,8 +24,6 @@ registerModel({
|
||||
popoverViewOwner: one('PopoverView', {
|
||||
identifying: true,
|
||||
inverse: 'emojiPickerView',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -36,14 +36,10 @@ registerModel({
|
||||
emoji: one('Emoji', {
|
||||
identifying: true,
|
||||
inverse: 'emojiViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
emojiGridView: one('EmojiGridView', {
|
||||
identifying: true,
|
||||
inverse: 'emojiViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isHovered: attr({
|
||||
default: false,
|
||||
|
||||
@@ -190,22 +190,18 @@ registerModel({
|
||||
activityView: one('ActivityView', {
|
||||
identifying: true,
|
||||
inverse: 'fileUploader',
|
||||
readonly: true,
|
||||
}),
|
||||
attachmentBoxView: one('AttachmentBoxView', {
|
||||
identifying: true,
|
||||
inverse: 'fileUploader',
|
||||
readonly: true,
|
||||
}),
|
||||
chatterOwner: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'fileUploader',
|
||||
readonly: true,
|
||||
}),
|
||||
composerView: one('ComposerView', {
|
||||
identifying: true,
|
||||
inverse: 'fileUploader',
|
||||
readonly: true,
|
||||
}),
|
||||
fileInput: attr({
|
||||
compute: '_computeFileInput',
|
||||
|
||||
@@ -65,7 +65,6 @@ registerModel({
|
||||
chatterOwner: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'followButtonView',
|
||||
readonly: true,
|
||||
}),
|
||||
isDisabled: attr({
|
||||
compute: '_computeIsDisabled',
|
||||
|
||||
@@ -184,8 +184,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isActive: attr({
|
||||
default: true,
|
||||
|
||||
@@ -49,7 +49,6 @@ registerModel({
|
||||
chatterOwner: one('Chatter', {
|
||||
identifying: true,
|
||||
inverse: 'followerListMenuView',
|
||||
readonly: true,
|
||||
}),
|
||||
followerViews: many('FollowerView', {
|
||||
compute: '_computeFollowerViews',
|
||||
|
||||
@@ -43,8 +43,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isDefault: attr({
|
||||
default: false,
|
||||
|
||||
@@ -70,7 +70,6 @@ registerModel({
|
||||
identifying: true,
|
||||
inverse: 'followerSubtypeList',
|
||||
isCausal: true,
|
||||
readonly: true,
|
||||
}),
|
||||
follower: one('Follower', {
|
||||
related: 'dialogOwner.followerOwnerAsSubtypeList',
|
||||
|
||||
@@ -26,14 +26,10 @@ registerModel({
|
||||
followerSubtypeListOwner: one('FollowerSubtypeList', {
|
||||
identifying: true,
|
||||
inverse: 'followerSubtypeViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
subtype: one('FollowerSubtype', {
|
||||
identifying: true,
|
||||
inverse: 'followerSubtypeViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -39,14 +39,10 @@ registerModel({
|
||||
follower: one('Follower', {
|
||||
identifying: true,
|
||||
inverse: 'followerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
followerListMenuViewOwner: one('FollowerListMenuView', {
|
||||
identifying: true,
|
||||
inverse: 'followerViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -47,8 +47,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
required: true,
|
||||
readonly: true,
|
||||
}),
|
||||
im_status: attr(),
|
||||
isOnline: attr({
|
||||
|
||||
@@ -28,8 +28,6 @@ registerModel({
|
||||
iconUrl: attr(),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
required: true,
|
||||
readonly: true,
|
||||
}),
|
||||
model: attr({
|
||||
required: true,
|
||||
|
||||
@@ -50,8 +50,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
name: attr(),
|
||||
},
|
||||
|
||||
@@ -27,13 +27,9 @@ registerModel({
|
||||
activityViewOwner: one('ActivityView', {
|
||||
identifying: true,
|
||||
inverse: 'mailTemplateViews',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
mailTemplate: one('MailTemplate', {
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
@@ -118,17 +118,14 @@ registerModel({
|
||||
messagingAsHistory: one('Messaging', {
|
||||
identifying: true,
|
||||
inverse: 'history',
|
||||
readonly: true,
|
||||
}),
|
||||
messagingAsInbox: one('Messaging', {
|
||||
identifying: true,
|
||||
inverse: 'inbox',
|
||||
readonly: true,
|
||||
}),
|
||||
messagingAsStarred: one('Messaging', {
|
||||
identifying: true,
|
||||
inverse: 'starred',
|
||||
readonly: true,
|
||||
}),
|
||||
name: attr({
|
||||
compute: '_computeName',
|
||||
|
||||
@@ -690,8 +690,6 @@ registerModel({
|
||||
}),
|
||||
id: attr({
|
||||
identifying: true,
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
isCurrentUserOrGuestAuthor: attr({
|
||||
compute: '_computeIsCurrentUserOrGuestAuthor',
|
||||
|
||||
@@ -187,8 +187,6 @@ registerModel({
|
||||
messageView: one('MessageView', {
|
||||
identifying: true,
|
||||
inverse: 'messageActionList',
|
||||
readonly: true,
|
||||
required: true,
|
||||
}),
|
||||
/**
|
||||
* Determines the reaction popover that is active on this message action list.
|
||||
|
||||
@@ -45,12 +45,10 @@ registerModel({
|
||||
threadNeedactionPreviewViewOwner: one('ThreadNeedactionPreviewView', {
|
||||
identifying: true,
|
||||
inverse: 'messageAuthorPrefixView',
|
||||
readonly: true,
|
||||
}),
|
||||
threadPreviewViewOwner: one('ThreadPreviewView', {
|
||||
identifying: true,
|
||||
inverse: 'messageAuthorPrefixView',
|
||||
readonly: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user