Skip to content

Commit

Permalink
Chunk splittable facets #10557
Browse files Browse the repository at this point in the history
Facets are now split into several independent lists, so each list of
facets may be split into a different chunk during production builds.
Thus reducing the Initial Total metric.

This also is strongly typed, so non-existing facets lead to compile
time error. Thanks to this, we found cases where facets incorrectly
disappeared during a refactoring of facet names.

That means that facet lists must be called in the component constructor
(injection context). In the rare cases where a facet list is used later
than the constructor, then it should be declared as a field and
initialized in the constructor.
  • Loading branch information
PowerKiKi committed Oct 8, 2024
1 parent cd39a7a commit a59edbb
Show file tree
Hide file tree
Showing 11 changed files with 641 additions and 614 deletions.
5 changes: 2 additions & 3 deletions client/app/admin/accounts/accounts/accounts.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from '@ecodev/natural';
import {CommonModule, DatePipe} from '@angular/common';
import {AccountType, CurrentUserForProfile} from '../../../shared/generated-types';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {accounts} from '../../../shared/natural-search/natural-search-facets.service';
import {AccountService} from '../services/account.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {TransactionLineService} from '../../transactions/services/transactionLine.service';
Expand Down Expand Up @@ -114,13 +114,12 @@ export class AccountsComponent extends NaturalAbstractNavigableList<AccountServi
};

public constructor() {
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);
const accountService = inject(AccountService);

super(accountService);
this.accountService = accountService;

this.naturalSearchFacets = naturalSearchFacetsService.get('accounts');
this.naturalSearchFacets = accounts();
}

