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,