-
-
-
- {{#if @editable}}
-
- {{else}}
- {{#if this.isIndependentLearning}}
- {{t "general.yes"}}
+
-
- {{#if this.isIndependentLearning}}
-
-
-
- {{#if @editable}}
-
-
-
-
- {{else}}
- {{@session.ilmSession.hours}}
+
{{/if}}
-
-
- {{#unless @session.hasPostrequisite}}
-
- {{/unless}}
- {{/if}}
+ {{/if}}
+
+ {{#if this.showRemoveConfirmation}}
+
+ {{t "general.confirmRemoveIlm"}}
+
+
+
+
+
+ {{/if}}
+ {{#if (and @editable (not this.showRemoveConfirmation))}}
+ {{#if this.showAddNew}}
+
+ {{/if}}
+ {{/if}}
+ {{#if
+ (and @session.ilmSession (not this.showRemoveConfirmation) (not this.addIlm.isRunning))
+ }}
+
+
+
+ {{#if @editable}}
+
+
+
+
+ {{else}}
+ {{@session.ilmSession.hours}}
+ {{/if}}
+
+
+ {{#unless @session.hasPostrequisite}}
+
+ {{/unless}}
+ {{/if}}
+
}
diff --git a/packages/ilios-common/app/styles/ilios-common/components.scss b/packages/ilios-common/app/styles/ilios-common/components.scss
index 74b5a09285..02264873d6 100644
--- a/packages/ilios-common/app/styles/ilios-common/components.scss
+++ b/packages/ilios-common/app/styles/ilios-common/components.scss
@@ -126,6 +126,7 @@
@forward "components/course/visualize-objectives-graph";
@forward "components/session/collapsed-objectives";
+@forward "components/session/ilm";
@forward "components/session/objectives";
@forward "components/session/manage-objective-descriptors";
@forward "components/session/manage-objective-parents";
diff --git a/packages/ilios-common/app/styles/ilios-common/components/session-overview.scss b/packages/ilios-common/app/styles/ilios-common/components/session-overview.scss
index df95441b19..b9ec41b977 100644
--- a/packages/ilios-common/app/styles/ilios-common/components/session-overview.scss
+++ b/packages/ilios-common/app/styles/ilios-common/components/session-overview.scss
@@ -93,13 +93,6 @@
grid-column: 1/-1;
}
- hr {
- background: 0;
- grid-column: 1 / -1;
- height: 0;
- margin: 1rem;
- }
-
.sessiondescription,
.instructional-notes {
grid-column: 1 / -1;
@@ -113,10 +106,4 @@
.fa-copy {
color: var(--green);
}
-
- @include m.for-desktop-and-up {
- .session-overview-ilm-duedate {
- grid-column: 2 / -1;
- }
- }
}
diff --git a/packages/ilios-common/app/styles/ilios-common/components/session/ilm.scss b/packages/ilios-common/app/styles/ilios-common/components/session/ilm.scss
new file mode 100644
index 0000000000..d55de7ab89
--- /dev/null
+++ b/packages/ilios-common/app/styles/ilios-common/components/session/ilm.scss
@@ -0,0 +1,96 @@
+@use "../../mixins" as m;
+
+.session-ilm {
+ @include m.ilios-fieldset;
+ display: flex;
+ flex-direction: column;
+ margin: 0.25rem 0.5rem 0.25rem 0;
+ align-items: flex-start;
+
+ @include m.for-tablet-and-up {
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-around;
+ }
+
+ legend {
+ display: flex;
+ align-items: center;
+
+ button {
+ background-color: transparent;
+ padding: 0;
+ margin-left: 0.25rem;
+ color: var(--blue);
+
+ &.remove {
+ color: var(--red);
+ }
+ }
+ }
+
+ &.hidden {
+ display: none;
+ }
+
+ &.not-ilm {
+ justify-content: flex-start;
+ button {
+ background-color: var(--green);
+ margin-left: 1rem;
+ }
+ }
+
+ &.is-ilm {
+ @include m.for-tablet-and-up {
+ min-height: 4rem;
+ }
+
+ &.recently-added {
+ transition: background-color 3s ease-in;
+ }
+
+ div {
+ display: flex;
+ justify-content: center;
+ align-items: baseline;
+ }
+
+ .hours {
+ input {
+ width: 3rem;
+ }
+ }
+ }
+
+ &.is-new {
+ background-color: var(--transparent-green);
+ }
+
+ &.confirm-removal {
+ flex-direction: column;
+ background-color: var(--lightest-red);
+ color: var(--light-red);
+ font-weight: 600;
+
+ p {
+ text-align: center;
+ }
+
+ .confirm-buttons {
+ button {
+ margin: 0.5rem;
+ }
+
+ .remove {
+ background-color: var(--white);
+ color: var(--light-red);
+
+ &:hover {
+ background-color: var(--light-red);
+ color: white;
+ }
+ }
+ }
+ }
+}
diff --git a/packages/ilios-common/translations/en-us.yaml b/packages/ilios-common/translations/en-us.yaml
index 58b6304ee8..c4ef00ca65 100644
--- a/packages/ilios-common/translations/en-us.yaml
+++ b/packages/ilios-common/translations/en-us.yaml
@@ -4,6 +4,7 @@ general:
actions: Actions
activeFilters: Active Filters
add: Add
+ addIlm: Add ILM to {session}
addNew: Add New
admin: Admin
administratorCount: "There {count, plural, =1 {is 1 administrator} other {are # administrators}}"
@@ -51,6 +52,7 @@ general:
competencies: Competencies
complete: Complete
completeSessions: "Sessions Complete: ready to publish"
+ confirmRemoveIlm: Are you sure you want to delete this ILM? This action cannot be undone and will remove all learners and instructors linked directly to this ILM.
confirmRemoveLearningMaterial: Are you sure you want to remove this learning material? This action cannot be undone.
confirmRemoveObjective: Are you sure you want to delete this objective? This action cannot be undone.
confirmRemoveSession: Are you sure you want to delete this session? This action cannot be undone.
diff --git a/packages/ilios-common/translations/es.yaml b/packages/ilios-common/translations/es.yaml
index 9608892661..4fe86d9b74 100644
--- a/packages/ilios-common/translations/es.yaml
+++ b/packages/ilios-common/translations/es.yaml
@@ -4,6 +4,7 @@ general:
actions: Acciones
activeFilters: Filtros Activos
add: Agregue
+ addIlm: Añadir ILM a {session}
addNew: Agregue Nuevo
admin: Admin
administratorCount: "Hay {count, plural, =1 {1 administrador} other {# administradores}}"
@@ -52,6 +53,7 @@ general:
complete: Completo
completeSessions: "Sesiónes Completas: Listo a Publicar"
confirmRemoveLearningMaterial: ¿Está seguro que desea eliminar este material de aprendizaje? Esta acción no se puede deshacer.
+ confirmRemoveIlm: ¿Está seguro de que quieres borrar este ILM? Esta acción no se puede deshacer y eliminará a todos los alumnos e instructores vinculados directamente a este ILM.
confirmRemoveObjective: ¿Está seguro que desea eliminar este objetivo? Esta acción no se puede deshacer.
confirmRemoveSession: ¿Está seguro que desea eliminar este sessión? Esta acción no se puede deshacer.
confirmRemoveSessionOffering: "¿Estás seguro que quieres borrar este ofrecimiento con {learnerGroupCount} grupos de aprendedores? Esta acción no se puede deshacer."
diff --git a/packages/ilios-common/translations/fr.yaml b/packages/ilios-common/translations/fr.yaml
index f01fc87f79..c80874bfe9 100644
--- a/packages/ilios-common/translations/fr.yaml
+++ b/packages/ilios-common/translations/fr.yaml
@@ -4,6 +4,7 @@ general:
actions: Actions
activeFilters: Filtres actifs
admin: Admin
+ addIlm: Ajouté ILM à {session}
add: Ajouté
addNew: Ajouté Neuf
administratorCount: "Il y a {count, plural, =1 { un administrateur} other {# administrateurs}}"
@@ -52,6 +53,7 @@ general:
complete: Accompli
completeSessions: "Séances complète: prêt à publier"
confirmRemoveLearningMaterial: "Êtes-vous sûr vous voulez supprimer cette matériel d'étude? Ça action ne peut pas être défait."
+ confirmRemoveIlm: Êtes-vous sûr de vouloir supprimer cet ILM ? Cette action est irréversible et supprimera tous les apprenants et instructeurs directement liés à cet ILM.
confirmRemoveObjective: Êtes vous sûr de vouloir supprimer cet objectif? Ça action ne peut pas être défait.
confirmRemoveSession: Êtes vous sûr de vouloir supprimer cette séance? Ça action ne peut pas être défait.
confirmRemoveSessionOffering: "Êtes-vous sûr vous voulez supprimer cette offre avec {learnerGroupCount} groupes d'apprenants? Ça action ne peut pas être défait."
diff --git a/packages/test-app/tests/integration/components/session/ilm-test.gjs b/packages/test-app/tests/integration/components/session/ilm-test.gjs
index f95887f04a..71af629e26 100644
--- a/packages/test-app/tests/integration/components/session/ilm-test.gjs
+++ b/packages/test-app/tests/integration/components/session/ilm-test.gjs
@@ -11,7 +11,7 @@ module('Integration | Component | session/ilm', function (hooks) {
setupMirage(hooks);
test('it renders and is accessible when not editable with ILM', async function (assert) {
- const ilmSession = this.server.create('ilmSession', { hours: 8 });
+ const ilmSession = this.server.create('ilm-session', { hours: 8 });
this.set('session', this.server.create('session', { ilmSession }));
await render(