stuff
This commit is contained in:
parent
ca90d1c422
commit
e4b26961b0
@ -37,6 +37,16 @@
|
||||
|
||||
<div>Comment Value: {{parseComment(form)}}</div>
|
||||
|
||||
<div>
|
||||
<mat-form-field>
|
||||
<mat-label>Currency Input</mat-label>
|
||||
<app-currency-input [formControl]="currencyFormControl"></app-currency-input>
|
||||
</mat-form-field>
|
||||
|
||||
<pre>Value: {{currencyFormControl.value}}</pre>
|
||||
|
||||
</div>
|
||||
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Choose an option</mat-label>
|
||||
<mat-select multiple [formControl]="selectedItemsList">
|
||||
|
@ -1,11 +1,10 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { RouterOutlet } from '@angular/router';
|
||||
import { CommentBoxComponent } from "./comment-box/comment-box.component";
|
||||
import { CommentBoxComponent, MentionItem } from "./comment-box/comment-box.component";
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { ProgressStepperComponent } from "./progress-stepper/progress-stepper.component";
|
||||
import { Observable, startWith, map } from 'rxjs';
|
||||
import { MatOptionModule } from '@angular/material/core';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { MatChipsModule } from '@angular/material/chips';
|
||||
@ -19,10 +18,11 @@ import { GanttComponent, GanttItem } from "./gantt/gantt.component";
|
||||
import { GrossNetCalculatorComponent } from "./gross-net-calculator/gross-net-calculator.component";
|
||||
import { GrossNetCalculatorInputDirective } from './gross-net-calculator/gross-net-calculator-input.directive';
|
||||
import { GrossNetCalculatorToggleButtonComponent } from "./gross-net-calculator/toggle-button/toggle-button.component";
|
||||
import { CurrencyInputComponent } from "./currency-input/currency-input.component";
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
imports: [RouterOutlet, MatToolbarModule, GrossNetCalculatorInputDirective, MatIconModule, MatButtonModule, CommentBoxComponent, MatFormFieldModule, MatInputModule, ReactiveFormsModule, ProgressStepperComponent, MatOptionModule, MatSelectModule, MatAutocompleteModule, MatChipsModule, AsyncPipe, FormsModule, SelectFilterComponent, GanttComponent, GrossNetCalculatorComponent, GrossNetCalculatorToggleButtonComponent],
|
||||
imports: [RouterOutlet, MatToolbarModule, GrossNetCalculatorInputDirective, MatIconModule, MatButtonModule, CommentBoxComponent, MatFormFieldModule, MatInputModule, ReactiveFormsModule, ProgressStepperComponent, MatOptionModule, MatSelectModule, MatAutocompleteModule, MatChipsModule, AsyncPipe, FormsModule, SelectFilterComponent, GanttComponent, GrossNetCalculatorComponent, GrossNetCalculatorToggleButtonComponent, CurrencyInputComponent],
|
||||
providers: [GrossNetCalculatorInputDirective],
|
||||
templateUrl: './app.component.html',
|
||||
styleUrl: './app.component.scss'
|
||||
@ -30,9 +30,11 @@ import { GrossNetCalculatorToggleButtonComponent } from "./gross-net-calculator/
|
||||
export class AppComponent {
|
||||
title = 'material-mentions';
|
||||
|
||||
selectionList = ["Franz Kaiser", "Melanie Ochse", "Peter Pfeifer", "Hans Wurst", "Hans Ochse", "Max Hintern", "Hansi Hinterseer", "Gustav Gans"];
|
||||
selectionList: MentionItem[] = [{ title: "Franz Kaiser" }, { title: "Melanie Ochse", color: 'red' }, { title: "Peter Pfeifer" }, { title: "Hans Wurst" }, { title: "Hans Ochse" }, { title: "Max Hintern" }, { title: "Hansi Hinterseer" }, { title: "Gustav Gans" }];
|
||||
|
||||
form = new FormControl("fdaf <div class=\"mention\">@Franz Kaiser</div><span class=\"focused\"> </span>");
|
||||
|
||||
currencyFormControl = new FormControl<number | null>(null, [Validators.required]);
|
||||
test = '';
|
||||
|
||||
parseComment(comment: FormControl): any {
|
||||
@ -56,43 +58,224 @@ export class AppComponent {
|
||||
ganttItems: GanttItem[] = [{
|
||||
id: '000',
|
||||
title: 'Test 1',
|
||||
items: [{
|
||||
title: '124',
|
||||
start: 1743487875,
|
||||
duration_sec: 7200,
|
||||
}, {
|
||||
title: 'F242',
|
||||
start: 1743660675,
|
||||
duration_sec: 16 * 3600,
|
||||
}
|
||||
items: [
|
||||
{
|
||||
"title": "dznAFoN",
|
||||
"orig_start": 1735718400,
|
||||
"orig_end": 1735790400,
|
||||
"duration": 72000,
|
||||
"start": 1735718400,
|
||||
"end": 1735920000,
|
||||
"effective_duration": 201600
|
||||
},
|
||||
{
|
||||
"title": "FddMLSo",
|
||||
"orig_start": 1735693200,
|
||||
"orig_end": 1735758000,
|
||||
"duration": 64800,
|
||||
"start": 1735920000,
|
||||
"end": 1736337600,
|
||||
"effective_duration": 417600
|
||||
},
|
||||
{
|
||||
"title": "I8UNM7Q",
|
||||
"orig_start": 1735704000,
|
||||
"orig_end": 1735714800,
|
||||
"duration": 10800,
|
||||
"start": 1736337600,
|
||||
"end": 1736352000,
|
||||
"effective_duration": 14400
|
||||
},
|
||||
{
|
||||
"title": "lDpkEvQ",
|
||||
"orig_start": 1735700400,
|
||||
"orig_end": 1735765200,
|
||||
"duration": 64800,
|
||||
"start": 1736352000,
|
||||
"end": 1736769600,
|
||||
"effective_duration": 417600
|
||||
},
|
||||
{
|
||||
"title": "j3awoij",
|
||||
"orig_start": 1735689600,
|
||||
"orig_end": 1735747200,
|
||||
"duration": 57600,
|
||||
"start": 1736769600,
|
||||
"end": 1736953200,
|
||||
"effective_duration": 183600
|
||||
},
|
||||
{
|
||||
"title": "6Em6nMj",
|
||||
"orig_start": 1735689600,
|
||||
"orig_end": 1735714800,
|
||||
"duration": 25200,
|
||||
"start": 1736953200,
|
||||
"end": 1737039600,
|
||||
"effective_duration": 86400
|
||||
},
|
||||
{
|
||||
"title": "stzG5kS",
|
||||
"orig_start": 1735700400,
|
||||
"orig_end": 1735747200,
|
||||
"duration": 46800,
|
||||
"start": 1737039600,
|
||||
"end": 1737381600,
|
||||
"effective_duration": 342000
|
||||
},
|
||||
{
|
||||
"title": "XqZVBX3",
|
||||
"orig_start": 1735725600,
|
||||
"orig_end": 1735729200,
|
||||
"duration": 3600,
|
||||
"start": 1737381600,
|
||||
"end": 1737385200,
|
||||
"effective_duration": 3600
|
||||
},
|
||||
{
|
||||
"title": "YFLNNja",
|
||||
"orig_start": 1735758000,
|
||||
"orig_end": 1735815600,
|
||||
"duration": 57600,
|
||||
"start": 1737385200,
|
||||
"end": 1737565200,
|
||||
"effective_duration": 180000
|
||||
},
|
||||
{
|
||||
"title": "mSP8cLK",
|
||||
"orig_start": 1735786800,
|
||||
"orig_end": 1735833600,
|
||||
"duration": 46800,
|
||||
"start": 1737565200,
|
||||
"end": 1737734400,
|
||||
"effective_duration": 169200
|
||||
},
|
||||
{
|
||||
"title": "4Clgbi7",
|
||||
"orig_start": 1735768800,
|
||||
"orig_end": 1735772400,
|
||||
"duration": 3600,
|
||||
"start": 1737734400,
|
||||
"end": 1737738000,
|
||||
"effective_duration": 3600
|
||||
},
|
||||
{
|
||||
"title": "zNEqjve",
|
||||
"orig_start": 1735768800,
|
||||
"orig_end": 1735815600,
|
||||
"duration": 46800,
|
||||
"start": 1737738000,
|
||||
"end": 1738080000,
|
||||
"effective_duration": 342000
|
||||
},
|
||||
{
|
||||
"title": "JDWUyY4",
|
||||
"orig_start": 1735804800,
|
||||
"orig_end": 1735858800,
|
||||
"duration": 54000,
|
||||
"start": 1738080000,
|
||||
"end": 1738256400,
|
||||
"effective_duration": 176400
|
||||
},
|
||||
{
|
||||
"title": "gzCfIBH",
|
||||
"orig_start": 1735815600,
|
||||
"orig_end": 1735869600,
|
||||
"duration": 54000,
|
||||
"start": 1738256400,
|
||||
"end": 1738663200,
|
||||
"effective_duration": 406800
|
||||
},
|
||||
{
|
||||
"title": "9BcHUE1",
|
||||
"orig_start": 1735819200,
|
||||
"orig_end": 1735830000,
|
||||
"duration": 10800,
|
||||
"start": 1738663200,
|
||||
"end": 1738677600,
|
||||
"effective_duration": 14400
|
||||
},
|
||||
{
|
||||
"title": "cqY6QW7",
|
||||
"orig_start": 1735819200,
|
||||
"orig_end": 1735891200,
|
||||
"duration": 72000,
|
||||
"start": 1738677600,
|
||||
"end": 1738929600,
|
||||
"effective_duration": 252000
|
||||
},
|
||||
{
|
||||
"title": "kWlI5wm",
|
||||
"orig_start": 1735758000,
|
||||
"orig_end": 1735776000,
|
||||
"duration": 18000,
|
||||
"start": 1738929600,
|
||||
"end": 1739181600,
|
||||
"effective_duration": 252000
|
||||
},
|
||||
{
|
||||
"title": "KGHy9oL",
|
||||
"orig_start": 1735797600,
|
||||
"orig_end": 1735869600,
|
||||
"duration": 72000,
|
||||
"start": 1739181600,
|
||||
"end": 1739379600,
|
||||
"effective_duration": 198000
|
||||
},
|
||||
{
|
||||
"title": "1yTL2to",
|
||||
"orig_start": 1735826400,
|
||||
"orig_end": 1735898400,
|
||||
"duration": 72000,
|
||||
"start": 1739379600,
|
||||
"end": 1739808000,
|
||||
"effective_duration": 428400
|
||||
},
|
||||
{
|
||||
"title": "JuVrwIN",
|
||||
"orig_start": 1735844400,
|
||||
"orig_end": 1735916400,
|
||||
"duration": 72000,
|
||||
"start": 1739808000,
|
||||
"end": 1740063600,
|
||||
"effective_duration": 255600
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: '001',
|
||||
title: 'Test 2',
|
||||
items: [{
|
||||
title: '124',
|
||||
start: 1743487875,
|
||||
duration_sec: 7200,
|
||||
}, {
|
||||
title: 'F242',
|
||||
start: 1743660675,
|
||||
duration_sec: 72000,
|
||||
"title": "",
|
||||
"orig_start": 1735898400,
|
||||
"orig_end": 1735934400,
|
||||
"duration": 36000,
|
||||
"start": 1738335600,
|
||||
"end": 1738663200,
|
||||
"effective_duration": 327600
|
||||
},
|
||||
{
|
||||
"title": "",
|
||||
"orig_start": 1735938000,
|
||||
"orig_end": 1735984800,
|
||||
"duration": 46800,
|
||||
"start": 1738663200,
|
||||
"end": 1738774800,
|
||||
"effective_duration": 111600
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'dfaf',
|
||||
title: 'WeekTest',
|
||||
items: [
|
||||
{ title: '1', start: 1744005600, duration_sec: 72000 },
|
||||
{ title: '2', start: 1744092000, duration_sec: 72000 },
|
||||
{ title: '3', start: 1744178400, duration_sec: 72000 },
|
||||
{ title: '4', start: 1744264800, duration_sec: 72000 },
|
||||
{ title: '5', start: 1744351200, duration_sec: 72000 },
|
||||
{ title: '6', start: 1744437600, duration_sec: 72000 },
|
||||
{ title: '7', start: 1744524000, duration_sec: 72000 }
|
||||
]
|
||||
}
|
||||
// {
|
||||
// id: 'dfaf',
|
||||
// title: 'WeekTest',
|
||||
// items: [
|
||||
// { title: '1', start: 1744005600, duration: 72000 },
|
||||
// { title: '2', start: 1744092000, duration: 72000 },
|
||||
// { title: '3', start: 1744178400, duration: 72000 },
|
||||
// { title: '4', start: 1744264800, duration: 72000 },
|
||||
// { title: '5', start: 1744351200, duration: 72000 },
|
||||
// { title: '6', start: 1744437600, duration: 72000 },
|
||||
// { title: '7', start: 1744524000, duration: 72000 }
|
||||
// ]
|
||||
// }
|
||||
]
|
||||
}
|
||||
|
@ -32,7 +32,7 @@
|
||||
}}
|
||||
<!-- Draw gantt bars -->
|
||||
@for (bar of item.items; track $index) {
|
||||
<div class="bar" [style.width]="durationToWidth(bar.duration_sec)"
|
||||
<div class="bar" [style.width]="durationToWidth(bar.effective_duration)"
|
||||
[style.left]="startToOffset(bar.start, {dstCorrection: true})">
|
||||
{{bar.title}}</div>
|
||||
}
|
||||
@ -120,7 +120,7 @@
|
||||
<!-- Draw gantt bars -->
|
||||
<div class="bar-container">
|
||||
@for (bar of item.items; track $index) {
|
||||
<div class="bar" [style.width]="durationToWidth(bar.duration_sec)"
|
||||
<div class="bar" [style.width]="durationToWidth(bar.effective_duration)"
|
||||
[style.left]="startToOffset(bar.start, {dstCorrection: true})">
|
||||
{{bar.title}}</div>
|
||||
}
|
||||
@ -148,6 +148,13 @@
|
||||
|
||||
<div class="container new">
|
||||
<div class="info-box">
|
||||
<div class="flex head-controls">
|
||||
<div class="flex">
|
||||
<button mat-icon-button (click)="view.back()"><mat-icon>chevron_left</mat-icon></button>
|
||||
<button mat-button (click)="view.today()">Heute</button>
|
||||
</div>
|
||||
<button mat-icon-button (click)="view.next()"><mat-icon>chevron_right</mat-icon></button>
|
||||
</div>
|
||||
<div>
|
||||
<button (click)="view.back()">Back</button><button (click)="view.next()">Next</button>
|
||||
<select #viewSelect value="week" (change)="changeViewType(viewSelect.value)">
|
||||
@ -203,7 +210,7 @@
|
||||
<!-- Draw gantt bars -->
|
||||
<div class="bar-container">
|
||||
@for (bar of item.items; track $index) {
|
||||
<div class="bar" [style.width]="view.durationToWidth(bar.duration_sec)"
|
||||
<div class="bar" [style.width]="view.durationToWidth(bar.effective_duration)"
|
||||
[style.left]="view.getOffset(bar.start)">
|
||||
{{bar.title}}</div>
|
||||
}
|
||||
|
@ -119,11 +119,10 @@
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: var(--row-height);
|
||||
background-color: blue;
|
||||
background-color: #6082b6;
|
||||
color: #fff;
|
||||
box-sizing: border-box;
|
||||
|
||||
border-radius: 0.2rem;
|
||||
box-sizing: content-box;
|
||||
border: solid thin #dbd7d2;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -134,7 +133,7 @@
|
||||
white-space: nowrap;
|
||||
|
||||
&:hover {
|
||||
border: solid thin #fff;
|
||||
border: solid thin #fd673a;
|
||||
z-index: 99;
|
||||
cursor: default;
|
||||
}
|
||||
@ -232,7 +231,6 @@
|
||||
|
||||
&:last-child {
|
||||
.tick {
|
||||
color: red;
|
||||
&:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
@ -306,3 +304,13 @@
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
}
|
||||
|
||||
// DESIGN
|
||||
.flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.head-controls {
|
||||
padding: 0.25rem;
|
||||
}
|
||||
|
@ -2,6 +2,9 @@ import { ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@ang
|
||||
import { Observable } from 'rxjs';
|
||||
import { DateTime } from 'luxon';
|
||||
import { GanttView } from './views/view';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
||||
|
||||
export interface GanttItem {
|
||||
id: string;
|
||||
@ -11,8 +14,12 @@ export interface GanttItem {
|
||||
|
||||
export interface GanttBarElement {
|
||||
title: string,
|
||||
orig_start: number,
|
||||
orig_end: number,
|
||||
duration: number,
|
||||
start: number,
|
||||
duration_sec: number,
|
||||
end: number,
|
||||
effective_duration: number,
|
||||
}
|
||||
|
||||
interface WorkTime {
|
||||
@ -27,7 +34,7 @@ interface IntervalDescriptor {
|
||||
|
||||
@Component({
|
||||
selector: 'app-gantt',
|
||||
imports: [],
|
||||
imports: [MatButtonModule, MatIconModule, MatButtonToggleModule],
|
||||
templateUrl: './gantt.component.html',
|
||||
styleUrl: './gantt.component.scss'
|
||||
})
|
||||
@ -43,16 +50,58 @@ export class GanttComponent {
|
||||
|
||||
startDate: DateTime;
|
||||
|
||||
weekOpenTime: WorkTime[][] = [
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
[{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600 }],
|
||||
];
|
||||
weekOpenTime: { [key: number]: WorkTime[] } = {
|
||||
"0": [
|
||||
{
|
||||
"start_day_sec": 32400,
|
||||
"duration_sec": 10800
|
||||
},
|
||||
{
|
||||
"start_day_sec": 46800,
|
||||
"duration_sec": 14400
|
||||
}
|
||||
],
|
||||
"1": [
|
||||
{
|
||||
"start_day_sec": 32400,
|
||||
"duration_sec": 10800
|
||||
},
|
||||
{
|
||||
"start_day_sec": 46800,
|
||||
"duration_sec": 14400
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"start_day_sec": 32400,
|
||||
"duration_sec": 10800
|
||||
},
|
||||
{
|
||||
"start_day_sec": 46800,
|
||||
"duration_sec": 14400
|
||||
}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"start_day_sec": 32400,
|
||||
"duration_sec": 10800
|
||||
},
|
||||
{
|
||||
"start_day_sec": 46800,
|
||||
"duration_sec": 14400
|
||||
}
|
||||
],
|
||||
"4": [
|
||||
{
|
||||
"start_day_sec": 32400,
|
||||
"duration_sec": 10800
|
||||
},
|
||||
{
|
||||
"start_day_sec": 46800,
|
||||
"duration_sec": 14400
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
constructor(private changeDetectorRef: ChangeDetectorRef) {
|
||||
this.startDate = DateTime.now().minus({ weeks: 1 }).startOf('week').startOf('day').setLocale('de');
|
||||
|
@ -1,7 +1,10 @@
|
||||
import { DateTime, Settings } from "luxon";
|
||||
import { DescriptorSet } from "./descriptors";
|
||||
|
||||
export const defaultAvailable = [{ start_day_sec: 8 * 3600, duration_sec: 8 * 3600, onSaturday: false, onSunOrHoliday: false }];
|
||||
export const defaultAvailable = [
|
||||
{ start_day_sec: 9 * 3600, duration_sec: 3 * 3600, onSaturday: false, onSunOrHoliday: false },
|
||||
{ start_day_sec: 13 * 3600, duration_sec: 4 * 3600, onSaturday: false, onSunOrHoliday: false }
|
||||
];
|
||||
|
||||
|
||||
export abstract class GanttViewType {
|
||||
|
@ -0,0 +1,8 @@
|
||||
import { GrossNetCalculatorInputDirective } from './gross-net-calculator-input.directive';
|
||||
|
||||
describe('GrossNetCalculatorInputDirective', () => {
|
||||
it('should create an instance', () => {
|
||||
const directive = new GrossNetCalculatorInputDirective();
|
||||
expect(directive).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,63 @@
|
||||
import { Component, ComponentFactoryResolver, Directive, inject, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
|
||||
import { GrossNetCalculatorComponent } from './gross-net-calculator.component';
|
||||
import { MatButton } from '@angular/material/button';
|
||||
import { GrossNetCalculatorToggleButtonComponent } from './toggle-button/toggle-button.component';
|
||||
import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';
|
||||
|
||||
@Component({
|
||||
selector: 'component-portal-example',
|
||||
template: '<ng-template [cdkPortalOutlet]="portal"></ng-template>',
|
||||
})
|
||||
export class ComponentPortalExample { }
|
||||
|
||||
@Directive({
|
||||
selector: 'input[grossNetCalculator]',
|
||||
})
|
||||
export class GrossNetCalculatorInputDirective {
|
||||
|
||||
private _viewContainerRef = inject(ViewContainerRef);
|
||||
|
||||
@ViewChild(TemplateRef) _template!: TemplateRef<unknown>;
|
||||
|
||||
private _portal!: ComponentPortal<any>;
|
||||
|
||||
@Input()
|
||||
set grossNetCalculator(calculator: GrossNetCalculatorComponent) {
|
||||
console.log(calculator)
|
||||
|
||||
if (calculator) {
|
||||
this._calculator = calculator;
|
||||
// this._ariaOwns.set(datepicker.opened ? datepicker.id : null);
|
||||
// this._closedSubscription = datepicker.closedStream.subscribe(() => {
|
||||
// this._onTouched();
|
||||
// this._ariaOwns.set(null);
|
||||
// });
|
||||
// this._openedSubscription = datepicker.openedStream.subscribe(() => {
|
||||
// this._ariaOwns.set(datepicker.id);
|
||||
// });
|
||||
// this._registerModel(datepicker.registerInput(this));
|
||||
}
|
||||
}
|
||||
|
||||
_calculator?: GrossNetCalculatorComponent;
|
||||
|
||||
|
||||
constructor() {
|
||||
console.log(this._viewContainerRef);
|
||||
|
||||
this._viewContainerRef.createComponent(GrossNetCalculatorToggleButtonComponent)
|
||||
this._viewContainerRef.createComponent(ComponentPortalExample)
|
||||
}
|
||||
|
||||
|
||||
ngAfterViewInit() {
|
||||
this._portal = new ComponentPortal(GrossNetCalculatorComponent);
|
||||
}
|
||||
|
||||
protected _openPopup(): void {
|
||||
if (this._calculator) {
|
||||
// this._datepicker.open();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
<!-- <ng-template cdkConnectedOverlay cdkConnectedOverlayFlexibleDimensions="true" [cdkConnectedOverlayOpen]="isOpen"
|
||||
[cdkConnectedOverlayPositions]="[
|
||||
{
|
||||
originX: 'start',
|
||||
originY: 'top',
|
||||
overlayX: 'start',
|
||||
overlayY: 'top',
|
||||
offsetX: menuOffsetX,
|
||||
offsetY: menuOffsetY
|
||||
},
|
||||
{
|
||||
originX: 'start',
|
||||
originY: 'top',
|
||||
overlayX: 'start',
|
||||
overlayY: 'bottom',
|
||||
offsetX: menuOffsetX,
|
||||
offsetY: menuOffsetY - menuOpenAboveYShift
|
||||
}
|
||||
]" (overlayOutsideClick)="clickOutside($event)">
|
||||
<div class="mat-mdc-menu-panel" #menuContent>
|
||||
<div class="mat-mdc-menu-content">
|
||||
´´´
|
||||
Bla bla
|
||||
</div>
|
||||
</div>
|
||||
</ng-template> -->
|
||||
|
||||
<ng-template [cdkPortalOutlet]="templatePortal" (overlayOutsideClick)="clickOutside($event)">
|
||||
<div class="mat-mdc-menu-panel" #menuContent>
|
||||
<div class="mat-mdc-menu-content">
|
||||
Bla bla
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
@ -0,0 +1,23 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { GrossNetCalculatorComponent } from './gross-net-calculator.component';
|
||||
|
||||
describe('GrossNetCalculatorComponent', () => {
|
||||
let component: GrossNetCalculatorComponent;
|
||||
let fixture: ComponentFixture<GrossNetCalculatorComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [GrossNetCalculatorComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(GrossNetCalculatorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,13 @@
|
||||
import { OverlayModule } from '@angular/cdk/overlay';
|
||||
import { TemplatePortal } from '@angular/cdk/portal';
|
||||
import { Component, inject, ViewContainerRef } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'gross-net-calculator',
|
||||
imports: [OverlayModule],
|
||||
templateUrl: './gross-net-calculator.component.html',
|
||||
styleUrl: './gross-net-calculator.component.scss'
|
||||
})
|
||||
export class GrossNetCalculatorComponent {
|
||||
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
<!-- <button #button mat-icon-button type="button" matPrefix>
|
||||
<mat-icon>calculate</mat-icon>
|
||||
</button> -->
|
||||
<button mat-icon-button><mat-icon>calculate</mat-icon></button>
|
@ -0,0 +1,23 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { GrossNetCalculatorToggleButtonComponent } from './toggle-button.component';
|
||||
|
||||
describe('ToggleButtonComponent', () => {
|
||||
let component: GrossNetCalculatorToggleButtonComponent;
|
||||
let fixture: ComponentFixture<GrossNetCalculatorToggleButtonComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [GrossNetCalculatorToggleButtonComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(GrossNetCalculatorToggleButtonComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,14 @@
|
||||
import { Component, ViewEncapsulation } from '@angular/core';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'gross-net-calculator-toggle-button',
|
||||
imports: [MatIconModule, MatButtonModule],
|
||||
templateUrl: './toggle-button.component.html',
|
||||
styleUrl: './toggle-button.component.scss',
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
})
|
||||
export class GrossNetCalculatorToggleButtonComponent {
|
||||
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<div class="step-progress">
|
||||
<div class="container" #container>
|
||||
@for (item of steps; track item; let index = $index) {
|
||||
@for (item of steps; track $index; let index = $index) {
|
||||
<div class="check-box" [class]="{
|
||||
'complete': index < status.progressIndex,
|
||||
'active': index === status.progressIndex && status.progressStatus === STATUS.InProgress,
|
||||
|
@ -1,4 +1,10 @@
|
||||
/* You can add global styles to this file, and also import other style files */
|
||||
|
||||
html, body { height: 100%; }
|
||||
body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Roboto, "Helvetica Neue", sans-serif;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user