Hard remove op-date-picker directory

feature/42358-standardise-date-pickers
Benjamin Bädorf 2 years ago
parent 2ae17f10fb
commit 764ffe28b5
No known key found for this signature in database
GPG Key ID: 069CA2D117AB5CCF
  1. 2
      frontend/src/app/core/setup/globals/global-listeners/augmented-date-picker.ts
  2. 5
      frontend/src/app/features/user-preferences/reminder-settings/pause-reminders/pause-reminders.component.html
  3. 2
      frontend/src/app/features/work-packages/openproject-work-packages.module.ts
  4. 1
      frontend/src/app/shared/components/datepicker/constants.ts
  5. 3
      frontend/src/app/shared/components/datepicker/datepicker.ts
  6. 3
      frontend/src/app/shared/components/datepicker/multi-date-modal/multi-date.modal.ts
  7. 8
      frontend/src/app/shared/components/datepicker/single-date-modal/single-date-form.component.html
  8. 79
      frontend/src/app/shared/components/datepicker/single-date-modal/single-date-form.component.ts
  9. 4
      frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/date-input/date-input.component.html
  10. 14
      frontend/src/app/shared/components/fields/edit/field-types/combined-date-edit-field.component.html
  11. 3
      frontend/src/app/shared/components/fields/edit/field-types/date-edit-field/date-edit-field.module.ts
  12. 127
      frontend/src/app/shared/components/op-date-picker/date-picker.directive.ts
  13. 21
      frontend/src/app/shared/components/op-date-picker/date-picker.module.ts
  14. 15
      frontend/src/app/shared/components/op-date-picker/op-range-date-picker/op-range-date-picker.component.html
  15. 84
      frontend/src/app/shared/components/op-date-picker/op-range-date-picker/op-range-date-picker.component.ts
  16. 36
      frontend/src/app/shared/components/op-date-picker/op-single-date-picker/op-single-date-picker.component.html
  17. 124
      frontend/src/app/shared/components/op-date-picker/op-single-date-picker/op-single-date-picker.component.ts
  18. 3
      frontend/src/app/shared/shared.module.ts

