Add periodFromNow JS function

Fixes #1066
This commit is contained in:
Sipke Schoorstra 2021-07-24 13:58:10 +02:00
parent 11de05173e
commit 43973b408c
3 changed files with 69 additions and 13 deletions

View file

@ -24,6 +24,10 @@ namespace Elsa.Scripting.JavaScript.Handlers
engine.SetValue(
"instantFromDateTimeUtc",
(Func<DateTime, Instant>) Instant.FromDateTimeUtc);
engine.SetValue(
"instantFromUtc",
(Func<int, int, int, int, int, int, Instant>) Instant.FromUtc);
engine.SetValue(
"currentInstant",
@ -55,12 +59,12 @@ namespace Elsa.Scripting.JavaScript.Handlers
);
engine.SetValue(
"plus",
"addDurationTo",
(Func<Instant, Duration, Instant>) ((instant, duration) => instant.Plus(duration))
);
engine.SetValue(
"minus",
"subtractDurationFrom",
(Func<Instant, Duration, Instant>) ((instant, duration) => instant.Minus(duration))
);
@ -86,7 +90,7 @@ namespace Elsa.Scripting.JavaScript.Handlers
engine.SetValue(
"formatInstant",
(Func<Instant, string, CultureInfo, string>) ((instant, format, cultureInfo) =>
(Func<Instant, string, CultureInfo?, string>) ((instant, format, cultureInfo) =>
instant.ToString(format, cultureInfo ?? CultureInfo.InvariantCulture))
);
@ -99,18 +103,30 @@ namespace Elsa.Scripting.JavaScript.Handlers
"instantFromLocalDate",
(Func<LocalDate, Instant>) (value => value.AtStartOfDayInZone(DateTimeZone.Utc).ToInstant())
);
engine.SetValue(
"durationBetween",
(Func<Instant, Instant, Duration>) ((a, b) => a - b)
);
engine.SetValue(
"periodFromNow",
(Func<Instant, Period>) GetPeriodFromNow
);
return Task.CompletedTask;
}
private LocalDateTime GetStartOfMonth(Instant instant)
private LocalDateTime GetStartOfMonth(Instant instant) => GetStartOfMonth(instant.InUtc().LocalDateTime);
private LocalDateTime GetStartOfMonth(LocalDateTime localDateTime) => localDateTime.With(DateAdjusters.StartOfMonth);
private Period GetPeriodFromNow(Instant pastInstant)
{
return GetStartOfMonth(instant.InUtc().LocalDateTime);
}
private LocalDateTime GetStartOfMonth(LocalDateTime localDateTime)
{
return localDateTime.With(DateAdjusters.StartOfMonth);
var now = _clock.GetCurrentInstant();
var today = now.InUtc().Date;
var pastDate = pastInstant.InUtc().Date;
var period = Period.Between(pastDate, today);
return period;
}
}
}

View file

@ -0,0 +1,42 @@
using System.Threading;
using System.Threading.Tasks;
using Elsa.Scripting.JavaScript.Events;
using Elsa.Services;
using MediatR;
namespace Elsa.Scripting.JavaScript.Handlers
{
public class RenderJavaScriptDateTimeTypeDefinitions : INotificationHandler<RenderingTypeScriptDefinitions>
{
private readonly IActivityTypeService _activityTypeService;
public RenderJavaScriptDateTimeTypeDefinitions(IActivityTypeService activityTypeService)
{
_activityTypeService = activityTypeService;
}
public async Task Handle(RenderingTypeScriptDefinitions notification, CancellationToken cancellationToken)
{
var output = notification.Output;
output.AppendLine("declare function instantFromDateTimeUtc(dateTime: DateTime): Instant");
output.AppendLine("declare function instantFromUtc(year: number, month: number, day: number, hour?: number, minute?: number, second?: number): Instant");
output.AppendLine("declare function currentInstant(): Instant;");
output.AppendLine("declare function currentYear(): number;");
output.AppendLine("declare function startOfMonth(instant?: Instant): LocalDate;");
output.AppendLine("declare function endOfMonth(instant?: Instant): LocalDate;");
output.AppendLine("declare function startOfPreviousMonth(instant?: Instant): LocalDate;");
output.AppendLine("declare function addDurationTo(instant: Instant, duration: Duration): Instant;");
output.AppendLine("declare function subtractDurationFrom(instant: Instant, duration: Duration): Instant;");
output.AppendLine("declare function durationFromSeconds(seconds: number): Duration;");
output.AppendLine("declare function durationFromMinutes(minutes: number): Duration;");
output.AppendLine("declare function durationFromHours(hours: number): Duration;");
output.AppendLine("declare function durationFromDays(days: number): Duration;");
output.AppendLine("declare function formatInstant(instant: Instant, format: string, culture?: CultureInfo): string;");
output.AppendLine("declare function localDateFromInstant(instant: Instant): LocalDate;");
output.AppendLine("declare function instantFromLocalDate(localDate: LocalDate): LocalDate;");
output.AppendLine("declare function durationBetween(a: Instant, b: Instant): Duration;");
output.AppendLine("declare function periodFromNow(pastInstant: Instant): Period;");
}
}
}

View file

@ -13,12 +13,10 @@ namespace Elsa.Scripting.JavaScript.Handlers
{
public class RenderJavaScriptTypeDefinitions : INotificationHandler<RenderingTypeScriptDefinitions>
{
private readonly IConfiguration _configuration;
private readonly IActivityTypeService _activityTypeService;
public RenderJavaScriptTypeDefinitions(IConfiguration configuration, IActivityTypeService activityTypeService)
public RenderJavaScriptTypeDefinitions(IActivityTypeService activityTypeService)
{
_configuration = configuration;
_activityTypeService = activityTypeService;
}