public addLink(): any[] {
Expand Down
9 changes: 3 additions & 6 deletions client/app/admin/bookables/bookables/bookables.component.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {Component, EventEmitter, OnInit, Output, inject} from '@angular/core';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {Component, EventEmitter, inject, OnInit, Output} from '@angular/core';
import {bookables, equipment} from '../../../shared/natural-search/natural-search-facets.service';
import {Bookables} from '../../../shared/generated-types';
import {BookableService} from '../services/bookable.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
Expand Down Expand Up @@ -56,15 +56,12 @@ export class BookablesComponent extends ParentComponent<BookableService> impleme

public constructor() {
const bookableService = inject(BookableService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);
const dialog = inject(MatDialog);
const snackbar = inject(MatSnackBar);
const bookingService = inject(BookingService);

super(bookableService, dialog, snackbar, bookingService);
this.naturalSearchFacets = naturalSearchFacetsService.get(
this.route.snapshot.data.isEquipment ? 'equipment' : 'bookables',
);
this.naturalSearchFacets = this.route.snapshot.data.isEquipment ? equipment() : bookables();
}

public select(element: Bookables['bookables']['items'][0]): void {
Expand Down
19 changes: 13 additions & 6 deletions client/app/admin/bookables/bookables/usage-bookables.component.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {Component, EventEmitter, Input, OnInit, Output, inject} from '@angular/core';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {Component, EventEmitter, inject, Input, OnInit, Output} from '@angular/core';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {UsageBookableService} from '../services/usage-bookable.service';
import {
Expand Down Expand Up @@ -29,6 +28,7 @@ import {MatTableModule} from '@angular/material/table';
import {MatDialog} from '@angular/material/dialog';
import {MatSnackBar} from '@angular/material/snack-bar';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
import {admin_approved, bookables, storage} from '../../../shared/natural-search/natural-search-facets.service';

@Component({
selector: 'app-usage-bookables',
Expand Down Expand Up @@ -73,17 +73,24 @@ export class UsageBookablesComponent extends ParentComponent<UsageBookableServic

public constructor() {
const usageBookableService = inject(UsageBookableService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);
const dialog = inject(MatDialog);
const snackbar = inject(MatSnackBar);
const bookingService = inject(BookingService);

super(usageBookableService, dialog, snackbar, bookingService);

if (this.route.snapshot.data.isAdmin) {
this.naturalSearchFacets = naturalSearchFacetsService.get(
this.route.snapshot.data.facetsKey ?? 'bookables',
);
let facets = bookables();
switch (this.route.snapshot.data.facetsKey) {
case 'storage':
facets = storage();
break;
case 'admin_approved':
facets = admin_approved();
break;
}

this.naturalSearchFacets = facets;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {Component, inject} from '@angular/core';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {bookingsForBookable} from '../../../shared/natural-search/natural-search-facets.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {BookingWithOwnerService} from '../services/booking-with-owner.service';
import {AbstractBookings} from './abstract-bookings';
Expand Down Expand Up @@ -70,9 +70,8 @@ export class BookingsWithOwnerComponent extends AbstractBookings<BookingWithOwne

public constructor() {
const bookingWithOwnerService = inject(BookingWithOwnerService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(bookingWithOwnerService);
this.naturalSearchFacets = naturalSearchFacetsService.get('bookingsForBookable');
this.naturalSearchFacets = bookingsForBookable();
}
}
7 changes: 2 additions & 5 deletions client/app/admin/bookings/bookings/bookings.component.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Component, inject} from '@angular/core';
import {BookingService} from '../services/booking.service';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {bookings, bookingsAdvanced} from '../../../shared/natural-search/natural-search-facets.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {AbstractBookings} from './abstract-bookings';
import {RouterLink} from '@angular/router';
Expand Down Expand Up @@ -60,11 +60,8 @@ export class BookingsComponent extends AbstractBookings<BookingService> {

public constructor() {
const bookingService = inject(BookingService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(bookingService);
this.naturalSearchFacets = naturalSearchFacetsService.get(
this.route.snapshot.data.advancedFacets ? 'bookingsAdvanced' : 'bookings',
);
this.naturalSearchFacets = this.route.snapshot.data.advancedFacets ? bookingsAdvanced() : bookings();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
NaturalTableButtonComponent,
} from '@ecodev/natural';
import {CommonModule, DatePipe} from '@angular/common';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {expenseClaims} from '../../../shared/natural-search/natural-search-facets.service';
import {ExpenseClaimService} from '../services/expenseClaim.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {RouterLink} from '@angular/router';
Expand Down Expand Up @@ -67,10 +67,9 @@ export class ExpenseClaimsComponent extends NaturalAbstractList<ExpenseClaimServ

public constructor() {
const expenseClaimService = inject(ExpenseClaimService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(expenseClaimService);

this.naturalSearchFacets = naturalSearchFacetsService.get('expenseClaims');
this.naturalSearchFacets = expenseClaims();
}
}
5 changes: 2 additions & 3 deletions client/app/admin/logs/logs/logs.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from '@ecodev/natural';
import {CurrentUserForProfile, LogSortingField, UserRole} from '../../../shared/generated-types';
import {LogService} from '../services/log.service';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {logs} from '../../../shared/natural-search/natural-search-facets.service';
import {MatPaginatorModule} from '@angular/material/paginator';
import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
import {MatTooltipModule} from '@angular/material/tooltip';
Expand Down Expand Up @@ -36,11 +36,10 @@ import {CommonModule} from '@angular/common';
export class LogsComponent extends NaturalAbstractList<LogService> implements OnInit {
public constructor() {
const logService = inject(LogService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(logService);

this.naturalSearchFacets = naturalSearchFacetsService.get('logs');
this.naturalSearchFacets = logs();
this.forcedVariables = {
sorting: [{field: LogSortingField.creationDate, order: SortingOrder.DESC}],
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
NaturalTableButtonComponent,
} from '@ecodev/natural';
import {AsyncPipe, DatePipe} from '@angular/common';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {transactionLines} from '../../../shared/natural-search/natural-search-facets.service';
import {TransactionLineService} from '../services/transactionLine.service';
import {
ExportTransactionLinesVariables,
Expand Down Expand Up @@ -84,12 +84,11 @@ export class TransactionLinesComponent extends NaturalAbstractList<TransactionLi

public constructor() {
const transactionLineService = inject(TransactionLineService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(transactionLineService);
this.transactionLineService = transactionLineService;

this.naturalSearchFacets = naturalSearchFacetsService.get('transactionLines');
this.naturalSearchFacets = transactionLines();
}

public download(): void {
Expand Down
5 changes: 2 additions & 3 deletions client/app/admin/users/users/users.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '@ecodev/natural';
import {CommonModule, DatePipe} from '@angular/common';
import {BankingInfosVariables, EmailAndPhoneUsersVariables, Users, UserStatus} from '../../../shared/generated-types';
import {NaturalSearchFacetsService} from '../../../shared/natural-search/natural-search-facets.service';
import {users} from '../../../shared/natural-search/natural-search-facets.service';
import {PermissionsService} from '../../../shared/services/permissions.service';
import {UserService} from '../services/user.service';
import {MatDialog, MatDialogConfig} from '@angular/material/dialog';
Expand Down Expand Up @@ -89,12 +89,11 @@ export class UsersComponent extends NaturalAbstractList<UserService> implements

public constructor() {
const userService = inject(UserService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(userService);
this.userService = userService;

this.naturalSearchFacets = naturalSearchFacetsService.get('users');
this.naturalSearchFacets = users();
}

public flagWelcomeSessionDate(user: Users['users']['items'][0]): void {
Expand Down
5 changes: 2 additions & 3 deletions client/app/safety/safety.component.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Component, inject} from '@angular/core';
import {SafetyBookingService} from './safety-booking.service';
import {NaturalSearchFacetsService} from '../shared/natural-search/natural-search-facets.service';
import {bookings} from '../shared/natural-search/natural-search-facets.service';
import {PermissionsService} from '../shared/services/permissions.service';
import {AbstractBookings} from '../admin/bookings/bookings/abstract-bookings';
import {RouterLink} from '@angular/router';
Expand Down Expand Up @@ -59,9 +59,8 @@ export class SafetyComponent extends AbstractBookings<SafetyBookingService> {

public constructor() {
const safetyBookingService = inject(SafetyBookingService);
const naturalSearchFacetsService = inject(NaturalSearchFacetsService);

super(safetyBookingService);
this.naturalSearchFacets = naturalSearchFacetsService.get('bookings');
this.naturalSearchFacets = bookings();
}
}
Loading

0 comments on commit a59edbb

Please sign in to comment.