diff --git a/src/main/resources/assets/admin/common/js/form/inputtype/time/Date.ts b/src/main/resources/assets/admin/common/js/form/inputtype/time/Date.ts index f6d50e0b4..3b2394d91 100644 --- a/src/main/resources/assets/admin/common/js/form/inputtype/time/Date.ts +++ b/src/main/resources/assets/admin/common/js/form/inputtype/time/Date.ts @@ -6,6 +6,7 @@ import {BaseInputTypeNotManagingAdd} from '../support/BaseInputTypeNotManagingAd import {Element} from '../../../dom/Element'; import {DatePicker, DatePickerBuilder} from '../../../ui/time/DatePicker'; import {SelectedDateChangedEvent} from '../../../ui/time/SelectedDateChangedEvent'; +import {ResetInputEvent} from '../../../ui/time/ResetInputEvent'; import {LocalDate} from '../../../util/LocalDate'; import {InputTypeManager} from '../InputTypeManager'; import {Class} from '../../../Class'; diff --git a/src/main/resources/assets/admin/common/js/ui/time/DatePicker.ts b/src/main/resources/assets/admin/common/js/ui/time/DatePicker.ts index 248c34ce4..234df69e3 100644 --- a/src/main/resources/assets/admin/common/js/ui/time/DatePicker.ts +++ b/src/main/resources/assets/admin/common/js/ui/time/DatePicker.ts @@ -33,7 +33,7 @@ export class DatePicker extends Picker { constructor(builder: DatePickerBuilder) { - super(builder, 'date-picker'); + super(builder, 'date-picker', true); } setSelectedDate(date: Date) { diff --git a/src/main/resources/assets/admin/common/js/ui/time/Picker.ts b/src/main/resources/assets/admin/common/js/ui/time/Picker.ts index 42824bb7d..0c3a3fe0d 100644 --- a/src/main/resources/assets/admin/common/js/ui/time/Picker.ts +++ b/src/main/resources/assets/admin/common/js/ui/time/Picker.ts @@ -7,7 +7,9 @@ import {KeyHelper} from '../KeyHelper'; import {AppHelper} from '../../util/AppHelper'; import {FormEl} from '../../dom/FormEl'; import {StyleHelper} from '../../StyleHelper'; +import {Event} from '../../event/Event'; import {SelectedDateChangedEvent} from './SelectedDateChangedEvent'; +import {ResetInputEvent} from './ResetInputEvent'; export class Picker extends DivEl { @@ -16,6 +18,8 @@ export class Picker protected popupOkButton: Button; + protected popupResetButton: Button; + protected selectedDate: Date; protected input: TextInput; @@ -24,15 +28,21 @@ export class Picker private builder: any; + private addResetButton: boolean = false; + private selectedDateTimeChangedListeners: { (event: SelectedDateChangedEvent): void }[] = []; - constructor(builder: any, className?: string) { + private resetInputListners: { (event: ResetInputEvent) : void }[] = []; + + constructor(builder: any, className?: string, resetButton?: boolean) { super(className); this.builder = builder; this.validUserInput = true; + this.addResetButton = resetButton ? resetButton : this.addResetButton; + this.handleShownEvent(); this.initData(builder); @@ -91,6 +101,26 @@ export class Picker }); } + forceResetInputEvent() { + this.notifyResetInput(new Event('ResetEvent')); + } + + unResetInput(listener: (event: ResetInputEvent) => void) { + this.resetInputListners = this.resetInputListners.filter((curr) => { + return curr !== listener; + }); + } + + onResetInput(listner: (event: ResetInputEvent) => void) { + this.resetInputListners.push(listner); + } + + notifyResetInput(event: ResetInputEvent) { + this.resetInputListners.forEach((listener) => { + listener(event); + }); + } + protected setupPopupListeners(_builder: any) { this.popup.onShown(() => this.addClass('expanded')); this.popup.onHidden(() => this.removeClass('expanded')); @@ -152,6 +182,14 @@ export class Picker // must be implemented by children } + public getDefaultDate() { + return this.builder.date; + } + + protected resetInput() { + this.notifyResetInput(new ResetInputEvent()); + } + protected initPopup(_builder: any) { throw new Error('must be implemented by inheritor'); } @@ -187,6 +225,16 @@ export class Picker } } + private initResetButton() { + this.popupResetButton = new Button(i18n('action.reset')); + this.popupResetButton.addClass('ok-button'); //TODO reset-button + this.popupResetButton.onClicked(() => { + this.forceResetInputEvent(); + this.resetInput(); + }); + this.popup.appendChild(this.popupResetButton); + } + private initCloseButton() { this.popupOkButton = new Button(i18n('action.ok')); this.popupOkButton.addClass('ok-button'); @@ -203,6 +251,9 @@ export class Picker this.initPopup(this.builder); this.setupPopupListeners(this.builder); + if (this.addResetButton) { + this.initResetButton(); + } this.initCloseButton(); this.popup.insertAfterEl(this.input); diff --git a/src/main/resources/assets/admin/common/js/ui/time/ResetInputEvent.ts b/src/main/resources/assets/admin/common/js/ui/time/ResetInputEvent.ts new file mode 100644 index 000000000..75e6c0ac4 --- /dev/null +++ b/src/main/resources/assets/admin/common/js/ui/time/ResetInputEvent.ts @@ -0,0 +1,13 @@ +import {Event} from '../../event/Event'; +import {ClassHelper} from '../../ClassHelper'; + +export class ResetInputEvent { + + static on(handler: (event: ResetInputEvent) => void) { + Event.bind(ClassHelper.getFullName(this), handler); + } + + static un(handler?: (event: ResetInputEvent) => void) { + Event.unbind(ClassHelper.getFullName(this), handler); + } +}