Skip to content

Commit

Permalink
Resetting of date and datetime pickers #2316
Browse files Browse the repository at this point in the history
  • Loading branch information
Persijn Kwekkeboom committed Dec 27, 2021
1 parent acfde31 commit 8faf3b6
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export class DatePicker
extends Picker<DatePickerPopup> {

constructor(builder: DatePickerBuilder) {
super(builder, 'date-picker');
super(builder, 'date-picker', true);
}

setSelectedDate(date: Date) {
Expand Down
53 changes: 52 additions & 1 deletion src/main/resources/assets/admin/common/js/ui/time/Picker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<T extends Element>
extends DivEl {
Expand All @@ -16,6 +18,8 @@ export class Picker<T extends Element>

protected popupOkButton: Button;

protected popupResetButton: Button;

protected selectedDate: Date;

protected input: TextInput;
Expand All @@ -24,15 +28,21 @@ export class Picker<T extends Element>

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);
Expand Down Expand Up @@ -91,6 +101,26 @@ export class Picker<T extends Element>
});
}

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'));
Expand Down Expand Up @@ -152,6 +182,14 @@ export class Picker<T extends Element>
// 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');
}
Expand Down Expand Up @@ -187,6 +225,16 @@ export class Picker<T extends Element>
}
}

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');
Expand All @@ -203,6 +251,9 @@ export class Picker<T extends Element>

this.initPopup(this.builder);
this.setupPopupListeners(this.builder);
if (this.addResetButton) {
this.initResetButton();
}
this.initCloseButton();

this.popup.insertAfterEl(this.input);
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}

0 comments on commit 8faf3b6

Please sign in to comment.