MOBILE-3592 user: Make delegate and handlers singleton

main
Dani Palou 2020-12-10 13:21:05 +01:00
parent fd19dd8c62
commit 46cec40cfe
23 changed files with 83 additions and 83 deletions

View File

@ -39,11 +39,9 @@ import { CoreComponentsModule } from '@components/components.module';
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserProfileFieldDelegate, AddonUserProfileFieldCheckboxHandler], deps: [],
useFactory: ( useFactory: () => () =>
userProfileFieldDelegate: CoreUserProfileFieldDelegate, CoreUserProfileFieldDelegate.instance.registerHandler(AddonUserProfileFieldCheckboxHandler.instance),
handler: AddonUserProfileFieldCheckboxHandler,
) => () => userProfileFieldDelegate.registerHandler(handler),
}, },
], ],
exports: [ exports: [

View File

@ -17,13 +17,14 @@ import { Injectable, Type } from '@angular/core';
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper'; import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
import { CoreUserProfileField } from '@features/user/services/user'; import { CoreUserProfileField } from '@features/user/services/user';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate'; import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
import { makeSingleton } from '@singletons';
import { AddonUserProfileFieldCheckboxComponent } from '../../component/checkbox'; import { AddonUserProfileFieldCheckboxComponent } from '../../component/checkbox';
/** /**
* Checkbox user profile field handlers. * Checkbox user profile field handlers.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AddonUserProfileFieldCheckboxHandler implements CoreUserProfileFieldHandler { export class AddonUserProfileFieldCheckboxHandlerService implements CoreUserProfileFieldHandler {
name = 'AddonUserProfileFieldCheckbox'; name = 'AddonUserProfileFieldCheckbox';
type = 'checkbox'; type = 'checkbox';
@ -74,3 +75,5 @@ export class AddonUserProfileFieldCheckboxHandler implements CoreUserProfileFiel
} }
} }
export class AddonUserProfileFieldCheckboxHandler extends makeSingleton(AddonUserProfileFieldCheckboxHandlerService) {}

View File

@ -41,11 +41,9 @@ import { CorePipesModule } from '@pipes/pipes.module';
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserProfileFieldDelegate, AddonUserProfileFieldDatetimeHandler], deps: [],
useFactory: ( useFactory: () => () =>
userProfileFieldDelegate: CoreUserProfileFieldDelegate, CoreUserProfileFieldDelegate.instance.registerHandler(AddonUserProfileFieldDatetimeHandler.instance),
handler: AddonUserProfileFieldDatetimeHandler,
) => () => userProfileFieldDelegate.registerHandler(handler),
}, },
], ],
exports: [ exports: [

View File

@ -18,13 +18,14 @@ import { AuthEmailSignupProfileField } from '@features/login/services/login-help
import { CoreUserProfileField } from '@features/user/services/user'; import { CoreUserProfileField } from '@features/user/services/user';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate'; import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
import { CoreTimeUtils } from '@services/utils/time'; import { CoreTimeUtils } from '@services/utils/time';
import { makeSingleton } from '@singletons';
import { AddonUserProfileFieldDatetimeComponent } from '../../component/datetime'; import { AddonUserProfileFieldDatetimeComponent } from '../../component/datetime';
/** /**
* Datetime user profile field handlers. * Datetime user profile field handlers.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFieldHandler { export class AddonUserProfileFieldDatetimeHandlerService implements CoreUserProfileFieldHandler {
name = 'AddonUserProfileFieldDatetime'; name = 'AddonUserProfileFieldDatetime';
type = 'datetime'; type = 'datetime';
@ -76,3 +77,5 @@ export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFiel
} }
} }
export class AddonUserProfileFieldDatetimeHandler extends makeSingleton(AddonUserProfileFieldDatetimeHandlerService) {}

View File

@ -41,11 +41,9 @@ import { CoreDirectivesModule } from '@directives/directives.module';
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserProfileFieldDelegate, AddonUserProfileFieldMenuHandler], deps: [],
useFactory: ( useFactory: () => () =>
userProfileFieldDelegate: CoreUserProfileFieldDelegate, CoreUserProfileFieldDelegate.instance.registerHandler(AddonUserProfileFieldMenuHandler.instance),
handler: AddonUserProfileFieldMenuHandler,
) => () => userProfileFieldDelegate.registerHandler(handler),
}, },
], ],
exports: [ exports: [

View File

@ -17,13 +17,14 @@ import { Injectable, Type } from '@angular/core';
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper'; import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
import { CoreUserProfileField } from '@features/user/services/user'; import { CoreUserProfileField } from '@features/user/services/user';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate'; import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
import { makeSingleton } from '@singletons';
import { AddonUserProfileFieldMenuComponent } from '../../component/menu'; import { AddonUserProfileFieldMenuComponent } from '../../component/menu';
/** /**
* Menu user profile field handlers. * Menu user profile field handlers.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AddonUserProfileFieldMenuHandler implements CoreUserProfileFieldHandler { export class AddonUserProfileFieldMenuHandlerService implements CoreUserProfileFieldHandler {
name = 'AddonUserProfileFieldMenu'; name = 'AddonUserProfileFieldMenu';
type = 'menu'; type = 'menu';
@ -74,3 +75,5 @@ export class AddonUserProfileFieldMenuHandler implements CoreUserProfileFieldHan
} }
} }
export class AddonUserProfileFieldMenuHandler extends makeSingleton(AddonUserProfileFieldMenuHandlerService) {}

View File

@ -19,12 +19,13 @@ import { AddonUserProfileFieldTextComponent } from '../../component/text';
import { CoreTextUtils } from '@services/utils/text'; import { CoreTextUtils } from '@services/utils/text';
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper'; import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
import { CoreUserProfileField } from '@features/user/services/user'; import { CoreUserProfileField } from '@features/user/services/user';
import { makeSingleton } from '@singletons';
/** /**
* Text user profile field handlers. * Text user profile field handlers.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AddonUserProfileFieldTextHandler implements CoreUserProfileFieldHandler { export class AddonUserProfileFieldTextHandlerService implements CoreUserProfileFieldHandler {
name = 'AddonUserProfileFieldText'; name = 'AddonUserProfileFieldText';
type = 'text'; type = 'text';
@ -73,3 +74,5 @@ export class AddonUserProfileFieldTextHandler implements CoreUserProfileFieldHan
} }
} }
export class AddonUserProfileFieldTextHandler extends makeSingleton(AddonUserProfileFieldTextHandlerService) {}

View File

@ -41,11 +41,9 @@ import { CoreDirectivesModule } from '@directives/directives.module';
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserProfileFieldDelegate, AddonUserProfileFieldTextHandler], deps: [],
useFactory: ( useFactory: () => () =>
userProfileFieldDelegate: CoreUserProfileFieldDelegate, CoreUserProfileFieldDelegate.instance.registerHandler(AddonUserProfileFieldTextHandler.instance),
handler: AddonUserProfileFieldTextHandler,
) => () => userProfileFieldDelegate.registerHandler(handler),
}, },
], ],
exports: [ exports: [

View File

@ -19,12 +19,13 @@ import { AddonUserProfileFieldTextareaComponent } from '../../component/textarea
import { CoreTextUtils } from '@services/utils/text'; import { CoreTextUtils } from '@services/utils/text';
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper'; import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
import { CoreUserProfileField } from '@features/user/services/user'; import { CoreUserProfileField } from '@features/user/services/user';
import { makeSingleton } from '@singletons';
/** /**
* Textarea user profile field handlers. * Textarea user profile field handlers.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AddonUserProfileFieldTextareaHandler implements CoreUserProfileFieldHandler { export class AddonUserProfileFieldTextareaHandlerService implements CoreUserProfileFieldHandler {
name = 'AddonUserProfileFieldTextarea'; name = 'AddonUserProfileFieldTextarea';
type = 'textarea'; type = 'textarea';
@ -83,3 +84,5 @@ export class AddonUserProfileFieldTextareaHandler implements CoreUserProfileFiel
} }
} }
export class AddonUserProfileFieldTextareaHandler extends makeSingleton(AddonUserProfileFieldTextareaHandlerService) {}

View File

@ -43,11 +43,9 @@ import { CoreEditorComponentsModule } from '@features/editor/components/componen
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserProfileFieldDelegate, AddonUserProfileFieldTextareaHandler], deps: [],
useFactory: ( useFactory: () => () =>
userProfileFieldDelegate: CoreUserProfileFieldDelegate, CoreUserProfileFieldDelegate.instance.registerHandler(AddonUserProfileFieldTextareaHandler.instance),
handler: AddonUserProfileFieldTextareaHandler,
) => () => userProfileFieldDelegate.registerHandler(handler),
}, },
], ],
exports: [ exports: [

View File

@ -83,7 +83,6 @@ export class CoreLoginEmailSignupPage implements OnInit {
protected navCtrl: NavController, protected navCtrl: NavController,
protected fb: FormBuilder, protected fb: FormBuilder,
protected route: ActivatedRoute, protected route: ActivatedRoute,
protected userProfileFieldDelegate: CoreUserProfileFieldDelegate,
) { ) {
// Create the ageVerificationForm. // Create the ageVerificationForm.
this.ageVerificationForm = this.fb.group({ this.ageVerificationForm = this.fb.group({
@ -191,7 +190,7 @@ export class CoreLoginEmailSignupPage implements OnInit {
{ siteUrl: this.siteUrl }, { siteUrl: this.siteUrl },
); );
if (this.userProfileFieldDelegate.hasRequiredUnsupportedField(this.settings.profilefields)) { if (CoreUserProfileFieldDelegate.instance.hasRequiredUnsupportedField(this.settings.profilefields)) {
this.allRequiredSupported = false; this.allRequiredSupported = false;
throw new Error(Translate.instance.instant('core.login.signuprequiredfieldnotsupported')); throw new Error(Translate.instance.instant('core.login.signuprequiredfieldnotsupported'));
@ -302,7 +301,7 @@ export class CoreLoginEmailSignupPage implements OnInit {
try { try {
// Get the data for the custom profile fields. // Get the data for the custom profile fields.
params.customprofilefields = await this.userProfileFieldDelegate.getDataForFields( params.customprofilefields = await CoreUserProfileFieldDelegate.instance.getDataForFields(
this.settings?.profilefields, this.settings?.profilefields,
true, true,
'email', 'email',

View File

@ -40,10 +40,6 @@ export class CoreUserProfileFieldComponent implements OnInit {
componentClass?: Type<unknown>; // The class of the component to render. componentClass?: Type<unknown>; // The class of the component to render.
data: CoreUserProfileFieldComponentData = {}; // Data to pass to the component. data: CoreUserProfileFieldComponentData = {}; // Data to pass to the component.
constructor(
protected userProfileFieldsDelegate: CoreUserProfileFieldDelegate,
) { }
/** /**
* Component being initialized. * Component being initialized.
*/ */
@ -52,7 +48,7 @@ export class CoreUserProfileFieldComponent implements OnInit {
return; return;
} }
this.componentClass = await this.userProfileFieldsDelegate.getComponent(this.field, this.signup); this.componentClass = await CoreUserProfileFieldDelegate.instance.getComponent(this.field, this.signup);
this.data.field = this.field; this.data.field = this.field;
this.data.edit = CoreUtils.instance.isTrueOrOne(this.edit); this.data.edit = CoreUtils.instance.isTrueOrOne(this.edit);

View File

@ -31,7 +31,7 @@ import {
CoreUserProvider, CoreUserProvider,
} from '@features/user/services/user'; } from '@features/user/services/user';
import { CoreUserHelper } from '@features/user/services/user-helper'; import { CoreUserHelper } from '@features/user/services/user-helper';
import { CoreUserDelegate, CoreUserProfileHandlerData } from '@features/user/services/user-delegate'; import { CoreUserDelegate, CoreUserDelegateService, CoreUserProfileHandlerData } from '@features/user/services/user-delegate';
import { CoreFileUploaderHelper } from '@features/fileuploader/services/fileuploader-helper'; import { CoreFileUploaderHelper } from '@features/fileuploader/services/fileuploader-helper';
import { CoreIonLoadingElement } from '@classes/ion-loading'; import { CoreIonLoadingElement } from '@classes/ion-loading';
import { CoreUtils } from '@services/utils/utils'; import { CoreUtils } from '@services/utils/utils';
@ -64,7 +64,6 @@ export class CoreUserProfilePage implements OnInit, OnDestroy {
constructor( constructor(
protected route: ActivatedRoute, protected route: ActivatedRoute,
protected navCtrl: NavController, protected navCtrl: NavController,
protected userDelegate: CoreUserDelegate,
) { ) {
this.obsProfileRefreshed = CoreEvents.on<CoreUserProfileRefreshedData>(CoreUserProvider.PROFILE_REFRESHED, (data) => { this.obsProfileRefreshed = CoreEvents.on<CoreUserProfileRefreshedData>(CoreUserProvider.PROFILE_REFRESHED, (data) => {
@ -127,26 +126,26 @@ export class CoreUserProfilePage implements OnInit, OnDestroy {
// If there's already a subscription, unsubscribe because we'll get a new one. // If there's already a subscription, unsubscribe because we'll get a new one.
this.subscription?.unsubscribe(); this.subscription?.unsubscribe();
this.subscription = this.userDelegate.getProfileHandlersFor(user, this.courseId).subscribe((handlers) => { this.subscription = CoreUserDelegate.instance.getProfileHandlersFor(user, this.courseId).subscribe((handlers) => {
this.actionHandlers = []; this.actionHandlers = [];
this.newPageHandlers = []; this.newPageHandlers = [];
this.communicationHandlers = []; this.communicationHandlers = [];
handlers.forEach((handler) => { handlers.forEach((handler) => {
switch (handler.type) { switch (handler.type) {
case CoreUserDelegate.TYPE_COMMUNICATION: case CoreUserDelegateService.TYPE_COMMUNICATION:
this.communicationHandlers.push(handler.data); this.communicationHandlers.push(handler.data);
break; break;
case CoreUserDelegate.TYPE_ACTION: case CoreUserDelegateService.TYPE_ACTION:
this.actionHandlers.push(handler.data); this.actionHandlers.push(handler.data);
break; break;
case CoreUserDelegate.TYPE_NEW_PAGE: case CoreUserDelegateService.TYPE_NEW_PAGE:
default: default:
this.newPageHandlers.push(handler.data); this.newPageHandlers.push(handler.data);
break; break;
} }
}); });
this.isLoadingHandlers = !this.userDelegate.areHandlersLoaded(user.id); this.isLoadingHandlers = !CoreUserDelegate.instance.areHandlersLoaded(user.id);
}); });
await this.checkUserImageUpdated(); await this.checkUserImageUpdated();

View File

@ -18,12 +18,13 @@ import { Params } from '@angular/router';
import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base-handler'; import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base-handler';
import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate';
import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper'; import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper';
import { makeSingleton } from '@singletons';
/** /**
* Handler to treat links to user profiles. * Handler to treat links to user profiles.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class CoreUserProfileLinkHandler extends CoreContentLinksHandlerBase { export class CoreUserProfileLinkHandlerService extends CoreContentLinksHandlerBase {
name = 'CoreUserProfileLinkHandler'; name = 'CoreUserProfileLinkHandler';
// Match user/view.php and user/profile.php but NOT grade/report/user/. // Match user/view.php and user/profile.php but NOT grade/report/user/.
@ -74,3 +75,5 @@ export class CoreUserProfileLinkHandler extends CoreContentLinksHandlerBase {
} }
} }
export class CoreUserProfileLinkHandler extends makeSingleton(CoreUserProfileLinkHandlerService) {}

View File

@ -14,20 +14,21 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CoreUserDelegate, CoreUserProfileHandler, CoreUserProfileHandlerData } from '../user-delegate'; import { CoreUserDelegateService, CoreUserProfileHandler, CoreUserProfileHandlerData } from '../user-delegate';
import { CoreSites } from '@services/sites'; import { CoreSites } from '@services/sites';
import { CoreUtils } from '@services/utils/utils'; import { CoreUtils } from '@services/utils/utils';
import { CoreUserProfile } from '../user'; import { CoreUserProfile } from '../user';
import { makeSingleton } from '@singletons';
/** /**
* Handler to send a email to a user. * Handler to send a email to a user.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class CoreUserProfileMailHandler implements CoreUserProfileHandler { export class CoreUserProfileMailHandlerService implements CoreUserProfileHandler {
name = 'CoreUserProfileMail'; name = 'CoreUserProfileMail';
priority = 700; priority = 700;
type = CoreUserDelegate.TYPE_COMMUNICATION; type = CoreUserDelegateService.TYPE_COMMUNICATION;
/** /**
* Check if handler is enabled. * Check if handler is enabled.
@ -73,3 +74,5 @@ export class CoreUserProfileMailHandler implements CoreUserProfileHandler {
} }
} }
export class CoreUserProfileMailHandler extends makeSingleton(CoreUserProfileMailHandlerService) {}

View File

@ -15,13 +15,14 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CoreCronHandler } from '@services/cron'; import { CoreCronHandler } from '@services/cron';
import { makeSingleton } from '@singletons';
import { CoreUserSync } from '../user-sync'; import { CoreUserSync } from '../user-sync';
/** /**
* Synchronization cron handler. * Synchronization cron handler.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class CoreUserSyncCronHandler implements CoreCronHandler { export class CoreUserSyncCronHandlerService implements CoreCronHandler {
name = 'CoreUserSyncCronHandler'; name = 'CoreUserSyncCronHandler';
@ -48,3 +49,5 @@ export class CoreUserSyncCronHandler implements CoreCronHandler {
} }
} }
export class CoreUserSyncCronHandler extends makeSingleton(CoreUserSyncCronHandlerService) {}

View File

@ -19,6 +19,7 @@ import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate';
import { CoreUtils } from '@services/utils/utils'; import { CoreUtils } from '@services/utils/utils';
import { CoreEvents } from '@singletons/events'; import { CoreEvents } from '@singletons/events';
import { CoreUserProfile } from './user'; import { CoreUserProfile } from './user';
import { makeSingleton } from '@singletons';
/** /**
* Interface that all user profile handlers must implement. * Interface that all user profile handlers must implement.
@ -127,10 +128,8 @@ export interface CoreUserProfileHandlerToDisplay {
* Service to interact with plugins to be shown in user profile. Provides functions to register a plugin * Service to interact with plugins to be shown in user profile. Provides functions to register a plugin
* and notify an update in the data. * and notify an update in the data.
*/ */
@Injectable({ @Injectable({ providedIn: 'root' })
providedIn: 'root', export class CoreUserDelegateService extends CoreDelegate<CoreUserProfileHandler> {
})
export class CoreUserDelegate extends CoreDelegate<CoreUserProfileHandler> {
/** /**
* User profile handler type for communication. * User profile handler type for communication.
@ -164,7 +163,7 @@ export class CoreUserDelegate extends CoreDelegate<CoreUserProfileHandler> {
constructor() { constructor() {
super('CoreUserDelegate', true); super('CoreUserDelegate', true);
CoreEvents.on<CoreUserUpdateHandlerData>(CoreUserDelegate.UPDATE_HANDLER_EVENT, (data) => { CoreEvents.on<CoreUserUpdateHandlerData>(CoreUserDelegateService.UPDATE_HANDLER_EVENT, (data) => {
if (!data || !data.handler || !this.userHandlers[data.userId]) { if (!data || !data.handler || !this.userHandlers[data.userId]) {
return; return;
} }
@ -255,7 +254,7 @@ export class CoreUserDelegate extends CoreDelegate<CoreUserProfileHandler> {
name: name, name: name,
data: handler.getDisplayData(user, courseId), data: handler.getDisplayData(user, courseId),
priority: handler.priority || 0, priority: handler.priority || 0,
type: handler.type || CoreUserDelegate.TYPE_NEW_PAGE, type: handler.type || CoreUserDelegateService.TYPE_NEW_PAGE,
}); });
} }
} catch { } catch {
@ -271,6 +270,8 @@ export class CoreUserDelegate extends CoreDelegate<CoreUserProfileHandler> {
} }
export class CoreUserDelegate extends makeSingleton(CoreUserDelegateService) {}
/** /**
* Data passed to UPDATE_HANDLER_EVENT event. * Data passed to UPDATE_HANDLER_EVENT event.
*/ */

View File

@ -20,9 +20,7 @@ import { CoreUserRole } from './user';
/** /**
* Service that provides some features regarding users information. * Service that provides some features regarding users information.
*/ */
@Injectable({ @Injectable({ providedIn: 'root' })
providedIn: 'root',
})
export class CoreUserHelperProvider { export class CoreUserHelperProvider {
/** /**

View File

@ -16,14 +16,12 @@ import { Injectable } from '@angular/core';
import { CoreSites } from '@services/sites'; import { CoreSites } from '@services/sites';
import { makeSingleton } from '@singletons'; import { makeSingleton } from '@singletons';
import { PREFERENCES_TABLE_NAME, CoreUserPreferenceDBRecord } from './db/user'; import { PREFERENCES_TABLE_NAME, CoreUserPreferenceDBRecord } from './database/user';
/** /**
* Service to handle offline user preferences. * Service to handle offline user preferences.
*/ */
@Injectable({ @Injectable({ providedIn: 'root' })
providedIn: 'root',
})
export class CoreUserOfflineProvider { export class CoreUserOfflineProvider {
/** /**

View File

@ -17,6 +17,7 @@ import { Injectable, Type } from '@angular/core';
import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate';
import { CoreError } from '@classes/errors/error'; import { CoreError } from '@classes/errors/error';
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper'; import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
import { makeSingleton } from '@singletons';
import { CoreUserProfileField } from './user'; import { CoreUserProfileField } from './user';
/** /**
@ -73,10 +74,8 @@ export interface CoreUserProfileFieldHandlerData {
/** /**
* Service to interact with user profile fields. * Service to interact with user profile fields.
*/ */
@Injectable({ @Injectable({ providedIn: 'root' })
providedIn: 'root', export class CoreUserProfileFieldDelegateService extends CoreDelegate<CoreUserProfileFieldHandler> {
})
export class CoreUserProfileFieldDelegate extends CoreDelegate<CoreUserProfileFieldHandler> {
protected handlerNameProperty = 'type'; protected handlerNameProperty = 'type';
@ -206,3 +205,5 @@ export class CoreUserProfileFieldDelegate extends CoreDelegate<CoreUserProfileFi
} }
} }
export class CoreUserProfileFieldDelegate extends makeSingleton(CoreUserProfileFieldDelegateService) {}

View File

@ -25,16 +25,14 @@ import { makeSingleton } from '@singletons';
import { CoreEvents, CoreEventUserDeletedData } from '@singletons/events'; import { CoreEvents, CoreEventUserDeletedData } from '@singletons/events';
import { CoreStatusWithWarningsWSResponse, CoreWSExternalWarning } from '@services/ws'; import { CoreStatusWithWarningsWSResponse, CoreWSExternalWarning } from '@services/ws';
import { CoreError } from '@classes/errors/error'; import { CoreError } from '@classes/errors/error';
import { USERS_TABLE_NAME, CoreUserDBRecord } from './db/user'; import { USERS_TABLE_NAME, CoreUserDBRecord } from './database/user';
const ROOT_CACHE_KEY = 'mmUser:'; const ROOT_CACHE_KEY = 'mmUser:';
/** /**
* Service to provide user functionalities. * Service to provide user functionalities.
*/ */
@Injectable({ @Injectable({ providedIn: 'root' })
providedIn: 'root',
})
export class CoreUserProvider { export class CoreUserProvider {
static readonly PARTICIPANTS_LIST_LIMIT = 50; // Max of participants to retrieve in each WS call. static readonly PARTICIPANTS_LIST_LIMIT = 50; // Max of participants to retrieve in each WS call.

View File

@ -17,12 +17,14 @@ import { Routes } from '@angular/router';
import { CoreMainMenuMoreRoutingModule } from '@features/mainmenu/pages/more/more-routing.module'; import { CoreMainMenuMoreRoutingModule } from '@features/mainmenu/pages/more/more-routing.module';
import { CORE_SITE_SCHEMAS } from '@services/sites'; import { CORE_SITE_SCHEMAS } from '@services/sites';
import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/db/user'; import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/user';
import { CoreUserComponentsModule } from './components/components.module'; import { CoreUserComponentsModule } from './components/components.module';
import { CoreUserDelegate } from './services/user-delegate'; import { CoreUserDelegate } from './services/user-delegate';
import { CoreUserProfileMailHandler } from './services/handlers/profile-mail'; import { CoreUserProfileMailHandler } from './services/handlers/profile-mail';
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate'; import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
import { CoreUserProfileLinkHandler } from './services/handlers/profile-link'; import { CoreUserProfileLinkHandler } from './services/handlers/profile-link';
import { CoreCronDelegate } from '@services/cron';
import { CoreUserSyncCronHandler } from './services/handlers/sync-cron';
const routes: Routes = [ const routes: Routes = [
{ {
@ -48,17 +50,11 @@ const routes: Routes = [
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
deps: [CoreUserDelegate, CoreUserProfileMailHandler, CoreContentLinksDelegate, CoreUserProfileLinkHandler], deps: [],
useFactory: ( useFactory: () => () => {
userDelegate: CoreUserDelegate, CoreUserDelegate.instance.registerHandler(CoreUserProfileMailHandler.instance);
mailHandler: CoreUserProfileMailHandler, CoreContentLinksDelegate.instance.registerHandler(CoreUserProfileLinkHandler.instance);
linksDelegate: CoreContentLinksDelegate, CoreCronDelegate.instance.register(CoreUserSyncCronHandler.instance);
profileLinkHandler: CoreUserProfileLinkHandler,
) => () => {
// @todo: Register sync handler when init process has been fixed.
userDelegate.registerHandler(mailHandler);
linksDelegate.registerHandler(profileLinkHandler);
}, },
}, },
], ],