MOBILE-3640 core: New CoreForms utility class
parent
21fd1f00d7
commit
992f1ca1ad
|
@ -43,6 +43,7 @@ import { AddonCalendarOfflineEventDBRecord } from '../../services/database/calen
|
|||
import { CoreError } from '@classes/errors/error';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CanLeave } from '@guards/can-leave';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page that displays a form to create/edit an event.
|
||||
|
@ -518,7 +519,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave {
|
|||
const result = await AddonCalendar.submitEvent(this.eventId, data);
|
||||
event = result.event;
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, result.sent, this.currentSite.getId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, result.sent, this.currentSite.getId());
|
||||
|
||||
if (result.sent) {
|
||||
// Event created or edited, invalidate right days & months.
|
||||
|
@ -588,7 +589,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave {
|
|||
try {
|
||||
await AddonCalendarOffline.deleteEvent(this.eventId!);
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, this.currentSite.getId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, this.currentSite.getId());
|
||||
|
||||
this.returnToList();
|
||||
} catch {
|
||||
|
@ -611,7 +612,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave {
|
|||
await CoreDomUtils.showConfirm(Translate.instant('core.confirmcanceledit'));
|
||||
}
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, this.currentSite.getId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, this.currentSite.getId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
import { Component, Input, ViewChild, ElementRef } from '@angular/core';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreFormFields, CoreForms } from '@singletons/form';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
import { ModalController, Translate } from '@singletons';
|
||||
import { AddonModAssignAssign, AddonModAssignPlugin, AddonModAssignSubmission } from '../../services/assign';
|
||||
|
@ -47,7 +48,7 @@ export class AddonModAssignEditFeedbackModalComponent {
|
|||
await CoreDomUtils.showConfirm(Translate.instant('core.confirmcanceledit'));
|
||||
}
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
ModalController.dismiss();
|
||||
}
|
||||
|
@ -61,7 +62,7 @@ export class AddonModAssignEditFeedbackModalComponent {
|
|||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
// Close the modal, sending the input data.
|
||||
ModalController.dismiss(this.getInputData());
|
||||
|
@ -72,8 +73,8 @@ export class AddonModAssignEditFeedbackModalComponent {
|
|||
*
|
||||
* @return Object with the data.
|
||||
*/
|
||||
protected getInputData(): Record<string, unknown> {
|
||||
return CoreDomUtils.getDataFromForm(document.forms['addon-mod_assign-edit-feedback-form']);
|
||||
protected getInputData(): CoreFormFields {
|
||||
return CoreForms.getDataFromForm(document.forms['addon-mod_assign-edit-feedback-form']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,6 +21,7 @@ import { CoreNavigator } from '@services/navigator';
|
|||
import { CoreSites, CoreSitesReadingStrategy } from '@services/sites';
|
||||
import { CoreSync } from '@services/sync';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreFormFields, CoreForms } from '@singletons/form';
|
||||
import { Translate } from '@singletons';
|
||||
import { CoreEvents } from '@singletons/events';
|
||||
import {
|
||||
|
@ -105,7 +106,7 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
|||
// Nothing has changed or user confirmed to leave. Clear temporary data from plugins.
|
||||
AddonModAssignHelper.clearSubmissionPluginTmpData(this.assign!, this.userSubmission, this.getInputData());
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -199,8 +200,8 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
|||
*
|
||||
* @return Input data.
|
||||
*/
|
||||
protected getInputData(): Record<string, unknown> {
|
||||
return CoreDomUtils.getDataFromForm(document.forms['addon-mod_assign-edit-form']);
|
||||
protected getInputData(): CoreFormFields {
|
||||
return CoreForms.getDataFromForm(document.forms['addon-mod_assign-edit-form']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -234,7 +235,7 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
|||
* @param inputData The input data.
|
||||
* @return Promise resolved with the data to submit.
|
||||
*/
|
||||
protected prepareSubmissionData(inputData: Record<string, unknown>): Promise<AddonModAssignSavePluginData> {
|
||||
protected prepareSubmissionData(inputData: CoreFormFields): Promise<AddonModAssignSavePluginData> {
|
||||
// If there's offline data, always save it in offline.
|
||||
this.saveOffline = this.hasOffline;
|
||||
|
||||
|
@ -353,7 +354,7 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy, CanLeave {
|
|||
}
|
||||
|
||||
// Submission saved, trigger events.
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
|
||||
CoreEvents.trigger(
|
||||
AddonModAssignProvider.SUBMISSION_SAVED_EVENT,
|
||||
|
|
|
@ -35,6 +35,7 @@ import { CoreGroups } from '@services/groups';
|
|||
import { AddonModAssignSubmissionDelegate } from './submission-delegate';
|
||||
import { AddonModAssignFeedbackDelegate } from './feedback-delegate';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Service that provides some helper functions for assign.
|
||||
|
@ -88,7 +89,7 @@ export class AddonModAssignHelperProvider {
|
|||
clearSubmissionPluginTmpData(
|
||||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission | undefined,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): void {
|
||||
if (!submission) {
|
||||
return;
|
||||
|
@ -362,7 +363,7 @@ export class AddonModAssignHelperProvider {
|
|||
async getSubmissionSizeForEdit(
|
||||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): Promise<number> {
|
||||
|
||||
let totalSize = 0;
|
||||
|
@ -537,7 +538,7 @@ export class AddonModAssignHelperProvider {
|
|||
async hasSubmissionDataChanged(
|
||||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission | undefined,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): Promise<boolean> {
|
||||
if (!submission) {
|
||||
return false;
|
||||
|
@ -580,7 +581,7 @@ export class AddonModAssignHelperProvider {
|
|||
siteId?: string,
|
||||
): Promise<AddonModAssignSavePluginData> {
|
||||
|
||||
const pluginData: Record<string, unknown> = {};
|
||||
const pluginData: CoreFormFields = {};
|
||||
const promises = feedback.plugins
|
||||
? feedback.plugins.map((plugin) =>
|
||||
AddonModAssignFeedbackDelegate.preparePluginFeedbackData(assignId, userId, plugin, pluginData, siteId))
|
||||
|
@ -603,7 +604,7 @@ export class AddonModAssignHelperProvider {
|
|||
async prepareSubmissionPluginData(
|
||||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission | undefined,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
offline = false,
|
||||
): Promise<AddonModAssignSavePluginData> {
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ import { CoreComments } from '@features/comments/services/comments';
|
|||
import { AddonModAssignSubmissionFormatted } from './assign-helper';
|
||||
import { CoreWSError } from '@classes/errors/wserror';
|
||||
import { AddonModAssignAutoSyncData, AddonModAssignManualSyncData, AddonModAssignSyncProvider } from './assign-sync';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
const ROOT_CACHE_KEY = 'mmaModAssign:';
|
||||
|
||||
|
@ -1808,7 +1809,7 @@ type AddonModAssignSaveSubmissionWSParams = {
|
|||
/**
|
||||
* All subplugins will decide what to add here.
|
||||
*/
|
||||
export type AddonModAssignSavePluginData = Record<string, unknown>;
|
||||
export type AddonModAssignSavePluginData = CoreFormFields;
|
||||
|
||||
/**
|
||||
* Params of mod_assign_submit_for_grading WS.
|
||||
|
|
|
@ -19,6 +19,7 @@ import { AddonModAssignAssign, AddonModAssignSubmission, AddonModAssignPlugin, A
|
|||
import { makeSingleton } from '@singletons';
|
||||
import { CoreWSExternalFile } from '@services/ws';
|
||||
import { AddonModAssignSubmissionFormatted } from './assign-helper';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Interface that all feedback handlers must implement.
|
||||
|
@ -61,7 +62,7 @@ export interface AddonModAssignFeedbackHandler extends CoreDelegateHandler {
|
|||
assignId: number,
|
||||
userId: number,
|
||||
siteId?: string,
|
||||
): Record<string, unknown> | Promise<Record<string, unknown> | undefined> | undefined;
|
||||
): CoreFormFields | Promise<CoreFormFields | undefined> | undefined;
|
||||
|
||||
/**
|
||||
* Get files used by this plugin.
|
||||
|
@ -102,7 +103,7 @@ export interface AddonModAssignFeedbackHandler extends CoreDelegateHandler {
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
userId: number,
|
||||
): boolean | Promise<boolean>;
|
||||
|
||||
|
@ -165,7 +166,7 @@ export interface AddonModAssignFeedbackHandler extends CoreDelegateHandler {
|
|||
assignId: number,
|
||||
userId: number,
|
||||
plugin: AddonModAssignPlugin,
|
||||
data: Record<string, unknown>,
|
||||
data: CoreFormFields,
|
||||
siteId?: string,
|
||||
): void | Promise<void>;
|
||||
}
|
||||
|
@ -276,7 +277,7 @@ export class AddonModAssignFeedbackDelegateService extends CoreDelegate<AddonMod
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission | AddonModAssignSubmissionFormatted,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
userId: number,
|
||||
): Promise<boolean | undefined> {
|
||||
return await this.executeFunctionOnEnabled(
|
||||
|
@ -371,7 +372,7 @@ export class AddonModAssignFeedbackDelegateService extends CoreDelegate<AddonMod
|
|||
assignId: number,
|
||||
userId: number,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
siteId?: string,
|
||||
): Promise<void> {
|
||||
return await this.executeFunctionOnEnabled(
|
||||
|
|
|
@ -19,6 +19,7 @@ import { AddonModAssignAssign, AddonModAssignSubmission, AddonModAssignPlugin, A
|
|||
import { makeSingleton } from '@singletons';
|
||||
import { CoreWSExternalFile } from '@services/ws';
|
||||
import { AddonModAssignSubmissionsDBRecordFormatted } from './assign-offline';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Interface that all submission handlers must implement.
|
||||
|
@ -70,7 +71,7 @@ export interface AddonModAssignSubmissionHandler extends CoreDelegateHandler {
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): void;
|
||||
|
||||
/**
|
||||
|
@ -173,7 +174,7 @@ export interface AddonModAssignSubmissionHandler extends CoreDelegateHandler {
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): number | Promise<number>;
|
||||
|
||||
/**
|
||||
|
@ -189,7 +190,7 @@ export interface AddonModAssignSubmissionHandler extends CoreDelegateHandler {
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): boolean | Promise<boolean>;
|
||||
|
||||
/**
|
||||
|
@ -233,7 +234,7 @@ export interface AddonModAssignSubmissionHandler extends CoreDelegateHandler {
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
pluginData: AddonModAssignSavePluginData,
|
||||
offline?: boolean,
|
||||
userId?: number,
|
||||
|
@ -304,7 +305,7 @@ export class AddonModAssignSubmissionDelegateService extends CoreDelegate<AddonM
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): void {
|
||||
return this.executeFunctionOnEnabled(plugin.type, 'clearTmpData', [assign, submission, plugin, inputData]);
|
||||
}
|
||||
|
@ -424,7 +425,7 @@ export class AddonModAssignSubmissionDelegateService extends CoreDelegate<AddonM
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): Promise<number | undefined> {
|
||||
return await this.executeFunctionOnEnabled(
|
||||
plugin.type,
|
||||
|
@ -446,7 +447,7 @@ export class AddonModAssignSubmissionDelegateService extends CoreDelegate<AddonM
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
): Promise<boolean | undefined> {
|
||||
return await this.executeFunctionOnEnabled(
|
||||
plugin.type,
|
||||
|
@ -521,7 +522,7 @@ export class AddonModAssignSubmissionDelegateService extends CoreDelegate<AddonM
|
|||
assign: AddonModAssignAssign,
|
||||
submission: AddonModAssignSubmission,
|
||||
plugin: AddonModAssignPlugin,
|
||||
inputData: Record<string, unknown>,
|
||||
inputData: CoreFormFields,
|
||||
pluginData: AddonModAssignSavePluginData,
|
||||
offline?: boolean,
|
||||
userId?: number,
|
||||
|
|
|
@ -20,6 +20,7 @@ import { CoreDomUtils } from '@services/utils/dom';
|
|||
import { ModalController, Translate } from '@singletons';
|
||||
import { AddonModForumData, AddonModForumPost, AddonModForumReply } from '@addons/mod/forum/services/forum';
|
||||
import { AddonModForumHelper } from '@addons/mod/forum/services/forum-helper';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page that displays a form to edit discussion post.
|
||||
|
@ -93,9 +94,9 @@ export class AddonModForumEditPostComponent implements OnInit {
|
|||
}
|
||||
|
||||
if (data) {
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
} else {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
}
|
||||
|
||||
ModalController.dismiss(data);
|
||||
|
|
|
@ -53,6 +53,7 @@ import { CoreUtils } from '@services/utils/utils';
|
|||
import { AddonModForumPostOptionsMenuComponent } from '../post-options-menu/post-options-menu';
|
||||
import { AddonModForumEditPostComponent } from '../edit-post/edit-post';
|
||||
import { CoreRatingInfo } from '@features/rating/services/rating';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Components that shows a discussion post, its attachments and the action buttons allowed (reply, etc.).
|
||||
|
@ -129,7 +130,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy, OnChanges
|
|||
ngOnChanges(changes: {[name: string]: SimpleChange}): void {
|
||||
if (changes.leavingPage && this.leavingPage) {
|
||||
// Download all courses is enabled now, initialize it.
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -498,7 +499,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy, OnChanges
|
|||
|
||||
this.onPostChange.emit();
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
|
||||
if (this.syncId) {
|
||||
CoreSync.unblockOperation(AddonModForumProvider.COMPONENT, this.syncId);
|
||||
|
@ -520,7 +521,7 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy, OnChanges
|
|||
// Reset data.
|
||||
this.setReplyFormData();
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
if (this.syncId) {
|
||||
CoreSync.unblockOperation(AddonModForumProvider.COMPONENT, this.syncId);
|
||||
|
|
|
@ -39,6 +39,7 @@ import { CoreFileUploader } from '@features/fileuploader/services/fileuploader';
|
|||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CanLeave } from '@guards/can-leave';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
type NewDiscussionData = {
|
||||
subject: string;
|
||||
|
@ -519,7 +520,7 @@ export class AddonModForumNewDiscussionPage implements OnInit, OnDestroy, CanLea
|
|||
CoreDomUtils.showErrorModalDefault(null, 'addon.mod_forum.errorposttoallgroups', true);
|
||||
}
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(
|
||||
CoreForms.triggerFormSubmittedEvent(
|
||||
this.formElement,
|
||||
!!discussionIds,
|
||||
CoreSites.getCurrentSiteId(),
|
||||
|
@ -551,7 +552,7 @@ export class AddonModForumNewDiscussionPage implements OnInit, OnDestroy, CanLea
|
|||
|
||||
await Promise.all(promises);
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
this.returnToDiscussions();
|
||||
} catch (error) {
|
||||
|
@ -585,7 +586,7 @@ export class AddonModForumNewDiscussionPage implements OnInit, OnDestroy, CanLea
|
|||
CoreFileUploader.clearTmpFiles(this.newDiscussion.files);
|
||||
|
||||
if (this.formElement) {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -24,6 +24,7 @@ import { IonContent, IonInput } from '@ionic/angular';
|
|||
import { CoreGroupInfo, CoreGroups } from '@services/groups';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreTimeUtils } from '@services/utils/time';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
|
@ -645,7 +646,7 @@ export class AddonModLessonIndexComponent extends CoreCourseModuleMainActivityCo
|
|||
this.refreshIcon = CoreConstants.ICON_REFRESH;
|
||||
this.syncIcon = CoreConstants.ICON_SYNC;
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true, this.siteId);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true, this.siteId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import { Component, ViewChild, ElementRef } from '@angular/core';
|
|||
import { IonInput } from '@ionic/angular';
|
||||
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
import { ModalController } from '@singletons';
|
||||
|
||||
/**
|
||||
|
@ -40,7 +40,7 @@ export class AddonModLessonPasswordModalComponent {
|
|||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
ModalController.dismiss(password.value);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ export class AddonModLessonPasswordModalComponent {
|
|||
* Close modal.
|
||||
*/
|
||||
closeModal(): void {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
ModalController.dismiss();
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@ import {
|
|||
} from '../../services/lesson-helper';
|
||||
import { AddonModLessonOffline } from '../../services/lesson-offline';
|
||||
import { AddonModLessonSync } from '../../services/lesson-sync';
|
||||
import { CoreFormFields, CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page that allows attempting and reviewing a lesson.
|
||||
|
@ -90,7 +91,7 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
processDataButtons: ProcessDataButton[] = []; // Buttons to display after processing a page.
|
||||
loaded?: boolean; // Whether data has been loaded.
|
||||
displayMenu?: boolean; // Whether the lesson menu should be displayed.
|
||||
originalData?: Record<string, unknown>; // Original question data. It is used to check if data has changed.
|
||||
originalData?: CoreFormFields; // Original question data. It is used to check if data has changed.
|
||||
reviewPageId?: number; // Page to open if the user wants to review the attempt.
|
||||
courseId!: number; // The course ID the lesson belongs to.
|
||||
lessonPages?: AddonModLessonPageWSData[]; // Lesson pages (for the lesson menu).
|
||||
|
@ -164,7 +165,7 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
}
|
||||
}
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -605,7 +606,7 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
* @param formSubmitted Whether a form was submitted.
|
||||
* @return Promise resolved when done.
|
||||
*/
|
||||
protected async processPage(data: Record<string, unknown>, formSubmitted?: boolean): Promise<void> {
|
||||
protected async processPage(data: CoreFormFields, formSubmitted?: boolean): Promise<void> {
|
||||
this.loaded = false;
|
||||
|
||||
const options: AddonModLessonProcessPageOptions = {
|
||||
|
@ -630,7 +631,7 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
);
|
||||
|
||||
if (formSubmitted) {
|
||||
CoreDomUtils.triggerFormSubmittedEvent(
|
||||
CoreForms.triggerFormSubmittedEvent(
|
||||
this.formElement,
|
||||
result.sent,
|
||||
CoreSites.getCurrentSiteId(),
|
||||
|
|
|
@ -16,6 +16,7 @@ import { Injectable } from '@angular/core';
|
|||
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
||||
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreTimeUtils } from '@services/utils/time';
|
||||
import { makeSingleton, Translate } from '@singletons';
|
||||
|
@ -550,7 +551,7 @@ export class AddonModLessonHelperProvider {
|
|||
* @param data Data to prepare.
|
||||
* @return Data to send.
|
||||
*/
|
||||
prepareQuestionData(question: AddonModLessonQuestion, data: Record<string, unknown>): Record<string, unknown> {
|
||||
prepareQuestionData(question: AddonModLessonQuestion, data: CoreFormFields): CoreFormFields {
|
||||
if (question.template == 'essay') {
|
||||
const textarea = (<AddonModLessonEssayQuestion> question).textarea;
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreTimeUtils } from '@services/utils/time';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
|
@ -484,7 +485,7 @@ export class AddonModLessonOfflineProvider {
|
|||
courseId: number,
|
||||
retake: number,
|
||||
page: AddonModLessonPageWSData,
|
||||
data: Record<string, unknown>,
|
||||
data: CoreFormFields,
|
||||
newPageId: number,
|
||||
answerId?: number,
|
||||
correct?: boolean,
|
||||
|
@ -552,7 +553,7 @@ export const AddonModLessonOffline = makeSingleton(AddonModLessonOfflineProvider
|
|||
* Attempt DB record with parsed data.
|
||||
*/
|
||||
export type AddonModLessonPageAttemptRecord = Omit<AddonModLessonPageAttemptDBRecord, 'data'|'useranswer'> & {
|
||||
data: Record<string, unknown> | null;
|
||||
data: CoreFormFields | null;
|
||||
useranswer: unknown | null;
|
||||
};
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import { IonContent } from '@ionic/angular';
|
|||
import { CoreSites } from '@services/sites';
|
||||
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
import { ModalController, Translate } from '@singletons';
|
||||
import { AddonModQuizAccessRuleDelegate } from '../../services/access-rules-delegate';
|
||||
import { AddonModQuizAttemptWSData, AddonModQuizQuizWSData } from '../../services/quiz';
|
||||
|
@ -126,7 +127,7 @@ export class AddonModQuizPreflightModalComponent implements OnInit {
|
|||
CoreDomUtils.showErrorModal('core.errorinvalidform', true);
|
||||
}
|
||||
} else {
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, this.siteId);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, this.siteId);
|
||||
|
||||
ModalController.dismiss(this.preflightForm.value);
|
||||
}
|
||||
|
@ -136,7 +137,7 @@ export class AddonModQuizPreflightModalComponent implements OnInit {
|
|||
* Close modal.
|
||||
*/
|
||||
closeModal(): void {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, this.siteId);
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, this.siteId);
|
||||
|
||||
ModalController.dismiss();
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ import {
|
|||
import { AddonModQuizAttempt, AddonModQuizHelper } from '../../services/quiz-helper';
|
||||
import { AddonModQuizSync } from '../../services/quiz-sync';
|
||||
import { CanLeave } from '@guards/can-leave';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page that allows attempting a quiz.
|
||||
|
@ -160,7 +161,7 @@ export class AddonModQuizPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
|
||||
await CoreDomUtils.showConfirm(Translate.instant('addon.mod_quiz.confirmleavequizonerror'));
|
||||
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
} finally {
|
||||
modal.dismiss();
|
||||
}
|
||||
|
@ -672,7 +673,7 @@ export class AddonModQuizPlayerPage implements OnInit, OnDestroy, CanLeave {
|
|||
this.autoSave.hideAutoSaveError();
|
||||
|
||||
if (this.formElement) {
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, !this.offline, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, !this.offline, CoreSites.getCurrentSiteId());
|
||||
}
|
||||
|
||||
return CoreQuestionHelper.clearTmpData(this.questions, this.component, this.quiz!.coursemodule);
|
||||
|
|
|
@ -17,6 +17,7 @@ import { Component, ViewChild, ElementRef, Input } from '@angular/core';
|
|||
import { CoreApp } from '@services/app';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
import { ModalController } from '@singletons';
|
||||
|
||||
/**
|
||||
|
@ -53,7 +54,7 @@ export class AddonNotesAddComponent {
|
|||
this.userId = this.userId || CoreSites.getCurrentSiteUserId();
|
||||
const sent = await AddonNotes.addNote(this.userId, this.courseId, this.type, this.text);
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, sent, CoreSites.getCurrentSiteId());
|
||||
|
||||
ModalController.dismiss({ type: this.type, sent: true }).finally(() => {
|
||||
CoreDomUtils.showToast(sent ? 'addon.notes.eventnotecreated' : 'core.datastoredoffline', true, 3000);
|
||||
|
@ -70,7 +71,7 @@ export class AddonNotesAddComponent {
|
|||
* Close modal.
|
||||
*/
|
||||
closeModal(): void {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
ModalController.dismiss({ type: this.type });
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import { Injectable, Type } from '@angular/core';
|
|||
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { AddonUserProfileFieldCheckboxComponent } from '../../component/checkbox';
|
||||
|
||||
|
@ -51,7 +52,7 @@ export class AddonUserProfileFieldCheckboxHandlerService implements CoreUserProf
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData | undefined> {
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import { Injectable, Type } from '@angular/core';
|
|||
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { CoreTimeUtils } from '@services/utils/time';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { AddonUserProfileFieldDatetimeComponent } from '../../component/datetime';
|
||||
|
@ -52,7 +53,7 @@ export class AddonUserProfileFieldDatetimeHandlerService implements CoreUserProf
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData | undefined> {
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import { Injectable, Type } from '@angular/core';
|
|||
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { AddonUserProfileFieldMenuComponent } from '../../component/menu';
|
||||
|
||||
|
@ -51,7 +52,7 @@ export class AddonUserProfileFieldMenuHandlerService implements CoreUserProfileF
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData | undefined> {
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import { CoreTextUtils } from '@services/utils/text';
|
|||
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Text user profile field handlers.
|
||||
|
@ -52,7 +53,7 @@ export class AddonUserProfileFieldTextHandlerService implements CoreUserProfileF
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData | undefined> {
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import { CoreTextUtils } from '@services/utils/text';
|
|||
import { AuthEmailSignupProfileField } from '@features/login/services/login-helper';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Textarea user profile field handlers.
|
||||
|
@ -52,7 +53,7 @@ export class AddonUserProfileFieldTextareaHandlerService implements CoreUserProf
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData | undefined> {
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import { CoreMimetypeUtils } from '@services/utils/mimetype';
|
|||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreTimeUtils } from '@services/utils/time';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Component to handle a local file. Only files inside the app folder can be managed.
|
||||
|
@ -149,7 +150,7 @@ export class CoreLocalFileComponent implements OnInit {
|
|||
if (newName == this.file!.name) {
|
||||
// Name hasn't changed, stop.
|
||||
this.editMode = false;
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -169,7 +170,7 @@ export class CoreLocalFileComponent implements OnInit {
|
|||
// File doesn't exist, move it.
|
||||
const fileEntry = await CoreFile.moveFile(this.relativePath!, newPath);
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
this.editMode = false;
|
||||
this.file = fileEntry;
|
||||
|
|
|
@ -19,8 +19,8 @@ import { CoreEvents } from '@singletons/events';
|
|||
import { CoreSites } from '@services/sites';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreConstants } from '@/core/constants';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Component to display a "send message form".
|
||||
|
@ -90,7 +90,7 @@ export class CoreSendMessageFormComponent implements OnInit {
|
|||
|
||||
this.message = ''; // Reset the form.
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
value = CoreTextUtils.replaceNewLines(value, '<br>');
|
||||
this.onSubmit.emit(value);
|
||||
|
|
|
@ -48,6 +48,7 @@ import { CoreGeolocationProvider } from '@services/geolocation';
|
|||
import { CoreNavigatorService } from '@services/navigator';
|
||||
import { CoreScreenService } from '@services/screen';
|
||||
import { CoreCustomURLSchemesProvider } from '@services/urlschemes';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
export const CORE_SERVICES: Type<unknown>[] = [
|
||||
CoreAppProvider,
|
||||
|
@ -70,6 +71,7 @@ export const CORE_SERVICES: Type<unknown>[] = [
|
|||
CoreSyncProvider,
|
||||
CoreUpdateManagerProvider,
|
||||
CoreDomUtilsProvider,
|
||||
CoreForms,
|
||||
CoreIframeUtilsProvider,
|
||||
CoreMimetypeUtilsProvider,
|
||||
CoreTextUtilsProvider,
|
||||
|
|
|
@ -17,6 +17,7 @@ import { CoreComments } from '@features/comments/services/comments';
|
|||
import { CoreApp } from '@services/app';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
import { ModalController } from '@singletons';
|
||||
|
||||
/**
|
||||
|
@ -62,7 +63,7 @@ export class CoreCommentsAddComponent {
|
|||
this.area,
|
||||
);
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(
|
||||
CoreForms.triggerFormSubmittedEvent(
|
||||
this.formElement,
|
||||
!!commentsResponse,
|
||||
CoreSites.getCurrentSiteId(),
|
||||
|
@ -87,7 +88,7 @@ export class CoreCommentsAddComponent {
|
|||
* Close modal.
|
||||
*/
|
||||
closeModal(): void {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
ModalController.dismiss();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
import { Component, ViewChild, ElementRef } from '@angular/core';
|
||||
import { ModalController, NavParams } from '@ionic/angular';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Modal that displays a form to enter a password to self enrol in a course.
|
||||
|
@ -40,7 +40,7 @@ export class CoreCoursesSelfEnrolPasswordComponent {
|
|||
* Close help modal.
|
||||
*/
|
||||
close(): void {
|
||||
CoreDomUtils.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormCancelledEvent(this.formElement, CoreSites.getCurrentSiteId());
|
||||
|
||||
this.modalCtrl.dismiss();
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ export class CoreCoursesSelfEnrolPasswordComponent {
|
|||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
this.modalCtrl.dismiss(this.password);
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import { Translate } from '@singletons';
|
|||
import { CoreSiteIdentityProvider, CoreSitePublicConfigResponse } from '@classes/site';
|
||||
import { CoreEvents } from '@singletons/events';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page to enter the user credentials.
|
||||
|
@ -249,7 +250,7 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy {
|
|||
} finally {
|
||||
modal.dismiss();
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ import {
|
|||
CoreLoginHelper,
|
||||
} from '@features/login/services/login-helper';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page to signup using email.
|
||||
|
@ -333,7 +334,7 @@ export class CoreLoginEmailSignupPage implements OnInit {
|
|||
|
||||
if (result.success) {
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.signupFormElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.signupFormElement, true);
|
||||
|
||||
// Show alert and ho back.
|
||||
const message = Translate.instant('core.login.emailconfirmsent', { $a: params.email });
|
||||
|
@ -407,7 +408,7 @@ export class CoreLoginEmailSignupPage implements OnInit {
|
|||
try {
|
||||
const result = await CoreWS.callAjax<IsMinorWSResult>('core_auth_is_minor', params, { siteUrl: this.siteUrl });
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.ageFormElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.ageFormElement, true);
|
||||
|
||||
if (!result.status) {
|
||||
if (this.countryControl.value) {
|
||||
|
|
|
@ -20,6 +20,7 @@ import { CoreLoginHelper } from '@features/login/services/login-helper';
|
|||
import { Translate, Platform } from '@singletons';
|
||||
import { CoreWSExternalWarning } from '@services/ws';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page to recover a forgotten password.
|
||||
|
@ -97,7 +98,7 @@ export class CoreLoginForgottenPasswordPage implements OnInit {
|
|||
CoreDomUtils.showErrorModal(response.notice);
|
||||
} else {
|
||||
// Success.
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true);
|
||||
|
||||
CoreDomUtils.showAlert(Translate.instant('core.success'), response.notice);
|
||||
CoreNavigator.back();
|
||||
|
|
|
@ -25,6 +25,7 @@ import { CoreSiteIdentityProvider, CoreSitePublicConfigResponse } from '@classes
|
|||
import { CoreEvents } from '@singletons/events';
|
||||
import { CoreError } from '@classes/errors/error';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page to enter the user password to reconnect to a site.
|
||||
|
@ -200,7 +201,7 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
|
|||
|
||||
await CoreSites.updateSiteToken(this.siteUrl, this.username, data.token, data.privateToken);
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true);
|
||||
|
||||
// Update site info too.
|
||||
await CoreSites.updateSiteInfoByUrl(this.siteUrl, this.username);
|
||||
|
|
|
@ -32,6 +32,7 @@ import { CoreLoginSiteOnboardingComponent } from '@features/login/components/sit
|
|||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreCustomURLSchemes, CoreCustomURLSchemesHandleError } from '@services/urlschemes';
|
||||
import { CoreTextUtils } from '@services/utils/text';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Page that displays a "splash screen" while the app is being initialized.
|
||||
|
@ -322,7 +323,7 @@ export class CoreLoginSitePage implements OnInit {
|
|||
|
||||
await CoreSites.newSite(data.siteUrl, data.token, data.privateToken);
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true);
|
||||
|
||||
await CoreNavigator.navigateToSiteHome();
|
||||
|
||||
|
@ -349,7 +350,7 @@ export class CoreLoginSitePage implements OnInit {
|
|||
protected async login(response: CoreSiteCheckResponse, foundSite?: CoreLoginSiteInfoExtended): Promise<void> {
|
||||
await CoreUtils.ignoreErrors(CoreSites.checkApplication(response));
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, true);
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, true);
|
||||
|
||||
if (response.warning) {
|
||||
CoreDomUtils.showErrorModal(response.warning, true, 4000);
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
|
||||
|
||||
import { CoreSites } from '@services/sites';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
import { CoreSearchHistory } from '../../services/search-history.service';
|
||||
import { Translate } from '@singletons';
|
||||
import { CoreSearchHistoryDBRecord } from '../../services/search-history-db';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Component to display a "search box".
|
||||
|
@ -98,7 +98,7 @@ export class CoreSearchBoxComponent implements OnInit {
|
|||
this.saveSearchToHistory(this.searchText);
|
||||
}
|
||||
|
||||
CoreDomUtils.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
CoreForms.triggerFormSubmittedEvent(this.formElement, false, CoreSites.getCurrentSiteId());
|
||||
|
||||
this.historyShown = false;
|
||||
this.searched = this.searchText;
|
||||
|
|
|
@ -16,10 +16,10 @@ import { Input, OnInit, OnDestroy, ElementRef, Output, EventEmitter, Directive }
|
|||
import { Subscription } from 'rxjs';
|
||||
|
||||
import { CoreSiteWSPreSets } from '@classes/site';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreSitePluginsPluginContentComponent } from '../components/plugin-content/plugin-content';
|
||||
import { CoreSitePlugins } from '../services/siteplugins';
|
||||
import { CoreLogger } from '@singletons/logger';
|
||||
import { CoreFormFields, CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Base class for directives that need to call a WS.
|
||||
|
@ -90,7 +90,7 @@ export class CoreSitePluginsCallWSBaseDirective implements OnInit, OnDestroy {
|
|||
*
|
||||
* @return Params.
|
||||
*/
|
||||
protected getParamsForWS(): Record<string, unknown> {
|
||||
protected getParamsForWS(): CoreFormFields {
|
||||
let params = this.params || {};
|
||||
|
||||
if (this.parentContent) {
|
||||
|
@ -98,7 +98,7 @@ export class CoreSitePluginsCallWSBaseDirective implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
if (this.form && document.forms[this.form]) {
|
||||
params = Object.assign(params, CoreDomUtils.getDataFromForm(document.forms[this.form]));
|
||||
params = Object.assign(params, CoreForms.getDataFromForm(document.forms[this.form]));
|
||||
}
|
||||
|
||||
return params;
|
||||
|
|
|
@ -18,6 +18,7 @@ import { AuthEmailSignupProfileField } from '@features/login/services/login-help
|
|||
import { CoreSitePluginsUserProfileFieldComponent } from '@features/siteplugins/components/user-profile-field/user-profile-field';
|
||||
import { CoreUserProfileField } from '@features/user/services/user';
|
||||
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '@features/user/services/user-profile-field-delegate';
|
||||
import { CoreFormFields } from '@singletons/form';
|
||||
import { CoreSitePluginsBaseHandler } from './base-handler';
|
||||
|
||||
/**
|
||||
|
@ -43,7 +44,7 @@ export class CoreSitePluginsUserProfileFieldHandler extends CoreSitePluginsBaseH
|
|||
field: AuthEmailSignupProfileField | CoreUserProfileField,
|
||||
signup: boolean,
|
||||
registerAuth: string,
|
||||
formValues: Record<string, unknown>,
|
||||
formValues: CoreFormFields,
|
||||
): Promise<CoreUserProfileFieldHandlerData> {
|
||||
// No getData function implemented, use a default behaviour.
|
||||
const name = 'profile_field_' + field.shortname;
|
||||
|
|
|
@ -17,10 +17,10 @@ import { Md5 } from 'ts-md5';
|
|||
|
||||
import { CoreSiteWSPreSets } from '@classes/site';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
import { CoreSitePluginsPluginContentComponent } from '../components/plugin-content/plugin-content';
|
||||
import { CoreSitePlugins } from '../services/siteplugins';
|
||||
import { CoreForms } from '@singletons/form';
|
||||
|
||||
/**
|
||||
* Directive to display a new site plugin content when clicked. This new content can be displayed in a new page or in the
|
||||
|
@ -84,7 +84,7 @@ export class CoreSitePluginsNewContentDirective implements OnInit {
|
|||
}
|
||||
|
||||
if (this.form && document.forms[this.form]) {
|
||||
args = Object.assign(args, CoreDomUtils.getDataFromForm(document.forms[this.form]));
|
||||
args = Object.assign(args, CoreForms.getDataFromForm(document.forms[this.form]));
|
||||
}
|
||||
|
||||
let jsData = this.jsData || {};
|
||||
|
|
|
@ -20,7 +20,6 @@ import { Md5 } from 'ts-md5';
|
|||
|
||||
import { CoreApp } from '@services/app';
|
||||
import { CoreConfig } from '@services/config';
|
||||
import { CoreEventFormAction, CoreEvents } from '@singletons/events';
|
||||
import { CoreFile } from '@services/file';
|
||||
import { CoreWSExternalWarning } from '@services/ws';
|
||||
import { CoreTextUtils, CoreTextErrorObject } from '@services/utils/text';
|
||||
|
@ -29,7 +28,7 @@ import { CoreUtils } from '@services/utils/utils';
|
|||
import { CoreConstants } from '@/core/constants';
|
||||
import { CoreIonLoadingElement } from '@classes/ion-loading';
|
||||
import { CoreCanceledError } from '@classes/errors/cancelederror';
|
||||
import { CoreError } from '@classes/errors/error';
|
||||
import { CoreAnyError, CoreError } from '@classes/errors/error';
|
||||
import { CoreSilentError } from '@classes/errors/silenterror';
|
||||
import {
|
||||
makeSingleton,
|
||||
|
@ -45,6 +44,7 @@ import { CoreFileSizeSum } from '@services/plugin-file-delegate';
|
|||
import { CoreNetworkError } from '@classes/errors/network-error';
|
||||
import { CoreBSTooltipComponent } from '@components/bs-tooltip/bs-tooltip';
|
||||
import { CoreViewerImageComponent } from '@features/viewer/components/image/image';
|
||||
import { CoreFormFields, CoreForms } from '../../singletons/form';
|
||||
|
||||
/*
|
||||
* "Utils" service with helper functions for UI, DOM elements and HTML code.
|
||||
|
@ -349,7 +349,7 @@ export class CoreDomUtilsProvider {
|
|||
return urls;
|
||||
}
|
||||
|
||||
// Extract the URL form each match.
|
||||
// Extract the URL from each match.
|
||||
matches.forEach((match) => {
|
||||
const submatches = match.match(/url\(\s*['"]?([^'"]*)['"]?\s*\)/im);
|
||||
if (submatches?.[1]) {
|
||||
|
@ -445,36 +445,10 @@ export class CoreDomUtilsProvider {
|
|||
*
|
||||
* @param form The form to get the data from.
|
||||
* @return Object with the data. The keys are the names of the inputs.
|
||||
* @deprecated since 3.9.5. Function has been moved to CoreForms.
|
||||
*/
|
||||
getDataFromForm(form: HTMLFormElement): Record<string, unknown> {
|
||||
if (!form || !form.elements) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const data = {};
|
||||
|
||||
for (let i = 0; i < form.elements.length; i++) {
|
||||
const element = <HTMLInputElement> form.elements[i];
|
||||
const name = element.name || '';
|
||||
|
||||
// Ignore submit inputs.
|
||||
if (!name || element.type == 'submit' || element.tagName == 'BUTTON') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the value.
|
||||
if (element.type == 'checkbox') {
|
||||
data[name] = !!element.checked;
|
||||
} else if (element.type == 'radio') {
|
||||
if (element.checked) {
|
||||
data[name] = element.value;
|
||||
}
|
||||
} else {
|
||||
data[name] = element.value;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
getDataFromForm(form: HTMLFormElement): CoreFormFields {
|
||||
return CoreForms.getDataFromForm(form);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -752,7 +726,7 @@ export class CoreDomUtilsProvider {
|
|||
* @param error Error to check.
|
||||
* @return Whether it's a canceled error.
|
||||
*/
|
||||
isCanceledError(error: CoreError | CoreTextErrorObject | string | null): boolean {
|
||||
isCanceledError(error: CoreAnyError): boolean {
|
||||
return error instanceof CoreCanceledError;
|
||||
}
|
||||
|
||||
|
@ -862,8 +836,10 @@ export class CoreDomUtilsProvider {
|
|||
*
|
||||
* @return Promise resolved with boolean: true if enabled, false otherwise.
|
||||
*/
|
||||
isRichTextEditorEnabled(): Promise<boolean> {
|
||||
return CoreConfig.get(CoreConstants.SETTINGS_RICH_TEXT_EDITOR, true).then((enabled) => !!enabled);
|
||||
async isRichTextEditorEnabled(): Promise<boolean> {
|
||||
const enabled = await CoreConfig.get(CoreConstants.SETTINGS_RICH_TEXT_EDITOR, true);
|
||||
|
||||
return !!enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1412,7 +1388,7 @@ export class CoreDomUtilsProvider {
|
|||
* @return Promise resolved with the alert modal.
|
||||
*/
|
||||
async showErrorModalDefault(
|
||||
error: CoreError | CoreTextErrorObject | string | null,
|
||||
error: CoreAnyError,
|
||||
defaultError: string,
|
||||
needsTranslate?: boolean,
|
||||
autocloseTime?: number,
|
||||
|
@ -1741,7 +1717,7 @@ export class CoreDomUtilsProvider {
|
|||
* @param element The element to search in.
|
||||
* @return Promise resolved with a boolean: whether there was any image to load.
|
||||
*/
|
||||
waitForImages(element: HTMLElement): Promise<boolean> {
|
||||
async waitForImages(element: HTMLElement): Promise<boolean> {
|
||||
const imgs = Array.from(element.querySelectorAll('img'));
|
||||
const promises: Promise<void>[] = [];
|
||||
let hasImgToLoad = false;
|
||||
|
@ -1764,7 +1740,9 @@ export class CoreDomUtilsProvider {
|
|||
}
|
||||
});
|
||||
|
||||
return Promise.all(promises).then(() => hasImgToLoad);
|
||||
await Promise.all(promises);
|
||||
|
||||
return hasImgToLoad;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1785,16 +1763,10 @@ export class CoreDomUtilsProvider {
|
|||
*
|
||||
* @param form Form element.
|
||||
* @param siteId The site affected. If not provided, no site affected.
|
||||
* @deprecated since 3.9.5. Function has been moved to CoreForms.
|
||||
*/
|
||||
triggerFormCancelledEvent(formRef: ElementRef | HTMLFormElement | undefined, siteId?: string): void {
|
||||
if (!formRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoreEvents.trigger(CoreEvents.FORM_ACTION, {
|
||||
action: CoreEventFormAction.CANCEL,
|
||||
form: formRef.nativeElement,
|
||||
}, siteId);
|
||||
CoreForms.triggerFormCancelledEvent(formRef, siteId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1803,17 +1775,10 @@ export class CoreDomUtilsProvider {
|
|||
* @param form Form element.
|
||||
* @param online Whether the action was done in offline or not.
|
||||
* @param siteId The site affected. If not provided, no site affected.
|
||||
* @deprecated since 3.9.5. Function has been moved to CoreForms.
|
||||
*/
|
||||
triggerFormSubmittedEvent(formRef: ElementRef | HTMLFormElement | undefined, online?: boolean, siteId?: string): void {
|
||||
if (!formRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoreEvents.trigger(CoreEvents.FORM_ACTION, {
|
||||
action: CoreEventFormAction.SUBMIT,
|
||||
form: formRef.nativeElement || formRef,
|
||||
online: !!online,
|
||||
}, siteId);
|
||||
CoreForms.triggerFormSubmittedEvent(formRef, online, siteId);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -130,6 +130,33 @@ export class CoreUtilsProvider {
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an array of objects to an indexed array, using a property of each entry as the key.
|
||||
* Every entry will contain an array of the found objects of the property identifier.
|
||||
* E.g. [{id: 10, name: 'A'}, {id: 10, name: 'B'}] => {10: [ {id: 10, name: 'A'}, {id: 10, name: 'B'} ] }
|
||||
*
|
||||
* @param array The array to convert.
|
||||
* @param propertyName The name of the property to use as the key. If not provided, the whole item will be used.
|
||||
* @param result Object where to put the properties. If not defined, a new object will be created.
|
||||
* @return The object.
|
||||
*/
|
||||
arrayToObjectMultiple<T>(
|
||||
array: T[] = [],
|
||||
propertyName?: string,
|
||||
result: Record<string, T[]> = {},
|
||||
): Record<string, T[]> {
|
||||
for (const entry of array) {
|
||||
const key = propertyName ? entry[propertyName] : entry;
|
||||
if (typeof result[key] == 'undefined') {
|
||||
result[key] = [];
|
||||
}
|
||||
|
||||
result[key].push(entry);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two objects. This function won't compare functions and proto properties, it's a basic compare.
|
||||
* Also, this will only check if itemA's properties are in itemB with same value. This function will still
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { ElementRef } from '@angular/core';
|
||||
import { CoreEventFormAction, CoreEvents } from '@singletons/events';
|
||||
|
||||
/**
|
||||
* Singleton with helper functions for Forms.
|
||||
*/
|
||||
export class CoreForms {
|
||||
|
||||
/**
|
||||
* Get the data from a form. It will only collect elements that have a name.
|
||||
*
|
||||
* @param form The form to get the data from.
|
||||
* @return Object with the data. The keys are the names of the inputs.
|
||||
*/
|
||||
static getDataFromForm(form: HTMLFormElement): CoreFormFields {
|
||||
if (!form || !form.elements) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const data: CoreFormFields = {};
|
||||
|
||||
for (let i = 0; i < form.elements.length; i++) {
|
||||
const element = <HTMLInputElement> form.elements[i];
|
||||
const name = element.name || '';
|
||||
|
||||
// Ignore submit inputs.
|
||||
if (!name || element.type == 'submit' || element.tagName == 'BUTTON') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the value.
|
||||
if (element.type == 'checkbox') {
|
||||
data[name] = !!element.checked;
|
||||
} else if (element.type == 'radio') {
|
||||
if (element.checked) {
|
||||
data[name] = element.value;
|
||||
}
|
||||
} else {
|
||||
data[name] = element.value;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger form cancelled event.
|
||||
*
|
||||
* @param form Form element.
|
||||
* @param siteId The site affected. If not provided, no site affected.
|
||||
*/
|
||||
static triggerFormCancelledEvent(formRef: ElementRef | HTMLFormElement | undefined, siteId?: string): void {
|
||||
if (!formRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoreEvents.trigger(CoreEvents.FORM_ACTION, {
|
||||
action: CoreEventFormAction.CANCEL,
|
||||
form: formRef.nativeElement,
|
||||
}, siteId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger form submitted event.
|
||||
*
|
||||
* @param form Form element.
|
||||
* @param online Whether the action was done in offline or not.
|
||||
* @param siteId The site affected. If not provided, no site affected.
|
||||
*/
|
||||
static triggerFormSubmittedEvent(formRef: ElementRef | HTMLFormElement | undefined, online?: boolean, siteId?: string): void {
|
||||
if (!formRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoreEvents.trigger(CoreEvents.FORM_ACTION, {
|
||||
action: CoreEventFormAction.SUBMIT,
|
||||
form: formRef.nativeElement || formRef,
|
||||
online: !!online,
|
||||
}, siteId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export type CoreFormFields<T = unknown> = Record<string, T>;
|
Loading…
Reference in New Issue