Skip to content

Commit

Permalink
Release 3.33.0
Browse files Browse the repository at this point in the history
  • Loading branch information
sleidig authored Mar 14, 2024
2 parents e889991 + 163d428 commit a8f6611
Show file tree
Hide file tree
Showing 57 changed files with 2,285 additions and 1,153 deletions.
414 changes: 87 additions & 327 deletions package-lock.json

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@
"private": true,
"dependencies": {
"@angular/animations": "^17.0.4",
"@angular/cdk": "^17.1.1",
"@angular/cdk": "^17.2.0",
"@angular/common": "^17.0.4",
"@angular/compiler": "^17.0.4",
"@angular/core": "^17.0.4",
"@angular/forms": "^17.0.4",
"@angular/localize": "^17.0.4",
"@angular/material": "^17.1.1",
"@angular/material-moment-adapter": "^17.1.1",
"@angular/material": "^17.2.0",
"@angular/material-moment-adapter": "^17.2.0",
"@angular/platform-browser": "^17.0.4",
"@angular/platform-browser-dynamic": "^17.0.4",
"@angular/router": "^17.0.4",
Expand All @@ -42,7 +42,7 @@
"@fortawesome/free-regular-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@ngneat/until-destroy": "^10.0.0",
"@sentry/browser": "^7.99.0",
"@sentry/browser": "^7.102.0",
"angulartics2": "^12.2.1",
"assert": "^2.1.0",
"crypto-es": "^2.1.0",
Expand Down Expand Up @@ -101,8 +101,8 @@
"babel-loader": "^9.1.3",
"cypress": "13.6.0",
"eslint": "^8.54.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-storybook": "^0.6.15",
"jasmine-core": "^5.1.1",
"jasmine-spec-reporter": "^7.0.0",
Expand All @@ -114,7 +114,7 @@
"karma-jasmine-html-reporter": "^2.1.0",
"mockdate": "^3.0.5",
"ngx-i18nsupport": "^0.17.1",
"prettier": "~3.0.2",
"prettier": "^3.2.5",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"storybook": "^7.5.3",
Expand Down
28 changes: 26 additions & 2 deletions src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,37 @@
*/

import { Component } from "@angular/core";
import { NavigationEnd, Router } from "@angular/router";
import { filter } from "rxjs/operators";

/**
* Component as the main entry point for the app.
* Actual logic and UI structure is defined in other modules.
*/
@Component({
selector: "app-root",
template: "<app-ui></app-ui>",
template: `@if (configFullscreen) {
<router-outlet></router-outlet>
} @else {
<app-ui></app-ui>
}`,
})
export class AppComponent {}
export class AppComponent {
configFullscreen: boolean = false;

constructor(private router: Router) {
this.detectConfigMode();
router.events
.pipe(filter((e) => e instanceof NavigationEnd))
.subscribe(() => this.detectConfigMode());
}

/**
* Switch the layout for certain admin routes to display those fullscreen without app menu and toolbar.
* @private
*/
private detectConfigMode() {
const currentUrl = this.router.url;
this.configFullscreen = currentUrl.startsWith("/admin/entity");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</mat-card-header>
<mat-card-content class="text-secondary">
<fa-icon icon="child"></fa-icon>
{{ event.children.length }} { event.children.length, plural, one
{participant} other {participants} }
{{ event.children.length }}
{event.children.length, plural, one {participant} other {participants}}
<ng-container *ngIf="!recurring">
<span class="sep">/</span>
<fa-icon icon="calendar"></fa-icon>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,24 +48,33 @@ <h3 class="remove-margin-top">
>
All excused (out of
{{ selectedEvent.children.length }}
{ selectedEvent.children.length, plural, one {participant} other
{participants} } )
{selectedEvent.children.length, plural,
one {participant}
other {participants}
}
)
</div>
<div *ngIf="hasAverage" i18n>
{{ selectedEventStats.average | percent: "1.0-0" }}
attended (of
{{ selectedEvent.children.length }}
{ selectedEvent.children.length, plural, one {participant} other
{participants} })
{selectedEvent.children.length, plural,
one {participant}
other {participants}

})
</div>
<div
*ngIf="selectedEventStats.excludedUnknown > 0"
i18n="Unknown status|How many children are without a status"
class="unknown-status-notice"
>
{{ selectedEventStats.excludedUnknown }}
{ selectedEventStats.excludedUnknown, plural, one {participant} other
{participants} } without recorded status
{selectedEventStats.excludedUnknown, plural,
one {participant}
other {participants}
}
without recorded status
</div>
<button
class="margin-top-regular"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<app-view-title [disableBackButton]="true">
&lt;Name of displayed {{ this.entityConstructor?.label }}&gt;
</app-view-title>

<app-admin-tabs [tabs]="config?.panels" [newTabFactory]="newPanelFactory">
<ng-template [appAdminTabTemplate]="config?.panels" let-item>
<div class="flex-column gap-large padding-top-large">
<div
*ngFor="let componentConfig of item.components; let j = index"
class="section-wrapper"
>
<app-admin-section-header
[(title)]="componentConfig.title"
(remove)="item.components.splice(j, 1)"
></app-admin-section-header>

<app-admin-entity-form
*ngIf="componentConfig.component === 'Form'; else otherComponent"
[config]="componentConfig.config"
[entityType]="entityConstructor"
>
</app-admin-entity-form>

<ng-template #otherComponent>
<app-admin-entity-panel-component
[config]="componentConfig"
[entityType]="entityConstructor"
></app-admin-entity-panel-component>
</ng-template>
</div>

<button
mat-stroked-button
color="accent"
class="section-add-button"
(click)="addComponent(item)"
i18n
>
<fa-icon
aria-label="add element"
icon="plus-circle"
class="standard-icon-with-text"
></fa-icon>
Add Section
</button>
</div>
</ng-template>
</app-admin-tabs>
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,3 @@
padding: sizes.$large;
margin: sizes.$small;
}

