diff --git a/src/index.ts b/src/index.ts
index 2be30d2..a451233 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,48 +1,47 @@
import { ModuleWithProviders, NgModule } from '@angular/core';
+import { FormsModule } from '@angular/forms';
import { XdceArchModule } from '@isp/xdce-arch-core';
import { NbpModule } from '@isp/xdce-widget';
-
-import { NbpBreadCrumbsComponent } from './widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component';
-export { NbpBreadCrumbsComponent } from './widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component';
-import { NbpFidBarChartComponent } from './widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component';
-export { NbpFidBarChartComponent } from './widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component';
-import { NbpFidButtonBarComponent } from './widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component';
-export { NbpFidButtonBarComponent } from './widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component';
-import { NbpFidDonutChartComponent } from './widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component';
-export { NbpFidDonutChartComponent } from './widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component';
-import { NbpFidPyramidChartComponent } from './widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component';
-export { NbpFidPyramidChartComponent } from './widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component';
-import { NbpFidSidePopupComponent } from './widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component';
-export { NbpFidSidePopupComponent } from './widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component';
-import { NbpFidTableComponent } from './widgetfideuram/components/nbp-fid-table/nbp-fid-table.component';
-export { NbpFidTableComponent } from './widgetfideuram/components/nbp-fid-table/nbp-fid-table.component';
-import { NbpFidToggleTabComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y';
-export { NbpFidToggleTabComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y';
-import { NbpFidToggleTabComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y';
-export { NbpFidToggleTabComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y';
-import { NbpFidToggleTabComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component';
-export { NbpFidToggleTabComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component';
-import { NbpFidToggleTabsetComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y';
-export { NbpFidToggleTabsetComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y';
-import { NbpFidToggleTabsetComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y';
-export { NbpFidToggleTabsetComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y';
-import { NbpFidToggleTabsetComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component';
-export { NbpFidToggleTabsetComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component';
-import { NbpFidComboComponent } from './widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component';
-export { NbpFidComboComponent } from './widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component';
-
-import { ShowcaseComponent } from './widgetfideuram/components/showcase/showcase.component';
-export { ShowcaseComponent } from './widgetfideuram/components/showcase/showcase.component';
-import { Showcase1Component } from './widgetfideuram/components/showcase/showcase1.component';
-export { Showcase1Component } from './widgetfideuram/components/showcase/showcase1.component';
-import { WidgetFideuramShowcaseComponent } from './widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component';
-export { WidgetFideuramShowcaseComponent } from './widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component';
-
import { AgGridModule, AngularFrameworkComponentWrapper, AngularFrameworkOverrides } from 'ag-grid-angular';
-import { FormsModule } from '@angular/forms';
+import { NbpBreadCrumbsComponent } from './widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component';
+import { NbpFidBarChartComponent } from './widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component';
+import { NbpFidButtonBarComponent } from './widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component';
+import { NbpFidCalendarGenericComponent } from './widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component';
+import { NbpFidComboComponent } from './widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component';
+import { NbpFidDonutChartComponent } from './widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component';
+import { NbpFidPyramidChartComponent } from './widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component';
+import { NbpFidSidePopupComponent } from './widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component';
+import { NbpFidTableComponent } from './widgetfideuram/components/nbp-fid-table/nbp-fid-table.component';
+import { NbpFidToggleTabComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component';
+import { NbpFidToggleTabComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y';
+import { NbpFidToggleTabComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y';
+import { NbpFidToggleTabsetComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component';
+import { NbpFidToggleTabsetComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y';
+import { NbpFidToggleTabsetComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y';
+import { ShowcaseComponent } from './widgetfideuram/components/showcase/showcase.component';
+import { Showcase1Component } from './widgetfideuram/components/showcase/showcase1.component';
+import { WidgetFideuramShowcaseComponent } from './widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component';
+import { CommonModule } from '@angular/common';
export { AgGridModule } from 'ag-grid-angular';
-
-export { DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage, clearSpinnerMessage } from './widgetfideuram/Utils';
+export { NbpBreadCrumbsComponent } from './widgetfideuram/components/nbp-bread-crumbs/nbp-bread-crumbs.component';
+export { NbpFidBarChartComponent } from './widgetfideuram/components/nbp-fid-bar-chart/nbp-fid-bar-chart.component';
+export { NbpFidButtonBarComponent } from './widgetfideuram/components/nbp-fid-button-bar/nbp-fid-button-bar.component';
+export { NbpFidCalendarGenericComponent } from './widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component';
+export { NbpFidComboComponent } from './widgetfideuram/components/nbp-fid-combo/nbp-fid-combo.component';
+export { NbpFidDonutChartComponent } from './widgetfideuram/components/nbp-fid-donut-chart/nbp-fid-donut-chart.component';
+export { NbpFidPyramidChartComponent } from './widgetfideuram/components/nbp-fid-pyramid-chart/nbp-fid-pyramid-chart.component';
+export { NbpFidSidePopupComponent } from './widgetfideuram/components/nbp-fid-side-popup/nbp-fid-side-popup.component';
+export { NbpFidTableComponent } from './widgetfideuram/components/nbp-fid-table/nbp-fid-table.component';
+export { NbpFidToggleTabComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component';
+export { NbpFidToggleTabComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.a11y';
+export { NbpFidToggleTabComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tab.component.noa11y';
+export { NbpFidToggleTabsetComponent } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component';
+export { NbpFidToggleTabsetComponentA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.a11y';
+export { NbpFidToggleTabsetComponentNOA11Y } from './widgetfideuram/components/nbp-fid-toggle-tabset/nbp-fid-toggle-tabset.component.noa11y';
+export { ShowcaseComponent } from './widgetfideuram/components/showcase/showcase.component';
+export { Showcase1Component } from './widgetfideuram/components/showcase/showcase1.component';
+export { WidgetFideuramShowcaseComponent } from './widgetfideuram/components/widget-fideuram-showcase/widget-fideuram-showcase.component';
+export { clearSpinnerMessage, DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage } from './widgetfideuram/Utils';
@NgModule({
@@ -51,6 +50,7 @@ export { DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage, clearS
NbpModule,
AgGridModule,
FormsModule,
+ CommonModule
],
declarations: [
NbpBreadCrumbsComponent,
@@ -70,6 +70,7 @@ export { DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage, clearS
ShowcaseComponent,
Showcase1Component,
WidgetFideuramShowcaseComponent,
+ NbpFidCalendarGenericComponent
],
exports: [
NbpBreadCrumbsComponent,
@@ -89,7 +90,8 @@ export { DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage, clearS
ShowcaseComponent,
Showcase1Component,
WidgetFideuramShowcaseComponent,
- AgGridModule
+ AgGridModule,
+ NbpFidCalendarGenericComponent
],
providers: [
AngularFrameworkOverrides,
@@ -101,7 +103,8 @@ export { DATE_STRING_FORMAT, formatDate, formatNumber, setSpinnerMessage, clearS
NbpFidToggleTabsetComponentA11Y,
NbpFidToggleTabsetComponentNOA11Y,
NbpFidToggleTabComponent,
- NbpFidToggleTabsetComponent
+ NbpFidToggleTabsetComponent,
+ NbpFidCalendarGenericComponent
]
})
export class XdceWidgetFideuramModule {
diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.html b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.html
new file mode 100644
index 0000000..7fa8a76
--- /dev/null
+++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.html
@@ -0,0 +1,120 @@
+
diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.scss b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.scss
new file mode 100644
index 0000000..96dc31e
--- /dev/null
+++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.scss
@@ -0,0 +1,124 @@
+.calendar {
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ padding: 15px;
+ color: #333333;
+}
+
+.calendar-popup {
+ position: absolute;
+ z-index: 100;
+ display: none;
+
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ font-size: 12px;
+ text-align: left;
+ background-color: #ffffff;
+ border: 1px solid #e1e1e1;
+ border-radius: 0;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ background-clip: padding-box;
+}
+
+.calendar-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 10px;
+}
+
+.calendar-cell {
+ padding: 5px 10px;
+ font-size: 12px;
+ border: 1px solid #dde6e9;
+ border-radius: 3px;
+ cursor: pointer;
+}
+
+#monthYear {
+ font-weight: bold;
+ flex-grow: 1;
+ text-align: center;
+}
+
+.calendar-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 5px;
+ text-align: center;
+}
+
+.calendar-grid-7 {
+ grid-template-columns: repeat(7, 1fr);
+}
+
+.calendar-grid-5 {
+ grid-template-columns: repeat(5, 1fr);
+}
+
+.calendar-grid .day {
+ font-weight: bold;
+ background-color: #eee;
+ cursor: default;
+}
+
+.calendar-grid .selected {
+ background-color: #009fe3;
+ color: white;
+}
+
+.calendar-grid .other-month {
+ color: #ccc;
+}
+
+.calendar-grid .disabled {
+ color: #bbb;
+ background: #f5f5f5;
+ cursor: not-allowed;
+}
+
+.calendar-actions {
+ margin-top: 15px;
+ display: flex;
+ justify-content: space-around;
+}
+
+.calendar-actions button {
+ padding: 6px 12px;
+ background-color: orange;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+}
+
+.datepicker-wrapper {
+ display: inline-block;
+ position: relative;
+ margin-bottom: 8px;
+}
+
+.datepicker-input {
+ width: 200px;
+ padding: 8px 36px 8px 8px;
+ border-radius: 5px;
+ border: 1px solid #ccc;
+ background: #fafafa;
+ cursor: pointer;
+ font-size: 16px;
+}
+
+.datepicker-icon {
+ position: absolute;
+ right: 8px;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 20px;
+ height: 20px;
+ fill: #888;
+ cursor: pointer;
+ pointer-events: auto;
+}
\ No newline at end of file
diff --git a/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.ts b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.ts
new file mode 100644
index 0000000..0acb414
--- /dev/null
+++ b/src/widgetfideuram/components/nbp-fid-calendar-generic/nbp-fid-calendar-genric.component.ts
@@ -0,0 +1,321 @@
+import {
+ AfterViewInit,
+ Component,
+ ElementRef,
+ forwardRef,
+ Input,
+ Renderer2,
+ ViewChild,
+} from "@angular/core";
+import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms";
+import { NbpCalendarPattern, NbpCalendarPosition } from "@isp/xdce-widget";
+
+@Component({
+ selector: 'nbp-fid-calendar-generic',
+ templateUrl: './nbp-fid-calendar-genric.component.html',
+ styleUrls: ["./nbp-fid-calendar-genric.component.scss"],
+ providers: [
+ {
+ provide: NG_VALUE_ACCESSOR,
+ useExisting: forwardRef(() => NbpFidCalendarGenericComponent),
+ multi: true
+ }
+ ]
+})
+export class NbpFidCalendarGenericComponent implements AfterViewInit, ControlValueAccessor {
+ @Input("nbpLabelPattern") pattern: NbpCalendarPattern =
+ NbpCalendarPattern.GGMMAAAA;
+ @Input("nbpPlacement") placement: string = "bottom-right";
+ @Input("id") id: string;
+ @Input("name") name: string;
+ daysOfWeek = ["lun", "mar", "mer", "gio", "ven", "sab", "dom"];
+ months = [
+ "Gennaio",
+ "Febbraio",
+ "Marzo",
+ "Aprile",
+ "Maggio",
+ "Giugno",
+ "Luglio",
+ "Agosto",
+ "Settembre",
+ "Ottobre",
+ "Novembre",
+ "Dicembre",
+ ];
+ view: "days" | "months" | "years" = "days";
+
+ visibility: "shown" | "hidden" = "hidden";
+
+ disabledWeekdays = [0, 6]; // es: weekend
+ // CONFIGURAZIONE: range di date da disabilitare (array di oggetti {start, end})
+ disabledDateRanges = [
+ { start: new Date(2025, 4, 10), end: new Date(2025, 4, 15) }, // 10-15 maggio 2025
+ // aggiungi altri range se necessario
+ ];
+
+ ngAfterViewInit(): void {
+ this.renderer.setStyle(
+ this.calendarPopupRef.nativeElement,
+ "display",
+ "none"
+ );
+ }
+ constructor(private renderer: Renderer2) {}
+
+
+
+ currentDate = new Date();
+ selectedDate: Date | null = null;
+ selectedDateStr : string | null = null;
+ monthYearText: string = "";
+ firstDayOfMonth: Date | null = null;
+ startDay: number = 0;
+ daysInCurrentMonth: number = 0;
+ daysInCurrentMonthToBeRendered: Date[] = [];
+ daysInPrevMonth: number = 0;
+ daysInPrevMonthToBeRendered: Date[] = [];
+ daysInNextMonthToBeRendered: Date[] = [];
+ monthsToBeRendered: string[] = [];
+ yearsToBeRendered: string[] = [];
+
+ @ViewChild("dateInput") dateInputRef: ElementRef;
+ @ViewChild("calendarPopup") calendarPopupRef: ElementRef;
+
+ public showCalendar() {
+ this.positionCalendarPopup();
+ this.renderCalendar();
+ }
+
+ public hideCalendar() {
+ this.renderer.setStyle(
+ this.calendarPopupRef.nativeElement,
+ "display",
+ "none"
+ );
+ }
+
+ private renderCalendar() {
+ if (this.view == "days") this.renderDays();
+ else if (this.view == "months") this.renderMonths();
+ else this.renderYears();
+ }
+
+ private positionCalendarPopup(): void {
+ const input = this.dateInputRef.nativeElement;
+ const popup = this.calendarPopupRef.nativeElement;
+
+ // Append to body if not already
+ if (popup.parentNode !== document.body) {
+ this.renderer.appendChild(document.body, popup);
+ }
+
+ const rect = input.getBoundingClientRect();
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
+ const scrollLeft =
+ window.pageXOffset || document.documentElement.scrollLeft;
+
+ this.renderer.setStyle(popup, "display", "block");
+ this.renderer.setStyle(popup, "position", "absolute");
+ this.renderer.setStyle(popup, "z-index", "9999");
+ this.renderer.setStyle(popup, "top", `${rect.bottom + scrollTop}px`);
+ this.renderer.setStyle(popup, "left", `${rect.left + scrollLeft}px`);
+ // this.renderer.setStyle(popup, 'min-width', `${rect.width}px`);
+ }
+ public pad(n: number): string {
+ return n < 10 ? "0" + n : n + "";
+ }
+ public isDateDisabled(date: Date): boolean {
+ // Disabilita per giorno della settimana
+ if (this.disabledWeekdays.indexOf(date.getDay()) != -1) return true;
+ // Disabilita per range
+ for (const range of this.disabledDateRanges) {
+ if (date >= range.start && date <= range.end) return true;
+ }
+ return false;
+ }
+ public sameDate(d1: Date, d2: Date) {
+ return (
+ d1.getFullYear() === d2.getFullYear() &&
+ d1.getMonth() === d2.getMonth() &&
+ d1.getDate() === d2.getDate()
+ );
+ }
+
+ public sameMonth(m1: number, m2: number) {
+ return m1 == m2;
+ }
+
+ public sameYear(y1: number, y2: number) {
+ return y1 == y2;
+ }
+
+ private formatDate(date: Date, format: string) {
+ if (!date) return "";
+ return format
+ .replace("gg", this.pad(date.getDate()))
+ .replace("mm", this.pad(date.getMonth() + 1))
+ .replace("aaaa", date.getFullYear().toString())
+ .replace("aa", String(date.getFullYear()).slice(-2));
+ }
+
+ public selectDate(date: Date) {
+ if (this.isDateDisabled(date)) {
+ return;
+ }
+ this.selectedDate = date;
+ this.setDate(this.formatDate(date, this.pattern));
+ this.renderCalendar();
+ }
+
+ public selectMonth(idx) {
+ this.currentDate.setMonth(idx);
+ this.view = "days";
+ this.renderCalendar();
+ }
+
+ public selectYear(year: string) {
+ this.currentDate.setFullYear(Number(year));
+ this.view = "months";
+ this.renderCalendar();
+ }
+
+ public isToday(date: Date) {
+ return this.sameDate(date, new Date());
+ }
+
+ public isCurrentMonth(idx) {
+ return idx == this.currentDate.getMonth();
+ }
+
+ public isCurrentYear(year: string) {
+ return year === this.currentDate.getFullYear().toString();
+ }
+
+ private renderDays() {
+ this.daysInPrevMonthToBeRendered = [];
+ this.daysInCurrentMonthToBeRendered = [];
+ this.daysInNextMonthToBeRendered = [];
+
+ this.monthYearText = `${
+ this.months[this.currentDate.getMonth()]
+ } ${this.currentDate.getFullYear()}`;
+
+ const year = this.currentDate.getFullYear();
+ const month = this.currentDate.getMonth();
+
+ this.firstDayOfMonth = new Date(year, month, 1);
+ this.startDay = (this.firstDayOfMonth.getDay() + 6) % 7;
+
+ this.daysInCurrentMonth = new Date(year, month + 1, 0).getDate();
+ this.daysInPrevMonth = new Date(year, month, 0).getDate();
+
+ for (let i = this.startDay; i > 0; i--) {
+ const day = this.daysInPrevMonth - i + 1;
+ const prevMonthDate = new Date(year, month - 1, day);
+ this.daysInPrevMonthToBeRendered.push(prevMonthDate);
+ }
+
+ for (let i = 1; i <= this.daysInCurrentMonth; i++) {
+ const currMonthDate = new Date(year, month, i);
+ this.daysInCurrentMonthToBeRendered.push(currMonthDate);
+ }
+
+ const totalCells = 42; // 7 giorni x 6 settimane
+ const filledCells = this.startDay + this.daysInCurrentMonth;
+ const nextMonthDays = totalCells - filledCells;
+ for (let i = 1; i <= nextMonthDays; i++) {
+ const nextMonthDate = new Date(year, month + 1, i);
+ this.daysInNextMonthToBeRendered.push(nextMonthDate);
+ }
+ }
+
+ private renderMonths() {
+ this.monthsToBeRendered = [];
+ const monthTexts = this.months.map((m) => m.substring(0, 3));
+ this.monthYearText = this.currentDate.getFullYear().toString();
+ monthTexts.forEach((m, idx) => {
+ this.monthsToBeRendered.push(m);
+ });
+ }
+
+ private renderYears() {
+ this.yearsToBeRendered = [];
+ // 20 anni, 5x4
+ const base = Math.floor(this.currentDate.getFullYear() / 20) * 20;
+ this.monthYearText = `${base} - ${base + 19}`;
+ for (let y = base; y < base + 20; y++) {
+ this.yearsToBeRendered.push(y.toString());
+ }
+ }
+
+ public changeView() {
+ if (this.view === "days") this.view = "months";
+ else if (this.view === "months") this.view = "years";
+ this.renderCalendar();
+ }
+
+ public prev() {
+ if (this.view === "days")
+ this.currentDate.setMonth(this.currentDate.getMonth() - 1);
+ else if (this.view === "months")
+ this.currentDate.setFullYear(this.currentDate.getFullYear() - 1);
+ else this.currentDate.setFullYear(this.currentDate.getFullYear() - 10);
+ this.renderCalendar();
+ }
+
+ public next() {
+ if (this.view === "days")
+ this.currentDate.setMonth(this.currentDate.getMonth() + 1);
+ else if (this.view === "months")
+ this.currentDate.setFullYear(this.currentDate.getFullYear() + 1);
+ else this.currentDate.setFullYear(this.currentDate.getFullYear() + 10);
+ this.renderCalendar();
+ }
+
+ public goToday() {
+ this.currentDate = new Date();
+ this.selectedDate = new Date();
+ this.setDate(this.formatDate(
+ this.selectedDate,
+ this.pattern
+ ));
+ this.view = "days";
+ this.renderCalendar();
+ }
+
+ public clearSelection() {
+ this.selectedDate = null;
+ this.setDate("")
+ this.renderCalendar();
+ }
+
+ public confirmDate() {
+ this.hideCalendar();
+ }
+
+ private onChange = (_: any) => {};
+ private onTouched = () => {};
+
+ writeValue(value: string | null): void {
+ this.selectedDateStr = value;
+ }
+
+ registerOnChange(fn: any): void {
+ this.onChange = fn;
+ }
+
+ registerOnTouched(fn: any): void {
+ this.onTouched = fn;
+ }
+
+ setDate(value: string): void {
+ this.selectedDateStr = value;
+ this.onChange(value);
+ this.onTouched();
+ }
+
+ setDisabledState?(isDisabled: boolean): void {
+ throw new Error("Method not implemented.");
+ }
+}
diff --git a/src/widgetfideuram/components/showcase/showcase1.component.html b/src/widgetfideuram/components/showcase/showcase1.component.html
index 2e809eb..97d41c8 100644
--- a/src/widgetfideuram/components/showcase/showcase1.component.html
+++ b/src/widgetfideuram/components/showcase/showcase1.component.html
@@ -50,8 +50,14 @@
- Calendar generic (nbp-input-container + nbp-calendar-generic)
+
+
+ Calendar generic (nbp-input-container + nbp-calendar-generic)
+
+
+
Combo (nbp-input-container + nbp-combo)