chore: date time variables

This commit is contained in:
katherinehhh 2025-04-22 11:17:41 +08:00
parent ffdd03b4bc
commit 06f57e3b0f
4 changed files with 104 additions and 56 deletions

View File

@ -210,36 +210,17 @@ export const getDateRanges = (props?: {
}; };
return { return {
now: () => toString(dayjs()), now: () => toString(dayjs()),
today: (params?: any) => withParams(toString([getStart(0, 'day'), getEnd(0, 'day')]), params), today: () => toString(getStart(0, 'day')),
yesterday: (params?: any) => withParams(toString([getStart(-1, 'day'), getEnd(-1, 'day')]), params), yesterday: () => toString(getStart(-1, 'day')),
tomorrow: (params?: any) => withParams(toString([getStart(1, 'day'), getEnd(1, 'day')]), params), tomorrow: () => toString(getStart(1, 'day')),
thisWeek: (params?: any) => withParams(toString([getStart(0, 'isoWeek'), getEnd(0, 'isoWeek')]), params),
lastWeek: (params?: any) => withParams(toString([getStart(-1, 'isoWeek'), getEnd(-1, 'isoWeek')]), params),
nextWeek: (params?: any) => withParams(toString([getStart(1, 'isoWeek'), getEnd(1, 'isoWeek')]), params),
thisIsoWeek: (params?: any) => withParams(toString([getStart(0, 'isoWeek'), getEnd(0, 'isoWeek')]), params),
lastIsoWeek: (params?: any) => withParams(toString([getStart(-1, 'isoWeek'), getEnd(-1, 'isoWeek')]), params),
nextIsoWeek: (params?: any) => withParams(toString([getStart(1, 'isoWeek'), getEnd(1, 'isoWeek')]), params),
thisMonth: (params?: any) => withParams(toString([getStart(0, 'month'), getEnd(0, 'month')]), params),
lastMonth: (params?: any) => withParams(toString([getStart(-1, 'month'), getEnd(-1, 'month')]), params),
nextMonth: (params?: any) => withParams(toString([getStart(1, 'month'), getEnd(1, 'month')]), params),
thisQuarter: (params?: any) => withParams(toString([getStart(0, 'quarter'), getEnd(0, 'quarter')]), params),
lastQuarter: (params?: any) => withParams(toString([getStart(-1, 'quarter'), getEnd(-1, 'quarter')]), params),
nextQuarter: (params?: any) => withParams(toString([getStart(1, 'quarter'), getEnd(1, 'quarter')]), params),
thisYear: (params?: any) => withParams(toString([getStart(0, 'year'), getEnd(0, 'year')]), params),
lastYear: (params?: any) => withParams(toString([getStart(-1, 'year'), getEnd(-1, 'year')]), params),
nextYear: (params?: any) => withParams(toString([getStart(1, 'year'), getEnd(1, 'year')]), params),
last7Days: (params?: any) => withParams(toString([getStart(-6, 'days'), getEnd(0, 'days')]), params),
next7Days: (params?: any) => withParams(toString([getStart(1, 'day'), getEnd(7, 'days')]), params),
last30Days: (params?: any) => withParams(toString([getStart(-29, 'days'), getEnd(0, 'days')]), params),
next30Days: (params?: any) => withParams(toString([getStart(1, 'day'), getEnd(30, 'days')]), params),
last90Days: (params?: any) => withParams(toString([getStart(-89, 'days'), getEnd(0, 'days')]), params),
next90Days: (params?: any) => withParams(toString([getStart(1, 'day'), getEnd(90, 'days')]), params),
}; };
} }
return { return {
now: () => dayjs().toISOString(), now: () => dayjs().toISOString(),
today: (params?: any) => withParams([getStart(0, 'day'), getEnd(0, 'day')], params), today: (params?: any) => getStart(0, 'day').toISOString(),
// today: (params?: any) => withParams([getStart(0, 'day'), getEnd(0, 'day')], params),
yesterday: (params?: any) => withParams([getStart(-1, 'day'), getEnd(-1, 'day')], params), yesterday: (params?: any) => withParams([getStart(-1, 'day'), getEnd(-1, 'day')], params),
tomorrow: (params?: any) => withParams([getStart(1, 'day'), getEnd(1, 'day')], params), tomorrow: (params?: any) => withParams([getStart(1, 'day'), getEnd(1, 'day')], params),
thisWeek: (params?: any) => withParams([getStart(0, 'isoWeek'), getEnd(0, 'isoWeek')], params), thisWeek: (params?: any) => withParams([getStart(0, 'isoWeek'), getEnd(0, 'isoWeek')], params),

View File

@ -216,9 +216,9 @@ export const useDateVariable = ({ operator, schema, noDisabled }: Props) => {
* `日期变量` * `日期变量`
* @returns * @returns
*/ */
export const useDatetimeVariableContext = () => { export const useDatetimeVariableContext = (shouldBeString = false) => {
const { utc = true } = useDatePickerContext(); const { utc = true } = useDatePickerContext();
const datetimeCtx = useMemo(() => getDateRanges({ shouldBeString: true, utc }), [utc]); const datetimeCtx = useMemo(() => getDateRanges({ shouldBeString, utc }), [utc]);
return { return {
datetimeCtx, datetimeCtx,
@ -226,6 +226,9 @@ export const useDatetimeVariableContext = () => {
}; };
/** /**
* @deprecated
* hook 使 `useDateTimeVariables`
*
* `日期变量` * `日期变量`
* @param param0 * @param param0
* @returns * @returns
@ -244,163 +247,218 @@ export const useDatetimeVariable = ({ operator, schema, noDisabled, targetFieldS
key: 'now', key: 'now',
value: 'now', value: 'now',
label: t('Current time'), label: t('Current time'),
disabled: noDisabled ? false : schema?.['x-component'] !== 'DatePicker' || operatorValue === '$dateBetween', disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'yesterday', key: 'yesterday',
value: 'yesterday', value: 'yesterday',
label: t('Yesterday'), label: t('Yesterday'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'today', key: 'today',
value: 'today', value: 'today',
label: t('Today'), label: t('Today'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'tomorrow', key: 'tomorrow',
value: 'tomorrow', value: 'tomorrow',
label: t('Tomorrow'), label: t('Tomorrow'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'lastIsoWeek', key: 'lastIsoWeek',
value: 'lastIsoWeek', value: 'lastIsoWeek',
label: t('Last week'), label: t('Last week'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'thisIsoWeek', key: 'thisIsoWeek',
value: 'thisIsoWeek', value: 'thisIsoWeek',
label: t('This week'), label: t('This week'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'nextIsoWeek', key: 'nextIsoWeek',
value: 'nextIsoWeek', value: 'nextIsoWeek',
label: t('Next week'), label: t('Next week'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'lastMonth', key: 'lastMonth',
value: 'lastMonth', value: 'lastMonth',
label: t('Last month'), label: t('Last month'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'thisMonth', key: 'thisMonth',
value: 'thisMonth', value: 'thisMonth',
label: t('This month'), label: t('This month'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'nextMonth', key: 'nextMonth',
value: 'nextMonth', value: 'nextMonth',
label: t('Next month'), label: t('Next month'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'lastQuarter', key: 'lastQuarter',
value: 'lastQuarter', value: 'lastQuarter',
label: t('Last quarter'), label: t('Last quarter'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'thisQuarter', key: 'thisQuarter',
value: 'thisQuarter', value: 'thisQuarter',
label: t('This quarter'), label: t('This quarter'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'nextQuarter', key: 'nextQuarter',
value: 'nextQuarter', value: 'nextQuarter',
label: t('Next quarter'), label: t('Next quarter'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'lastYear', key: 'lastYear',
value: 'lastYear', value: 'lastYear',
label: t('Last year'), label: t('Last year'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'thisYear', key: 'thisYear',
value: 'thisYear', value: 'thisYear',
label: t('This year'), label: t('This year'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'nextYear', key: 'nextYear',
value: 'nextYear', value: 'nextYear',
label: t('Next year'), label: t('Next year'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'last7Days', key: 'last7Days',
value: 'last7Days', value: 'last7Days',
label: t('Last 7 days'), label: t('Last 7 days'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'next7Days', key: 'next7Days',
value: 'next7Days', value: 'next7Days',
label: t('Next 7 days'), label: t('Next 7 days'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'last30Days', key: 'last30Days',
value: 'last30Days', value: 'last30Days',
label: t('Last 30 days'), label: t('Last 30 days'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'next30Days', key: 'next30Days',
value: 'next30Days', value: 'next30Days',
label: t('Next 30 days'), label: t('Next 30 days'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'last90Days', key: 'last90Days',
value: 'last90Days', value: 'last90Days',
label: t('Last 90 days'), label: t('Last 90 days'),
disabled, disabled: true,
operators: datetime, operators: datetime,
}, },
{ {
key: 'next90Days', key: 'next90Days',
value: 'next90Days', value: 'next90Days',
label: t('Next 90 days'), label: t('Next 90 days'),
disabled, disabled: true,
operators: datetime,
},
];
return {
label: t('Date variables(Deprecated)'),
value: '$nDate',
key: '$nDate',
disabled: true,
children: dateOptions,
};
}, [schema?.['x-component'], targetFieldSchema]);
const { datetimeCtx } = useDatetimeVariableContext(true);
return {
datetimeSettings,
datetimeCtx,
};
};
/**
* `日期变量`
* @param param0
* @returns
*/
export const useDateTimeVariables = ({ operator, schema, noDisabled, targetFieldSchema }: Props = {}) => {
const { t } = useTranslation();
const { getOperator } = useOperators();
const dateTimePresetSettings = useMemo(() => {
const operatorValue = operator?.value || getOperator(targetFieldSchema?.name) || '';
const dateOptions = [
{
key: 'now',
value: 'now',
label: t('Current time'),
operators: datetime,
},
{
key: 'yesterday',
value: 'yesterday',
label: t('Yesterday'),
operators: datetime,
},
{
key: 'today',
value: 'today',
label: t('Today'),
operators: datetime,
},
{
key: 'tomorrow',
value: 'tomorrow',
label: t('Tomorrow'),
operators: datetime, operators: datetime,
}, },
]; ];
return { return {
label: t('Date variables'), label: t('Date variables'),
value: '$nDate', value: '$nDateTime',
key: '$nDate', key: '$nDateTime',
disabled: dateOptions.every((option) => option.disabled),
children: dateOptions, children: dateOptions,
}; };
}, [schema?.['x-component'], targetFieldSchema]); }, [schema?.['x-component'], targetFieldSchema]);
@ -408,7 +466,7 @@ export const useDatetimeVariable = ({ operator, schema, noDisabled, targetFieldS
const { datetimeCtx } = useDatetimeVariableContext(); const { datetimeCtx } = useDatetimeVariableContext();
return { return {
datetimeSettings, dateTimePresetSettings,
datetimeCtx, dateTimePresetCtx: datetimeCtx,
}; };
}; };

View File

@ -13,7 +13,7 @@ import { useMemo } from 'react';
import { useVariables } from '../../../'; import { useVariables } from '../../../';
import { CollectionFieldOptions_deprecated } from '../../../collection-manager'; import { CollectionFieldOptions_deprecated } from '../../../collection-manager';
import { useAPITokenVariable } from './useAPITokenVariable'; import { useAPITokenVariable } from './useAPITokenVariable';
import { useDatetimeVariable } from './useDateVariable'; import { useDatetimeVariable, useDateTimeVariables } from './useDateVariable';
import { useCurrentFormVariable } from './useFormVariable'; import { useCurrentFormVariable } from './useFormVariable';
import { useCurrentObjectVariable } from './useIterationVariable'; import { useCurrentObjectVariable } from './useIterationVariable';
import { useParentObjectVariable } from './useParentIterationVariable'; import { useParentObjectVariable } from './useParentIterationVariable';
@ -77,6 +77,7 @@ export const useVariableOptions = ({
}); });
const { apiTokenSettings } = useAPITokenVariable({ noDisabled }); const { apiTokenSettings } = useAPITokenVariable({ noDisabled });
const { datetimeSettings } = useDatetimeVariable({ operator, schema: uiSchema, noDisabled: true, targetFieldSchema }); const { datetimeSettings } = useDatetimeVariable({ operator, schema: uiSchema, noDisabled: true, targetFieldSchema });
const { dateTimePresetSettings } = useDateTimeVariables();
const { currentFormSettings, shouldDisplayCurrentForm } = useCurrentFormVariable({ const { currentFormSettings, shouldDisplayCurrentForm } = useCurrentFormVariable({
schema: uiSchema, schema: uiSchema,
collectionField, collectionField,
@ -128,6 +129,7 @@ export const useVariableOptions = ({
currentRoleSettings, currentRoleSettings,
apiTokenSettings, apiTokenSettings,
datetimeSettings, datetimeSettings,
dateTimePresetSettings,
shouldDisplayCurrentForm && currentFormSettings, shouldDisplayCurrentForm && currentFormSettings,
shouldDisplayCurrentObject && currentObjectSettings, shouldDisplayCurrentObject && currentObjectSettings,
shouldDisplayParentObject && parentObjectSettings, shouldDisplayParentObject && parentObjectSettings,

View File

@ -10,7 +10,7 @@
import { dayjs } from '@nocobase/utils/client'; import { dayjs } from '@nocobase/utils/client';
import { useMemo } from 'react'; import { useMemo } from 'react';
import { DEFAULT_DATA_SOURCE_KEY } from '../../data-source/data-source/DataSourceManager'; import { DEFAULT_DATA_SOURCE_KEY } from '../../data-source/data-source/DataSourceManager';
import { useCurrentUserVariable, useDatetimeVariable } from '../../schema-settings'; import { useCurrentUserVariable, useDatetimeVariable, useDateTimeVariables } from '../../schema-settings';
import { useAPITokenVariable } from '../../schema-settings/VariableInput/hooks/useAPITokenVariable'; import { useAPITokenVariable } from '../../schema-settings/VariableInput/hooks/useAPITokenVariable';
import { useCurrentRoleVariable } from '../../schema-settings/VariableInput/hooks/useRoleVariable'; import { useCurrentRoleVariable } from '../../schema-settings/VariableInput/hooks/useRoleVariable';
import { useURLSearchParamsVariable } from '../../schema-settings/VariableInput/hooks/useURLSearchParamsVariable'; import { useURLSearchParamsVariable } from '../../schema-settings/VariableInput/hooks/useURLSearchParamsVariable';
@ -26,6 +26,8 @@ const useBuiltInVariables = () => {
const { currentRoleCtx } = useCurrentRoleVariable(); const { currentRoleCtx } = useCurrentRoleVariable();
const { apiTokenCtx } = useAPITokenVariable(); const { apiTokenCtx } = useAPITokenVariable();
const { datetimeCtx } = useDatetimeVariable(); const { datetimeCtx } = useDatetimeVariable();
const { dateTimePresetCtx } = useDateTimeVariables();
const { urlSearchParamsCtx, name: urlSearchParamsName, defaultValue } = useURLSearchParamsVariable(); const { urlSearchParamsCtx, name: urlSearchParamsName, defaultValue } = useURLSearchParamsVariable();
const envVariableCtx = useGlobalVariableCtx('$env'); const envVariableCtx = useGlobalVariableCtx('$env');
const builtinVariables: VariableOption[] = useMemo(() => { const builtinVariables: VariableOption[] = useMemo(() => {
@ -60,6 +62,10 @@ const useBuiltInVariables = () => {
name: '$nDate', name: '$nDate',
ctx: datetimeCtx, ctx: datetimeCtx,
}, },
{
name: '$nDateTime',
ctx: dateTimePresetCtx,
},
/** /**
* @deprecated * @deprecated
* `$date` * `$date`
@ -68,6 +74,7 @@ const useBuiltInVariables = () => {
name: '$date', name: '$date',
ctx: datetimeCtx, ctx: datetimeCtx,
}, },
/** /**
* @deprecated * @deprecated
* `$system` * `$system`