@ -1,4 +1,4 @@
import { DatePicker } from 'core-app/shared/components/op-date-picker/datepicker';
import { DatePicker } from 'core-app/shared/components/datepicker/datepicker';
/**
* Our application is still a hybrid one, meaning most routes are still

@ -14,12 +14,11 @@
/>
</spot-selector-field>
<op-range-date-picker
<!--op-range-date-picker
[size]="23"
[required]="enabled$ | async"
[disabled]="!(enabled$ | async)"
(changed)="setDates($event)"
[initialDates]="selectedDates$ | async"
>
</op-range-date-picker>
></op-range-date-picker-->
</div>

@ -180,7 +180,6 @@ import { OpenprojectStoragesModule } from 'core-app/shared/components/storages/o
import { FileLinksResourceService } from 'core-app/core/state/file-links/file-links.service';
import { StoragesResourceService } from 'core-app/core/state/storages/storages.service';
import { DatepickerBannerComponent } from 'core-app/shared/components/datepicker/banner/datepicker-banner.component';
import { SingleDateModalComponent } from 'core-app/shared/components/datepicker/single-date-modal/single-date.modal';
import { MultiDateModalComponent } from 'core-app/shared/components/datepicker/multi-date-modal/multi-date.modal';
import { DatepickerWorkingDaysToggleComponent } from 'core-app/shared/components/datepicker/toggle/datepicker-working-days-toggle.component';
import { DatepickerSchedulingToggleComponent } from 'core-app/shared/components/datepicker/scheduling-mode/datepicker-scheduling-toggle.component';
@ -395,7 +394,6 @@ import { StorageFilesResourceService } from 'core-app/core/state/storage-files/s
SaveQueryModalComponent,
WpDestroyModalComponent,
MultiDateModalComponent,
SingleDateModalComponent,
DatepickerBannerComponent,
DatepickerWorkingDaysToggleComponent,
DatepickerSchedulingToggleComponent,

@ -30,10 +30,11 @@ import flatpickr from 'flatpickr';
import { Instance } from 'flatpickr/dist/types/instance';
import { ConfigurationService } from 'core-app/core/config/configuration.service';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { rangeSeparator } from 'core-app/shared/components/op-date-picker/op-range-date-picker/op-range-date-picker.component';
import { Injector } from '@angular/core';
import { InjectField } from 'core-app/shared/helpers/angular/inject-field.decorator';
import { WeekdayService } from 'core-app/core/days/weekday.service';
import { rangeSeparator } from './constants';
import DateOption = flatpickr.Options.DateOption;
export class DatePicker {

@ -43,7 +43,6 @@ import { I18nService } from 'core-app/core/i18n/i18n.service';
import { OpModalComponent } from 'core-app/shared/components/modal/modal.component';
import { OpModalLocalsMap } from 'core-app/shared/components/modal/modal.types';
import { OpModalLocalsToken } from 'core-app/shared/components/modal/modal.service';
import { DatePicker } from 'core-app/shared/components/op-date-picker/datepicker';
import { HalResourceEditingService } from 'core-app/shared/components/fields/edit/services/hal-resource-editing.service';
import { ResourceChangeset } from 'core-app/shared/components/fields/changeset/resource-changeset';
import { ConfigurationService } from 'core-app/core/config/configuration.service';
@ -78,6 +77,8 @@ import {
import { WeekdayService } from 'core-app/core/days/weekday.service';
import { FocusHelperService } from 'core-app/shared/directives/focus/focus-helper';
import { DeviceService } from 'core-app/core/browser/device.service';
import { DatePicker } from '../datepicker';
import DateOption = flatpickr.Options.DateOption;
export type DateKeys = 'start'|'end';

@ -29,7 +29,7 @@
<div class="op-datepicker-modal--dates-container">
<spot-form-field
[label]="text.date"
>
>
<spot-text-field
slot="input"
name="date"
@ -50,8 +50,10 @@
</spot-form-field>
</div>
<input id="flatpickr-input"
hidden>
<input
id="flatpickr-input"
hidden
>
</div>
<div class="spot-action-bar">

@ -33,20 +33,17 @@ import {
Component,
ElementRef,
EventEmitter,
Inject,
forwardRef,
Injector,
Input,
Output,
ViewChild,
ViewEncapsulation,
} from '@angular/core';
import { InjectField } from 'core-app/shared/helpers/angular/inject-field.decorator';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { OpModalComponent } from 'core-app/shared/components/modal/modal.component';
import { OpModalLocalsMap } from 'core-app/shared/components/modal/modal.types';
import { OpModalLocalsToken } from 'core-app/shared/components/modal/modal.service';
import { DatePicker } from 'core-app/shared/components/op-date-picker/datepicker';
import { HalResourceEditingService } from 'core-app/shared/components/fields/edit/services/hal-resource-editing.service';
import { ResourceChangeset } from 'core-app/shared/components/fields/changeset/resource-changeset';
import { BrowserDetector } from 'core-app/core/browser/browser-detector.service';
import { ConfigurationService } from 'core-app/core/config/configuration.service';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { DayElement } from 'flatpickr/dist/types/instance';
@ -72,9 +69,10 @@ import {
validDate,
} from 'core-app/shared/components/datepicker/helpers/date-modal.helpers';
import { DeviceService } from 'core-app/core/browser/device.service';
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
@Component({
selector: 'op-single-date-picker-form',
selector: 'op-single-date-form',
templateUrl: './single-date.modal.html',
styleUrls: ['../styles/datepicker.modal.sass', '../styles/datepicker_mobile.modal.sass'],
changeDetection: ChangeDetectionStrategy.OnPush,
@ -84,18 +82,10 @@ import { DeviceService } from 'core-app/core/browser/device.service';
DateModalRelationsService,
],
})
export class SingleDateModalComponent extends OpModalComponent implements AfterViewInit {
@InjectField() I18n!:I18nService;
export class SingleDateFormComponent extends UntilDestroyedMixin implements AfterViewInit {
@Output('savedOrCancelled') savedOrCancelled = new EventEmitter();
@InjectField() timezoneService:TimezoneService;
@InjectField() halEditing:HalResourceEditingService;
@InjectField() dateModalScheduling:DateModalSchedulingService;
@InjectField() dateModalRelations:DateModalRelationsService;
@InjectField() deviceService:DeviceService;
@Input('value') value = '';
@ViewChild('modalContainer') modalContainer:ElementRef<HTMLElement>;
@ -107,8 +97,6 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
today: this.I18n.t('js.label_today'),
};
onDataUpdated = new EventEmitter<string>();
scheduleManually = false;
ignoreNonWorkingDays = false;
@ -125,40 +113,19 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
private datePickerInstance:DatePicker;
private dateUpdates$ = new Subject<string>();
private dateUpdateRequests$ = this
.dateUpdates$
.pipe(
this.untilDestroyed(),
switchMap((date:string) => this
.apiV3Service
.work_packages
.id(this.changeset.id)
.form
.forPayload({
date,
lockVersion: this.changeset.value<string>('lockVersion'),
ignoreNonWorkingDays: this.ignoreNonWorkingDays,
})),
)
.subscribe((form) => this.updateDatesFromForm(form));
constructor(
readonly injector:Injector,
@Inject(OpModalLocalsToken) public locals:OpModalLocalsMap,
readonly cdRef:ChangeDetectorRef,
readonly elementRef:ElementRef,
readonly configurationService:ConfigurationService,
readonly apiV3Service:ApiV3Service,
readonly cdRef:ChangeDetectorRef,
readonly injector:Injector,
readonly I18n:I18nService,
readonly timezoneService:TimezoneService,
readonly halEditing:HalResourceEditingService,
readonly dateModalScheduling:DateModalSchedulingService,
readonly dateModalRelations:DateModalRelationsService,
readonly deviceService:DeviceService,
) {
super(locals, cdRef, elementRef);
this.changeset = locals.changeset as ResourceChangeset;
this.htmlId = `wp-datepicker-${locals.fieldName as string}`;
this.ignoreNonWorkingDays = !!this.changeset.value('ignoreNonWorkingDays');
this.date = this.changeset.value('date');
super();
}
ngAfterViewInit():void {
@ -167,7 +134,6 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
.getMinimalDateFromPreceeding()
.subscribe((date) => {
this.initializeDatepicker(date);
this.onDataChange();
});
this
@ -203,7 +169,7 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
// If we're single date, update the date
if (!this.ignoreNonWorkingDays && this.date) {
// Resent the current start and end dates so duration can be calculated again.
this.dateUpdates$.next(this.date);
// this.dateUpdates$.next(this.date);
}
this.cdRef.detectChanges();
@ -222,11 +188,11 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
this.changeset.setValue('date', mappedDate(this.date));
}
this.closeMe();
this.savedOrCancelled.emit();
}
cancel():void {
this.closeMe();
this.savedOrCancelled.emit();
}
updateDate(val:string|null):void {
@ -279,7 +245,6 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
this.enforceManualChangesToDatepicker(dates[0]);
}
this.onDataChange();
this.cdRef.detectChanges();
},
onDayCreate: (dObj:Date[], dStr:string, fp:flatpickr.Instance, dayElem:DayElement) => {
@ -301,10 +266,6 @@ export class SingleDateModalComponent extends OpModalComponent implements AfterV
setDates(date, this.datePickerInstance, enforceDate);
}
private onDataChange() {
this.onDataUpdated.emit(this.date || '');
}
/**
* Update the datepicker dates and properties from a form response
* that includes derived/calculated values.

@ -1,6 +1,6 @@
<op-single-date-picker
<!--op-single-date-picker
[required]="to.required"
[disabled]="to.disabled"
[formControl]="formControl"
[formlyAttributes]="field"
></op-single-date-picker>
></op-single-date-picker-->

@ -2,13 +2,15 @@
[open]="isOpened"
(closed)="onModalClosed"
>
<input
<button
slot="trigger"
[value]="dates"
type="button"
(click)="showDatePickerModal()"
class="op-input"
type="text"
/>
class="spot-input"
>{{ dates }}</button>
<div slot="body">body</div>
<op-single-date-form
value="dates"
slot="body"
>body</op-single-date-form>
</spot-drop-modal>

@ -1,7 +1,6 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DateEditFieldComponent } from 'core-app/shared/components/fields/edit/field-types/date-edit-field/date-edit-field.component';
import { DatePickerModule } from 'core-app/shared/components/op-date-picker/date-picker.module';
@NgModule({
declarations: [
@ -9,8 +8,6 @@ import { DatePickerModule } from 'core-app/shared/components/op-date-picker/date
],
imports: [
CommonModule,
DatePickerModule,
],
exports: [
DateEditFieldComponent,

@ -1,127 +0,0 @@
// -- copyright
// OpenProject is an open source project management software.
// Copyright (C) 2012-2022 the OpenProject GmbH
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License version 3.
//
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
// Copyright (C) 2006-2013 Jean-Philippe Lang
// Copyright (C) 2010-2013 the ChiliProject Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// See COPYRIGHT and LICENSE files for more details.
//++
import {
AfterViewInit,
ChangeDetectorRef,
Directive,
ElementRef,
EventEmitter,
Injector,
Input,
NgZone,
OnDestroy,
Output,
ViewChild,
} from '@angular/core';
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { DatePicker } from 'core-app/shared/components/op-date-picker/datepicker';
import { ConfigurationService } from 'core-app/core/config/configuration.service';
@Directive()
export abstract class AbstractDatePickerDirective extends UntilDestroyedMixin implements OnDestroy, AfterViewInit {
@Output() public canceled = new EventEmitter<string>();
@Input() public appendTo?:HTMLElement;
@Input() public classes = '';
@Input() public id = '';
@Input() public name = '';
@Input() public required = false;
@Input() public size = 20;
@Input() public disabled = false;
@ViewChild('dateInput') dateInput:ElementRef;
protected datePickerInstance:DatePicker;
public constructor(
readonly injector:Injector,
protected timezoneService:TimezoneService,
protected configurationService:ConfigurationService,
protected ngZone:NgZone,
protected changeDetectorRef:ChangeDetectorRef,
) {
super();
if (!this.id) {
this.id = `datepicker-input-${Math.floor(Math.random() * 1000).toString(3)}`;
}
}
ngAfterViewInit():void {
this.initializeDatepicker();
}
ngOnDestroy():void {
if (this.datePickerInstance) {
this.datePickerInstance.destroy();
}
}
openOnClick():void {
if (!this.disabled) {
this.datePickerInstance.show();
}
}
closeOnOutsideClick(event:MouseEvent):void {
if (this.isOutsideClick(event)) {
this.close();
}
}
isOutsideClick(event:MouseEvent):boolean {
return (!(event.relatedTarget
&& this.datePickerInstance.datepickerInstance.calendarContainer.contains(event.relatedTarget as HTMLElement)));
}
close():void {
this.datePickerInstance.hide();
}
protected isEmpty():boolean {
return this.currentValue.trim() === '';
}
protected get currentValue():string {
return this.inputElement?.value || '';
}
protected get inputElement():HTMLInputElement {
return this.dateInput.nativeElement as HTMLInputElement;
}
protected abstract initializeDatepicker():void;
}

@ -1,21 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { OpSpotModule } from 'core-app/spot/spot.module';
import { OpRangeDatePickerComponent } from 'core-app/shared/components/op-date-picker/op-range-date-picker/op-range-date-picker.component';
import { OpSingleDatePickerComponent } from 'core-app/shared/components/op-date-picker/op-single-date-picker/op-single-date-picker.component';
@NgModule({
imports: [
CommonModule,
OpSpotModule,
],
declarations: [
OpSingleDatePickerComponent,
OpRangeDatePickerComponent,
],
exports: [
OpSingleDatePickerComponent,
OpRangeDatePickerComponent,
],
})
export class DatePickerModule { }

@ -1,15 +0,0 @@
<input
#dateInput
[id]="id"
[name]="name"
[value]="initialValue"
[ngClass]="classes + ' op-input'"
[size]="size"
[required]="required"
[disabled]="disabled"
(click)="openOnClick()"
(keydown.escape)="close()"
(keydown)="onKeyDown()"
(blur)="closeOnOutsideClick($event)"
type="text"
>

@ -1,84 +0,0 @@
import {
ChangeDetectionStrategy,
Component,
Input,
Output,
} from '@angular/core';
import { Instance } from 'flatpickr/dist/types/instance';
import { KeyCodes } from 'core-app/shared/helpers/keyCodes.enum';
import { DatePicker } from 'core-app/shared/components/op-date-picker/datepicker';
import { AbstractDatePickerDirective } from 'core-app/shared/components/op-date-picker/date-picker.directive';
import { DebouncedEventEmitter } from 'core-app/shared/helpers/rxjs/debounced-event-emitter';
import { componentDestroyed } from '@w11k/ngx-componentdestroyed';
export const rangeSeparator = '-';
@Component({
selector: 'op-range-date-picker',
templateUrl: './op-range-date-picker.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class OpRangeDatePickerComponent extends AbstractDatePickerDirective {
@Output() public changed = new DebouncedEventEmitter<string[]>(componentDestroyed(this));
@Input() public initialDates:string[] = [];
initialValue = '';
protected initializeDatepicker():void {
this.initialDates = this.initialDates || [];
this.initialValue = this.resolveDateArrayToString(this.initialDates);
const options = {
allowInput: true,
appendTo: this.appendTo,
mode: 'range' as const,
onChange: (selectedDates:Date[], dateStr:string) => {
if (this.isEmpty()) {
return;
}
this.inputElement.value = dateStr;
if (selectedDates.length === 2) {
this.changed.emit(this.resolveDateStringToArray(dateStr));
}
},
onKeyDown: (selectedDates:Date[], dateStr:string, instance:Instance, data:KeyboardEvent) => {
if (data.which === KeyCodes.ESCAPE) {
this.canceled.emit();
}
},
};
let initialValue;
if (this.isEmpty() && this.initialDates.length > 0) {
initialValue = this.initialDates.map((date) => this.timezoneService.parseISODate(date).toDate());
} else {
initialValue = this.resolveDateStringToArray(this.currentValue);
}
this.datePickerInstance = new DatePicker(
this.injector,
`#${this.id}`,
initialValue,
options,
null,
);
}
// eslint-disable-next-line class-methods-use-this
onKeyDown():boolean {
// Disable any manual user input as it most likely return in a wrong format
return false;
}
// eslint-disable-next-line class-methods-use-this
private resolveDateStringToArray(dates:string):string[] {
return dates.split(` ${rangeSeparator} `).map((date) => date.trim());
}
// eslint-disable-next-line class-methods-use-this
private resolveDateArrayToString(dates:string[]):string {
return dates.join(` ${rangeSeparator} `);
}
}

@ -1,36 +0,0 @@
<spot-drop-modal
[open]="isOpen"
(closed)="close()"
>
<!--input
#dateInput
class="spot-input"
[id]="id"
[name]="name"
[value]="initialDate || ''"
[size]="size"
[required]="required"
[disabled]="disabled"
(click)="open()"
(focus)="open()"
(keydown.enter)="enterPressed.emit(dateValue)"
(keydown.escape)="close()"
(input)="onInputChange()"
type="text"
slot="trigger"
/-->
<button
slot="trigger"
type="button"
[disabled]="disabled"
(click)="open()"
>{{ value || 'Select a date' }}</button>
<div
slot="body"
>body</div>
</spot-drop-modal>

@ -1,124 +0,0 @@
// -- copyright
// OpenProject is an open source project management software.
// Copyright (C) 2012-2022 the OpenProject GmbH
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License version 3.
//
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
// Copyright (C) 2006-2013 Jean-Philippe Lang
// Copyright (C) 2010-2013 the ChiliProject Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// See COPYRIGHT and LICENSE files for more details.
//++
import {
Component,
EventEmitter,
Input,
Output,
OnDestroy,
forwardRef,
} from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
/* eslint-disable-next-line change-detection-strategy/on-push */
@Component({
selector: 'op-single-date-picker',
templateUrl: './op-single-date-picker.component.html',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => OpSingleDatePickerComponent),
multi: true,
},
],
})
export class OpSingleDatePickerComponent implements ControlValueAccessor, OnDestroy {
@Output() public changed = new EventEmitter();
@Output() public blurred = new EventEmitter<string>();
@Output() public enterPressed = new EventEmitter<string>();
@Input() public value = '';
@Input() public id = '';
@Input() public name = '';
@Input() public required = false;
@Input() public size = 20;
@Input() public disabled = false;
currentValue = '';
isOpen = false;
constructor(
protected timezoneService:TimezoneService,
) {}
open() {
this.isOpen = true;
}
close() {
this.isOpen = false;
}
protected inputIsValidDate():boolean {
return (/\d{4}-\d{2}-\d{2}/.exec(this.currentValue)) !== null;
}
public formatter(data:string):string {
if (moment(data, 'YYYY-MM-DD', true).isValid()) {
const d = this.timezoneService.parseDate(data);
return this.timezoneService.formattedISODate(d);
}
return data;
}
ngOnDestroy():void {
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
onControlChange:(_?:unknown) => void = () => { };
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
onControlTouch:(_?:unknown) => void = () => { };
writeValue(date:string):void {
this.value = date; //this.formatter(date);
}
registerOnChange(fn:(_:unknown) => void):void {
this.onControlChange = fn;
}
registerOnTouched(fn:(_:unknown) => void):void {
this.onControlTouch = fn;
}
setDisabledState(disabled:boolean):void {
this.disabled = disabled;
}
}

@ -51,7 +51,6 @@ import { SortHeaderDirective } from 'core-app/features/work-packages/components/
import { ZenModeButtonComponent } from 'core-app/features/work-packages/components/wp-buttons/zen-mode-toggle-button/zen-mode-toggle-button.component';
import { OPContextMenuComponent } from 'core-app/shared/components/op-context-menu/op-context-menu.component';
import { OpenprojectPrincipalRenderingModule } from 'core-app/shared/components/principal/principal-rendering.module';
import { DatePickerModule } from 'core-app/shared/components/op-date-picker/date-picker.module';
import { FocusModule } from 'core-app/shared/directives/focus/focus.module';
import { EnterpriseBannerComponent } from 'core-app/shared/components/enterprise-banner/enterprise-banner.component';
import { EnterprisePageComponent } from 'core-app/shared/components/enterprise-page/enterprise-page.component';
@ -131,7 +130,6 @@ export function bootstrapModule(injector:Injector):void {
OpenprojectContentLoaderModule,
OpenprojectAutocompleterModule,
DatePickerModule,
FocusModule,
IconModule,
AttributeHelpTextModule,
@ -156,7 +154,6 @@ export function bootstrapModule(injector:Injector):void {
OpSpotModule,
DatePickerModule,
FocusModule,
OpDateTimeComponent,

Loading…
Cancel
Save