| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- export interface DetailDateRange {
- startDate?: string;
- endDate?: string;
- }
- type NullableValue<T> = T | undefined | null | '';
- export function pickDetailValue<T>(...values: NullableValue<T>[]): T | undefined {
- for (const value of values) {
- if (value !== undefined && value !== null && value !== '') {
- return value as T;
- }
- }
- return undefined;
- }
- export function pickDetailArrayValue<T>(...values: Array<T[] | undefined | null>): T[] | undefined {
- for (const value of values) {
- if (Array.isArray(value) && value.length) {
- return value;
- }
- }
- return undefined;
- }
- export function mergeDetailDateRange(
- baseRange: DetailDateRange = {},
- scopedRange: DetailDateRange = {},
- ): DetailDateRange {
- const startCandidates = [baseRange.startDate, scopedRange.startDate].filter(Boolean).sort();
- const endCandidates = [baseRange.endDate, scopedRange.endDate].filter(Boolean).sort();
- const startDate = startCandidates[startCandidates.length - 1];
- const endDate = endCandidates[0];
- if (startDate && endDate && startDate > endDate) {
- return {
- startDate: pickDetailValue(scopedRange.startDate, baseRange.startDate),
- endDate: pickDetailValue(scopedRange.endDate, baseRange.endDate),
- };
- }
- return { startDate, endDate };
- }
|