From 926f2508d127c1cb51c2f569babb5a68ccc11357 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?=
Date: Wed, 9 Feb 2022 22:43:09 +0100
Subject: [PATCH] MOBILE-3814 module: Add completion basic mode to use it
bellow title
---
.../core-course-module-completion.html | 81 ++++++++-----
.../module-completion/module-completion.ts | 18 ++-
.../core-course-module-manual-completion.html | 35 +++---
.../module-manual-completion.ts | 7 +-
.../components/module/core-course-module.html | 26 ++--
.../course/components/module/module.scss | 4 -
.../course/components/module/module.ts | 13 +-
src/core/features/course/services/course.ts | 5 +
src/theme/theme.base.scss | 114 ++++++++++--------
9 files changed, 169 insertions(+), 134 deletions(-)
diff --git a/src/core/features/course/components/module-completion/core-course-module-completion.html b/src/core/features/course/components/module-completion/core-course-module-completion.html
index a96265860..d449ff532 100644
--- a/src/core/features/course/components/module-completion/core-course-module-completion.html
+++ b/src/core/features/course/components/module-completion/core-course-module-completion.html
@@ -1,38 +1,63 @@
-
+
+
+
-
-
-
-
- {{ 'core.course.completion_automatic:done' | translate }} {{ rule.rulevalue.description }}
-
-
+
+
+
+
+
+ {{ rule.rulevalue.description }}
+
+
-
-
- {{ 'core.course.completion_automatic:failed' | translate }} {{ rule.rulevalue.description }}
-
-
+
+
+
+ {{ rule.rulevalue.description }}
+
+
-
+
+
+
+ {{ rule.rulevalue.description }}
+
+
+
+
+
+
+
+
+
+ {{ rule.rulevalue.description }}
+
+
+
+
+
+
+
- {{ 'core.course.completion_automatic:todo' | translate }} {{ rule.rulevalue.description }}
+
+ {{ 'core.course.todo' | translate }}
+
+
+ {{'core.course.done' | translate }}
+
+
+
+ {{'core.course.failed' | translate }}
+
-
-
-
-
- {{ 'core.course.completion_automatic:todo' | translate }} {{ rule.rulevalue.description }}
-
-
-
-
-
-
+
+
+
diff --git a/src/core/features/course/components/module-completion/module-completion.ts b/src/core/features/course/components/module-completion/module-completion.ts
index 33fab2dd5..060cdd7dd 100644
--- a/src/core/features/course/components/module-completion/module-completion.ts
+++ b/src/core/features/course/components/module-completion/module-completion.ts
@@ -15,7 +15,12 @@
import { Component, Input } from '@angular/core';
import { CoreCourseModuleCompletionBaseComponent } from '@features/course/classes/module-completion';
-import { CoreCourseModuleCompletionStatus, CoreCourseModuleWSRuleDetails } from '@features/course/services/course';
+import {
+ CoreCourseCompletionMode,
+ CoreCourseModuleCompletionStatus,
+ CoreCourseModuleCompletionTracking,
+ CoreCourseModuleWSRuleDetails,
+} from '@features/course/services/course';
import { CoreUser } from '@features/user/services/user';
import { Translate } from '@singletons';
@@ -37,9 +42,11 @@ export class CoreCourseModuleCompletionComponent extends CoreCourseModuleComplet
@Input() showCompletionConditions = false; // Whether to show activity completion conditions.
@Input() showManualCompletion = false; // Whether to show manual completion.
+ @Input() mode: CoreCourseCompletionMode = CoreCourseCompletionMode.FULL; // Show full completion status or a basic mode.
details?: CompletionRule[];
accessibleDescription: string | null = null;
+ completionStatus?: CoreCourseModuleCompletionStatus;
/**
* @inheritdoc
@@ -49,6 +56,11 @@ export class CoreCourseModuleCompletionComponent extends CoreCourseModuleComplet
return;
}
+ this.completionStatus = !this.completion?.istrackeduser ||
+ this.completion.tracking == CoreCourseModuleCompletionTracking.COMPLETION_TRACKING_NONE
+ ? undefined
+ : this.completion.state;
+
// Format rules.
this.details = await Promise.all(this.completion.details.map(async (rule: CompletionRule) => {
rule.statuscomplete = rule.rulevalue.status == CoreCourseModuleCompletionStatus.COMPLETION_COMPLETE ||
@@ -57,8 +69,8 @@ export class CoreCourseModuleCompletionComponent extends CoreCourseModuleComplet
rule.statusincomplete = rule.rulevalue.status == CoreCourseModuleCompletionStatus.COMPLETION_INCOMPLETE;
rule.accessibleDescription = null;
- if (this.completion!.overrideby) {
- const fullName = await CoreUser.getUserFullNameWithDefault(this.completion!.overrideby, this.completion!.courseId);
+ if (this.completion?.overrideby) {
+ const fullName = await CoreUser.getUserFullNameWithDefault(this.completion.overrideby, this.completion.courseId);
const setByData = {
$a: {
diff --git a/src/core/features/course/components/module-manual-completion/core-course-module-manual-completion.html b/src/core/features/course/components/module-manual-completion/core-course-module-manual-completion.html
index 1720a23d8..50910193b 100644
--- a/src/core/features/course/components/module-manual-completion/core-course-module-manual-completion.html
+++ b/src/core/features/course/components/module-manual-completion/core-course-module-manual-completion.html
@@ -1,24 +1,19 @@
-
-
+
-
-
-
- {{ 'core.course.completion_manual:done' | translate }}
-
-
-
-
- {{ 'core.course.completion_manual:markdone' | translate }}
-
-
-
-
-
-
+
+
+ {{ 'core.course.completion_manual:done' | translate }}
+
+
{{ 'core.course.completion_manual:markdone' | translate }}
-
+
+
+
+ {{ 'core.course.completion_manual:markdone' | translate }}
+
+
+
diff --git a/src/core/features/course/components/module-manual-completion/module-manual-completion.ts b/src/core/features/course/components/module-manual-completion/module-manual-completion.ts
index 6a21680b7..f2468cdab 100644
--- a/src/core/features/course/components/module-manual-completion/module-manual-completion.ts
+++ b/src/core/features/course/components/module-manual-completion/module-manual-completion.ts
@@ -13,8 +13,7 @@
// limitations under the License.
import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChange } from '@angular/core';
-import { CoreCourseCompletionType } from '@features/course/services/course';
-
+import { CoreCourseCompletionMode, CoreCourseCompletionType } from '@features/course/services/course';
import { CoreCourseHelper, CoreCourseModuleCompletionData } from '@features/course/services/course-helper';
import { CoreUser } from '@features/user/services/user';
import { Translate } from '@singletons';
@@ -31,6 +30,7 @@ export class CoreCourseModuleManualCompletionComponent implements OnInit, OnChan
@Input() completion?: CoreCourseModuleCompletionData; // The completion status.
@Input() moduleName?: string; // The name of the module this completion affects.
+ @Input() mode: CoreCourseCompletionMode = CoreCourseCompletionMode.FULL; // Show full completion status or a basic mode.
@Output() completionChanged = new EventEmitter(); // Notify when completion changes.
accessibleDescription: string | null = null;
@@ -97,6 +97,9 @@ export class CoreCourseModuleManualCompletionComponent implements OnInit, OnChan
return;
}
+ event.stopPropagation();
+ event.preventDefault();
+
await CoreCourseHelper.changeManualCompletion(this.completion, event);
// @deprecated MANUAL_COMPLETION_CHANGED is deprecated since 4.0 use COMPLETION_CHANGED instead.
diff --git a/src/core/features/course/components/module/core-course-module.html b/src/core/features/course/components/module/core-course-module.html
index 5a85d4f1d..2b137539d 100644
--- a/src/core/features/course/components/module/core-course-module.html
+++ b/src/core/features/course/components/module/core-course-module.html
@@ -18,21 +18,12 @@
[courseId]="module.course" [attr.aria-label]="module.handlerData.a11yTitle + ', ' + modNameTranslated">
-
-
-
- {{ 'core.course.todo' | translate }}
-
-
-
-
- {{'core.course.done' | translate }}
-
-
-
- {{'core.course.failed' | translate }}
-
+
+
+
+
@@ -76,10 +67,9 @@
-
+
+ [moduleName]="module.name" [moduleId]="module.id" [showCompletionConditions]="showCompletionConditions">
diff --git a/src/core/features/course/components/module/module.scss b/src/core/features/course/components/module/module.scss
index 9048f93d7..cce3cd2aa 100644
--- a/src/core/features/course/components/module/module.scss
+++ b/src/core/features/course/components/module/module.scss
@@ -38,10 +38,6 @@
}
.core-course-module-info {
- ion-badge {
- text-align: start;
- }
-
.core-module-availabilityinfo {
font-size: 90%;
ul {
diff --git a/src/core/features/course/components/module/module.ts b/src/core/features/course/components/module/module.ts
index fa25f2e50..d3964f732 100644
--- a/src/core/features/course/components/module/module.ts
+++ b/src/core/features/course/components/module/module.ts
@@ -20,7 +20,7 @@ import {
CoreCourseModuleCompletionData,
CoreCourseSection,
} from '@features/course/services/course-helper';
-import { CoreCourse, CoreCourseModuleCompletionStatus, CoreCourseModuleCompletionTracking } from '@features/course/services/course';
+import { CoreCourse } from '@features/course/services/course';
import { CoreCourseModuleDelegate, CoreCourseModuleHandlerButton } from '@features/course/services/module-delegate';
/**
@@ -47,7 +47,6 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
hasInfo = false;
showLegacyCompletion = false; // Whether to show module completion in the old format.
showManualCompletion = false; // Whether to show manual completion when completion conditions are disabled.
- completionStatus?: CoreCourseModuleCompletionStatus;
/**
* Component being initialized.
@@ -62,19 +61,11 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
}
this.module.handlerData.a11yTitle = this.module.handlerData.a11yTitle ?? this.module.handlerData.title;
- this.completionStatus = this.module.completiondata === undefined ||
- !this.module.completiondata?.istrackeduser ||
- this.module.completiondata.tracking == CoreCourseModuleCompletionTracking.COMPLETION_TRACKING_NONE
- ? undefined
- : this.module.completiondata.state;
this.hasInfo = !!(
this.module.description ||
(this.showActivityDates && this.module.dates && this.module.dates.length) ||
- (this.module.completiondata &&
- ((this.showManualCompletion && !this.module.completiondata.isautomatic) ||
- (this.showCompletionConditions && this.module.completiondata.isautomatic))
- ) ||
+ (this.module.completiondata && this.showCompletionConditions && this.module.completiondata.isautomatic) ||
this.module.completiondata?.offline ||
(this.module.visible === 0 && (!this.section || this.section.visible)) ||
(this.module.visible !== 0 && this.module.isStealth) ||
diff --git a/src/core/features/course/services/course.ts b/src/core/features/course/services/course.ts
index fa30f2991..565198a71 100644
--- a/src/core/features/course/services/course.ts
+++ b/src/core/features/course/services/course.ts
@@ -76,6 +76,11 @@ export enum CoreCourseCompletionType {
AUTO = 1,
}
+export enum CoreCourseCompletionMode {
+ FULL = 'full',
+ BASIC = 'basic',
+}
+
/**
* Completion tracking valid values.
*/
diff --git a/src/theme/theme.base.scss b/src/theme/theme.base.scss
index 1a92c7795..0100acc6b 100644
--- a/src/theme/theme.base.scss
+++ b/src/theme/theme.base.scss
@@ -184,44 +184,6 @@ ion-app.ios ion-header ion-title {
white-space: normal !important;
}
-ion-button core-format-text .core-format-text-content {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- display: block;
- line-height: 1.2;
-}
-
-ion-button > * {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-ion-button.ion-text-wrap {
- white-space: normal;
- core-format-text .core-format-text-content {
- white-space: normal;
- display: contents;
- }
-
- & > * {
- white-space: normal;
- }
-}
-
-ion-button.button-outline {
- --background: var(--contrast-background);
-}
-
-ion-button ion-spinner {
- --color: inherit !important;
-}
-
-ion-button:not(.button-has-icon-only) > ion-icon {
- min-width: 20px;
-}
-
@each $color-name, $unused in $colors {
.text-#{$color-name},
p.text-#{$color-name} {
@@ -293,10 +255,6 @@ ion-icon {
}
}
-ion-button.button-small ion-icon.faicon[slot] {
- font-size: 1.5em !important;
-}
-
// Buttons.
ion-button,
ion-fab-button,
@@ -306,10 +264,58 @@ button,
min-width: var(--a11y-min-target-size);
}
+ion-button.button-outline {
+ --border-width: 1px;
+ --background: var(--contrast-background);
+}
+
+ion-button.button-solid {
+ --box-shadow: none;
+}
+
+ion-button core-format-text .core-format-text-content {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: block;
+ line-height: 1.2;
+}
+
+ion-button > * {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+ion-button.ion-text-wrap {
+ white-space: normal;
+ core-format-text .core-format-text-content {
+ white-space: normal;
+ display: contents;
+ }
+
+ & > * {
+ white-space: normal;
+ }
+}
+
+ion-button ion-spinner {
+ --color: inherit !important;
+}
+
+ion-button:not(.button-has-icon-only):not(.button-small) > ion-icon {
+ min-width: 20px;
+}
+
ion-button.button.button-clear.button-has-icon-only {
--border-radius: var(--huge-radius);
}
+ion-button.button.button-solid,
+ion-button.button.button-outline {
+ --border-radius: var(--small-radius);
+}
+
// Clear buttons will be black.
ion-button.button-clear {
--primary: var(--primary);
@@ -877,12 +883,14 @@ ion-badge {
border-radius: var(--big-radius);
}
-ion-chip {
+ion-chip,
+ion-button.chip {
line-height: 1.1;
font-size: 12px;
- padding: 4px 8px;
min-height: 24px;
- height: auto;
+ text-transform: none;
+ margin: 4px;
+ font-weight: normal;
ion-icon {
font-size: 16px;
@@ -890,6 +898,18 @@ ion-chip {
@include margin(0, 8px, 0, 0);
}
+ ion-label {
+ white-space: normal !important;
+ }
+}
+
+ion-chip {
+ line-height: 1.1;
+ font-size: 12px;
+ padding: 4px 8px;
+ min-height: 24px;
+ height: auto;
+
&.ion-color {
background: var(--ion-color-tint);
&.chip-outline {
@@ -899,9 +919,7 @@ ion-chip {
}
}
- ion-label {
- white-space: normal !important;
- }
+
}
ion-searchbar {