Skip to content

Julian/assigmnent details and grouping #117

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
33f0158
:construction:group assignments by year not finish
Julian-Denis May 20, 2021
af771fd
⚗️ groupping rows work in progress
Julian-Denis May 31, 2021
270e9e4
⚗️ Fix import bug
Julian-Denis May 31, 2021
2ce15a7
🚧 row grouping is working and translate
Julian-Denis Jun 7, 2021
1096bd1
✨ row groupping function added
Julian-Denis Jun 14, 2021
bf5d79d
🚸 change cursor when hoverring a group
Julian-Denis Jun 21, 2021
085f2f3
🚸 shift cells to the right
Julian-Denis Jun 21, 2021
e9b5ef4
🚸 shift columns to the right
Julian-Denis Jun 23, 2021
3bb801b
🚧 Details display, need more visual & translation
Julian-Denis Jun 3, 2021
b905a3c
🚧 Creating a detail displayer for a better view.
Julian-Denis Jun 7, 2021
1e3e044
✨ Row details in assignments list
Julian-Denis Jun 10, 2021
4868450
⚗️ add a switch to groupping function, don't work
Julian-Denis Jun 14, 2021
edb8283
:children_crossing: add more details, translation and format date
Julian-Denis Jun 18, 2021
39be4f9
🚸 improve display of details
Julian-Denis Jun 21, 2021
c18ce05
🚸 improve display of details and date
Julian-Denis Jun 23, 2021
e477f91
🌐 update translation
Julian-Denis Jun 23, 2021
c03a52f
⚰️ delete a console.log function
Julian-Denis Jun 23, 2021
87218a3
✨Add a grouping mode by year and details mode view
Julian-Denis Jun 25, 2021
aabe736
🎨 Improve code lisibility, structure, details display
Julian-Denis Jun 28, 2021
0d92cc5
🐛 Fix missing translation
Julian-Denis Jun 28, 2021
e2339ad
✏️ fix codacy issues
Julian-Denis Jun 28, 2021
6a4aedf
Merge branch 'master' into Julian/Assigmnent-details-and-grouping
Julian-Denis Jun 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { LOCATION_INITIALIZED, registerLocaleData } from "@angular/common";
import { DatePipe, LOCATION_INITIALIZED, registerLocaleData } from "@angular/common";
import { HttpClient, HttpClientModule } from "@angular/common/http";
import localeFr from "@angular/common/locales/fr";
import { APP_INITIALIZER, Injector, LOCALE_ID, NgModule } from "@angular/core";
Expand Down Expand Up @@ -157,6 +157,7 @@ export function appInitializerFactory(
AuthService,
AuthGuard,
CommitsService,
DatePipe,
JsonManagerService,
DataService,
ToastService,
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
cubic-bezier(0.57, 0.81, 0.75, 0.74);
}

#invisibleColumn {
width: 0;
}

