Skip to content
This repository was archived by the owner on Jun 1, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { FieldType, FilterCondition, FilterConditionOption } from '../models/index';
import { testFilterCondition } from './filterUtilities';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateEuro);

export const dateEuroFilterCondition: FilterCondition = (options: FilterConditionOption) => {
const searchTerm = Array.isArray(options.searchTerms) && options.searchTerms[0] || '';
if (searchTerm === null || searchTerm === '' || !moment(options.cellValue, FORMAT, true).isValid() || !moment(searchTerm, FORMAT, true).isValid()) {
return false;
}
const dateCell = moment(options.cellValue, FORMAT, true);
const dateSearch = moment(searchTerm, FORMAT, true);

// run the filter condition with date in Unix Timestamp format
return testFilterCondition(options.operator || '==', parseInt(dateCell.format('X'), 10), parseInt(dateSearch.format('X'), 10));
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { FieldType, FilterCondition, FilterConditionOption } from '../models/index';
import { testFilterCondition } from './filterUtilities';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateEuroShort);

export const dateEuroShortFilterCondition: FilterCondition = (options: FilterConditionOption) => {
const searchTerm = Array.isArray(options.searchTerms) && options.searchTerms[0] || '';
if (searchTerm === null || searchTerm === '' || !moment(options.cellValue, FORMAT, true).isValid() || !moment(searchTerm, FORMAT, true).isValid()) {
return false;
}
const dateCell = moment(options.cellValue, FORMAT, true);
const dateSearch = moment(searchTerm, FORMAT, true);

// run the filter condition with date in Unix Timestamp format
return testFilterCondition(options.operator || '==', parseInt(dateCell.format('X'), 10), parseInt(dateSearch.format('X'), 10));
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { booleanFilterCondition } from './booleanFilterCondition';
import { dateEuroShortFilterCondition } from './dateEuroShortFilterCondition';
import { dateEuroFilterCondition } from './dateEuroFilterCondition';
import { dateFilterCondition } from './dateFilterCondition';
import { dateIsoFilterCondition } from './dateIsoFilterCondition';
import { dateUsShortFilterCondition } from './dateUsShortFilterCondition';
Expand Down Expand Up @@ -29,6 +31,14 @@ export const executeMappedCondition: FilterCondition = (options: FilterCondition
return dateUtcFilterCondition(options);
case FieldType.dateIso:
return dateIsoFilterCondition(options);
// all Euro Formats (date/month/year)
case FieldType.dateEuro:
case FieldType.dateTimeEuro:
return dateEuroFilterCondition(options);
case FieldType.dateEuroShort:
case FieldType.dateTimeEuroShort:
return dateEuroShortFilterCondition(options);
// all US Formats (month/date/year)
case FieldType.dateUs:
case FieldType.dateTimeUs:
return dateUsFilterCondition(options);
Expand Down
4 changes: 4 additions & 0 deletions src/app/modules/angular-slickgrid/filter-conditions/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { FilterConditionOption } from './../models/filterConditionOption.interface';
import { booleanFilterCondition } from './booleanFilterCondition';
import { dateEuroFilterCondition } from './dateEuroFilterCondition';
import { dateEuroShortFilterCondition } from './dateEuroShortFilterCondition';
import { dateFilterCondition } from './dateFilterCondition';
import { dateIsoFilterCondition } from './dateIsoFilterCondition';
import { dateUsFilterCondition } from './dateUsFilterCondition';
Expand All @@ -15,6 +17,8 @@ export const FilterConditions = {
executeMappedCondition,
booleanFilter: booleanFilterCondition,
collectionSearchFilter: collectionSearchFilterCondition,
dateEuroFilter: dateEuroFilterCondition,
dateEuroShortFilter: dateEuroShortFilterCondition,
dateFilter: dateFilterCondition,
dateIsoFilter: dateIsoFilterCondition,
dateUtcFilter: dateUtcFilterCondition,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Column } from '../../models';
import { dateEuroFormatter } from '../dateEuroFormatter';

describe('the DateEuro Formatter', () => {
it('should return null when no value is provided', () => {
const value = null;
const result = dateEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe(null);
});

it('should return original string when input value provided is not a valid date', () => {
const value = 'TBD';
const result = dateEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('TBD');
});

it('should return a formatted date value without time when valid date value is provided', () => {
const value = new Date('2019-05-03T00:00:01');
const result = dateEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('03/05/2019');
});

it('should return a formatted date value without time when valid date value is provided', () => {
const value = new Date('2019-05-01T02:36:07');
const result = dateEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Column } from '../../models';
import { dateTimeEuroAmPmFormatter } from '../dateTimeEuroAmPmFormatter';

describe('the DateTimeShortEuro Formatter', () => {
it('should return null when no value is provided', () => {
const value = null;
const result = dateTimeEuroAmPmFormatter(0, 0, value, {} as Column, {});
expect(result).toBe(null);
});

it('should return original string when input value provided is not a valid date', () => {
const value = 'TBD';
const result = dateTimeEuroAmPmFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('TBD');
});

it('should return a formatted date value in the morning when valid date value is provided', () => {
const value = new Date('2019-05-01T02:36:07');
const result = dateTimeEuroAmPmFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 02:36:07 am');
});

it('should return a formatted date value in the afternoon when valid date value is provided', () => {
const value = new Date('2019-05-01T20:36:07');
const result = dateTimeEuroAmPmFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 08:36:07 pm');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Column } from '../../models';
import { dateTimeEuroFormatter } from '../dateTimeEuroFormatter';

describe('the DateTimeEuro Formatter', () => {
it('should return null when no value is provided', () => {
const value = null;
const result = dateTimeEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe(null);
});

it('should return original string when input value provided is not a valid date', () => {
const value = 'TBD';
const result = dateTimeEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('TBD');
});

it('should return a formatted date value in the morning when valid date value is provided', () => {
const value = new Date('2019-05-01T02:36:07');
const result = dateTimeEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 02:36:07');
});

it('should return a formatted date value in the afternoon when valid date value is provided', () => {
const value = new Date('2019-05-01T20:36:07');
const result = dateTimeEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 20:36:07');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Column } from '../../models';
import { dateTimeShortEuroFormatter } from '../dateTimeShortEuroFormatter';

describe('the DateTimeShortEuro Formatter', () => {
it('should return null when no value is provided', () => {
const value = null;
const result = dateTimeShortEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe(null);
});

it('should return original string when input value provided is not a valid date', () => {
const value = 'TBD';
const result = dateTimeShortEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('TBD');
});

it('should return a formatted date value in the morning when valid date value is provided', () => {
const value = new Date('2019-05-01T02:36:07');
const result = dateTimeShortEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 02:36');
});

it('should return a formatted date value in the afternoon when valid date value is provided', () => {
const value = new Date('2019-05-01T20:36:07');
const result = dateTimeShortEuroFormatter(0, 0, value, {} as Column, {});
expect(result).toBe('01/05/2019 20:36');
});
});
10 changes: 10 additions & 0 deletions src/app/modules/angular-slickgrid/formatters/dateEuroFormatter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Column, FieldType, Formatter } from './../models/index';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateEuro);

export const dateEuroFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any) => {
const isDateValid = moment(value, FORMAT, false).isValid();
return (value && isDateValid) ? moment(value).format(FORMAT) : value;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Column, FieldType, Formatter } from './../models/index';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateTimeEuroAmPm);

export const dateTimeEuroAmPmFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any) => {
const isDateValid = moment(value, FORMAT, false).isValid();
return (value && isDateValid) ? moment(value).format(FORMAT) : value;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Column, FieldType, Formatter } from './../models/index';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateTimeEuro);

export const dateTimeEuroFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any) => {
const isDateValid = moment(value, FORMAT, false).isValid();
return (value && isDateValid) ? moment(value).format(FORMAT) : value;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Column, FieldType, Formatter } from './../models/index';
import { mapMomentDateFormatWithFieldType } from './../services/utilities';
import * as moment_ from 'moment-mini';
const moment = moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670
const FORMAT = mapMomentDateFormatWithFieldType(FieldType.dateTimeShortEuro);

export const dateTimeShortEuroFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any) => {
const isDateValid = moment(value, FORMAT, false).isValid();
return (value && isDateValid) ? moment(value).format(FORMAT) : value;
};
16 changes: 16 additions & 0 deletions src/app/modules/angular-slickgrid/formatters/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ import { checkmarkFormatter } from './checkmarkFormatter';
import { collectionFormatter } from './collectionFormatter';
import { collectionEditorFormatter } from './collectionEditorFormatter';
import { complexObjectFormatter } from './complexObjectFormatter';
import { dateEuroFormatter } from './dateEuroFormatter';
import { dateIsoFormatter } from './dateIsoFormatter';
import { dateTimeEuroAmPmFormatter } from './dateTimeEuroAmPmFormatter';
import { dateTimeEuroFormatter } from './dateTimeEuroFormatter';
import { dateTimeIsoFormatter } from './dateTimeIsoFormatter';
import { dateTimeIsoAmPmFormatter } from './dateTimeIsoAmPmFormatter';
import { dateTimeUsAmPmFormatter } from './dateTimeUsAmPmFormatter';
import { dateTimeUsFormatter } from './dateTimeUsFormatter';
import { dateTimeShortEuroFormatter } from './dateTimeShortEuroFormatter';
import { dateTimeShortIsoFormatter } from './dateTimeShortIsoFormatter';
import { dateTimeShortUsFormatter } from './dateTimeShortUsFormatter';
import { dateUsFormatter } from './dateUsFormatter';
Expand Down Expand Up @@ -99,6 +103,18 @@ export const Formatters = {
/** Takes a Date object and displays it as an ISO Date+Time+(am/pm) format */
dateTimeIsoAmPm: dateTimeIsoAmPmFormatter,

/** Takes a Date object and displays it as an Euro Date format */
dateEuro: dateEuroFormatter,

/** Takes a Date object and displays it as an Euro Date+Time format */
dateTimeEuro: dateTimeEuroFormatter,

/** Takes a Date object and displays it as an Euro Date+Time (without seconds) format */
dateTimeShortEuro: dateTimeShortEuroFormatter,

/** Takes a Date object and displays it as an Euro Date+Time+(am/pm) format */
dateTimeEuroAmPm: dateTimeEuroAmPmFormatter,

/** Takes a Date object and displays it as an US Date format */
dateUs: dateUsFormatter,

Expand Down
27 changes: 27 additions & 0 deletions src/app/modules/angular-slickgrid/models/fieldType.enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,33 @@ export enum FieldType {
/** Format: 'YYYY-MM-DD HH:mm' => 2001-01-01 14:01 */
dateTimeShortIso,

/** Format (Euro): 'DD/MM/YYYY' => 02/28/2001 */
dateEuro,

/** Format (Euro): 'D/M/YY' => 2/28/12 */
dateEuroShort,

/** Format (Euro): 'DD/MM/YYYY HH:mm' => 02/28/2001 13:01 */
dateTimeShortEuro,

/** Format (Euro): 'DD/MM/YYYY HH:mm:ss' => 02/28/2001 13:01:01 */
dateTimeEuro,

/** Format (Euro): 'DD/MM/YYYY hh:mm:ss a' => 02/28/2001 11:01:01 pm */
dateTimeEuroAmPm,

/** Format (Euro): 'DD/MM/YYYY hh:mm:ss A' => 02/28/2001 11:01:01 PM */
dateTimeEuroAM_PM,

/** Format (Euro): 'D/M/YY H:m:s' => 2/28/14 14:1:2 */
dateTimeEuroShort,

/** Format (Euro): 'D/M/YY h:m:s a' => 2/28/14 1:2:10 pm */
dateTimeEuroShortAmPm,

/** Format (Euro): 'D/M/YY h:m:s A' => 2/28/14 14:1:1 PM */
dateTimeEuroShortAM_PM,

/** Format: 'MM/DD/YYYY' => 02/28/2001 */
dateUs,

Expand Down
62 changes: 61 additions & 1 deletion src/app/modules/angular-slickgrid/services/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ export function decimalFormatted(input: number | string, minDecimal?: number, ma

export function formatNumber(input: number | string, minDecimal?: number, maxDecimal?: number, displayNegativeNumberWithParentheses?: boolean, symbolPrefix = '', symbolSuffix = ''): string {
if (isNaN(+input)) {
return input;
return input as string;
}

const calculatedValue = ((Math.round(parseFloat(input as string) * 1000000) / 1000000));
Expand Down Expand Up @@ -214,6 +214,32 @@ export function mapMomentDateFormatWithFieldType(fieldType: FieldType): string {
case FieldType.dateTimeIsoAM_PM:
map = 'YYYY-MM-DD hh:mm:ss A';
break;
// all Euro Formats (date/month/year)
case FieldType.dateEuro:
map = 'DD/MM/YYYY';
break;
case FieldType.dateEuroShort:
map = 'D/M/YY';
break;
case FieldType.dateTimeEuro:
map = 'DD/MM/YYYY HH:mm:ss';
break;
case FieldType.dateTimeShortEuro:
map = 'DD/MM/YYYY HH:mm';
break;
case FieldType.dateTimeEuroAmPm:
map = 'DD/MM/YYYY hh:mm:ss a';
break;
case FieldType.dateTimeEuroAM_PM:
map = 'DD/MM/YYYY hh:mm:ss A';
break;
case FieldType.dateTimeEuroShort:
map = 'D/M/YY H:m:s';
break;
case FieldType.dateTimeEuroShortAmPm:
map = 'D/M/YY h:m:s a';
break;
// all US Formats (month/date/year)
case FieldType.dateUs:
map = 'MM/DD/YYYY';
break;
Expand Down Expand Up @@ -293,6 +319,32 @@ export function mapFlatpickrDateFormatWithFieldType(fieldType: FieldType): strin
case FieldType.dateTimeIsoAM_PM:
map = 'Y-m-d h:i:S K';
break;
// all Euro Formats (date/month/year)
case FieldType.dateEuro:
map = 'd/m/Y';
break;
case FieldType.dateEuroShort:
map = 'd/m/y';
break;
case FieldType.dateTimeEuro:
map = 'd/m/Y H:i:S';
break;
case FieldType.dateTimeShortEuro:
map = 'd/m/y H:i';
break;
case FieldType.dateTimeEuroAmPm:
map = 'd/m/Y h:i:S K'; // there is no lowercase in Flatpickr :(
break;
case FieldType.dateTimeEuroAM_PM:
map = 'd/m/Y h:i:s K';
break;
case FieldType.dateTimeEuroShort:
map = 'd/m/y H:i:s';
break;
case FieldType.dateTimeEuroShortAmPm:
map = 'd/m/y h:i:s K'; // there is no lowercase in Flatpickr :(
break;
// all US Formats (month/date/year)
case FieldType.dateUs:
map = 'm/d/Y';
break;
Expand Down Expand Up @@ -412,6 +464,14 @@ export function mapOperatorByFieldType(fieldType: FieldType | string): OperatorT
case FieldType.dateTimeIso:
case FieldType.dateTimeIsoAmPm:
case FieldType.dateTimeIsoAM_PM:
case FieldType.dateEuro:
case FieldType.dateEuroShort:
case FieldType.dateTimeEuro:
case FieldType.dateTimeEuroAmPm:
case FieldType.dateTimeEuroAM_PM:
case FieldType.dateTimeEuroShort:
case FieldType.dateTimeEuroShortAmPm:
case FieldType.dateTimeEuroShortAM_PM:
case FieldType.dateUs:
case FieldType.dateUsShort:
case FieldType.dateTimeUs:
Expand Down
Loading