From 6311fad1acf8d86c297a5bf11f2161601d853da9 Mon Sep 17 00:00:00 2001
From: cerredz <422michaelcerreto@gmail.com>
Date: Fri, 15 May 2026 18:27:21 -0400
Subject: [PATCH 1/2] Replace moment with date-fns v3
---
package-lock.json | 34 ++----
package.json | 4 +-
src/app/app.module.ts | 4 +-
.../appeal-filter/appeal-filter.component.ts | 2 +-
.../calendar-modal.component.html | 44 +++++++
.../calendar-modal.component.scss | 3 +
.../calendar-modal.component.ts | 115 ++++++++++++++++++
.../calendar-modal/calendar-modal.module.ts | 12 ++
.../date-dropdown/date-dropdown.component.ts | 2 +-
.../date-picker/date-picker.component.ts | 2 +-
.../date-popup/date-popup.component.ts | 2 +-
.../date-range-refinement-list.component.ts | 2 +-
.../request-filter.component.ts | 2 +-
.../story-filter/story-filter.component.ts | 2 +-
.../time-picker/time-picker.component.ts | 2 +-
.../candidate-assign-form.page.ts | 2 +-
.../candidate-assigned-history.page.ts | 2 +-
.../candidate-certificate-form.page.ts | 2 +-
.../candidate-form/candidate-form.page.ts | 2 +-
.../candidate-view/candidate-view.page.ts | 2 +-
.../log-time-manually.page.ts | 2 +-
.../company-contract-form.page.ts | 2 +-
.../company-request-list.page.ts | 2 +-
.../request-interview-filter.page.ts | 2 +-
.../email-campaign-form.page.ts | 2 +-
.../fulltimer-form/fulltimer-form.page.ts | 2 +-
.../leave-request/leave-request.page.ts | 2 +-
.../leave-request-form.page.ts | 2 +-
.../reports/valocity/valocity.page.ts | 2 +-
.../logged-in/story/job-form/job-form.page.ts | 2 +-
.../transfer-candidate-list.page.ts | 2 +-
.../transfer-form/transfer-form.page.ts | 4 +-
.../transfer-list-all.page.ts | 2 +-
src/app/util/date-fns.ts | 17 +++
34 files changed, 228 insertions(+), 59 deletions(-)
create mode 100644 src/app/components/calendar-modal/calendar-modal.component.html
create mode 100644 src/app/components/calendar-modal/calendar-modal.component.scss
create mode 100644 src/app/components/calendar-modal/calendar-modal.component.ts
create mode 100644 src/app/components/calendar-modal/calendar-modal.module.ts
create mode 100644 src/app/util/date-fns.ts
diff --git a/package-lock.json b/package-lock.json
index 9add9672..7e2a2b97 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -44,12 +44,10 @@
"chart.js": "^4.1.1",
"cordova-plugin-file": "^7.0.0",
"cordova-plugin-nativestorage": "^2.3.2",
- "date-fns": "^2.29.3",
+ "date-fns": "^3.6.0",
"file-saver": "^2.0.5",
- "ion2-calendar": "^3.5.0",
"ionicons": "^6.0.3",
"mixpanel-browser": "^2.45.0",
- "moment": "^2.30.1",
"ng5-slider": "^1.2.6",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
@@ -7371,15 +7369,13 @@
"dev": true
},
"node_modules/date-fns": {
- "version": "2.29.3",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
- "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
- "engines": {
- "node": ">=0.11"
- },
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "license": "MIT",
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
}
},
"node_modules/date-format": {
@@ -10060,14 +10056,6 @@
"node": ">= 0.4"
}
},
- "node_modules/ion2-calendar": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/ion2-calendar/-/ion2-calendar-3.5.0.tgz",
- "integrity": "sha512-LAd+fd+z95Ftvwa899bErre4ld9Cf/eF3iOd0NmLOGTqbdICi65GnyGAtTLQLdxNuj6arizyh8YC6rxt0m1y5Q==",
- "peerDependencies": {
- "moment": "^2.19.3"
- }
- },
"node_modules/ionicons": {
"version": "6.1.3",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-6.1.3.tgz",
@@ -12129,14 +12117,6 @@
"node": "*"
}
},
- "node_modules/moment": {
- "version": "2.30.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
- "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/package.json b/package.json
index fd0473f0..3d1ee4da 100644
--- a/package.json
+++ b/package.json
@@ -54,12 +54,10 @@
"chart.js": "^4.1.1",
"cordova-plugin-file": "^7.0.0",
"cordova-plugin-nativestorage": "^2.3.2",
- "date-fns": "^2.29.3",
+ "date-fns": "^3.6.0",
"file-saver": "^2.0.5",
- "ion2-calendar": "^3.5.0",
"ionicons": "^6.0.3",
"mixpanel-browser": "^2.45.0",
- "moment": "^2.30.1",
"ng5-slider": "^1.2.6",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index f927ed05..9b069c05 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -67,7 +67,7 @@ import {FulltimeLocationPageModule} from './pages/logged-in/fulltimer/fulltime-l
import { FulltimerSearchPageModule } from './pages/logged-in/fulltimer/fulltimer-search/fulltimer-search.module';
import { StaffPageModule } from './pages/logged-in/pickers/staff/staff.module';
import { DateDropdownModule } from './components/date-dropdown/date-dropdown.module';
-import { CalendarModule } from 'ion2-calendar';
+import { CalendarModalModule } from './components/calendar-modal/calendar-modal.module';
import {CompanyFilterPageModule} from './pages/logged-in/company/company-list/company-filter/company-filter.module';
import { StoreOptionPageModule } from './pages/logged-in/store/store-option/store-option.module';
import { StoreModule } from './components/store/store.module';
@@ -119,7 +119,7 @@ declare global {
IonicModule.forRoot(),
AppRoutingModule,
HttpClientModule,
- CalendarModule,
+ CalendarModalModule,
BrowserTransferStateModule,
IonicStorageModule.forRoot({
name: '__payroll_staff',
diff --git a/src/app/components/appeal-filter/appeal-filter.component.ts b/src/app/components/appeal-filter/appeal-filter.component.ts
index c5ffcf0c..5aa44a92 100644
--- a/src/app/components/appeal-filter/appeal-filter.component.ts
+++ b/src/app/components/appeal-filter/appeal-filter.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
diff --git a/src/app/components/calendar-modal/calendar-modal.component.html b/src/app/components/calendar-modal/calendar-modal.component.html
new file mode 100644
index 00000000..b44acf43
--- /dev/null
+++ b/src/app/components/calendar-modal/calendar-modal.component.html
@@ -0,0 +1,44 @@
+
+
+ {{ title }}
+
+ Cancel
+ Done
+
+
+
+
+
+
+
+
+ From
+
+
+
+
+ To
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/calendar-modal/calendar-modal.component.scss b/src/app/components/calendar-modal/calendar-modal.component.scss
new file mode 100644
index 00000000..97e839e0
--- /dev/null
+++ b/src/app/components/calendar-modal/calendar-modal.component.scss
@@ -0,0 +1,3 @@
+ion-datetime {
+ margin: 0 auto 16px;
+}
diff --git a/src/app/components/calendar-modal/calendar-modal.component.ts b/src/app/components/calendar-modal/calendar-modal.component.ts
new file mode 100644
index 00000000..349d533a
--- /dev/null
+++ b/src/app/components/calendar-modal/calendar-modal.component.ts
@@ -0,0 +1,115 @@
+import { Component, Input, OnInit } from '@angular/core';
+import { ModalController } from '@ionic/angular';
+import { format, parseISO } from 'src/app/util/date-fns';
+
+export interface CalendarDay {
+ dateObj: Date;
+ string: string;
+ unix: number;
+}
+
+export interface CalendarResult extends CalendarDay {
+ from?: CalendarDay;
+ to?: CalendarDay;
+}
+
+export interface CalendarModalOptions {
+ canBackwardsSelected?: boolean;
+ defaultDate?: Date | string;
+ defaultDateRange?: {
+ from?: Date | string;
+ to?: Date | string;
+ };
+ defaultScrollTo?: Date | string;
+ pickMode?: 'single' | 'range';
+ title?: string;
+}
+
+export type CalendarComponentOptions = CalendarModalOptions;
+
+@Component({
+ selector: 'app-calendar-modal',
+ templateUrl: './calendar-modal.component.html',
+ styleUrls: ['./calendar-modal.component.scss'],
+})
+export class CalendarModal implements OnInit {
+ @Input() options: CalendarModalOptions = {};
+
+ fromValue: string;
+ toValue: string;
+ value: string;
+ minDate: string;
+
+ constructor(private modalCtrl: ModalController) {}
+
+ ngOnInit() {
+ const today = new Date();
+ const defaultFrom = this.options.defaultDateRange?.from || this.options.defaultDate || today;
+ const defaultTo = this.options.defaultDateRange?.to || this.options.defaultDate || today;
+
+ this.fromValue = this.toIonDate(defaultFrom);
+ this.toValue = this.toIonDate(defaultTo);
+ this.value = this.toIonDate(this.options.defaultDate || defaultTo);
+
+ if (this.options.canBackwardsSelected === false) {
+ this.minDate = this.toIonDate(today);
+ }
+ }
+
+ get isRangeMode() {
+ return this.options.pickMode === 'range';
+ }
+
+ get title() {
+ return this.options.title || 'Select Date';
+ }
+
+ onFromChange(event) {
+ this.fromValue = event.detail.value;
+ }
+
+ onToChange(event) {
+ this.toValue = event.detail.value;
+ }
+
+ onValueChange(event) {
+ this.value = event.detail.value;
+ }
+
+ dismiss() {
+ this.modalCtrl.dismiss();
+ }
+
+ confirm() {
+ if (this.isRangeMode) {
+ const from = this.toCalendarDay(this.fromValue);
+ const to = this.toCalendarDay(this.toValue);
+
+ this.modalCtrl.dismiss({
+ ...from,
+ from,
+ to,
+ });
+ return;
+ }
+
+ this.modalCtrl.dismiss(this.toCalendarDay(this.value));
+ }
+
+ private toIonDate(value: Date | string): string {
+ const date = value instanceof Date ? value : parseISO(value);
+ const safeDate = Number.isNaN(date.getTime()) ? new Date() : date;
+
+ return format(safeDate, 'yyyy-MM-dd');
+ }
+
+ private toCalendarDay(value: string): CalendarDay {
+ const date = parseISO(value);
+
+ return {
+ dateObj: date,
+ string: format(date, 'yyyy-MM-dd'),
+ unix: Math.floor(date.getTime() / 1000),
+ };
+ }
+}
diff --git a/src/app/components/calendar-modal/calendar-modal.module.ts b/src/app/components/calendar-modal/calendar-modal.module.ts
new file mode 100644
index 00000000..1839867d
--- /dev/null
+++ b/src/app/components/calendar-modal/calendar-modal.module.ts
@@ -0,0 +1,12 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { IonicModule } from '@ionic/angular';
+
+import { CalendarModal } from './calendar-modal.component';
+
+@NgModule({
+ declarations: [CalendarModal],
+ imports: [CommonModule, IonicModule],
+ exports: [CalendarModal],
+})
+export class CalendarModalModule {}
diff --git a/src/app/components/date-dropdown/date-dropdown.component.ts b/src/app/components/date-dropdown/date-dropdown.component.ts
index 8b9d1dc5..7c018f9b 100644
--- a/src/app/components/date-dropdown/date-dropdown.component.ts
+++ b/src/app/components/date-dropdown/date-dropdown.component.ts
@@ -1,6 +1,6 @@
import { Component, forwardRef, Input, OnChanges, OnInit } from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
-import * as dateFns from 'date-fns';
+import * as dateFns from 'src/app/util/date-fns';
import { Platform } from '@ionic/angular';
diff --git a/src/app/components/date-picker/date-picker.component.ts b/src/app/components/date-picker/date-picker.component.ts
index 712ce0ef..f1c4e5c3 100644
--- a/src/app/components/date-picker/date-picker.component.ts
+++ b/src/app/components/date-picker/date-picker.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { PopoverController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-date-picker',
diff --git a/src/app/components/date-popup/date-popup.component.ts b/src/app/components/date-popup/date-popup.component.ts
index 0c0c74b9..947a179e 100644
--- a/src/app/components/date-popup/date-popup.component.ts
+++ b/src/app/components/date-popup/date-popup.component.ts
@@ -1,5 +1,5 @@
import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';
-import {format, parseISO} from "date-fns";
+import {format, parseISO} from "src/app/util/date-fns";
/**
* Display alert message to update app on new version availability
diff --git a/src/app/components/date-range-refinement-list/date-range-refinement-list.component.ts b/src/app/components/date-range-refinement-list/date-range-refinement-list.component.ts
index a88fe9b1..cf35f95e 100644
--- a/src/app/components/date-range-refinement-list/date-range-refinement-list.component.ts
+++ b/src/app/components/date-range-refinement-list/date-range-refinement-list.component.ts
@@ -2,7 +2,7 @@ import { Component, Input, Inject, forwardRef, EventEmitter, Output, OnInit, Opt
import { connectRange } from 'instantsearch.js/es/connectors';
import { BaseWidget, NgAisIndex, NgAisInstantSearch } from 'angular-instantsearch';
import { parseNumberInput, noop } from 'angular-instantsearch/esm2015/utils';
-import {CalendarModal, CalendarModalOptions, CalendarResult} from 'ion2-calendar';
+import {CalendarModal, CalendarModalOptions} from 'src/app/components/calendar-modal/calendar-modal.component';
import { ModalController } from '@ionic/angular';
import {Options} from "ng5-slider";
diff --git a/src/app/components/request-filter/request-filter.component.ts b/src/app/components/request-filter/request-filter.component.ts
index 4e066970..a4588545 100644
--- a/src/app/components/request-filter/request-filter.component.ts
+++ b/src/app/components/request-filter/request-filter.component.ts
@@ -1,6 +1,6 @@
import {Component, Input, OnInit} from '@angular/core';
import { ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-request-filter',
diff --git a/src/app/components/story-filter/story-filter.component.ts b/src/app/components/story-filter/story-filter.component.ts
index 8d675ab9..dd9bbff8 100644
--- a/src/app/components/story-filter/story-filter.component.ts
+++ b/src/app/components/story-filter/story-filter.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-story-filter',
diff --git a/src/app/components/time-picker/time-picker.component.ts b/src/app/components/time-picker/time-picker.component.ts
index 4d1a7024..11c5bb32 100644
--- a/src/app/components/time-picker/time-picker.component.ts
+++ b/src/app/components/time-picker/time-picker.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { PopoverController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-time-picker',
diff --git a/src/app/pages/logged-in/candidate-assign-form/candidate-assign-form.page.ts b/src/app/pages/logged-in/candidate-assign-form/candidate-assign-form.page.ts
index e76c49cc..25d3cfac 100644
--- a/src/app/pages/logged-in/candidate-assign-form/candidate-assign-form.page.ts
+++ b/src/app/pages/logged-in/candidate-assign-form/candidate-assign-form.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
//models
import { Contract } from 'src/app/models/contract';
//services
diff --git a/src/app/pages/logged-in/candidate/candidate-assigned-history/candidate-assigned-history.page.ts b/src/app/pages/logged-in/candidate/candidate-assigned-history/candidate-assigned-history.page.ts
index 08f29788..ce8aca5a 100644
--- a/src/app/pages/logged-in/candidate/candidate-assigned-history/candidate-assigned-history.page.ts
+++ b/src/app/pages/logged-in/candidate/candidate-assigned-history/candidate-assigned-history.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { AlertController, NavController, PopoverController, ToastController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// models
import { Candidate } from 'src/app/models/candidate';
import { Story } from 'src/app/models/request';
diff --git a/src/app/pages/logged-in/candidate/candidate-certificate-form/candidate-certificate-form.page.ts b/src/app/pages/logged-in/candidate/candidate-certificate-form/candidate-certificate-form.page.ts
index f9fe6f6d..81a12002 100644
--- a/src/app/pages/logged-in/candidate/candidate-certificate-form/candidate-certificate-form.page.ts
+++ b/src/app/pages/logged-in/candidate/candidate-certificate-form/candidate-certificate-form.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AlertController, ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
//models
import { Candidate } from 'src/app/models/candidate';
import { CandidateWorkHistory } from 'src/app/models/candidate-work-history';
diff --git a/src/app/pages/logged-in/candidate/candidate-form/candidate-form.page.ts b/src/app/pages/logged-in/candidate/candidate-form/candidate-form.page.ts
index 5ae458de..7a342bf8 100644
--- a/src/app/pages/logged-in/candidate/candidate-form/candidate-form.page.ts
+++ b/src/app/pages/logged-in/candidate/candidate-form/candidate-form.page.ts
@@ -3,7 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ActivatedRoute } from '@angular/router';
import {AlertController, ModalController, NavController, ToastController} from '@ionic/angular';
import { CustomValidator } from 'src/app/validators/custom.validator';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// service
import { CandidateService } from 'src/app/providers/logged-in/candidate.service';
import { UniversityService } from 'src/app/providers/logged-in/university.service';
diff --git a/src/app/pages/logged-in/candidate/candidate-view/candidate-view.page.ts b/src/app/pages/logged-in/candidate/candidate-view/candidate-view.page.ts
index 5dcc242f..f6e16544 100644
--- a/src/app/pages/logged-in/candidate/candidate-view/candidate-view.page.ts
+++ b/src/app/pages/logged-in/candidate/candidate-view/candidate-view.page.ts
@@ -16,7 +16,7 @@ import {
CalendarModalOptions,
CalendarResult,
CalendarComponentOptions
-} from 'ion2-calendar';
+} from 'src/app/components/calendar-modal/calendar-modal.component';
// models
import { Store } from 'src/app/models/store';
diff --git a/src/app/pages/logged-in/candidate/candidate-work-log/log-time-manually/log-time-manually.page.ts b/src/app/pages/logged-in/candidate/candidate-work-log/log-time-manually/log-time-manually.page.ts
index 238b1a69..09bc4735 100644
--- a/src/app/pages/logged-in/candidate/candidate-work-log/log-time-manually/log-time-manually.page.ts
+++ b/src/app/pages/logged-in/candidate/candidate-work-log/log-time-manually/log-time-manually.page.ts
@@ -11,7 +11,7 @@ import { DatePickerComponent } from 'src/app/components/date-picker/date-picker.
import { TimePickerComponent } from 'src/app/components/time-picker/time-picker.component';
//validators
import { CustomValidator } from 'src/app/validators/custom.validator';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
diff --git a/src/app/pages/logged-in/company/company-contract/company-contract-form/company-contract-form.page.ts b/src/app/pages/logged-in/company/company-contract/company-contract-form/company-contract-form.page.ts
index 00279d43..6682f822 100644
--- a/src/app/pages/logged-in/company/company-contract/company-contract-form/company-contract-form.page.ts
+++ b/src/app/pages/logged-in/company/company-contract/company-contract-form/company-contract-form.page.ts
@@ -15,7 +15,7 @@ import { EventService } from 'src/app/providers/event.service';
import { ContractService } from 'src/app/providers/logged-in/contract.service';
import { SentryErrorhandlerService } from 'src/app/providers/sentry.errorhandler.service';
import { CandidateService } from 'src/app/providers/logged-in/candidate.service';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-company-contract-form',
diff --git a/src/app/pages/logged-in/company/company-request-list/company-request-list.page.ts b/src/app/pages/logged-in/company/company-request-list/company-request-list.page.ts
index cef42152..5dccccb3 100644
--- a/src/app/pages/logged-in/company/company-request-list/company-request-list.page.ts
+++ b/src/app/pages/logged-in/company/company-request-list/company-request-list.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { AlertController, IonContent, ModalController, NavController, Platform, ToastController } from '@ionic/angular';
import { Router } from '@angular/router';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// models
import { Company } from 'src/app/models/company';
import { Request } from 'src/app/models/request';
diff --git a/src/app/pages/logged-in/company/request-interview-filter/request-interview-filter.page.ts b/src/app/pages/logged-in/company/request-interview-filter/request-interview-filter.page.ts
index 6f3dae45..5d64cea5 100644
--- a/src/app/pages/logged-in/company/request-interview-filter/request-interview-filter.page.ts
+++ b/src/app/pages/logged-in/company/request-interview-filter/request-interview-filter.page.ts
@@ -1,6 +1,6 @@
import {Component, Input, OnInit} from '@angular/core';
import { ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
@Component({
selector: 'app-request-interview-filter',
diff --git a/src/app/pages/logged-in/email-campaign/email-campaign-form/email-campaign-form.page.ts b/src/app/pages/logged-in/email-campaign/email-campaign-form/email-campaign-form.page.ts
index 75990800..eb60fa78 100644
--- a/src/app/pages/logged-in/email-campaign/email-campaign-form/email-campaign-form.page.ts
+++ b/src/app/pages/logged-in/email-campaign/email-campaign-form/email-campaign-form.page.ts
@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormArray } from '@angular/forms';
import { ModalController, AlertController } from '@ionic/angular';
import { ActivatedRoute } from '@angular/router';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
//services
import { EmailCampaignService } from 'src/app/providers/logged-in/email-campaign.service';
import { AuthService } from 'src/app/providers/auth.service';
diff --git a/src/app/pages/logged-in/fulltimer/fulltimer-form/fulltimer-form.page.ts b/src/app/pages/logged-in/fulltimer/fulltimer-form/fulltimer-form.page.ts
index e6015c4c..320f3361 100644
--- a/src/app/pages/logged-in/fulltimer/fulltimer-form/fulltimer-form.page.ts
+++ b/src/app/pages/logged-in/fulltimer/fulltimer-form/fulltimer-form.page.ts
@@ -3,7 +3,7 @@ import {ActivatedRoute} from '@angular/router';
import {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';
import {AlertController, LoadingController, ModalController, NavController, Platform} from '@ionic/angular';
import { Subscription } from 'rxjs';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// service
import { AuthService } from '../../../../providers/auth.service';
import { CountryService } from 'src/app/providers/logged-in/country.service';
diff --git a/src/app/pages/logged-in/leave-request/leave-request.page.ts b/src/app/pages/logged-in/leave-request/leave-request.page.ts
index 4a702639..a2ca75aa 100644
--- a/src/app/pages/logged-in/leave-request/leave-request.page.ts
+++ b/src/app/pages/logged-in/leave-request/leave-request.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AlertController, ModalController } from '@ionic/angular';
-import { CalendarModal, CalendarModalOptions } from 'ion2-calendar';
+import { CalendarModal, CalendarModalOptions } from 'src/app/components/calendar-modal/calendar-modal.component';
import { AnalyticsService } from 'src/app/providers/analytics.service';
//services
import { AuthService } from 'src/app/providers/auth.service';
diff --git a/src/app/pages/logged-in/leave/leave-request-form/leave-request-form.page.ts b/src/app/pages/logged-in/leave/leave-request-form/leave-request-form.page.ts
index 00df2b86..ef3ad524 100644
--- a/src/app/pages/logged-in/leave/leave-request-form/leave-request-form.page.ts
+++ b/src/app/pages/logged-in/leave/leave-request-form/leave-request-form.page.ts
@@ -3,7 +3,7 @@ import {FormBuilder, FormGroup, Validators} from "@angular/forms";
import {DailyStandupService} from "src/app/providers/logged-in/daily-standup.service";
import {AuthService} from "src/app/providers/auth.service";
import {AlertController, ModalController, NavController} from "@ionic/angular";
-import {CalendarModal, CalendarModalOptions} from "ion2-calendar";
+import {CalendarModal, CalendarModalOptions} from "src/app/components/calendar-modal/calendar-modal.component";
import {StaffLeaveService} from "../../../../providers/logged-in/staff-leave.service";
import {AwsService} from "../../../../providers/aws.service";
import {Subscription} from "rxjs";
diff --git a/src/app/pages/logged-in/reports/valocity/valocity.page.ts b/src/app/pages/logged-in/reports/valocity/valocity.page.ts
index 8bbe4cf8..7d7d2693 100644
--- a/src/app/pages/logged-in/reports/valocity/valocity.page.ts
+++ b/src/app/pages/logged-in/reports/valocity/valocity.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { NavController } from '@ionic/angular';
import { Platform } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// models
import { Staff } from 'src/app/models/staff';
import { AnalyticsService } from 'src/app/providers/analytics.service';
diff --git a/src/app/pages/logged-in/story/job-form/job-form.page.ts b/src/app/pages/logged-in/story/job-form/job-form.page.ts
index 14d95dab..6275c8f2 100644
--- a/src/app/pages/logged-in/story/job-form/job-form.page.ts
+++ b/src/app/pages/logged-in/story/job-form/job-form.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AlertController, ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
//models
import { Job } from 'src/app/models/job';
//services
diff --git a/src/app/pages/logged-in/transfer/transfer-candidate-list/transfer-candidate-list.page.ts b/src/app/pages/logged-in/transfer/transfer-candidate-list/transfer-candidate-list.page.ts
index 2552dea9..fa297906 100644
--- a/src/app/pages/logged-in/transfer/transfer-candidate-list/transfer-candidate-list.page.ts
+++ b/src/app/pages/logged-in/transfer/transfer-candidate-list/transfer-candidate-list.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { AlertController, ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// models
import { Transfer } from 'src/app/models/transfer';
import { TransferCandidate } from 'src/app/models/transfer-candidate';
diff --git a/src/app/pages/logged-in/transfer/transfer-form/transfer-form.page.ts b/src/app/pages/logged-in/transfer/transfer-form/transfer-form.page.ts
index b2884500..f6cc136c 100644
--- a/src/app/pages/logged-in/transfer/transfer-form/transfer-form.page.ts
+++ b/src/app/pages/logged-in/transfer/transfer-form/transfer-form.page.ts
@@ -11,7 +11,7 @@ import {
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ActivatedRoute } from '@angular/router';
import { CustomValidator } from 'src/app/validators/custom.validator';
-import { CalendarModal, CalendarModalOptions } from 'ion2-calendar';
+import { CalendarModal, CalendarModalOptions } from 'src/app/components/calendar-modal/calendar-modal.component';
import { Subscription } from 'rxjs';
// models
import { Transfer } from 'src/app/models/transfer';
@@ -59,7 +59,7 @@ export class TransferFormPage implements OnInit {
public endDate; // max date
public selected; // max date
dateRange: { from: string; to: string; };
- type: 'string'; // 'string' | 'js-date' | 'moment' | 'time' | 'object'
+ type: 'string'; // 'string' | 'js-date' | 'time' | 'object'
public borderLimit: boolean = false;
diff --git a/src/app/pages/logged-in/transfer/transfer-list-all/transfer-list-all.page.ts b/src/app/pages/logged-in/transfer/transfer-list-all/transfer-list-all.page.ts
index 83e141fe..b724c4fc 100644
--- a/src/app/pages/logged-in/transfer/transfer-list-all/transfer-list-all.page.ts
+++ b/src/app/pages/logged-in/transfer/transfer-list-all/transfer-list-all.page.ts
@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { AlertController, ModalController } from '@ionic/angular';
-import { format, parseISO } from 'date-fns';
+import { format, parseISO } from 'src/app/util/date-fns';
// models
import { Transfer } from 'src/app/models/transfer';
import { AnalyticsService } from 'src/app/providers/analytics.service';
diff --git a/src/app/util/date-fns.ts b/src/app/util/date-fns.ts
new file mode 100644
index 00000000..1534f660
--- /dev/null
+++ b/src/app/util/date-fns.ts
@@ -0,0 +1,17 @@
+declare const require: any;
+
+const dateFns = require('date-fns');
+
+export const eachDayOfInterval: (interval: { start: Date | number; end: Date | number }) => Date[] =
+ dateFns.eachDayOfInterval;
+export const endOfMonth: (date: Date | number) => Date = dateFns.endOfMonth;
+export const format: (date: Date | number, formatStr: string, options?: any) => string = dateFns.format;
+export const getDate: (date: Date | number) => number = dateFns.getDate;
+export const getMonth: (date: Date | number) => number = dateFns.getMonth;
+export const getYear: (date: Date | number) => number = dateFns.getYear;
+export const isSameDay: (dateLeft: Date | number, dateRight: Date | number) => boolean = dateFns.isSameDay;
+export const isSameMonth: (dateLeft: Date | number, dateRight: Date | number) => boolean = dateFns.isSameMonth;
+export const isSameYear: (dateLeft: Date | number, dateRight: Date | number) => boolean = dateFns.isSameYear;
+export const isToday: (date: Date | number) => boolean = dateFns.isToday;
+export const parseISO: (argument: string, options?: any) => Date = dateFns.parseISO;
+export const startOfMonth: (date: Date | number) => Date = dateFns.startOfMonth;
From c66bcb435e90ba91a0838ea230e9ae919be11898 Mon Sep 17 00:00:00 2001
From: cerredz <422michaelcerreto@gmail.com>
Date: Fri, 15 May 2026 19:03:21 -0400
Subject: [PATCH 2/2] Normalize selected calendar ranges
---
.../components/calendar-modal/calendar-modal.component.ts | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/app/components/calendar-modal/calendar-modal.component.ts b/src/app/components/calendar-modal/calendar-modal.component.ts
index 349d533a..bace24f2 100644
--- a/src/app/components/calendar-modal/calendar-modal.component.ts
+++ b/src/app/components/calendar-modal/calendar-modal.component.ts
@@ -82,8 +82,10 @@ export class CalendarModal implements OnInit {
confirm() {
if (this.isRangeMode) {
- const from = this.toCalendarDay(this.fromValue);
- const to = this.toCalendarDay(this.toValue);
+ const selectedFrom = this.toCalendarDay(this.fromValue);
+ const selectedTo = this.toCalendarDay(this.toValue);
+ const [from, to] =
+ selectedFrom.unix <= selectedTo.unix ? [selectedFrom, selectedTo] : [selectedTo, selectedFrom];
this.modalCtrl.dismiss({
...from,