@keyframes move-left-to-right {
0% {
transform: translateX(0%);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,23 @@ import { ConfigurationService } from "@services/configuration.service";
import { DataService } from "@services/data.service";
import { DatabaseService } from "@services/database.service";
import { ToastService } from "@services/toast.service";
import { DatePipe } from "@angular/common";

@Component({
selector: "assignment-chooser",
templateUrl: "./assignment-chooser.component.html",
styleUrls: ["./assignment-chooser.component.scss"],
// changeDetection: ChangeDetectionStrategy.OnPush
})

export class AssignmentChooserComponent implements OnInit {
@ViewChild("assignmentsTable") table: any;
@ViewChild("importConfirmation")
private importConfirmation: TemplateRef<any>;
assignments: Assignment[];
modalRef: NgbModalRef;
private _modeView: String;


constructor(
private databaseService: DatabaseService,
Expand All @@ -36,14 +41,28 @@ export class AssignmentChooserComponent implements OnInit {
private toastService: ToastService,
public activeModalService: NgbActiveModal,
private assignmentsService: AssignmentsService,
private configurationService: ConfigurationService
private configurationService: ConfigurationService,
private datePipe: DatePipe,
) {}

ngOnInit(): void {
this.modeView = "detailsMode";
this.initContentTable();
}

ngAfterViewInit(): void {
this.openFirstGroup();
}

initContentTable() {
this.assignments = [];
this.loadAssignments();
}

openFirstGroup() {
setTimeout(() => this.table.groupHeader.toggleExpandGroup(this.table.groupedRows[0]), 100);
}

async loadAssignments() {
await this.databaseService
.getAllAssignments()
Expand Down Expand Up @@ -120,4 +139,103 @@ export class AssignmentChooserComponent implements OnInit {
this.modalRef = this.modalService.open(this.importConfirmation);
return this.modalRef.result;
}

toggleExpandRow(row) {
this.table.rowDetail.toggleExpandRow(row);
}


toggleExpandGroup(group) {
this.table.groupHeader.toggleExpandGroup(group);
}

/**
* Concatenate questionsChecker(), startDateChecker(), endDateChecker() and getNumberOfRespository() be displayed in the template
* @param row
* @returns String
*/
detailDisplayer(row) : String {
let nbRepos = this.getNumberOfRespository(row);
let questions = this.questionsChecker(row);
let startDate = this.startDateChecker(row);
let endDate = this.endDateChecker(row);
var resultAsString = `${nbRepos} ${questions}\n${startDate} ${endDate}`;
return resultAsString;
}

/**
* Check if there is any questions. If yes, question are convert into a string. If no, display the fact that there is no question.
* @param row
* @returns String
*/
private questionsChecker(row) : String {
let resultAsString = (row.metadata.questions.length !== 0 )? "Question : " + row.metadata.questions.join(", "): "";
return resultAsString;
}

/**
* Check if there is a start date and format it. Return a string with dd/mm/yyyy format
* @param row
* @returns String
*/
private startDateChecker(row) : String {
let startDateTranslate = this.translateService.instant("ASSIGNMENT-CHOOSER.ASSIGNMENT-DETAILS.START-DATE");
let formatDate = this.datePipe.transform(row.metadata.startDate, this.translateService.instant("ASSIGNMENT-CHOOSER.ASSIGNMENT-DETAILS.FORMAT-DATE"));
let resultAsString = (row.metadata.startDate)? startDateTranslate + " : " + formatDate : startDateTranslate + " : " + formatDate;
return resultAsString;
}

/**
* Check if there is a end date and format it. Return a string with dd/mm/yyyy format
* @param row
* @returns String
*/
private endDateChecker(row) : String {
let endDateTranslate = this.translateService.instant("ASSIGNMENT-CHOOSER.ASSIGNMENT-DETAILS.END-DATE");
let formatDate = this.datePipe.transform(row.metadata.endDate, this.translateService.instant("ASSIGNMENT-CHOOSER.ASSIGNMENT-DETAILS.FORMAT-DATE"));
let resultAsString = (row.metadata.endDate)? endDateTranslate + " : " + formatDate: endDateTranslate + " : " + formatDate;
return resultAsString;
}

/**
* Return a String with the number of respository.
* @param row
* @returns String
*/
private getNumberOfRespository(row) : String {
let NumberOfRespositoryTranslate = this.translateService.instant("ASSIGNMENT-CHOOSER.ASSIGNMENT-DETAILS.NUMBER-OF-RESPOSITORY");
let resultAsString = (row.repositories.length > 0 || row.repositories.length)? NumberOfRespositoryTranslate + " : " + row.repositories.length: "";
return resultAsString;
}

get modeView () {
return this._modeView;
}

set modeView (modeView: String) {
this._modeView = modeView;
}

switchModeView() {
switch(this.modeView) {
case "groupMode" :
this.modeView = "detailsMode";
this.initContentTable();
break;
case "detailsMode" :
this.modeView = "groupMode";
this.initContentTable();
this.openFirstGroup();
break;
case "defaultMode" :
this.modeView = "groupMode";
this.initContentTable();

break;
default :
this.modeView = "groupMode";
}
}

}

4 changes: 0 additions & 4 deletions src/app/components/home/home.component.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
<div class="page-container d-flex flex-column">
<div class="m-3 content-wrap" *ngIf="authService.isSignedIn()">
<h5 class="mb-3">
{{ 'HOME.ASSIGNMENT-LIST.TITLE' | translate }}
</h5>

<assignment-chooser></assignment-chooser>
</div>
<div *ngIf="!authService.isSignedIn()">
Expand Down
12 changes: 11 additions & 1 deletion src/assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,17 @@
"COURSE": "Course",
"PROGRAM": "Program",
"YEAR": "Year",
"LAST-MODIFICATION-DATE": "Last modification date"
"YEAR-NOT-SPECIFIED": "Year not specified",
"LAST-MODIFICATION-DATE": "Last modification date",
"EXPAND-ALL-ROWS": "Expand all",
"COLLAPSE-ALL-ROWS": "Collapse all",
"ASSIGNMENT-DETAILS": {
"START-DATE": "Start date",
"END-DATE": "End date",
"FORMAT-DATE": "MM-dd-YYYY",
"NOT-SPECIFIED": "Not specified",
"NUMBER-OF-RESPOSITORY": "Number of respository"
}
},
"EDIT-METADATA": {
"QUESTIONS-ERROR-MESSAGE": "Please, provide questions"
Expand Down
12 changes: 11 additions & 1 deletion src/assets/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,17 @@
"COURSE": "Cours",
"PROGRAM": "Programme",
"YEAR": "Année",
"LAST-MODIFICATION-DATE": "Date de la dernière modification"
"LAST-MODIFICATION-DATE": "Date de la dernière modification",
"EXPAND-ALL-ROWS": "Tout afficher",
"COLLAPSE-ALL-ROWS": "Tout cacher",
"ASSIGNMENT-DETAILS": {
"START-DATE": "Date de début",
"END-DATE": "Date de fin",
"FORMAT-DATE": "dd-MM-YYYY",
"NOT-SPECIFIED": "Non spécifié",
"NUMBER-OF-RESPOSITORY": "Nombre de dépôts"
},
"YEAR-NOT-SPECIFIED": "Année non spécifié"
},
"EDIT-METADATA": {
"QUESTIONS-ERROR-MESSAGE": "Veuillez indiquer des questions "
Expand Down
4 changes: 4 additions & 0 deletions src/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ $sizes: (
margin-left: 4px;
}

.hoverable {
cursor: pointer;
}

.sortable-column:hover {
cursor: pointer;
}
Expand Down