[IMP] mail, *: rename registerModel/Patch to Model/Patch
closes odoo/odoo#105096 Related: odoo/enterprise#33679 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerPatch } from '@mail/model';
|
||||
import { attr, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Activity',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { many, registerPatch } from '@mail/model';
|
||||
import { many, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ActivityGroup',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ActivityGroupView',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
import Dialog from 'web.Dialog';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ActivityView',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, registerModel } from '@mail/model';
|
||||
import { attr, clear, Model } from '@mail/model';
|
||||
|
||||
import fieldUtils from 'web.field_utils';
|
||||
import { getLangTimeFormat } from 'web.time';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'calendar.event',
|
||||
fields: {
|
||||
allday: attr(),
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ActivityGroupView',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from "@mail/model";
|
||||
import { Patch } from "@mail/model";
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: "ir.model",
|
||||
fields: {
|
||||
availableWebViews: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { insert, registerPatch } from '@mail/model';
|
||||
import { insert, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'MessagingInitializer',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, insert, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, insert, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Employee',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
// dummy import to ensure mail Messaging patches are loaded beforehand
|
||||
import '@mail/models/messaging';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Messaging',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerPatch } from '@mail/model';
|
||||
import { attr, one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Partner',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerPatch } from '@mail/model';
|
||||
import { one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'User',
|
||||
fields: {
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, registerPatch } from '@mail/model';
|
||||
import { attr, clear, Patch } from '@mail/model';
|
||||
|
||||
import { str_to_date } from 'web.time';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Partner',
|
||||
fields: {
|
||||
isOnline: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerPatch } from '@mail/model';
|
||||
import { attr, one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Channel',
|
||||
fields: {
|
||||
anonymous_country: one('Country'),
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ChannelPreviewView',
|
||||
fields: {
|
||||
imageUrl: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ChatWindow',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, registerPatch } from '@mail/model';
|
||||
import { clear, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ComposerView',
|
||||
fields: {
|
||||
dropZoneView: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerPatch } from '@mail/model';
|
||||
import { one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Discuss',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, one, registerPatch } from '@mail/model';
|
||||
import { clear, one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'DiscussSidebarCategory',
|
||||
fields: {
|
||||
categoryItemsOrderedByLastAction: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, registerPatch } from '@mail/model';
|
||||
import { clear, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'DiscussSidebarCategoryItem',
|
||||
fields: {
|
||||
avatarUrl: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Message',
|
||||
fields: {
|
||||
hasReactionIcon: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, registerPatch } from '@mail/model';
|
||||
import { clear, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'MessageActionList',
|
||||
fields: {
|
||||
actionReplyTo: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { many, registerPatch } from '@mail/model';
|
||||
import { many, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Messaging',
|
||||
fields: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { insert, registerPatch } from '@mail/model';
|
||||
import { insert, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'MessagingInitializer',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'MobileMessagingNavbarView',
|
||||
fields: {
|
||||
tabs: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'NotificationListView',
|
||||
fields: {
|
||||
filteredChannels: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerPatch } from '@mail/model';
|
||||
import { attr, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Partner',
|
||||
fields: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerPatch } from '@mail/model';
|
||||
import { attr, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'res.users.settings',
|
||||
fields: {
|
||||
is_discuss_sidebar_category_livechat_open: attr({
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, one, registerPatch } from '@mail/model';
|
||||
import { clear, one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Thread',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { registerPatch } from '@mail/model';
|
||||
import { Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'ThreadIconView',
|
||||
fields: {
|
||||
threadTypingIconView: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, clear, increment, registerModel } from '@mail/model';
|
||||
import { attr, one, clear, increment, Model } from '@mail/model';
|
||||
|
||||
import { qweb } from 'web.core';
|
||||
import { Markup } from 'web.utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Chatbot',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatbotStep',
|
||||
fields: {
|
||||
chabotOwner: one('Chatbot', {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
import {unaccent} from 'web.utils';
|
||||
import {getCookie, setCookie, deleteCookie} from 'web.utils.cookies';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'LivechatButtonView',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerModel } from '@mail/model';
|
||||
import { attr, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'LivechatOperator',
|
||||
fields: {
|
||||
id: attr({
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerPatch } from '@mail/model';
|
||||
import { one, Patch } from '@mail/model';
|
||||
|
||||
registerPatch({
|
||||
Patch({
|
||||
name: 'Messaging',
|
||||
fields: {
|
||||
publicLivechatGlobal: one('PublicLivechatGlobal', {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import PublicLivechat from '@im_livechat/legacy/models/public_livechat';
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechat',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import Feedback from '@im_livechat/legacy/widgets/feedback/feedback';
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatFeedbackView',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import { qweb } from 'web.core';
|
||||
import { Markup } from 'web.utils';
|
||||
import {getCookie, setCookie, deleteCookie} from 'web.utils.cookies';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatGlobal',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
+2
-2
@@ -1,12 +1,12 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { increment, one, registerModel } from '@mail/model';
|
||||
import { increment, one, Model } from '@mail/model';
|
||||
|
||||
import session from 'web.session';
|
||||
import utils from 'web.utils';
|
||||
import {getCookie} from 'web.utils.cookies';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatGlobalNotificationHandler',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, registerModel } from '@mail/model';
|
||||
import { attr, clear, Model } from '@mail/model';
|
||||
|
||||
import PublicLivechatMessage from '@im_livechat/legacy/models/public_livechat_message';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatMessage',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import PublicLivechatView from '@im_livechat/legacy/widgets/public_livechat_view/public_livechat_view';
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatView',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import PublicLivechatWindow from '@im_livechat/legacy/widgets/public_livechat_window/public_livechat_window';
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'PublicLivechatWindow',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerModel } from '@mail/model';
|
||||
import { attr, Model } from '@mail/model';
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
import { isMobileOS } from "@web/core/browser/feature_detection";
|
||||
import { SIZES } from '@web/core/ui/ui_service';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Device',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, registerModel } from '@mail/model';
|
||||
import { attr, Model } from '@mail/model';
|
||||
|
||||
import { localization } from '@web/core/l10n/localization';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Locale',
|
||||
fields: {
|
||||
/**
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, many, one, registerModel } from '@mail/model';
|
||||
import { attr, many, one, Model } from '@mail/model';
|
||||
import { makeDeferred } from '@mail/utils/deferred';
|
||||
|
||||
import { browser } from '@web/core/browser/browser';
|
||||
|
||||
import { EventBus } from '@odoo/owl';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Messaging',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
/**
|
||||
* The object below defines a model. Instances of such model (or inherited
|
||||
@@ -8,7 +8,7 @@ import { one, registerModel } from '@mail/model';
|
||||
* represent server record (e.g. Thread, Message) or UI elements (e.g.
|
||||
* MessagingMenu, ChatWindow). These instances are called "records".
|
||||
*/
|
||||
registerModel({
|
||||
Model({
|
||||
/**
|
||||
* Name of the model. Important to refer to appropriate model like in
|
||||
* relational fields. Name of models must be unique.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, registerModel } from '@mail/model';
|
||||
import { attr, clear, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Timer',
|
||||
identifyingMode: 'xor',
|
||||
lifecycleHooks: {
|
||||
|
||||
@@ -421,7 +421,7 @@ function patchRecordMethods(patch) {
|
||||
* @param {Object} [definition.recordMethods]
|
||||
* @param {string} [definition.template]
|
||||
*/
|
||||
export function registerModel({ componentSetup, fields, identifyingMode = 'and', isLegacyComponent = false, lifecycleHooks, modelGetters, modelMethods, name, onChanges, recordGetters, recordMethods, template }) {
|
||||
export function Model({ componentSetup, fields, identifyingMode = 'and', isLegacyComponent = false, lifecycleHooks, modelGetters, modelMethods, name, onChanges, recordGetters, recordMethods, template }) {
|
||||
if (!name) {
|
||||
throw new Error("Model is lacking a name.");
|
||||
}
|
||||
@@ -474,7 +474,7 @@ export function registerModel({ componentSetup, fields, identifyingMode = 'and',
|
||||
}
|
||||
}
|
||||
|
||||
export function registerPatch({ componentSetup, fields, lifecycleHooks, modelMethods, name, onChanges, recordMethods }) {
|
||||
export function Patch({ componentSetup, fields, lifecycleHooks, modelMethods, name, onChanges, recordMethods }) {
|
||||
if (!name) {
|
||||
throw new Error("Patch is lacking the name of the model to be patched.");
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, insert, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, insert, many, one, Model } from '@mail/model';
|
||||
|
||||
import { markup } from '@odoo/owl';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Activity',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityButtonView',
|
||||
template: 'mail.ActivityButtonView',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityCellView',
|
||||
template: 'mail.ActivityCellView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, many, one, registerModel } from '@mail/model';
|
||||
import { attr, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityGroup',
|
||||
modelMethods: {
|
||||
convertData(data) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
import session from 'web.session';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityGroupView',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import session from 'web.session';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityListView',
|
||||
template: 'mail.ActivityListView',
|
||||
lifecycleHooks: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import { auto_str_to_date } from 'web.time';
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityListViewItem',
|
||||
template: 'mail.ActivityListViewItem',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
import { onMounted } from '@odoo/owl';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityMarkDonePopoverContentView',
|
||||
template: 'mail.ActivityMarkDonePopoverContentView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, many, registerModel } from '@mail/model';
|
||||
import { attr, many, Model } from '@mail/model';
|
||||
|
||||
import session from 'web.session';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityMenuView',
|
||||
lifecycleHooks: {
|
||||
_created() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, many, registerModel } from '@mail/model';
|
||||
import { attr, many, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityType',
|
||||
fields: {
|
||||
activities: many('Activity', { inverse: 'type' }),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import { auto_str_to_date, getLangDateFormat, getLangDatetimeFormat } from 'web.time';
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ActivityView',
|
||||
template: 'mail.ActivityView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Attachment',
|
||||
recordMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentCard',
|
||||
template: 'mail.AttachmentCard',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentDeleteConfirmView',
|
||||
template: 'mail.AttachmentDeleteConfirmView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { isEventHandled, markEventHandled } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentImage',
|
||||
template: 'mail.AttachmentImage',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentList',
|
||||
template: 'mail.AttachmentList',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, increment, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, increment, many, one, Model } from '@mail/model';
|
||||
|
||||
import { hidePDFJSButtons } from '@web/legacy/js/libs/pdfjs';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentViewer',
|
||||
identifyingMode: 'xor',
|
||||
lifecycleHooks: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
/**
|
||||
* Tracked translate transformations on image visualisation. This is
|
||||
@@ -9,7 +9,7 @@ import { attr, one, registerModel } from '@mail/model';
|
||||
* reasons (overhead of making vdom is too significant for each mouse
|
||||
* position changes while dragging)
|
||||
*/
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AttachmentViewer.Translate',
|
||||
fields: {
|
||||
dx: attr({ default: 0 }),
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from "@mail/model";
|
||||
import { attr, one, Model } from "@mail/model";
|
||||
|
||||
/**
|
||||
* Intermediary model to facilitate adding support for additional
|
||||
* models to the AttachmentViewer.
|
||||
*/
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: "AttachmentViewerViewable",
|
||||
identifyingMode: 'xor',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
import { onMounted, onWillUnmount } from '@odoo/owl';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'AutocompleteInputView',
|
||||
template: 'mail.AutocompleteInputView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
function drawAndBlurImageOnCanvas(image, blurAmount, canvas) {
|
||||
canvas.width = image.width;
|
||||
@@ -17,7 +17,7 @@ function drawAndBlurImageOnCanvas(image, blurAmount, canvas) {
|
||||
canvas.getContext('2d').restore();
|
||||
}
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'BlurManager',
|
||||
lifecycleHooks: {
|
||||
_willDelete() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallActionListView',
|
||||
template: 'mail.CallActionListView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallDemoView',
|
||||
template: 'mail.CallDemoView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallInviteRequestPopup',
|
||||
template: 'mail.CallInviteRequestPopup',
|
||||
recordMethods: {
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { useUpdateToModel } from '@mail/component_hooks/use_update_to_model';
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import { isEventHandled, markEventHandled } from '@mail/utils/utils';
|
||||
|
||||
import { onMounted, onWillUnmount } from '@odoo/owl';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallMainView',
|
||||
template: 'mail.CallMainView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallMainViewTile',
|
||||
fields: {
|
||||
callMainViewOwner: one('CallMainView', { identifying: true, inverse: 'mainTiles' }),
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallOptionMenu',
|
||||
template: 'mail.CallOptionMenu',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { isEventHandled, markEventHandled } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallParticipantCard',
|
||||
template: 'mail.CallParticipantCard',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallParticipantCardPopoverContentView',
|
||||
template: 'mail.CallParticipantCardPopoverContentView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { useUpdateToModel } from '@mail/component_hooks/use_update_to_model';
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallParticipantVideoView',
|
||||
template: 'mail.CallParticipantVideoView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallSettingsMenu',
|
||||
template: 'mail.CallSettingsMenu',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { many, one, registerModel } from '@mail/model';
|
||||
import { many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallSidebarView',
|
||||
template: 'mail.CallSidebarView',
|
||||
fields: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallSidebarViewTile',
|
||||
fields: {
|
||||
callSidebarViewOwner: one('CallSidebarView', { identifying: true, inverse: 'sidebarTiles' }),
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallSystrayMenu',
|
||||
template: 'mail.CallSystrayMenu',
|
||||
fields: {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import { browser } from "@web/core/browser/browser";
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CallView',
|
||||
template: 'mail.CallView',
|
||||
lifecycleHooks: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
import { cleanSearchTerm } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'CannedResponse',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, many, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, many, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Channel',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
import { cleanSearchTerm } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelCommand',
|
||||
modelMethods: {
|
||||
/**
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { useUpdateToModel } from '@mail/component_hooks/use_update_to_model';
|
||||
import { attr, clear, link, many, one, registerModel, unlink } from '@mail/model';
|
||||
import { attr, clear, link, many, one, Model, unlink } from '@mail/model';
|
||||
import { cleanSearchTerm } from '@mail/utils/utils';
|
||||
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelInvitationForm',
|
||||
template: 'mail.ChannelInvitationForm',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, one, registerModel } from '@mail/model';
|
||||
import { clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelInvitationFormSelectablePartnerView',
|
||||
template: 'mail.ChannelInvitationFormSelectablePartnerView',
|
||||
fields: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { one, registerModel } from '@mail/model';
|
||||
import { one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelInvitationFormSelectedPartnerView',
|
||||
template: 'mail.ChannelInvitationFormSelectedPartnerView',
|
||||
fields: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, many, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, many, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelMember',
|
||||
fields: {
|
||||
avatarUrl: attr({
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
import { sprintf } from '@web/core/utils/strings';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelMemberListCategoryView',
|
||||
template: 'mail.ChannelMemberListCategoryView',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, one, registerModel } from '@mail/model';
|
||||
import { clear, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelMemberListView',
|
||||
template: 'mail.ChannelMemberListView',
|
||||
identifyingMode: 'xor',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { isEventHandled } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelMemberView',
|
||||
template: 'mail.ChannelMemberView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { htmlToTextContentInline } from '@mail/js/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChannelPreviewView',
|
||||
template: 'mail.ChannelPreviewView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { useUpdateToModel } from '@mail/component_hooks/use_update_to_model';
|
||||
import { attr, clear, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, one, Model } from '@mail/model';
|
||||
import { isEventHandled, markEventHandled } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatWindow',
|
||||
identifyingMode: 'xor',
|
||||
template: 'mail.ChatWindow',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { clear, one, registerModel } from '@mail/model';
|
||||
import { clear, one, Model } from '@mail/model';
|
||||
import { isEventHandled } from '@mail/utils/utils';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatWindowHeaderView',
|
||||
template: 'mail.ChatWindowHeaderView',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, one, registerModel } from '@mail/model';
|
||||
import { attr, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatWindowHiddenMenuItemView',
|
||||
template: 'mail.ChatWindowHiddenMenuItemView',
|
||||
fields: {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { useUpdateToModel } from '@mail/component_hooks/use_update_to_model';
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatWindowHiddenMenuView',
|
||||
template: 'mail.ChatWindowHiddenMenuView',
|
||||
componentSetup() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { attr, clear, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, many, one, Model } from '@mail/model';
|
||||
|
||||
export const BASE_VISUAL = {
|
||||
/**
|
||||
@@ -40,7 +40,7 @@ export const BASE_VISUAL = {
|
||||
visible: [],
|
||||
};
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'ChatWindowManager',
|
||||
template: 'mail.ChatWindowManager',
|
||||
recordMethods: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { useComponentToModel } from '@mail/component_hooks/use_component_to_model';
|
||||
import { attr, clear, insert, link, many, one, registerModel } from '@mail/model';
|
||||
import { attr, clear, insert, link, many, one, Model } from '@mail/model';
|
||||
|
||||
const getThreadNextTemporaryId = (function () {
|
||||
let tmpId = 0;
|
||||
@@ -19,7 +19,7 @@ const getMessageNextTemporaryId = (function () {
|
||||
};
|
||||
})();
|
||||
|
||||
registerModel({
|
||||
Model({
|
||||
name: 'Chatter',
|
||||
template: 'mail.Chatter',
|
||||
isLegacyComponent: true,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user