:host ::ng-deep .mat-mdc-tab {
// adjust tab header height to properly display mat-form-field for editing tab label
height: 60px !important;
}
app-admin-section-header {
margin-bottom: -1em;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { ComponentFixture, TestBed } from "@angular/core/testing";

import { AdminEntityDetailsComponent } from "./admin-entity-details.component";
import { EntityDetailsConfig } from "../../../entity-details/EntityDetailsConfig";
import { Entity } from "../../../entity/model/entity";
import { MatTabsModule } from "@angular/material/tabs";
import { NoopAnimationsModule } from "@angular/platform-browser/animations";
import { DatabaseEntity } from "../../../entity/database-entity.decorator";
import { DatabaseField } from "../../../entity/database-field.decorator";
import { FontAwesomeTestingModule } from "@fortawesome/angular-fontawesome/testing";

describe("AdminEntityDetailsComponent", () => {
let component: AdminEntityDetailsComponent;
let fixture: ComponentFixture<AdminEntityDetailsComponent>;

let viewConfig: EntityDetailsConfig;
let viewConfigId, entityConfigId;

@DatabaseEntity("AdminDetailsTest")
class AdminDetailsTestEntity extends Entity {
static readonly ENTITY_TYPE = "AdminDetailsTest";

@DatabaseField({ label: "Name" }) name: string;
}

beforeEach(() => {
viewConfigId = `view:${AdminDetailsTestEntity.route.substring(1)}/:id`;
entityConfigId = `entity:${AdminDetailsTestEntity.ENTITY_TYPE}`;
viewConfig = {
entity: AdminDetailsTestEntity.ENTITY_TYPE,
panels: [{ title: "Tab 1", components: [] }],
};

TestBed.configureTestingModule({
imports: [
AdminEntityDetailsComponent,
MatTabsModule,
NoopAnimationsModule,
FontAwesomeTestingModule,
],
});
fixture = TestBed.createComponent(AdminEntityDetailsComponent);
component = fixture.componentInstance;

component.entityConstructor = AdminDetailsTestEntity;
component.config = JSON.parse(JSON.stringify(viewConfig));

fixture.detectChanges();
});

it("should create", () => {
expect(component).toBeTruthy();
});

it("should add new section (component in panel) to config", () => {
component.addComponent(component.config.panels[0]);

expect(component.config.panels[0].components.length).toBe(1);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Component, Input } from "@angular/core";
import {
EntityDetailsConfig,
Panel,
} from "../../../entity-details/EntityDetailsConfig";
import { EntityConstructor } from "../../../entity/model/entity";
import { DynamicComponent } from "../../../config/dynamic-components/dynamic-component.decorator";
import { NgForOf, NgIf } from "@angular/common";
import { MatTabsModule } from "@angular/material/tabs";
import { FaIconComponent } from "@fortawesome/angular-fontawesome";
import { MatButtonModule } from "@angular/material/button";
import { EntityTypeLabelPipe } from "../../../common-components/entity-type-label/entity-type-label.pipe";
import { ViewTitleComponent } from "../../../common-components/view-title/view-title.component";
import { AdminSectionHeaderComponent } from "../../building-blocks/admin-section-header/admin-section-header.component";
import { AdminEntityFormComponent } from "../admin-entity-form/admin-entity-form.component";
import { AdminEntityPanelComponentComponent } from "../admin-entity-panel-component/admin-entity-panel-component.component";
import { MatTooltipModule } from "@angular/material/tooltip";
import { AdminTabsComponent } from "../../building-blocks/admin-tabs/admin-tabs.component";
import { AdminTabTemplateDirective } from "../../building-blocks/admin-tabs/admin-tab-template.directive";

@DynamicComponent("AdminEntityDetails")
@Component({
selector: "app-admin-entity-details",
templateUrl: "./admin-entity-details.component.html",
styleUrls: ["./admin-entity-details.component.scss"],
standalone: true,
imports: [
MatTabsModule,
FaIconComponent,
MatButtonModule,
EntityTypeLabelPipe,
ViewTitleComponent,
AdminSectionHeaderComponent,
AdminEntityFormComponent,
AdminEntityPanelComponentComponent,
MatTooltipModule,
NgForOf,
NgIf,
AdminTabsComponent,
AdminTabTemplateDirective,
],
})
export class AdminEntityDetailsComponent {
@Input() entityConstructor: EntityConstructor;
@Input() config: EntityDetailsConfig;

newPanelFactory(): Panel {
return { title: "New Tab", components: [] };
}

addComponent(panel: Panel) {
panel.components.push({
title: $localize`:Default title:New Section`,
component: "Form", // TODO: make this configurable
config: { fieldGroups: [] },
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { MatTooltipModule } from "@angular/material/tooltip";
import { MatCardModule } from "@angular/material/card";
import { EntityFieldLabelComponent } from "../../../common-components/entity-field-label/entity-field-label.component";
import { EntityFieldEditComponent } from "../../../common-components/entity-field-edit/entity-field-edit.component";
import { AdminSectionHeaderComponent } from "../admin-section-header/admin-section-header.component";
import { AdminSectionHeaderComponent } from "../../building-blocks/admin-section-header/admin-section-header.component";
import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy";
import { FormConfig } from "../../../entity-details/form/form.component";

Expand All @@ -34,7 +34,7 @@ import { FormConfig } from "../../../entity-details/form/form.component";
templateUrl: "./admin-entity-form.component.html",
styleUrls: [
"./admin-entity-form.component.scss",
"../admin-section-header/admin-section-header.component.scss",
"../../building-blocks/admin-section-header/admin-section-header.component.scss",
"../../../common-components/entity-form/entity-form/entity-form.component.scss",
],
standalone: true,
Expand Down
Loading

0 comments on commit a8f6611

Please sign in to comment.